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 ju...@apache.org on 2014/06/10 22:50:33 UTC
svn commit: r1601767 - in /jackrabbit/oak/branches/1.0: ./
oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/
oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/
oak-core/src/test/java/org/apache/jackrabbit/oak/plugins...
Author: jukka
Date: Tue Jun 10 20:50:32 2014
New Revision: 1601767
URL: http://svn.apache.org/r1601767
Log:
1.0.1: Merged revisions 1601388 and 1601757 (OAK-1804)
Added:
jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/CompactionMap.java
- copied unchanged from r1601757, jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/CompactionMap.java
jackrabbit/oak/branches/1.0/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/CompactionMapTest.java
- copied unchanged from r1601757, jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/segment/CompactionMapTest.java
Modified:
jackrabbit/oak/branches/1.0/ (props changed)
jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Compactor.java
jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Record.java
jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentTracker.java
jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java
Propchange: jackrabbit/oak/branches/1.0/
------------------------------------------------------------------------------
Merged /jackrabbit/oak/trunk:r1601388,1601757
Modified: jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Compactor.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Compactor.java?rev=1601767&r1=1601766&r2=1601767&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Compactor.java (original)
+++ jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Compactor.java Tue Jun 10 20:50:32 2014
@@ -52,7 +52,7 @@ public class Compactor {
/** Logger instance */
private static final Logger log = LoggerFactory.getLogger(Compactor.class);
- public static void compact(SegmentStore store) {
+ public static CompactionMap compact(SegmentStore store) {
SegmentWriter writer = store.getTracker().getWriter();
Compactor compactor = new Compactor(writer);
@@ -74,6 +74,16 @@ public class Compactor {
before = head;
after = builder.getNodeState();
}
+
+ return new CompactionMap(compactor.compacted);
+ }
+
+ /**
+ * Locks down the RecordId persistence structure
+ */
+ static long[] recordAsKey(RecordId r) {
+ return new long[] { r.getSegmentId().getMostSignificantBits(),
+ r.getSegmentId().getLeastSignificantBits(), r.getOffset() };
}
private final SegmentWriter writer;
Modified: jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Record.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Record.java?rev=1601767&r1=1601766&r2=1601767&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Record.java (original)
+++ jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Record.java Tue Jun 10 20:50:32 2014
@@ -32,7 +32,15 @@ class Record {
}
static boolean fastEquals(Record a, Record b) {
- return a.segmentId == b.segmentId && a.offset == b.offset;
+ if (a.segmentId == b.segmentId && a.offset == b.offset) {
+ return true;
+ }
+
+ CompactionMap compaction = a.getStore().getTracker().getCompactionMap();
+ RecordId aid = a.getRecordId();
+ RecordId bid = b.getRecordId();
+ return compaction.wasCompactedTo(aid, bid)
+ || compaction.wasCompactedTo(bid, aid);
}
/**
@@ -69,6 +77,15 @@ class Record {
}
/**
+ * Returns the segment store.
+ *
+ * @return segment store
+ */
+ public SegmentStore getStore() {
+ return segmentId.getTracker().getStore();
+ }
+
+ /**
* Returns the identifier of this record.
*
* @return record identifier
Modified: jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentTracker.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentTracker.java?rev=1601767&r1=1601766&r2=1601767&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentTracker.java (original)
+++ jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentTracker.java Tue Jun 10 20:50:32 2014
@@ -25,6 +25,9 @@ import java.security.SecureRandom;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Set;
+import java.util.concurrent.atomic.AtomicReference;
+
+import javax.annotation.Nonnull;
import org.apache.jackrabbit.oak.plugins.blob.ReferenceCollector;
import org.slf4j.Logger;
@@ -63,6 +66,14 @@ public class SegmentTracker {
private final SegmentWriter writer;
+ /**
+ * Serialized map that contains the link between old record
+ * identifiers and identifiers of the corresponding records
+ * after compaction.
+ */
+ private final AtomicReference<CompactionMap> compactionMap =
+ new AtomicReference<CompactionMap>(new CompactionMap());
+
private final long cacheSize;
/**
@@ -142,6 +153,15 @@ public class SegmentTracker {
}
}
+ public void setCompactionMap(CompactionMap compaction) {
+ compactionMap.set(compaction);
+ }
+
+ @Nonnull
+ CompactionMap getCompactionMap() {
+ return compactionMap.get();
+ }
+
/**
* Returns all segment identifiers that are currently referenced in memory.
*
Modified: jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java?rev=1601767&r1=1601766&r2=1601767&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java (original)
+++ jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/FileStore.java Tue Jun 10 20:50:32 2014
@@ -406,10 +406,11 @@ public class FileStore implements Segmen
}
}
- private void compact() {
+ public void compact() {
if (compactNeeded.getAndSet(false)) {
long start = System.nanoTime();
- Compactor.compact(this);
+ tracker.getWriter().dropCache();
+ tracker.setCompactionMap(Compactor.compact(this));
log.info("TarMK Compaction: Completed in {}ms", MILLISECONDS
.convert(System.nanoTime() - start, NANOSECONDS));
cleanupNeeded.set(true);