You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by md...@apache.org on 2015/04/22 12:31:48 UTC

svn commit: r1675319 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file: FileStore.java TarWriter.java

Author: mduerig
Date: Wed Apr 22 10:31:48 2015
New Revision: 1675319

URL: http://svn.apache.org/r1675319
Log:
OAK-2800: Make contributions to reference graph from TarWriter less conservative

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/TarWriter.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java?rev=1675319&r1=1675318&r2=1675319&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java Wed Apr 22 10:31:48 2015
@@ -651,7 +651,7 @@ public class FileStore implements Segmen
                     id.getMostSignificantBits(),
                     id.getLeastSignificantBits()));
         }
-        writer.cleanup(ids);
+        writer.collectReferences(ids);
 
         CompactionMap cm = tracker.getCompactionMap();
         List<TarReader> list = newArrayListWithCapacity(readers.size());

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/TarWriter.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/TarWriter.java?rev=1675319&r1=1675318&r2=1675319&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/TarWriter.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/TarWriter.java Wed Apr 22 10:31:48 2015
@@ -40,11 +40,10 @@ import java.util.SortedMap;
 import java.util.UUID;
 import java.util.zip.CRC32;
 
+import com.google.common.collect.Lists;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.collect.Lists;
-
 /**
  * A writer for tar files. It is also used to read entries while the file is
  * still open.
@@ -421,7 +420,7 @@ class TarWriter {
 
         // Checksum for header record
         System.arraycopy(
-                new byte[] { ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' }, 0,
+                new byte[] {' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '}, 0,
                 header, 148, 8);
 
         // Type flag
@@ -439,9 +438,24 @@ class TarWriter {
         return header;
     }
 
-    synchronized void cleanup(Set<UUID> referencedIds) throws IOException {
+    /**
+     * Add all segment ids that are reachable from {@code referencedIds} via
+     * this writer's segment graph and subsequently remove those segment ids
+     * from {@code referencedIds} that are in this {{TarWriter}} as those can't
+     * be cleaned up anyway.
+     * @param referencedIds
+     * @throws IOException
+     */
+    synchronized void collectReferences(Set<UUID> referencedIds) throws IOException {
+        Set<UUID> referenced = newHashSet();
+        for (UUID id : referencedIds) {
+            List<UUID> refs = graph.get(id);
+            if (refs != null) {
+                referenced.addAll(refs);
+            }
+        }
+        referencedIds.addAll(referenced);
         referencedIds.removeAll(index.keySet());
-        referencedIds.addAll(references);
     }
 
     //------------------------------------------------------------< Object >--