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