OAK-12303 Update mina-core dependency version to 2.1.15 (trunk)#3008
Merged
Conversation
reschke
added a commit
that referenced
this pull request
Jul 8, 2026
ack @telegrapher Co-authored-by: Jose Antonio Insua <ungoliant@gmail.com>
reschke
added a commit
that referenced
this pull request
Jul 8, 2026
) * 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>
reschke
added a commit
that referenced
this pull request
Jul 8, 2026
* 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>
reschke
added a commit
that referenced
this pull request
Jul 8, 2026
* 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>
reschke
added a commit
that referenced
this pull request
Jul 9, 2026
* 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 * OAK-12219: fix SonarCloud issues on PR #2989 @deprecated(since/forRemoval) on deprecated classes, wrap bare rethrow with context, remove unused vars, use assertNotSame, static Mockito imports, remove unused fail import, rename `record` (restricted in Java 16+), add missing assertions to no-assert tests. 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>
reschke
added a commit
that referenced
this pull request
Jul 9, 2026
* 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 * OAK-12219: fix SonarCloud issues on PR #2989 @deprecated(since/forRemoval) on deprecated classes, wrap bare rethrow with context, remove unused vars, use assertNotSame, static Mockito imports, remove unused fail import, rename `record` (restricted in Java 16+), add missing assertions to no-assert tests. Ai-Assisted-By: claude * OAK-12219: Upgrade Azure SDK V8 to V12 for oak-blob-azure - rework - fixed test and renamed --------- 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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
mina-core 2.1.12 is affected by https://nvd.nist.gov/vuln/detail/CVE-2026-47065