Skip to content

[CICP-52137] Retire ResourceConfig instance-group tags - #323

Open
sjainit wants to merge 1 commit into
linkedin:devfrom
sjainit:sarjain/remove-resourceconfig-instance-group-tag
Open

sjainit wants to merge 1 commit into
linkedin:devfrom
sjainit:sarjain/remove-resourceconfig-instance-group-tag

Conversation

@sjainit

@sjainit sjainit commented Sep 24, 2026

Copy link
Copy Markdown
Collaborator

Issues

Description

Retire the duplicate ResourceConfig INSTANCE_GROUP_TAG setting and make
IdealState authoritative for ordinary-resource placement.

  • Remove the ResourceConfig enum entry, getter, builder getter/setter,
    constructor argument, IdealState-to-ResourceConfig tag propagation, and
    topology-change tracking.
  • Pass IdealState explicitly into WAGED replica construction, including
    allocated and replacement replicas during delayed rebalancing.
  • Read IdealState tags directly in the tag-removal guardrail pre-filter,
    matching WAGED placement. An absent or empty tag imposes no WAGED restriction.
  • Preserve JobConfig's separate camel-case InstanceGroupTag setting and
    task-resource propagation when no IdealState exists.
  • Preserve raw ResourceConfig fields as opaque metadata without deleting or
    automatically migrating them. No live configuration changes.

This is active-consumer consolidation, not dead-code removal: WAGED
previously allowed ResourceConfig to override the IdealState tag.
REBALANCE_STRATEGY and STATE_MODEL_FACTORY_NAME are unchanged and remain
outside this standalone PR.

The September 23 paired census found 0 uppercase ResourceConfig tag
occurrences in 86,624 successful reads
: 52,248 prod, 12,080 corp, 22,296 EI.
These are endpoint/namespace/cluster/resource tuples, not deduplicated physical
ZNodes. Discovery failures and scan-time churn prevent a fleet-wide absence claim.

Downstream audit: inspected 32 current source snapshots across 11 repositories,
pinned to commits and verified against Git blob hashes. No affected downstream
MP caller was found in inspected candidates: Espresso, Pinot, Search/SEAS, ACM
and Ambry tag accesses use IdealState; inspected constructors use retained
ID/ZNRecord overloads or Builder. Inspected Python raw writes target IdealState.
The sandbox linkedin-sandbox/helixli source copy does contain a legacy
ResourceConfig tag consumer in its own AssignableReplica. Indexed source is
not proof about deployed binaries, reflection or unindexed callers; downstream
builds were not run.

Tests

  • Local code review completed
  • Focused TestNG coverage for conflicting, absent and empty IdealState
    tags; WAGED normal/delayed replicas; placement constraints; guardrail
    alignment; task tags without IdealState; raw metadata preservation; and
    topology-change detection.
mvn -B -pl helix-core -am test \
  -Dtest=TestResourceConfig,TestAssignableReplica,TestAssignableNode,TestClusterModelProvider,TestValidGroupTagConstraint,TestHelixPropoertyTimmer,TestInstanceTagRebalanceFeasibilityGuardrailRule,TestResourceComputationStage \
  -Dsurefire.failIfNoSpecifiedTests=false -DfailIfNoTests=false

mvn -B -pl helix-rest -am test \
  -Dtest=TestInstanceOperationRebalanceFeasibilityGuardrailRule,TestPartitionAssignmentAPI \
  -Dsurefire.failIfNoSpecifiedTests=false -DfailIfNoTests=false

Both commands ran with JDK 11 and completed with BUILD SUCCESS:
74 focused core tests, 17 shared-guardrail tests and 3 REST partition-assignment
tests; 94 passed, 0 failures/errors/skips. Core and REST production/test
sources compiled. The REST fixture emitted controller-absent and closed-ZK
cleanup logs while its assertions passed. No full repository suite was run.

Compiled API inspection confirmed the removed ResourceConfig members and
constructor signatures, plus retained IdealState, ExternalView and JobConfig
tag APIs.

Changes that Break Backward Compatibility (Optional)

Removed ResourceConfigProperty.INSTANCE_GROUP_TAG,
ResourceConfig.getInstanceGroupTag(), and Builder's
getInstanceGroupTag() / setInstanceGroupTag(String).
The multi-argument ResourceConfig constructor no longer takes a tag.
AssignableReplica construction now requires the resource's IdealState after
the ResourceConfig argument. Direct callers must update and rebuild; old
binaries linking to removed signatures are not compatible.

Legacy ResourceConfig tags no longer override IdealState or constrain WAGED
placement when IdealState has no tag. If a deployment relied on that override,
explicitly set its intended IdealState tag before upgrading and review the
placement impact. Helix does not automatically migrate the old value.
WorkflowConfig's inherited uppercase tag no longer populates a task-resource
tag. JobConfig's distinct InstanceGroupTag setting is unchanged.

Documentation (Optional)

README documents the supported replacement, migration considerations, API
incompatibility, raw-field handling and task-setting distinction.

Commits

One standalone commit based on dev, referencing CICP-52137.

Code Quality

Follows existing Java/TestNG conventions. git diff --check passes.
No dependencies or build settings changed.


Tests generated with unit-tests plugin

🤖 Generated with GitHub Copilot CLI

Make IdealState authoritative for WAGED placement tags, including delayed
replicas and tag-removal feasibility checks. Remove the duplicate
ResourceConfig API, constructor argument, merge and topology tracking.

Preserve JobConfig's distinct task tag and retain legacy raw fields as
opaque metadata. Document the precedence change and API incompatibility.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant