Author: frm
Date: Fri Aug  4 09:41:57 2017
New Revision: 1804085

URL: http://svn.apache.org/viewvc?rev=1804085&view=rev
Log:
OAK-6518 - Restore the original index format implementation

Added:
    
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexEntryV1.java
      - copied, changed from r1804083, 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexEntryV2.java
    
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoaderV1.java
      - copied, changed from r1804083, 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoaderV2.java
    
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexV1.java
      - copied, changed from r1804083, 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexV2.java
Modified:
    
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarConstants.java
    
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoader.java
    
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoaderV2.java

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarConstants.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarConstants.java?rev=1804085&r1=1804084&r2=1804085&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarConstants.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/TarConstants.java
 Fri Aug  4 09:41:57 2017
@@ -37,7 +37,7 @@ class TarConstants {
      * checksum).</li>
      * </ul>
      */
-    static final int INDEX_MAGIC = ('\n' << 24) + ('0' << 16) + ('K' << 8) + 
'\n';
+    static final int INDEX_MAGIC = ('\n' << 24) + ('1' << 16) + ('K' << 8) + 
'\n';
 
     /**
      * Magic byte sequence at the end of the graph block.

Copied: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexEntryV1.java
 (from r1804083, 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexEntryV2.java)
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexEntryV1.java?p2=jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexEntryV1.java&p1=jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexEntryV2.java&r1=1804083&r2=1804085&rev=1804085&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexEntryV2.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexEntryV1.java
 Fri Aug  4 09:41:57 2017
@@ -19,15 +19,15 @@ package org.apache.jackrabbit.oak.segmen
 
 import java.nio.ByteBuffer;
 
-class IndexEntryV2 implements IndexEntry {
+class IndexEntryV1 implements IndexEntry {
 
-    static final int SIZE = 33;
+    static final int SIZE = 28;
 
     private final ByteBuffer index;
 
     private final int position;
 
-    IndexEntryV2(ByteBuffer index, int position) {
+    IndexEntryV1(ByteBuffer index, int position) {
         this.index = index;
         this.position = position;
     }
@@ -59,12 +59,12 @@ class IndexEntryV2 implements IndexEntry
 
     @Override
     public int getTailGeneration() {
-        return index.getInt(position + 28);
+        return 0;
     }
 
     @Override
     public boolean isTail() {
-        return index.get(position + 32) != 0;
+        return false;
     }
 
 }

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoader.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoader.java?rev=1804085&r1=1804084&r2=1804085&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoader.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoader.java
 Fri Aug  4 09:41:57 2017
@@ -34,10 +34,13 @@ public class IndexLoader {
 
     private final int blockSize;
 
+    private final IndexLoaderV1 v1;
+
     private final IndexLoaderV2 v2;
 
     private IndexLoader(int blockSize) {
         this.blockSize = blockSize;
+        this.v1 = new IndexLoaderV1(blockSize);
         this.v2 = new IndexLoaderV2(blockSize);
     }
 
@@ -53,6 +56,9 @@ public class IndexLoader {
         file.readFully(buffer.array());
         int magic = buffer.getInt();
 
+        if (magic == IndexLoaderV1.MAGIC) {
+            return v1.loadIndex(file);
+        }
         if (magic == IndexLoaderV2.MAGIC) {
             return v2.loadIndex(file);
         }

Copied: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoaderV1.java
 (from r1804083, 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoaderV2.java)
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoaderV1.java?p2=jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoaderV1.java&p1=jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoaderV2.java&r1=1804083&r2=1804085&rev=1804085&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoaderV2.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoaderV1.java
 Fri Aug  4 09:41:57 2017
@@ -24,21 +24,21 @@ import java.io.RandomAccessFile;
 import java.nio.ByteBuffer;
 import java.util.zip.CRC32;
 
-class IndexLoaderV2 {
+class IndexLoaderV1 {
 
     static final int MAGIC = ('\n' << 24) + ('0' << 16) + ('K' << 8) + '\n';
 
     private final int blockSize;
 
-    IndexLoaderV2(int blockSize) {
+    IndexLoaderV1(int blockSize) {
         this.blockSize = blockSize;
     }
 
     Index loadIndex(RandomAccessFile file) throws InvalidIndexException, 
IOException {
         long length = file.length();
         // read the index metadata just before the two final zero blocks
-        ByteBuffer meta = ByteBuffer.allocate(IndexV2.FOOTER_SIZE);
-        file.seek(length - 2 * blockSize - IndexV2.FOOTER_SIZE);
+        ByteBuffer meta = ByteBuffer.allocate(IndexV1.FOOTER_SIZE);
+        file.seek(length - 2 * blockSize - IndexV1.FOOTER_SIZE);
         file.readFully(meta.array());
         int crc32 = meta.getInt();
         int count = meta.getInt();
@@ -49,14 +49,14 @@ class IndexLoaderV2 {
             throw new InvalidIndexException("Magic number mismatch");
         }
 
-        if (count < 1 || bytes < count * IndexEntryV2.SIZE + 
IndexV2.FOOTER_SIZE || bytes % blockSize != 0) {
+        if (count < 1 || bytes < count * IndexEntryV1.SIZE + 
IndexV1.FOOTER_SIZE || bytes % blockSize != 0) {
             throw new InvalidIndexException("Invalid metadata");
         }
 
         // this involves seeking backwards in the file, which might not
         // perform well, but that's OK since we only do this once per file
-        ByteBuffer index = ByteBuffer.allocate(count * IndexEntryV2.SIZE);
-        file.seek(length - 2 * blockSize - IndexV2.FOOTER_SIZE - count * 
IndexEntryV2.SIZE);
+        ByteBuffer index = ByteBuffer.allocate(count * IndexEntryV1.SIZE);
+        file.seek(length - 2 * blockSize - IndexV1.FOOTER_SIZE - count * 
IndexEntryV1.SIZE);
         file.readFully(index.array());
         index.mark();
 
@@ -69,7 +69,7 @@ class IndexLoaderV2 {
         long limit = length - 2 * blockSize - bytes - blockSize;
         long lastMsb = Long.MIN_VALUE;
         long lastLsb = Long.MIN_VALUE;
-        byte[] entry = new byte[IndexEntryV2.SIZE];
+        byte[] entry = new byte[IndexEntryV1.SIZE];
         for (int i = 0; i < count; i++) {
             index.get(entry);
 
@@ -98,7 +98,7 @@ class IndexLoaderV2 {
 
         index.reset();
 
-        return new IndexV2(index);
+        return new IndexV1(index);
     }
 
 }

Modified: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoaderV2.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoaderV2.java?rev=1804085&r1=1804084&r2=1804085&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoaderV2.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexLoaderV2.java
 Fri Aug  4 09:41:57 2017
@@ -26,7 +26,7 @@ import java.util.zip.CRC32;
 
 class IndexLoaderV2 {
 
-    static final int MAGIC = ('\n' << 24) + ('0' << 16) + ('K' << 8) + '\n';
+    static final int MAGIC = ('\n' << 24) + ('1' << 16) + ('K' << 8) + '\n';
 
     private final int blockSize;
 

Copied: 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexV1.java
 (from r1804083, 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexV2.java)
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexV1.java?p2=jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexV1.java&p1=jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexV2.java&r1=1804083&r2=1804085&rev=1804085&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexV2.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tar/index/IndexV1.java
 Fri Aug  4 09:41:57 2017
@@ -23,37 +23,37 @@ import java.nio.ByteBuffer;
 import java.util.Set;
 import java.util.UUID;
 
-class IndexV2 implements Index {
+class IndexV1 implements Index {
 
     static final int FOOTER_SIZE = 16;
 
     private final ByteBuffer index;
 
-    IndexV2(ByteBuffer index) {
+    IndexV1(ByteBuffer index) {
         this.index = index;
     }
 
     @Override
     public Set<UUID> getUUIDs() {
-        Set<UUID> uuids = newHashSetWithExpectedSize(index.remaining() / 
IndexEntryV2.SIZE);
+        Set<UUID> uuids = newHashSetWithExpectedSize(index.remaining() / 
IndexEntryV1.SIZE);
         int position = index.position();
         while (position < index.limit()) {
             long msb = index.getLong(position);
             long lsb = index.getLong(position + 8);
             uuids.add(new UUID(msb, lsb));
-            position += IndexEntryV2.SIZE;
+            position += IndexEntryV1.SIZE;
         }
         return uuids;
     }
 
     @Override
-    public IndexEntryV2 findEntry(long msb, long lsb) {
+    public IndexEntryV1 findEntry(long msb, long lsb) {
         // The segment identifiers are randomly generated with uniform
         // distribution, so we can use interpolation search to find the
         // matching entry in the index. The average runtime is O(log log n).
 
         int lowIndex = 0;
-        int highIndex = index.remaining() / IndexEntryV2.SIZE - 1;
+        int highIndex = index.remaining() / IndexEntryV1.SIZE - 1;
         float lowValue = Long.MIN_VALUE;
         float highValue = Long.MAX_VALUE;
         float targetValue = msb;
@@ -63,7 +63,7 @@ class IndexV2 implements Index {
                     (highIndex - lowIndex)
                             * (targetValue - lowValue)
                             / (highValue - lowValue));
-            int position = index.position() + guessIndex * IndexEntryV2.SIZE;
+            int position = index.position() + guessIndex * IndexEntryV1.SIZE;
             long m = index.getLong(position);
             if (msb < m) {
                 highIndex = guessIndex - 1;
@@ -81,7 +81,7 @@ class IndexV2 implements Index {
                     lowIndex = guessIndex + 1;
                     lowValue = m;
                 } else {
-                    return new IndexEntryV2(index, position);
+                    return new IndexEntryV1(index, position);
                 }
             }
         }
@@ -96,12 +96,12 @@ class IndexV2 implements Index {
 
     @Override
     public int entryCount() {
-        return index.remaining() / IndexEntryV2.SIZE;
+        return index.remaining() / IndexEntryV1.SIZE;
     }
 
     @Override
-    public IndexEntryV2 entry(int i) {
-        return new IndexEntryV2(index, index.position() + i * 
IndexEntryV2.SIZE);
+    public IndexEntryV1 entry(int i) {
+        return new IndexEntryV1(index, index.position() + i * 
IndexEntryV1.SIZE);
     }
 
 }


Reply via email to