Skip to content

feat(inkless): enable AZ parsing for generated client IDs [KC-330] - #699

Open
EelisK wants to merge 1 commit into
mainfrom
EelisK/improve-az-parsing
Open

feat(inkless): enable AZ parsing for generated client IDs [KC-330]#699
EelisK wants to merge 1 commit into
mainfrom
EelisK/improve-az-parsing

Conversation

@EelisK

@EelisK EelisK commented Jul 14, 2026

Copy link
Copy Markdown
Member

ClientAZExtractor determines a preferred availability zone (AZ) when the client ID explicitly embeds one. In case of Kafka Connect, the client ID is automatically generated for the worker's internal producers, consumers, and admin clients: the base client ID is concatenated with "-configs", "-offsets", "-statuses", or a UUID.

Prior to this commit, these concatenated strings were incorrectly treated as the availability zones. Now if we find an AZ in the client ID, we try to match it against the configured racks/AZs and only return it if a match is found.

ClientAZExtractor determines a preferred availability zone (AZ) when the
client ID explicitly embeds one. In case of Kafka Connect, the client ID
is automatically generated for the worker's internal producers,
consumers, and admin clients: the base client ID is concatenated with
"-configs", "-offsets", "-statuses", or a UUID.

Prior to this commit, these concatenated strings were incorrectly
treated as the availability zones. Now if we find an AZ in the client
ID, we try to match it against the configured racks/AZs and
only return it if a match is found.
@EelisK EelisK changed the title feat(inkless): enable AZ parsing for generated client IDs feat(inkless): enable AZ parsing for generated client IDs [KC-330] Jul 15, 2026
@EelisK
EelisK marked this pull request as ready for review July 15, 2026 14:50
@giuseppelillo
giuseppelillo requested a review from Copilot August 7, 2026 14:00

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR improves client AZ extraction when client IDs include generated Kafka Connect suffixes (e.g., -configs, -offsets, UUIDs), by validating extracted diskless_az values against known rack/AZ identifiers and stripping suffixes until a known rack match is found.

Changes:

  • Extend ClientAZExtractor to optionally validate an extracted AZ against known racks and progressively strip -... suffixes to find the longest matching rack prefix.
  • Update InklessTopicMetadataTransformer to pass a known-racks supplier into ClientAZExtractor during client AZ resolution.
  • Add parameterized tests covering Kafka Connect-style suffixes, UUID suffixes, and validation/no-validation behavior.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.

File Description
storage/inkless/src/main/java/io/aiven/inkless/metadata/ClientAZExtractor.java Adds rack-aware validation and suffix-stripping logic for diskless_az extraction.
storage/inkless/src/main/java/io/aiven/inkless/metadata/InklessTopicMetadataTransformer.java Uses rack validation during client AZ resolution by supplying known racks derived from config/listener and broker metadata.
storage/inkless/src/test/java/io/aiven/inkless/metadata/ClientAZExtractorTest.java Expands test coverage for suffix handling and rack validation behavior.

Comment on lines 425 to 428
private String resolveClientAZ(final ListenerName listenerName, final String clientId) {
final String explicitAZ = normalizeAZ(ClientAZExtractor.getClientAZ(clientId));
final String explicitAZ = normalizeAZ(
ClientAZExtractor.getClientAZ(clientId, () -> computeKnownRacks(listenerName)));
if (explicitAZ != null) {

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The AZ resolution is not unconditional. We use a supplier to only resolve them when the provided client.id specifies an AZ. I don't think it's worth trying to further optimize this.

@giuseppelillo giuseppelillo left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, the copilot comment seems valid tho

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.

3 participants