This is an automated email from the ASF dual-hosted git repository.

reschke pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/jackrabbit-oak.git


The following commit(s) were added to refs/heads/trunk by this push:
     new dbde447411 OAK-11847 - AzureJournalFile fails to rotate journal (#2438)
dbde447411 is described below

commit dbde4474111fa4e0fe8694d2571c7b9771c3e1ab
Author: Ieran Bogdan <[email protected]>
AuthorDate: Fri Aug 8 14:10:21 2025 +0300

    OAK-11847 - AzureJournalFile fails to rotate journal (#2438)
    
    * OAK-11847 - AzureJournalFile fails to rotate journal
    
    * OAK-11847 - AzureJournalFile fails to rotate journal
---
 .../jackrabbit/oak/segment/azure/AzureJournalFile.java    | 14 ++++++++++----
 .../jackrabbit/oak/segment/azure/AzurePersistence.java    |  9 ++++++---
 .../oak/segment/azure/AzurePersistenceManager.java        |  2 +-
 .../oak/segment/azure/AzureJournalFileTest.java           | 15 +++++++++++----
 4 files changed, 28 insertions(+), 12 deletions(-)

diff --git 
a/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzureJournalFile.java
 
b/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzureJournalFile.java
index 02b6cc7b15..c81f752962 100644
--- 
a/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzureJournalFile.java
+++ 
b/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzureJournalFile.java
@@ -33,7 +33,13 @@ import org.slf4j.LoggerFactory;
 
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
-import java.util.*;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Objects;
+import java.util.Map;
+import java.util.Iterator;
+import java.util.HashMap;
+import java.util.ArrayList;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
@@ -54,11 +60,11 @@ public class AzureJournalFile implements JournalFile {
 
     private final WriteAccessController writeAccessController;
 
-    AzureJournalFile(BlobContainerClient readBlobContainerClient, 
BlobContainerClient writeBlobContainerClient, String journalNamePrefix, 
WriteAccessController writeAccessController, int lineLimit) {
+    AzureJournalFile(BlobContainerClient readBlobContainerClient, 
BlobContainerClient writeBlobContainerClient, String journalNamePrefix, 
WriteAccessController writeAccessController, Integer lineLimit) {
         this.readBlobContainerClient = readBlobContainerClient;
         this.writeBlobContainerClient = writeBlobContainerClient;
         this.journalNamePrefix = journalNamePrefix;
-        this.lineLimit = lineLimit;
+        this.lineLimit = Objects.requireNonNullElse(lineLimit, 
JOURNAL_LINE_LIMIT);
         this.writeAccessController = writeAccessController;
     }
 
@@ -245,7 +251,7 @@ public class AzureJournalFile implements JournalFile {
         }
 
         private int parseCurrentSuffix() {
-            String name = AzureUtilities.getName(currentBlob);
+            String name = currentBlob.getBlobName();
             Pattern pattern = Pattern.compile(Pattern.quote(journalNamePrefix) 
+ "\\.(\\d+)");
             Matcher matcher = pattern.matcher(name);
             int parsedSuffix;
diff --git 
a/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzurePersistence.java
 
b/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzurePersistence.java
index 9a6f75595c..295ca41b1e 100644
--- 
a/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzurePersistence.java
+++ 
b/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzurePersistence.java
@@ -53,20 +53,23 @@ public class AzurePersistence implements 
SegmentNodeStorePersistence {
 
     protected WriteAccessController writeAccessController = new 
WriteAccessController();
 
+    private final Integer journalLineLimit;
+
     public AzurePersistence(BlobContainerClient blobContainerClient, String 
rootPrefix) {
         this(blobContainerClient, blobContainerClient, blobContainerClient, 
rootPrefix);
     }
 
     public AzurePersistence(BlobContainerClient readBlobContainerClient, 
BlobContainerClient writeBlobContainerClient, BlobContainerClient 
noRetryBlobContainerClient, String rootPrefix) {
-        this(readBlobContainerClient, writeBlobContainerClient, 
noRetryBlobContainerClient, rootPrefix, null);
+        this(readBlobContainerClient, writeBlobContainerClient, 
noRetryBlobContainerClient, rootPrefix, null, null);
     }
 
-    public AzurePersistence(BlobContainerClient readBlobContainerClient, 
BlobContainerClient writeBlobContainerClient, BlobContainerClient 
noRetryBlobContainerClient, String rootPrefix, AzureHttpRequestLoggingPolicy 
azureHttpRequestLoggingPolicy) {
+    public AzurePersistence(BlobContainerClient readBlobContainerClient, 
BlobContainerClient writeBlobContainerClient, BlobContainerClient 
noRetryBlobContainerClient, String rootPrefix, AzureHttpRequestLoggingPolicy 
azureHttpRequestLoggingPolicy, Integer journalLineLimit) {
         this.readBlobContainerClient = readBlobContainerClient;
         this.writeBlobContainerClient = writeBlobContainerClient;
         this.noRetryBlobContainerClient = noRetryBlobContainerClient;
         this.azureHttpRequestLoggingPolicy = azureHttpRequestLoggingPolicy;
         this.rootPrefix = rootPrefix;
+        this.journalLineLimit = journalLineLimit;
     }
 
     @Override
@@ -89,7 +92,7 @@ public class AzurePersistence implements 
SegmentNodeStorePersistence {
 
     @Override
     public JournalFile getJournalFile() {
-        return new AzureJournalFile(readBlobContainerClient, 
writeBlobContainerClient, rootPrefix + "/journal.log", writeAccessController);
+        return new AzureJournalFile(readBlobContainerClient, 
writeBlobContainerClient, rootPrefix + "/journal.log", writeAccessController, 
journalLineLimit);
     }
 
     @Override
diff --git 
a/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzurePersistenceManager.java
 
b/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzurePersistenceManager.java
index 0cf5fa072f..1ef8d10165 100644
--- 
a/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzurePersistenceManager.java
+++ 
b/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzurePersistenceManager.java
@@ -196,7 +196,7 @@ public class AzurePersistenceManager {
 
         final String rootPrefixNormalized = normalizePath(rootPrefix);
 
-        return new AzurePersistence(blobContainerClient, writeContainerClient, 
noRetryBlobContainerClient, rootPrefixNormalized, 
azureHttpRequestLoggingPolicy);
+        return new AzurePersistence(blobContainerClient, writeContainerClient, 
noRetryBlobContainerClient, rootPrefixNormalized, 
azureHttpRequestLoggingPolicy, null);
     }
 
     private static BlobContainerClient getBlobContainerClientWithSas(String 
accountName, String containerName, RequestRetryOptions requestRetryOptions, 
AzureHttpRequestLoggingPolicy azureHttpRequestLoggingPolicy, String sasToken) {
diff --git 
a/oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/AzureJournalFileTest.java
 
b/oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/AzureJournalFileTest.java
index 7434b71dec..e08f303d26 100644
--- 
a/oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/AzureJournalFileTest.java
+++ 
b/oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/AzureJournalFileTest.java
@@ -26,6 +26,7 @@ import com.azure.storage.blob.models.ListBlobsOptions;
 import org.apache.commons.lang3.time.StopWatch;
 import org.apache.jackrabbit.oak.commons.collections.ListUtils;
 import org.apache.jackrabbit.oak.segment.remote.WriteAccessController;
+import org.apache.jackrabbit.oak.segment.spi.persistence.JournalFile;
 import org.apache.jackrabbit.oak.segment.spi.persistence.JournalFileReader;
 import org.apache.jackrabbit.oak.segment.spi.persistence.JournalFileWriter;
 import org.jetbrains.annotations.NotNull;
@@ -51,15 +52,21 @@ public class AzureJournalFileTest {
 
     private BlobContainerClient writeBlobContainerClient;
 
-    private AzureJournalFile journal;
+    private JournalFile journal;
+
+    private final String rootPrefix = "oak";
 
     @Before
-    public void setup() throws BlobStorageException {
+    public void setup() throws BlobStorageException, IOException {
         readBlobContainerClient = 
azurite.getReadBlobContainerClient("oak-test");
         writeBlobContainerClient = 
azurite.getWriteBlobContainerClient("oak-test");
+        BlobContainerClient noRetryBlobContainerClient = 
azurite.getNoRetryBlobContainerClient("oak-test");
+
         WriteAccessController writeAccessController = new 
WriteAccessController();
         writeAccessController.enableWriting();
-        journal = new AzureJournalFile(readBlobContainerClient, 
writeBlobContainerClient, "journal.log", writeAccessController, 50);
+        AzurePersistence azurePersistence = new 
AzurePersistence(readBlobContainerClient, writeBlobContainerClient, 
noRetryBlobContainerClient, rootPrefix, null, 50);
+        azurePersistence.lockRepository();
+        journal = azurePersistence.getJournalFile();
     }
 
     @Test
@@ -85,7 +92,7 @@ public class AzureJournalFileTest {
 
     private int countJournalBlobs() {
         ListBlobsOptions listBlobsOptions = new ListBlobsOptions();
-        listBlobsOptions.setPrefix("journal.log");
+        listBlobsOptions.setPrefix(rootPrefix + "/journal.log");
 
         List<BlobItem> result  = 
readBlobContainerClient.listBlobs(listBlobsOptions, 
null).stream().collect(Collectors.toList());
         return result.size();

Reply via email to