Author: tomekr
Date: Tue Aug  6 11:48:50 2019
New Revision: 1864511

URL: http://svn.apache.org/viewvc?rev=1864511&view=rev
Log:
OAK-8528: The Azure Journal implementation doesn't split after exceeding 
JOURNAL_LINE_LIMIT

Modified:
    
jackrabbit/oak/trunk/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzureJournalFile.java
    
jackrabbit/oak/trunk/oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/AzureJournalFileTest.java

Modified: 
jackrabbit/oak/trunk/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzureJournalFile.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzureJournalFile.java?rev=1864511&r1=1864510&r2=1864511&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzureJournalFile.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzureJournalFile.java
 Tue Aug  6 11:48:50 2019
@@ -149,6 +149,11 @@ public class AzureJournalFile implements
             } else {
                 currentBlob = blobs.get(0);
             }
+            try {
+                currentBlob.downloadAttributes();
+            } catch (StorageException e) {
+                throw new IOException(e);
+            }
             Integer bc = 
currentBlob.getProperties().getAppendBlobCommittedBlockCount();
             blockCount = bc == null ? 0 : bc;
         }

Modified: 
jackrabbit/oak/trunk/oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/AzureJournalFileTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/AzureJournalFileTest.java?rev=1864511&r1=1864510&r2=1864511&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/AzureJournalFileTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/AzureJournalFileTest.java
 Tue Aug  6 11:48:50 2019
@@ -17,7 +17,9 @@
 package org.apache.jackrabbit.oak.segment.azure;
 
 import com.microsoft.azure.storage.StorageException;
+import com.microsoft.azure.storage.blob.CloudAppendBlob;
 import com.microsoft.azure.storage.blob.CloudBlobContainer;
+import com.microsoft.azure.storage.blob.ListBlobItem;
 import org.apache.jackrabbit.oak.segment.spi.persistence.JournalFileReader;
 import org.apache.jackrabbit.oak.segment.spi.persistence.JournalFileWriter;
 import org.junit.Before;
@@ -27,6 +29,8 @@ import org.junit.Test;
 import java.io.IOException;
 import java.net.URISyntaxException;
 import java.security.InvalidKeyException;
+import java.util.ArrayList;
+import java.util.List;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
@@ -44,29 +48,51 @@ public class AzureJournalFileTest {
     @Before
     public void setup() throws StorageException, InvalidKeyException, 
URISyntaxException {
         container = azurite.getContainer("oak-test");
-        journal = new 
AzureJournalFile(container.getDirectoryReference("journal"), "journal.log", 10);
+        journal = new 
AzureJournalFile(container.getDirectoryReference("journal"), "journal.log", 50);
     }
 
     @Test
-    public void testSplitJournalFiles() throws IOException {
+    public void testSplitJournalFiles() throws IOException, 
URISyntaxException, StorageException {
         assertFalse(journal.exists());
 
-        JournalFileWriter writer = journal.openJournalWriter();
-        for (int i = 0; i < 100; i++) {
-            writer.writeLine("line " + i);
-        }
-
+        int index = 0;
+        index = writeNLines(index, 10); // 10
         assertTrue(journal.exists());
+        assertEquals(1, countJournalBlobs());
+
+        index = writeNLines(index, 20); // 30
+        assertEquals(1, countJournalBlobs());
+
+        index = writeNLines(index, 30); // 60
+        assertEquals(2, countJournalBlobs());
+
+        index = writeNLines(index, 100); // 160
+        assertEquals(4, countJournalBlobs());
 
-        writer = journal.openJournalWriter();
-        for (int i = 100; i < 200; i++) {
-            writer.writeLine("line " + i);
+        try (JournalFileReader reader = journal.openJournalReader()) {
+            for (int i = index - 1; i >= 0; i--) {
+                assertEquals("line " + i, reader.readLine());
+            }
         }
+    }
+
+    private int countJournalBlobs() throws URISyntaxException, 
StorageException {
+        List<CloudAppendBlob> result = new ArrayList<>();
+        for (ListBlobItem b : 
container.getDirectoryReference("journal").listBlobs("journal.log")) {
+            if (b instanceof CloudAppendBlob) {
+                result.add((CloudAppendBlob) b);
+            }
+        }
+        return result.size();
+    }
 
-        JournalFileReader reader = journal.openJournalReader();
-        for (int i = 199; i >= 0; i--) {
-            assertEquals("line " + i, reader.readLine());
+    private int writeNLines(int index, int n) throws IOException {
+        try (JournalFileWriter writer = journal.openJournalWriter()) {
+            for (int i = 0; i < n; i++) {
+                writer.writeLine("line " + (index++));
+            }
         }
+        return index;
     }
 
     @Test


Reply via email to