Oak 12219 (test branch in github.com/apache)#2989
Conversation
Ai-Assisted-By: claude
- Sonar fixes Ai-Assisted-By: claude
- Sonar fixes Ai-Assisted-By: claude
- pin jackson version to the one in AEM to prevent transitive dep download. Ai-Assisted-By: claude
…-to-V12-for-oak-blob-azure---rework- Oak 12219 upgrade azure sdk v8 to v12 for oak blob azure rework
Commit-Check ❌ |
AzureBlobStoreBackendV12: - RuntimeException -> IllegalStateException in getMetadataRecord/getAllMetadataRecords/deleteAllMetadataRecords - chain DataStoreException (not unwrapped IOException cause) in write() catch block - .collect(Collectors.toList()) -> .toList() in commitBlocksAndGetSize - instanceof pattern matching for BlobStorageException in completeHttpUpload - nested ternary -> if-else for operation string in presigned URI error log - return new byte[0] instead of null in readMetadataBytes; update caller check RegressionCSOV8Test: - swap assertEquals args to (actual, expected) order per Sonar S3415 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Ai-Assisted-By: claude-code
PR #2989 failed the quality gate at 67.9% coverage on new code (need 80%). The Azure ITs that cover blob CRUD don't run in CI, so the new V12 classes were largely uncovered. Add mock-based unit tests (Mockito mocks the Azure BlobContainerClient/BlockBlobClient chain) so the SDK-call paths are covered without a live Azurite endpoint. New/expanded tests: - AzureBlobStoreBackendV12MockTest (new): read/getRecord/exists/deleteRecord success + 404 + storage-error paths; metadata get/exists/delete; init() config parsing (concurrent-request clamping, secondary location, presigned URI config); getAllIdentifiers/getAllRecords meta+no-dash filtering; getAllMetadataRecords success; write exists/missing/length-collision; addMetadataRecord(File); initiateHttpUpload arg validation; data record getters - AzureHttpRequestLoggingPolicyV12Test (new): verbose on/off process() paths - AzureDataStoreWrapperTest: createDataStore v8/v12, getDescription, init delegation, 3-arg upload, statistics provider getter/setter - AzureBlobContainerProviderV12Test: service-principal credential branch, getEndpointUrl variants Blended new-code coverage (line+branch) on the new files now ~82% locally. Also make getOrCreateReferenceKey tolerate a null from a readMetadataBytes override (production returns empty array; test subclasses may return null). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Ai-Assisted-By: claude
…-to-V12-for-oak-blob-azure---rework- Oak 12219 upgrade azure sdk v8 to v12 for oak blob azure rework
* OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - fix blob upload/download related constants that control memory and streaming behavior Ai-Assisted-By: claude * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - fix blob block size, prevent size zero Ai-Assisted-By: claude * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - removed oak-run-commons dependency on azure sdk v8 from oak-blob-cloud-azure Ai-Assisted-By: claude * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - cached the UserDelegationKey to avoid repeated calls to get it from Azure for every URI. Ai-Assisted-By: claude
* OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - fix blob upload/download related constants that control memory and streaming behavior Ai-Assisted-By: claude Ai-Assisted-By: claude-code * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - fix blob block size, prevent size zero Ai-Assisted-By: claude Ai-Assisted-By: claude-code * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - fixed automated code review findings Ai-Assisted-By: claude-code * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - PropertiesUtil.populate() uses reflection to inject config properties (e.g. cacheSize) into the DataStore returned by createDataStore(). When the class is package-private, Java's reflection access control blocks it because the caller is in a different package — even if the individual setter methods are public. Making the class itself public fixes that Ai-Assisted-By: claude Ai-Assisted-By: claude-code
reschke
left a comment
There was a problem hiding this comment.
Left a few nit comments.
The wrapper class should be reviewed by somebody with more OSGi knowledge.
| * | ||
| * @deprecated | ||
| */ | ||
| @Deprecated |
There was a problem hiding this comment.
not sure, I thought at it before committing but did not have a clear idea
There was a problem hiding this comment.
added some info about what to use.
| /** | ||
| * Kept for binary compatibility with existing callers. Use {@link AzureDataStoreWrapper} instead. | ||
| * | ||
| * @deprecated |
There was a problem hiding this comment.
add reason to javadoc tag
| import java.io.File; | ||
| import java.io.InputStream; | ||
| import java.net.URI; | ||
| import java.util.*; |
There was a problem hiding this comment.
no wildcard imports, please.
There was a problem hiding this comment.
ah, IDE settings. will change
| oak-shaded-guava/dependency-reduced-pom.xml | ||
| .DS_Store | ||
| .claude/settings.local.json | ||
| pom.xml.versionsBackup |
There was a problem hiding this comment.
where does this come from?
There was a problem hiding this comment.
it is from maven release, it makes a pom backup and sometimes it fails to delete it
| } | ||
| activeImpl.setStatisticsProvider(getStatisticsProvider()); | ||
| // Registers activeImpl separately as AbstractSharedCachingDataStore so consumers | ||
| // bound to that type (e.g. oak-repository-service) get the concrete store directly, |
There was a problem hiding this comment.
internal client, will remove comment
| log.info("Azure SDK v12 flag: environment variable {}={}", ENV_VAR_V12_ENABLED, useV12); | ||
| return useV12; | ||
| } | ||
| if (config.containsKey(OSGI_CONFIG_V12_ENABLED)) { |
There was a problem hiding this comment.
so we have an OSGi switch, not a feature toggle, right?
There was a problem hiding this comment.
we have env var and OSGI switch, priority in this order
There was a problem hiding this comment.
FT is not suited because it is only for runtime switches while this is one time choice fixed from startup
There was a problem hiding this comment.
But where's the FT? That's OSGi config, right?
There was a problem hiding this comment.
It is not changed via FT, but only via OSGI admin config. FT is not suitable because of it's lifecycle that does not have persisted values pushed into the component, but only allows runtime polling for changes from the already initialized comonent.
reschke
left a comment
There was a problem hiding this comment.
left a few nit comments
OSGi wiring should be checked by somebody with more knowledge in that area.
|
-> #3003 |
AzureBlobStoreBackendV12: - RuntimeException -> IllegalStateException in getMetadataRecord/getAllMetadataRecords/deleteAllMetadataRecords - chain DataStoreException (not unwrapped IOException cause) in write() catch block - .collect(Collectors.toList()) -> .toList() in commitBlocksAndGetSize - instanceof pattern matching for BlobStorageException in completeHttpUpload - nested ternary -> if-else for operation string in presigned URI error log - return new byte[0] instead of null in readMetadataBytes; update caller check RegressionCSOV8Test: - swap assertEquals args to (actual, expected) order per Sonar S3415 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Ai-Assisted-By: claude-code
PR apache#2989 failed the quality gate at 67.9% coverage on new code (need 80%). The Azure ITs that cover blob CRUD don't run in CI, so the new V12 classes were largely uncovered. Add mock-based unit tests (Mockito mocks the Azure BlobContainerClient/BlockBlobClient chain) so the SDK-call paths are covered without a live Azurite endpoint. New/expanded tests: - AzureBlobStoreBackendV12MockTest (new): read/getRecord/exists/deleteRecord success + 404 + storage-error paths; metadata get/exists/delete; init() config parsing (concurrent-request clamping, secondary location, presigned URI config); getAllIdentifiers/getAllRecords meta+no-dash filtering; getAllMetadataRecords success; write exists/missing/length-collision; addMetadataRecord(File); initiateHttpUpload arg validation; data record getters - AzureHttpRequestLoggingPolicyV12Test (new): verbose on/off process() paths - AzureDataStoreWrapperTest: createDataStore v8/v12, getDescription, init delegation, 3-arg upload, statistics provider getter/setter - AzureBlobContainerProviderV12Test: service-principal credential branch, getEndpointUrl variants Blended new-code coverage (line+branch) on the new files now ~82% locally. Also make getOrCreateReferenceKey tolerate a null from a readMetadataBytes override (production returns empty array; test subclasses may return null). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Ai-Assisted-By: claude Ai-Assisted-By: claude-code
* OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - fix blob upload/download related constants that control memory and streaming behavior Ai-Assisted-By: claude Ai-Assisted-By: claude-code * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - fix blob block size, prevent size zero Ai-Assisted-By: claude Ai-Assisted-By: claude-code * Remove internal service reference from comment Drop 'e.g. oak-repository-service' — internal detail, not relevant to Apache OSS. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Ai-Assisted-By: claude-code * OAK-12219: cache HttpClient in AzureBlobContainerProviderV12 Build the Netty HTTP client once at construction instead of on every getBlobContainer() call. Also drops dead Properties threading and duplicate proxy/connection-string overloads in UtilsV12. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Ai-Assisted-By: claude-code * OAK-12219: replace wildcard imports with explicit imports Ai-Assisted-By: claude-code * OAK-12219: move retryOptions into provider, drop getBlobContainerFromServicePrincipals retryOptions is now a field built at construction instead of passed per-call. Service-principal auth reuses the cached BlobServiceClient instead of rebuilding a client on every call. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Ai-Assisted-By: claude-code * OAK-12219: address remaining PR #2982 review comments Use SystemPropertySupplier for the JVM-property override (reschke), rename registerService to registerDataStoreService (joerghoh), and match the suggested "falling back to v8" log wording. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Ai-Assisted-By: claude,claude-code Ai-Assisted-By: claude-code
|
- fixed comments from apache#2989
AzureBlobStoreBackendV12: - RuntimeException -> IllegalStateException in getMetadataRecord/getAllMetadataRecords/deleteAllMetadataRecords - chain DataStoreException (not unwrapped IOException cause) in write() catch block - .collect(Collectors.toList()) -> .toList() in commitBlocksAndGetSize - instanceof pattern matching for BlobStorageException in completeHttpUpload - nested ternary -> if-else for operation string in presigned URI error log - return new byte[0] instead of null in readMetadataBytes; update caller check RegressionCSOV8Test: - swap assertEquals args to (actual, expected) order per Sonar S3415 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Ai-Assisted-By: claude-code
PR apache#2989 failed the quality gate at 67.9% coverage on new code (need 80%). The Azure ITs that cover blob CRUD don't run in CI, so the new V12 classes were largely uncovered. Add mock-based unit tests (Mockito mocks the Azure BlobContainerClient/BlockBlobClient chain) so the SDK-call paths are covered without a live Azurite endpoint. New/expanded tests: - AzureBlobStoreBackendV12MockTest (new): read/getRecord/exists/deleteRecord success + 404 + storage-error paths; metadata get/exists/delete; init() config parsing (concurrent-request clamping, secondary location, presigned URI config); getAllIdentifiers/getAllRecords meta+no-dash filtering; getAllMetadataRecords success; write exists/missing/length-collision; addMetadataRecord(File); initiateHttpUpload arg validation; data record getters - AzureHttpRequestLoggingPolicyV12Test (new): verbose on/off process() paths - AzureDataStoreWrapperTest: createDataStore v8/v12, getDescription, init delegation, 3-arg upload, statistics provider getter/setter - AzureBlobContainerProviderV12Test: service-principal credential branch, getEndpointUrl variants Blended new-code coverage (line+branch) on the new files now ~82% locally. Also make getOrCreateReferenceKey tolerate a null from a readMetadataBytes override (production returns empty array; test subclasses may return null). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Ai-Assisted-By: claude
- fixed comments from apache#2989
) * OAK-12287: Update to Apache Parent POM to version 39 * OAK-12287: Update to Apache Parent POM to version 39 - revert removal of bundle-plugin version * OAK-12289 : disabled blob id tracking for document node store (#2987) * OAK-12289 : disabled blob id tracking for document node store * OAK-12289 : fixed test case * OAK-12259: oak-http: OakServlet mis-parses HTTP Basic credentials * OAK-12293 : bump commons-io to 2.21.0 (#2997) * OAK-12293 : bump commons-io to 2.22.0 * OAK-12293 : bump commons-io to 2.21.0 * OAK-12294 : bump commons-codec to 1.20.0 (#2998) * OAK-12295 : bump mongo-driver-sync to 5.3.1 (#3001) * OAK-12295 : bump mongo-driver-sync to 5.3.1 * OAK-12295 : fixed the compilation issues * OAK-12296 : bump testcontainers version to 2.0.3 (#3002) * OAK-12296 : bump testcontainers version to 2.0.3 * OAK-12296 : fixed the junit 4 compatibility issues * OAK-12296 : fixed compatibulity issues with Junit 4 * OAK-12296 : fixed compatibulity issues with ES tests * OAK-12296 : incorporated review comments to use withEnv override for ElasticTestServer * OAK-12244: index nodes that gain a mixin rule, delete stale docs when… (#2949) * OAK-12244: index nodes that gain a mixin rule, delete stale docs when mixin rule is lost (#2938) When an existing node's applicable indexing rule changes at runtime (e.g. jcr:mixinTypes added or removed), FulltextIndexEditor did not update the index because propertiesChanged was never set — jcr:mixinTypes is not normally listed in a rule's property definitions. Track wasIndexable (rule matched before) alongside isIndexable() (rule matches after). In leave(), act on transitions: - !wasIndexable && isIndexable(): node gained a rule → addOrUpdate - wasIndexable && !isIndexable(): node lost a rule → deleteDocuments Tests added: - PropertyIndexCommonTest: two end-to-end integration tests (all backends) - LuceneIndexEditor2Test: two unit tests verifying writer.docs / writer.deletedPaths * OAK-12244: fix mixin type changes not reflected in fulltext index (#2953) Root cause: when a node gains or loses a mixin type at runtime, FulltextIndexEditor did not update the index because propertiesChanged was never set — jcr:mixinTypes is not normally listed in a rule's property definitions. Fix: track wasIndexable (rule matched before) alongside isIndexable() (rule matches after). In leave(), act on the indexing-rule transition: - !wasIndexable && isIndexable(): node gained a rule → addOrUpdate - wasIndexable && !isIndexable(): node lost a rule → deleteDocument Split FulltextIndexWriter into two explicit operations: - deleteDocumentTree(path): node physically removed; cascade is correct - deleteDocument(path): node lost indexability at runtime; exact only The original deleteDocuments used a PrefixQuery that cascaded to all descendants; in the mixin-loss branch this was a bug — children carrying their own mixin types were incorrectly evicted from the index. Additional changes: - Snapshot FT_OAK_12244_DISABLE once per commit cycle in FulltextIndexEditorContext as typeChangeTrackingEnabled so enter() and leave() always agree - Skip getApplicableIndexingRule(before) on the hot path via hasNodeTypeChange guard when neither jcr:primaryType nor jcr:mixinTypes changed - Register FT_OAK_12244 toggle in ElasticIndexProviderService - Reuse CommitFailedException code 5 for the deleteDocument error path Tests: - PropertyIndexCommonTest: end-to-end integration tests (all backends) - LuceneIndexEditor2Test: unit tests verifying writer.docs / writer.deletedPaths - Verified: 1245 tests, 0 failures in oak-lucene --------- Co-authored-by: Benjamin Habegger <bhabegger@adobe.com> * OAK-12282 : defining a fixed bound for the AbstractDiskCache (#2978) * OAK-12282 defining a fixed bound for the AbstractDiskCache --------- Co-authored-by: patlego <patriquelegault@gmail.com> * OAK-12303: Update mina-core dependency version to 2.1.15 (#3008) (#3010) ack @telegrapher Co-authored-by: Jose Antonio Insua <ungoliant@gmail.com> * Revert "OAK-12295 : bump mongo-driver-sync to 5.3.1 (#3001)" (#3012) This reverts commit 480eb14. * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework Ai-Assisted-By: claude * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - Sonar fixes Ai-Assisted-By: claude * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - Sonar fixes Ai-Assisted-By: claude * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - pin jackson version to the one in AEM to prevent transitive dep download. Ai-Assisted-By: claude * OAK-12219: fix Sonar annotations from PR #2989 CI run AzureBlobStoreBackendV12: - RuntimeException -> IllegalStateException in getMetadataRecord/getAllMetadataRecords/deleteAllMetadataRecords - chain DataStoreException (not unwrapped IOException cause) in write() catch block - .collect(Collectors.toList()) -> .toList() in commitBlocksAndGetSize - instanceof pattern matching for BlobStorageException in completeHttpUpload - nested ternary -> if-else for operation string in presigned URI error log - return new byte[0] instead of null in readMetadataBytes; update caller check RegressionCSOV8Test: - swap assertEquals args to (actual, expected) order per Sonar S3415 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Ai-Assisted-By: claude-code * OAK-12219: raise unit-test coverage on new V12 code to clear Sonar gate PR #2989 failed the quality gate at 67.9% coverage on new code (need 80%). The Azure ITs that cover blob CRUD don't run in CI, so the new V12 classes were largely uncovered. Add mock-based unit tests (Mockito mocks the Azure BlobContainerClient/BlockBlobClient chain) so the SDK-call paths are covered without a live Azurite endpoint. New/expanded tests: - AzureBlobStoreBackendV12MockTest (new): read/getRecord/exists/deleteRecord success + 404 + storage-error paths; metadata get/exists/delete; init() config parsing (concurrent-request clamping, secondary location, presigned URI config); getAllIdentifiers/getAllRecords meta+no-dash filtering; getAllMetadataRecords success; write exists/missing/length-collision; addMetadataRecord(File); initiateHttpUpload arg validation; data record getters - AzureHttpRequestLoggingPolicyV12Test (new): verbose on/off process() paths - AzureDataStoreWrapperTest: createDataStore v8/v12, getDescription, init delegation, 3-arg upload, statistics provider getter/setter - AzureBlobContainerProviderV12Test: service-principal credential branch, getEndpointUrl variants Blended new-code coverage (line+branch) on the new files now ~82% locally. Also make getOrCreateReferenceKey tolerate a null from a readMetadataBytes override (production returns empty array; test subclasses may return null). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Ai-Assisted-By: claude * Oak 12219 upgrade azure sdk v8 to v12 for oak blob azure rework (#2992) * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - fix blob upload/download related constants that control memory and streaming behavior Ai-Assisted-By: claude * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - fix blob block size, prevent size zero Ai-Assisted-By: claude * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - removed oak-run-commons dependency on azure sdk v8 from oak-blob-cloud-azure Ai-Assisted-By: claude * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - cached the UserDelegationKey to avoid repeated calls to get it from Azure for every URI. Ai-Assisted-By: claude * Oak 12219 upgrade azure sdk v8 to v12 for oak blob azure rework (#2994) * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - fix blob upload/download related constants that control memory and streaming behavior Ai-Assisted-By: claude Ai-Assisted-By: claude-code * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - fix blob block size, prevent size zero Ai-Assisted-By: claude Ai-Assisted-By: claude-code * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - fixed automated code review findings Ai-Assisted-By: claude-code * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - PropertiesUtil.populate() uses reflection to inject config properties (e.g. cacheSize) into the DataStore returned by createDataStore(). When the class is package-private, Java's reflection access control blocks it because the caller is in a different package — even if the individual setter methods are public. Making the class itself public fixes that Ai-Assisted-By: claude Ai-Assisted-By: claude-code * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - fix blob upload/download related constants that control memory and streaming behavior Ai-Assisted-By: claude Ai-Assisted-By: claude-code * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - fix blob block size, prevent size zero Ai-Assisted-By: claude Ai-Assisted-By: claude-code * Remove internal service reference from comment Drop 'e.g. oak-repository-service' — internal detail, not relevant to Apache OSS. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Ai-Assisted-By: claude-code * OAK-12219: cache HttpClient in AzureBlobContainerProviderV12 Build the Netty HTTP client once at construction instead of on every getBlobContainer() call. Also drops dead Properties threading and duplicate proxy/connection-string overloads in UtilsV12. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Ai-Assisted-By: claude-code * OAK-12219: replace wildcard imports with explicit imports Ai-Assisted-By: claude-code * OAK-12219: move retryOptions into provider, drop getBlobContainerFromServicePrincipals retryOptions is now a field built at construction instead of passed per-call. Service-principal auth reuses the cached BlobServiceClient instead of rebuilding a client on every call. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Ai-Assisted-By: claude-code * OAK-12219: address remaining PR #2982 review comments Use SystemPropertySupplier for the JVM-property override (reschke), rename registerService to registerDataStoreService (joerghoh), and match the suggested "falling back to v8" log wording. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Ai-Assisted-By: claude,claude-code Ai-Assisted-By: claude-code * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - fixed comments from #2982 * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - fixed comments from #2989 --------- Co-authored-by: Julian Reschke <julian.reschke@gmx.de> Co-authored-by: Rishabh Kumar <rishabhdaim1991@gmail.com> Co-authored-by: Julian Reschke <reschke@apache.org> Co-authored-by: Thomas Mueller <thomasm@apache.org> Co-authored-by: Benjamin Habegger <bhabegger@adobe.com> Co-authored-by: Patrique Legault <patrique.legault@gmail.com> Co-authored-by: patlego <patriquelegault@gmail.com> Co-authored-by: Jose Antonio Insua <ungoliant@gmail.com>
* OAK-12287: Update to Apache Parent POM to version 39 * OAK-12287: Update to Apache Parent POM to version 39 - revert removal of bundle-plugin version * OAK-12289 : disabled blob id tracking for document node store (#2987) * OAK-12289 : disabled blob id tracking for document node store * OAK-12289 : fixed test case * OAK-12259: oak-http: OakServlet mis-parses HTTP Basic credentials * OAK-12293 : bump commons-io to 2.21.0 (#2997) * OAK-12293 : bump commons-io to 2.22.0 * OAK-12293 : bump commons-io to 2.21.0 * OAK-12294 : bump commons-codec to 1.20.0 (#2998) * OAK-12295 : bump mongo-driver-sync to 5.3.1 (#3001) * OAK-12295 : bump mongo-driver-sync to 5.3.1 * OAK-12295 : fixed the compilation issues * OAK-12296 : bump testcontainers version to 2.0.3 (#3002) * OAK-12296 : bump testcontainers version to 2.0.3 * OAK-12296 : fixed the junit 4 compatibility issues * OAK-12296 : fixed compatibulity issues with Junit 4 * OAK-12296 : fixed compatibulity issues with ES tests * OAK-12296 : incorporated review comments to use withEnv override for ElasticTestServer * OAK-12244: index nodes that gain a mixin rule, delete stale docs when… (#2949) * OAK-12244: index nodes that gain a mixin rule, delete stale docs when mixin rule is lost (#2938) When an existing node's applicable indexing rule changes at runtime (e.g. jcr:mixinTypes added or removed), FulltextIndexEditor did not update the index because propertiesChanged was never set — jcr:mixinTypes is not normally listed in a rule's property definitions. Track wasIndexable (rule matched before) alongside isIndexable() (rule matches after). In leave(), act on transitions: - !wasIndexable && isIndexable(): node gained a rule → addOrUpdate - wasIndexable && !isIndexable(): node lost a rule → deleteDocuments Tests added: - PropertyIndexCommonTest: two end-to-end integration tests (all backends) - LuceneIndexEditor2Test: two unit tests verifying writer.docs / writer.deletedPaths * OAK-12244: fix mixin type changes not reflected in fulltext index (#2953) Root cause: when a node gains or loses a mixin type at runtime, FulltextIndexEditor did not update the index because propertiesChanged was never set — jcr:mixinTypes is not normally listed in a rule's property definitions. Fix: track wasIndexable (rule matched before) alongside isIndexable() (rule matches after). In leave(), act on the indexing-rule transition: - !wasIndexable && isIndexable(): node gained a rule → addOrUpdate - wasIndexable && !isIndexable(): node lost a rule → deleteDocument Split FulltextIndexWriter into two explicit operations: - deleteDocumentTree(path): node physically removed; cascade is correct - deleteDocument(path): node lost indexability at runtime; exact only The original deleteDocuments used a PrefixQuery that cascaded to all descendants; in the mixin-loss branch this was a bug — children carrying their own mixin types were incorrectly evicted from the index. Additional changes: - Snapshot FT_OAK_12244_DISABLE once per commit cycle in FulltextIndexEditorContext as typeChangeTrackingEnabled so enter() and leave() always agree - Skip getApplicableIndexingRule(before) on the hot path via hasNodeTypeChange guard when neither jcr:primaryType nor jcr:mixinTypes changed - Register FT_OAK_12244 toggle in ElasticIndexProviderService - Reuse CommitFailedException code 5 for the deleteDocument error path Tests: - PropertyIndexCommonTest: end-to-end integration tests (all backends) - LuceneIndexEditor2Test: unit tests verifying writer.docs / writer.deletedPaths - Verified: 1245 tests, 0 failures in oak-lucene --------- Co-authored-by: Benjamin Habegger <bhabegger@adobe.com> * OAK-12282 : defining a fixed bound for the AbstractDiskCache (#2978) * OAK-12282 defining a fixed bound for the AbstractDiskCache --------- Co-authored-by: patlego <patriquelegault@gmail.com> * OAK-12303: Update mina-core dependency version to 2.1.15 (#3008) (#3010) ack @telegrapher Co-authored-by: Jose Antonio Insua <ungoliant@gmail.com> * Revert "OAK-12295 : bump mongo-driver-sync to 5.3.1 (#3001)" (#3012) This reverts commit 480eb14. * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework Ai-Assisted-By: claude * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - Sonar fixes Ai-Assisted-By: claude * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - Sonar fixes Ai-Assisted-By: claude * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - pin jackson version to the one in AEM to prevent transitive dep download. Ai-Assisted-By: claude * OAK-12219: fix Sonar annotations from PR #2989 CI run AzureBlobStoreBackendV12: - RuntimeException -> IllegalStateException in getMetadataRecord/getAllMetadataRecords/deleteAllMetadataRecords - chain DataStoreException (not unwrapped IOException cause) in write() catch block - .collect(Collectors.toList()) -> .toList() in commitBlocksAndGetSize - instanceof pattern matching for BlobStorageException in completeHttpUpload - nested ternary -> if-else for operation string in presigned URI error log - return new byte[0] instead of null in readMetadataBytes; update caller check RegressionCSOV8Test: - swap assertEquals args to (actual, expected) order per Sonar S3415 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Ai-Assisted-By: claude-code * OAK-12219: raise unit-test coverage on new V12 code to clear Sonar gate PR #2989 failed the quality gate at 67.9% coverage on new code (need 80%). The Azure ITs that cover blob CRUD don't run in CI, so the new V12 classes were largely uncovered. Add mock-based unit tests (Mockito mocks the Azure BlobContainerClient/BlockBlobClient chain) so the SDK-call paths are covered without a live Azurite endpoint. New/expanded tests: - AzureBlobStoreBackendV12MockTest (new): read/getRecord/exists/deleteRecord success + 404 + storage-error paths; metadata get/exists/delete; init() config parsing (concurrent-request clamping, secondary location, presigned URI config); getAllIdentifiers/getAllRecords meta+no-dash filtering; getAllMetadataRecords success; write exists/missing/length-collision; addMetadataRecord(File); initiateHttpUpload arg validation; data record getters - AzureHttpRequestLoggingPolicyV12Test (new): verbose on/off process() paths - AzureDataStoreWrapperTest: createDataStore v8/v12, getDescription, init delegation, 3-arg upload, statistics provider getter/setter - AzureBlobContainerProviderV12Test: service-principal credential branch, getEndpointUrl variants Blended new-code coverage (line+branch) on the new files now ~82% locally. Also make getOrCreateReferenceKey tolerate a null from a readMetadataBytes override (production returns empty array; test subclasses may return null). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Ai-Assisted-By: claude * Oak 12219 upgrade azure sdk v8 to v12 for oak blob azure rework (#2992) * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - fix blob upload/download related constants that control memory and streaming behavior Ai-Assisted-By: claude * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - fix blob block size, prevent size zero Ai-Assisted-By: claude * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - removed oak-run-commons dependency on azure sdk v8 from oak-blob-cloud-azure Ai-Assisted-By: claude * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - cached the UserDelegationKey to avoid repeated calls to get it from Azure for every URI. Ai-Assisted-By: claude * Oak 12219 upgrade azure sdk v8 to v12 for oak blob azure rework (#2994) * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - fix blob upload/download related constants that control memory and streaming behavior Ai-Assisted-By: claude Ai-Assisted-By: claude-code * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - fix blob block size, prevent size zero Ai-Assisted-By: claude Ai-Assisted-By: claude-code * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - fixed automated code review findings Ai-Assisted-By: claude-code * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - PropertiesUtil.populate() uses reflection to inject config properties (e.g. cacheSize) into the DataStore returned by createDataStore(). When the class is package-private, Java's reflection access control blocks it because the caller is in a different package — even if the individual setter methods are public. Making the class itself public fixes that Ai-Assisted-By: claude Ai-Assisted-By: claude-code * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - fix blob upload/download related constants that control memory and streaming behavior Ai-Assisted-By: claude Ai-Assisted-By: claude-code * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - fix blob block size, prevent size zero Ai-Assisted-By: claude Ai-Assisted-By: claude-code * Remove internal service reference from comment Drop 'e.g. oak-repository-service' — internal detail, not relevant to Apache OSS. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Ai-Assisted-By: claude-code * OAK-12219: cache HttpClient in AzureBlobContainerProviderV12 Build the Netty HTTP client once at construction instead of on every getBlobContainer() call. Also drops dead Properties threading and duplicate proxy/connection-string overloads in UtilsV12. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Ai-Assisted-By: claude-code * OAK-12219: replace wildcard imports with explicit imports Ai-Assisted-By: claude-code * OAK-12219: move retryOptions into provider, drop getBlobContainerFromServicePrincipals retryOptions is now a field built at construction instead of passed per-call. Service-principal auth reuses the cached BlobServiceClient instead of rebuilding a client on every call. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Ai-Assisted-By: claude-code * OAK-12219: address remaining PR #2982 review comments Use SystemPropertySupplier for the JVM-property override (reschke), rename registerService to registerDataStoreService (joerghoh), and match the suggested "falling back to v8" log wording. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Ai-Assisted-By: claude,claude-code Ai-Assisted-By: claude-code * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - fixed comments from #2982 * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - fixed comments from #2989 * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - fixed compilation fail because of misplaced comment --------- Co-authored-by: Julian Reschke <julian.reschke@gmx.de> Co-authored-by: Rishabh Kumar <rishabhdaim1991@gmail.com> Co-authored-by: Julian Reschke <reschke@apache.org> Co-authored-by: Thomas Mueller <thomasm@apache.org> Co-authored-by: Benjamin Habegger <bhabegger@adobe.com> Co-authored-by: Patrique Legault <patrique.legault@gmail.com> Co-authored-by: patlego <patriquelegault@gmail.com> Co-authored-by: Jose Antonio Insua <ungoliant@gmail.com>
* OAK-12287: Update to Apache Parent POM to version 39 * OAK-12287: Update to Apache Parent POM to version 39 - revert removal of bundle-plugin version * OAK-12289 : disabled blob id tracking for document node store (#2987) * OAK-12289 : disabled blob id tracking for document node store * OAK-12289 : fixed test case * OAK-12259: oak-http: OakServlet mis-parses HTTP Basic credentials * OAK-12293 : bump commons-io to 2.21.0 (#2997) * OAK-12293 : bump commons-io to 2.22.0 * OAK-12293 : bump commons-io to 2.21.0 * OAK-12294 : bump commons-codec to 1.20.0 (#2998) * OAK-12295 : bump mongo-driver-sync to 5.3.1 (#3001) * OAK-12295 : bump mongo-driver-sync to 5.3.1 * OAK-12295 : fixed the compilation issues * OAK-12296 : bump testcontainers version to 2.0.3 (#3002) * OAK-12296 : bump testcontainers version to 2.0.3 * OAK-12296 : fixed the junit 4 compatibility issues * OAK-12296 : fixed compatibulity issues with Junit 4 * OAK-12296 : fixed compatibulity issues with ES tests * OAK-12296 : incorporated review comments to use withEnv override for ElasticTestServer * OAK-12244: index nodes that gain a mixin rule, delete stale docs when… (#2949) * OAK-12244: index nodes that gain a mixin rule, delete stale docs when mixin rule is lost (#2938) When an existing node's applicable indexing rule changes at runtime (e.g. jcr:mixinTypes added or removed), FulltextIndexEditor did not update the index because propertiesChanged was never set — jcr:mixinTypes is not normally listed in a rule's property definitions. Track wasIndexable (rule matched before) alongside isIndexable() (rule matches after). In leave(), act on transitions: - !wasIndexable && isIndexable(): node gained a rule → addOrUpdate - wasIndexable && !isIndexable(): node lost a rule → deleteDocuments Tests added: - PropertyIndexCommonTest: two end-to-end integration tests (all backends) - LuceneIndexEditor2Test: two unit tests verifying writer.docs / writer.deletedPaths * OAK-12244: fix mixin type changes not reflected in fulltext index (#2953) Root cause: when a node gains or loses a mixin type at runtime, FulltextIndexEditor did not update the index because propertiesChanged was never set — jcr:mixinTypes is not normally listed in a rule's property definitions. Fix: track wasIndexable (rule matched before) alongside isIndexable() (rule matches after). In leave(), act on the indexing-rule transition: - !wasIndexable && isIndexable(): node gained a rule → addOrUpdate - wasIndexable && !isIndexable(): node lost a rule → deleteDocument Split FulltextIndexWriter into two explicit operations: - deleteDocumentTree(path): node physically removed; cascade is correct - deleteDocument(path): node lost indexability at runtime; exact only The original deleteDocuments used a PrefixQuery that cascaded to all descendants; in the mixin-loss branch this was a bug — children carrying their own mixin types were incorrectly evicted from the index. Additional changes: - Snapshot FT_OAK_12244_DISABLE once per commit cycle in FulltextIndexEditorContext as typeChangeTrackingEnabled so enter() and leave() always agree - Skip getApplicableIndexingRule(before) on the hot path via hasNodeTypeChange guard when neither jcr:primaryType nor jcr:mixinTypes changed - Register FT_OAK_12244 toggle in ElasticIndexProviderService - Reuse CommitFailedException code 5 for the deleteDocument error path Tests: - PropertyIndexCommonTest: end-to-end integration tests (all backends) - LuceneIndexEditor2Test: unit tests verifying writer.docs / writer.deletedPaths - Verified: 1245 tests, 0 failures in oak-lucene --------- Co-authored-by: Benjamin Habegger <bhabegger@adobe.com> * OAK-12282 : defining a fixed bound for the AbstractDiskCache (#2978) * OAK-12282 defining a fixed bound for the AbstractDiskCache --------- Co-authored-by: patlego <patriquelegault@gmail.com> * OAK-12303: Update mina-core dependency version to 2.1.15 (#3008) (#3010) ack @telegrapher Co-authored-by: Jose Antonio Insua <ungoliant@gmail.com> * Revert "OAK-12295 : bump mongo-driver-sync to 5.3.1 (#3001)" (#3012) This reverts commit 480eb14. * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework Ai-Assisted-By: claude * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - Sonar fixes Ai-Assisted-By: claude * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - Sonar fixes Ai-Assisted-By: claude * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - pin jackson version to the one in AEM to prevent transitive dep download. Ai-Assisted-By: claude * OAK-12219: fix Sonar annotations from PR #2989 CI run AzureBlobStoreBackendV12: - RuntimeException -> IllegalStateException in getMetadataRecord/getAllMetadataRecords/deleteAllMetadataRecords - chain DataStoreException (not unwrapped IOException cause) in write() catch block - .collect(Collectors.toList()) -> .toList() in commitBlocksAndGetSize - instanceof pattern matching for BlobStorageException in completeHttpUpload - nested ternary -> if-else for operation string in presigned URI error log - return new byte[0] instead of null in readMetadataBytes; update caller check RegressionCSOV8Test: - swap assertEquals args to (actual, expected) order per Sonar S3415 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Ai-Assisted-By: claude-code * OAK-12219: raise unit-test coverage on new V12 code to clear Sonar gate PR #2989 failed the quality gate at 67.9% coverage on new code (need 80%). The Azure ITs that cover blob CRUD don't run in CI, so the new V12 classes were largely uncovered. Add mock-based unit tests (Mockito mocks the Azure BlobContainerClient/BlockBlobClient chain) so the SDK-call paths are covered without a live Azurite endpoint. New/expanded tests: - AzureBlobStoreBackendV12MockTest (new): read/getRecord/exists/deleteRecord success + 404 + storage-error paths; metadata get/exists/delete; init() config parsing (concurrent-request clamping, secondary location, presigned URI config); getAllIdentifiers/getAllRecords meta+no-dash filtering; getAllMetadataRecords success; write exists/missing/length-collision; addMetadataRecord(File); initiateHttpUpload arg validation; data record getters - AzureHttpRequestLoggingPolicyV12Test (new): verbose on/off process() paths - AzureDataStoreWrapperTest: createDataStore v8/v12, getDescription, init delegation, 3-arg upload, statistics provider getter/setter - AzureBlobContainerProviderV12Test: service-principal credential branch, getEndpointUrl variants Blended new-code coverage (line+branch) on the new files now ~82% locally. Also make getOrCreateReferenceKey tolerate a null from a readMetadataBytes override (production returns empty array; test subclasses may return null). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Ai-Assisted-By: claude * Oak 12219 upgrade azure sdk v8 to v12 for oak blob azure rework (#2992) * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - fix blob upload/download related constants that control memory and streaming behavior Ai-Assisted-By: claude * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - fix blob block size, prevent size zero Ai-Assisted-By: claude * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - removed oak-run-commons dependency on azure sdk v8 from oak-blob-cloud-azure Ai-Assisted-By: claude * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - cached the UserDelegationKey to avoid repeated calls to get it from Azure for every URI. Ai-Assisted-By: claude * Oak 12219 upgrade azure sdk v8 to v12 for oak blob azure rework (#2994) * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - fix blob upload/download related constants that control memory and streaming behavior Ai-Assisted-By: claude Ai-Assisted-By: claude-code * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - fix blob block size, prevent size zero Ai-Assisted-By: claude Ai-Assisted-By: claude-code * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - fixed automated code review findings Ai-Assisted-By: claude-code * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - PropertiesUtil.populate() uses reflection to inject config properties (e.g. cacheSize) into the DataStore returned by createDataStore(). When the class is package-private, Java's reflection access control blocks it because the caller is in a different package — even if the individual setter methods are public. Making the class itself public fixes that Ai-Assisted-By: claude Ai-Assisted-By: claude-code * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - fix blob upload/download related constants that control memory and streaming behavior Ai-Assisted-By: claude Ai-Assisted-By: claude-code * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - fix blob block size, prevent size zero Ai-Assisted-By: claude Ai-Assisted-By: claude-code * Remove internal service reference from comment Drop 'e.g. oak-repository-service' — internal detail, not relevant to Apache OSS. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Ai-Assisted-By: claude-code * OAK-12219: cache HttpClient in AzureBlobContainerProviderV12 Build the Netty HTTP client once at construction instead of on every getBlobContainer() call. Also drops dead Properties threading and duplicate proxy/connection-string overloads in UtilsV12. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Ai-Assisted-By: claude-code * OAK-12219: replace wildcard imports with explicit imports Ai-Assisted-By: claude-code * OAK-12219: move retryOptions into provider, drop getBlobContainerFromServicePrincipals retryOptions is now a field built at construction instead of passed per-call. Service-principal auth reuses the cached BlobServiceClient instead of rebuilding a client on every call. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Ai-Assisted-By: claude-code * OAK-12219: address remaining PR #2982 review comments Use SystemPropertySupplier for the JVM-property override (reschke), rename registerService to registerDataStoreService (joerghoh), and match the suggested "falling back to v8" log wording. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Ai-Assisted-By: claude,claude-code Ai-Assisted-By: claude-code * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - fixed comments from #2982 * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - fixed comments from #2989 * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - fixed compilation fail because of misplaced comment * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - fixed test Ai-Assisted-By: claude --------- Co-authored-by: Julian Reschke <julian.reschke@gmx.de> Co-authored-by: Rishabh Kumar <rishabhdaim1991@gmail.com> Co-authored-by: Julian Reschke <reschke@apache.org> Co-authored-by: Thomas Mueller <thomasm@apache.org> Co-authored-by: Benjamin Habegger <bhabegger@adobe.com> Co-authored-by: Patrique Legault <patrique.legault@gmail.com> Co-authored-by: patlego <patriquelegault@gmail.com> Co-authored-by: Jose Antonio Insua <ungoliant@gmail.com>



No description provided.