[
https://issues.apache.org/jira/browse/CAMEL-25895?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Work on CAMEL-25895 started by Zineb Bendhiba.
----------------------------------------------
> camel-openstack - use Camel-prefixed names for the remaining Swift headers
> --------------------------------------------------------------------------
>
> Key: CAMEL-25895
> URL: https://issues.apache.org/jira/browse/CAMEL-25895
> Project: Camel
> Issue Type: Bug
> Components: camel-openstack
> Reporter: Zineb Bendhiba
> Assignee: Zineb Bendhiba
> Priority: Major
> Fix For: 4.18.6, 4.22.3, 4.24.0
>
>
> h3. Today
> CAMEL-23580 renamed the Swift Exchange header constants in
> {{camel-openstack}} to
> the {{CamelOpenstackSwift*}} naming convention used across the component, but
> four constants in {{SwiftConstants}} were left with the raw openstack4j wire
> names:
> * {{CONTAINER_READ}} = {{X-Container-Read}}
> * {{CONTAINER_WRITE}} = {{X-Container-Write}}
> * {{VERSIONS_LOCATION}} = {{X-Versions-Location}}
> * {{CONTAINER_METADATA_PREFIX}} = {{X-Container-Meta-}}
> The code comment above them states that renaming them would break
> interoperability with the Swift API. That rationale is incorrect: openstack4j
> builds the wire headers itself.
> {{CreateUpdateContainerOptions.accessRead(..)}},
> {{accessWrite(..)}} and {{versionsLocation(..)}} emit {{X-Container-Read}} /
> {{X-Container-Write}} / {{X-Versions-Location}} from their own
> {{SwiftHeaders}} constants, so the Camel Exchange key never reaches Swift and
> the Camel-side name is free to follow the project convention.
> Two consequences follow. The recorded reason for the exception does not hold,
> so
> the comment misleads the next reader. And {{openstack-swift}} is left as the
> only
> component in the family whose Exchange keys are partly un-prefixed, which
> means
> these four keys do not behave like every other Camel header with respect to
> the
> default header filter strategies. {{camel-aws2-s3}}, for instance, already
> uses
> {{CamelAwsS3Acl}} and {{CamelAwsS3CannedAcl}} rather than the S3 wire names.
> h3. After the change
> All Swift Exchange header names carry the {{CamelOpenstackSwift}} prefix, so
> the
> whole component is consistent and the four keys are filtered like every other
> Camel header. The misleading comment is gone.
> h3. Classes involved
> *
> {{components/camel-openstack/src/main/java/org/apache/camel/component/openstack/swift/SwiftConstants.java}}
> *
> {{components/camel-openstack/src/main/java/org/apache/camel/component/openstack/swift/producer/ContainerProducer.java}}
> h3. Code-level change
> * In {{SwiftConstants}}, change the four constant *values*:
> ** {{CONTAINER_READ}} -> {{CamelOpenstackSwiftContainerRead}}
> ** {{CONTAINER_WRITE}} -> {{CamelOpenstackSwiftContainerWrite}}
> ** {{VERSIONS_LOCATION}} -> {{CamelOpenstackSwiftVersionsLocation}}
> ** {{CONTAINER_METADATA_PREFIX}} -> {{CamelOpenstackSwiftContainerMetadata}}
> * Keep the Java field names as they are, so routes referencing the constants
> symbolically keep compiling. ({{CONTAINER_METADATA_PREFIX}} is read as a
> whole
> {{Map}} and never as a prefix, so a follow-up rename of that field, with the
> old one kept as a deprecated alias, can be considered separately.)
> * Remove the now-incorrect comment block that justified keeping the wire
> names,
> and the unused {{org.openstack4j.model.storage.object.SwiftHeaders}} import.
> * {{ContainerProducer.messageToCreateUpdateOptions(..)}} already reads the
> constants rather than string literals, so it needs no structural change; a
> grep over the module confirms no other place uses the raw strings.
> * Regenerate and commit the generated artefacts, since CI fails on uncommitted
> changes:
> **
> {{components/camel-openstack/src/generated/resources/META-INF/org/apache/camel/component/openstack/swift/openstack-swift.json}}
> **
> {{catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/openstack-swift.json}}
> **
> {{dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/SwiftEndpointBuilderFactory.java}}
> (the header accessor names change)
> ** the mirrored doc copy under
>
> {{catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/}}
> h3. Tests
> {{ContainerProducerTest}} uses JUnit 5 assertions throughout, so new tests
> stay
> in that style rather than introducing AssertJ as an outlier in the module:
> * {{containerCreateReadsAclFromCamelNamespacedHeaders}}
> * {{containerUpdateReadsAclFromCamelNamespacedHeaders}}
> * {{containerUpdateIgnoresLegacySwiftWireHeaderNames}}
> * {{containerUpdateUsesCreateUpdateContainerOptionsFromBodyInsteadOfHeaders}}
> (locks in the existing precedence: when the body converts to
> {{CreateUpdateContainerOptions}}, the headers are not consulted at all)
> * {{versionsLocationAndContainerMetadataUseCamelNamespacedHeaders}}
> h3. Migration note
> This changes the literal header values, so an upgrade-guide entry is required:
> routes that set these headers by their string value must switch to the
> {{CamelOpenstackSwift*}} names, and the Endpoint DSL accessors are renamed.
> The
> Java constant field names are unchanged. Per the project's backport policy the
> notes for the maintenance lines are added to the matching
> {{camel-4x-upgrade-guide-4_22.adoc}} and {{camel-4x-upgrade-guide-4_18.adoc}}
> on
> {{main}}, alongside the {{camel-4x-upgrade-guide-4_24.adoc}} entry.
> h3. Prior decision this revisits
> CAMEL-23580 excluded these four constants on purpose and recorded the reason
> in
> the code and in the 4.21 / 4.18 / 4.14 upgrade guides. This change partly
> reverses that decision, because the recorded rationale does not match what
> openstack4j actually does with {{CreateUpdateContainerOptions}}. The PR
> description will state this explicitly.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)