diff --git oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzureJournalFile.java oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzureJournalFile.java index 47397e40c6..50bad248da 100644 --- oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzureJournalFile.java +++ oak-segment-azure/src/main/java/org/apache/jackrabbit/oak/segment/azure/AzureJournalFile.java @@ -159,6 +159,8 @@ public class AzureJournalFile implements JournalFile { for (CloudAppendBlob cloudAppendBlob : getJournalBlobs()) { cloudAppendBlob.delete(); } + + createNextFile(0); } catch (StorageException e) { throw new IOException(e); } @@ -167,7 +169,8 @@ public class AzureJournalFile implements JournalFile { @Override public void writeLine(String line) throws IOException { if (blockCount >= lineLimit) { - createNewFile(); + int parsedSuffix = parseCurrentSuffix(); + createNextFile(parsedSuffix); } try { currentBlob.appendText(line + "\n"); @@ -177,7 +180,17 @@ public class AzureJournalFile implements JournalFile { } } - private void createNewFile() throws IOException { + private void createNextFile(int suffix) throws IOException { + try { + currentBlob = directory.getAppendBlobReference(getJournalFileName(suffix + 1)); + currentBlob.createOrReplace(); + blockCount = 0; + } catch (URISyntaxException | StorageException e) { + throw new IOException(e); + } + } + + private int parseCurrentSuffix() { String name = AzureUtilities.getName(currentBlob); Pattern pattern = Pattern.compile(Pattern.quote(journalNamePrefix) + "\\.(\\d+)" ); Matcher matcher = pattern.matcher(name); @@ -194,13 +207,7 @@ public class AzureJournalFile implements JournalFile { log.warn("Can't parse journal file name {}", name); parsedSuffix = 0; } - try { - currentBlob = directory.getAppendBlobReference(getJournalFileName(parsedSuffix + 1)); - currentBlob.createOrReplace(); - blockCount = 0; - } catch (URISyntaxException | StorageException e) { - throw new IOException(e); - } + return parsedSuffix; } @Override diff --git oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/AzureJournalFileTest.java oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/AzureJournalFileTest.java index 828cf48b6b..6230e68a7d 100644 --- oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/AzureJournalFileTest.java +++ oak-segment-azure/src/test/java/org/apache/jackrabbit/oak/segment/azure/AzureJournalFileTest.java @@ -67,8 +67,21 @@ public class AzureJournalFileTest { for (int i = 199; i >= 0; i--) { assertEquals("line " + i, reader.readLine()); } - - } + @Test + public void testTruncateJournalFile() throws IOException { + assertFalse(journal.exists()); + + JournalFileWriter writer = journal.openJournalWriter(); + for (int i = 0; i < 100; i++) { + writer.writeLine("line " + i); + } + + assertTrue(journal.exists()); + + writer.truncate(); + + assertTrue(journal.exists()); + } }