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 2016/05/17 09:18:07 UTC
svn commit: r1744222 -
/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentWriter.java
Author: mduerig
Date: Tue May 17 09:18:06 2016
New Revision: 1744222
URL: http://svn.apache.org/viewvc?rev=1744222&view=rev
Log:
OAK-4277: Finalise de-duplication caches
Comments clarifying writing of node states, its generations and usage of the deduplication cache
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentWriter.java
Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentWriter.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentWriter.java?rev=1744222&r1=1744221&r2=1744222&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentWriter.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentWriter.java Tue May 17 09:18:06 2016
@@ -844,11 +844,15 @@ public class SegmentWriter {
SegmentNodeState sns = ((SegmentNodeState) state);
if (hasSegment(sns)) {
if (isOldGen(sns.getRecordId())) {
+ // This is a segment node state from an old generation. Check whether
+ // an equivalent one of the current generation is in the cache
RecordId cachedId = nodeCache.generation(generation()).get(sns.getStableId());
if (cachedId != null) {
return cachedId;
}
} else {
+ // This segment node state is already in this store,
+ // no need to write it again,
return sns.getRecordId();
}
}
@@ -856,6 +860,9 @@ public class SegmentWriter {
RecordId recordId = writeNodeUncached(state, depth);
if (state instanceof SegmentNodeState) {
+ // This node state has been rewritten because it is from an older
+ // generation (e.g. due to compaction). Put it into the cache for
+ // deduplication of hard links to it (e.g. checkpoints).
SegmentNodeState sns = (SegmentNodeState) state;
nodeCache.generation(generation()).put(sns.getStableId(), recordId, depth);
}