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());
+    }
 }


Reply via email to