[
https://issues.apache.org/jira/browse/CAMEL-24159?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Claus Ibsen reassigned CAMEL-24159:
-----------------------------------
Assignee: Claus Ibsen
> camel-azure - Umbrella: medium-severity findings from July 2026 review (incl.
> cross-module credentialType override)
> -------------------------------------------------------------------------------------------------------------------
>
> Key: CAMEL-24159
> URL: https://issues.apache.org/jira/browse/CAMEL-24159
> Project: Camel
> Issue Type: Bug
> Components: camel-azure, camel-azure-eventhubs,
> camel-azure-servicebus
> Reporter: Federico Mariani
> Assignee: Claus Ibsen
> Priority: Minor
> Labels: review-2026-07
> Attachments: camel-azure-review-2026-07.md
>
>
> Umbrella for the medium-severity findings of the July 2026 review of the
> camel-azure flagship components on main (4.22.0-SNAPSHOT). Full findings
> document attached; low-severity findings are listed in the document only.
> *Cross-cutting (all five modules)* — the CAMEL-21871 credential autowiring
> silently overrides an *explicitly configured* {{credentialType}}:
> # blob {{BlobComponent:84-97}} — autowired StorageSharedKeyCredential
> clobbers explicit {{credentialType=AZURE_SAS}}.
> # servicebus {{ServiceBusComponent:59-68}} +
> {{ServiceBusClientFactory:45-49}} — additionally a user-supplied
> DefaultAzureCredential (managedIdentityClientId, tenant...) is discarded and
> a fresh DefaultAzureCredentialBuilder().build() used instead.
> # eventhubs {{EventHubsComponent:52-66}} — autowired TokenCredential
> overrides explicit CONNECTION_STRING and produces a misleading "Namespace and
> EventHub name must be set" startup error.
> # storage-queue {{QueueComponent:69-78}} — same override; QueueClientFactory
> also prefers the credential's accountName over the URI's (wrong storage
> account).
> # storage-datalake {{DataLakeComponent:66-82}} +
> {{DataLakeClientFactory:42-67}} — same override; additionally plain
> {{accountKey}}/{{sasSignature}} (as used in the component doc examples) are
> not mapped to a credential type -> baffling ClientSecretCredential startup
> error, and the factory silently returns a null client on missing secrets
> (obscure NPE at first poll).
> Suggested direction: only derive/override credentialType when the user did
> not set it explicitly; map accountKey/sasSignature to the matching type.
> *camel-azure-servicebus*
> # {{ServiceBusConsumer:73-107,137-154}} — route stop/start leaks the
> processor client (doStart recreates unconditionally; doStop per CAMEL-23260
> only calls stop()) and accumulates lock-renewal period tasks.
> # {{ServiceBusProducer:101-108}} / {{ServiceBusConsumer:167-170}} —
> user-provided (and autowired) sender/processor clients are closed by the
> endpoint on stop; same pattern in eventhubs {{EventHubsProducer:41-69}}.
> # {{ServicebusCloudEventDataTypeTransformer:54-56}} — CE content type set to
> Boolean {{true}} ({{containsKey}} result) instead of the header value (since
> CAMEL-20450).
> # {{ServiceBusProducer:126-132,224-231}} — producer mutates the
> user/consumer-supplied APPLICATION_PROPERTIES map in place
> (UnsupportedOperationException on immutable maps; retroactively mutates the
> received message when bridging).
> # {{ServiceBusConsumer:122-123}} — maxConcurrentCalls provides no
> backpressure for async routes; unbounded in-flight growth, then mass
> duplicates once lock-renewal windows lapse (follow-up to CAMEL-23937).
> *camel-azure-eventhubs*
> # {{EventHubsConsumer:211-236}} — unsynchronized lastTask/lastScheduledTask
> mutation races; cancelled-but-referenced task swallows checkpoint updates.
> # {{EventHubsConsumer:233}} + {{EventHubsCheckpointUpdaterTask:47}} —
> checkpoint failures logged at DEBUG only; silent unbounded replay when the
> checkpoint store breaks.
> *camel-azure-storage-queue*
> # {{QueueOperations:82-86}} — {{createQueue=true}} calls create (not
> createIfNotExists) on every send; permanent 409 when the queue was
> pre-created with metadata.
> *camel-azure-storage-blob*
> # {{BlobOperations:451-454}} — copyBlob validates the source account name
> twice, never the source container name (CAMEL-17161 copy-paste).
> # {{BlobChangeFeedOperations:46-50}} — changeFeedStartTime/EndTime ignored
> unless both are set; one bound -> whole change feed returned.
> # {{BlobCommonRequestOptions:57-60}} — ClassCastException when the documented
> BlobRequestConditions header is used with append/page blob operations
> (unchecked generic cast to SDK subtypes).
> # {{BlobOperations:157-168}} — consumer with fileDir:
> FileAlreadyExistsException on every poll after the first and
> NoSuchFileException for nested blob names (same class as the datalake
> consumer bug).
> *camel-azure-storage-datalake*
> # {{DataLakeUtils:38-47}} — appendToFile length probing calls reset() without
> mark(); breaks BufferedInputStream and rejects spooled stream caches; buffers
> whole payload in memory.
> # {{DataLakeEndpoint:45-46,94-102}} — URI option {{dataLakeServiceClient}} is
> dead (unconditionally overwritten in doStart).
> # {{DataLakeFileOperations:163-168}} — consecutive appendToFile calls compute
> the offset from the committed size only; second append overwrites the first
> (unverified against live service).
> # {{DataLakeConfiguration:105-107}} — generated catalog lists bogus operation
> enum values ("listFileSystem, listFiles"); camel-jbang validate / IDEs reject
> every real operation.
> _This issue was researched and filed by Claude Code (AI) on behalf of
> Federico Mariani (fmariani). Full findings document from the review is
> attached to the umbrella issues._
--
This message was sent by Atlassian Jira
(v8.20.10#820010)