Author: frm
Date: Thu Jul 14 14:54:49 2016
New Revision: 1752668

URL: http://svn.apache.org/viewvc?rev=1752668&view=rev
Log:
OAK-4560 - Remove duplicated logic in getStableId() and getStableIdBytes()

Modified:
    
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeState.java

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeState.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeState.java?rev=1752668&r1=1752667&r2=1752668&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeState.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentNodeState.java
 Thu Jul 14 14:54:49 2016
@@ -37,6 +37,7 @@ import static org.apache.jackrabbit.oak.
 import static org.apache.jackrabbit.oak.segment.Segment.unpack;
 import static 
org.apache.jackrabbit.oak.spi.state.AbstractNodeState.checkValidName;
 
+import java.nio.ByteBuffer;
 import java.util.Collections;
 import java.util.List;
 import java.util.UUID;
@@ -117,31 +118,33 @@ public class SegmentNodeState extends Re
      * @return  stable id
      */
     String getStableId() {
+        ByteBuffer buffer = ByteBuffer.wrap(getStableIdBytes());
+        long msb = buffer.getLong();
+        long lsb = buffer.getLong();
+        int offset = unpack(buffer.getShort());
+        return new UUID(msb, lsb) + ":" + offset;
+    }
+
+    /**
+     * Returns the stable ID of this node, non parsed. In contrast to the 
node's
+     * record id (which is technically the node's address) the stable id 
doesn't
+     * change after an online gc cycle. It might though change after an offline
+     * gc cycle.
+     *
+     * @return the stable ID of this node.
+     */
+    byte[] getStableIdBytes() {
         // The first record id of this node points to the stable id.
         RecordId id = getSegment().readRecordId(getOffset());
+
         if (id.equals(getRecordId())) {
             // If that id is equal to the record id of this node then the 
stable
             // id is the string representation of the record id of this node.
             // See RecordWriters.NodeStateWriter.writeRecordContent()
-            return id.toString10();
+            return id.getBytes();
         } else {
             // Otherwise that id points to the serialised (msb, lsb, offset)
             // stable id.
-            Segment segment = id.getSegment();
-            int pos = id.getOffset();
-            long msb = segment.readLong(pos);
-            long lsb = segment.readLong(pos + 8);
-            int offset = unpack(segment.readShort(pos + 16));
-            return new UUID(msb, lsb) + ":" + offset;
-        }
-    }
-
-    byte[] getStableIdBytes() {
-        RecordId id = getSegment().readRecordId(getOffset());
-
-        if (id.equals(getRecordId())) {
-            return id.getBytes();
-        } else {
             byte[] buffer = new byte[18];
             id.getSegment().readBytes(id.getOffset(), buffer, 0, 
buffer.length);
             return buffer;


Reply via email to