Author: adulceanu
Date: Mon Jul 30 05:34:39 2018
New Revision: 1837024
URL: http://svn.apache.org/viewvc?rev=1837024&view=rev
Log:
OAK-7659 - AzureJournalWriter#truncate wrongly removes the journal file
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=1837024&r1=1837023&r2=1837024&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
Mon Jul 30 05:34:39 2018
@@ -159,6 +159,8 @@ public class AzureJournalFile implements
for (CloudAppendBlob cloudAppendBlob : getJournalBlobs()) {
cloudAppendBlob.delete();
}
+
+ createNextFile(0);
} catch (StorageException e) {
throw new IOException(e);
}
@@ -167,7 +169,8 @@ public class AzureJournalFile implements
@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
}
}
- 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
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
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=1837024&r1=1837023&r2=1837024&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
Mon Jul 30 05:34:39 2018
@@ -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());
+ }
}