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