Skip to content

fix(adls): swap Azure HTTP transport from Netty to OkHttp (CSA-390)#2455

Merged
cmgrote merged 2 commits into
mainfrom
CSA-390
Apr 30, 2026
Merged

fix(adls): swap Azure HTTP transport from Netty to OkHttp (CSA-390)#2455
cmgrote merged 2 commits into
mainfrom
CSA-390

Conversation

@cmgrote

@cmgrote cmgrote commented Apr 30, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • Root cause: azure-core-http-netty 1.18.2 (compiled against Netty 4.1.x) conflicts with io.netty 4.2.12.Final (bumped Apr 16). Netty 4.2 removed DefaultHeaders.containsAny(Object, Object, BiPredicate), causing NoSuchMethodError the moment MSAL4J attempts Azure AD token acquisition via the Netty HTTP pipeline.
  • Fix: Replace azure-core-http-netty with azure-core-http-okhttp (OkHttp has no Netty dependency). OkHttp is already shaded into the fat-jar via the OTel sender, so this adds no new weight to the artifact.
  • Belt-and-suspenders: Explicit OkHttpAsyncHttpClientBuilder wired into all three ADLS client builders (ClientSecretCredentialBuilder, DataLakeServiceClientBuilder, BlobContainerClientBuilder) so transport selection is deterministic regardless of classpath order (AWS SDK's netty-nio-client is still present).

Affected tenants (confirmed): Zoetis (zoetis-dev.atlan.com, ZEN-122712), P&G (pg-dev.atlan.com), Nyrstar (nyrstar.atlan.com). Any CSA package using ADLS auth is impacted — this fixes CSA-390 and CSA-400.

Changes

  • gradle/libs.versions.toml — add azure-core-http-okhttp = "1.13.4" version + library entry
  • package-toolkit/runtime/build.gradle.kts — exclude azure-core-http-netty from azure.identity + adls transitives; add azure-core-http-okhttp dep; swap shadowJar include
  • package-toolkit/runtime/src/main/kotlin/com/atlan/pkg/objectstore/ADLSSync.kt — wire explicit OkHttp HttpClient into all Azure client builders

Test plan

  • ./gradlew :package-toolkit:runtime:dependenciesazure-core-http-okhttp:1.13.4 present, azure-core-http-netty absent
  • ./gradlew :package-toolkit:runtime:shadowJar — builds clean; jar contains com/azure/core/http/okhttp/*, zero com/azure/core/http/netty/* classes
  • ./gradlew :package-toolkit:runtime:test — all unit tests pass
  • End-to-end: rerun @csa/asset-import against zoetis-dev.atlan.com with ADLS Service Principal auth — should reach file ingestion without NoSuchMethodError

🤖 Generated with Claude Code

Netty 4.2.x removed DefaultHeaders.containsAny(Object, Object, BiPredicate),
which azure-core-http-netty 1.18.2 (compiled against 4.1.x) calls at runtime
via MSAL4J during Azure AD token acquisition. Swaps azure-core-http-netty for
azure-core-http-okhttp (already shaded via OTel), and wires an explicit
OkHttpAsyncHttpClientBuilder into all ADLS client builders for deterministic
transport selection.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Signed-off-by: Chris (He/Him) <cgrote@gmail.com>
@cmgrote
cmgrote enabled auto-merge April 30, 2026 19:52
@cmgrote cmgrote added the packages Changes related to custom packages label Apr 30, 2026
@cmgrote
cmgrote merged commit 9b9f04f into main Apr 30, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

packages Changes related to custom packages

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant