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 >--