HCOLL-378 #36 Add ChronicleHashBuilder.recoverPersistedTo() and ChronicleHashInstanceBuilder.recover() functionality

This commit is contained in:
leventov
2016-01-04 23:24:39 +03:00
parent b4c97ced36
commit 97e4c12de1
31 changed files with 1026 additions and 121 deletions
@@ -121,7 +121,7 @@ public abstract class CompactOffHeapLinearHashTable {
return (entry >>> keyBits) & valueMask;
}
long entry(long key, long value) {
public long entry(long key, long value) {
return key | (value << keyBits);
}
@@ -143,9 +143,9 @@ public abstract class CompactOffHeapLinearHashTable {
writeEntryVolatile(addr, pos, key(currentEntry), value);
}
abstract void writeEntry(long addr, long pos, long newEntry);
public abstract void writeEntry(long addr, long pos, long newEntry);
abstract void clearEntry(long addr, long pos);
public abstract void clearEntry(long addr, long pos);
/**
* Returns "insert" position in terms of consequent putValue()
@@ -176,4 +176,17 @@ public abstract class CompactOffHeapLinearHashTable {
clearEntry(addr, posToRemove);
return posToRemove;
}
public void insert(long addr, long key, long value) {
long startPos = hlPos(key);
long pos = startPos;
do {
if (empty(readEntry(addr, pos))) {
writeEntry(addr, pos, entry(key, value));
return;
}
pos = step(pos);
} while (pos != startPos);
throw new AssertionError("HashLookup overflow should never occur");
}
}