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);
}
}