MapDBLog: configure LogMap parameters
Change-Id: I6d69b0b3824554c46e8aae466c3a03cf2b318eac
diff --git a/core/store/dist/src/main/java/org/onlab/onos/store/service/impl/MapDBLog.java b/core/store/dist/src/main/java/org/onlab/onos/store/service/impl/MapDBLog.java
index b7165c3..933e0ee 100644
--- a/core/store/dist/src/main/java/org/onlab/onos/store/service/impl/MapDBLog.java
+++ b/core/store/dist/src/main/java/org/onlab/onos/store/service/impl/MapDBLog.java
@@ -18,6 +18,7 @@
import org.mapdb.BTreeMap;
import org.mapdb.DB;
import org.mapdb.DBMaker;
+import org.mapdb.Serializer;
import org.mapdb.TxBlock;
import org.mapdb.TxMaker;
import org.onlab.onos.store.serializers.StoreSerializer;
@@ -84,7 +85,7 @@
txMaker.execute(new TxBlock() {
@Override
public void tx(DB db) {
- BTreeMap<Long, byte[]> log = db.getTreeMap(LOG_NAME);
+ BTreeMap<Long, byte[]> log = getLogMap(db);
Atomic.Long size = db.getAtomicLong(SIZE_FIELD_NAME);
long nextIndex = log.isEmpty() ? 1 : log.lastKey() + 1;
for (Entry entry : entries) {
@@ -105,7 +106,7 @@
assertIsOpen();
DB db = txMaker.makeTx();
try {
- BTreeMap<Long, byte[]> log = db.getTreeMap(LOG_NAME);
+ BTreeMap<Long, byte[]> log = getLogMap(db);
return log.containsKey(index);
} finally {
db.close();
@@ -118,7 +119,7 @@
txMaker.execute(new TxBlock() {
@Override
public void tx(DB db) {
- BTreeMap<Long, byte[]> log = db.getTreeMap(LOG_NAME);
+ BTreeMap<Long, byte[]> log = getLogMap(db);
Atomic.Long size = db.getAtomicLong(SIZE_FIELD_NAME);
log.clear();
size.set(0);
@@ -131,7 +132,7 @@
assertIsOpen();
DB db = txMaker.makeTx();
try {
- BTreeMap<Long, byte[]> log = db.getTreeMap(LOG_NAME);
+ BTreeMap<Long, byte[]> log = getLogMap(db);
return log.isEmpty() ? null : serializer.decode(log.firstEntry().getValue());
} finally {
db.close();
@@ -143,7 +144,7 @@
assertIsOpen();
DB db = txMaker.makeTx();
try {
- BTreeMap<Long, byte[]> log = db.getTreeMap(LOG_NAME);
+ BTreeMap<Long, byte[]> log = getLogMap(db);
return log.isEmpty() ? 0 : log.firstKey();
} finally {
db.close();
@@ -155,7 +156,7 @@
assertIsOpen();
DB db = txMaker.makeTx();
try {
- BTreeMap<Long, byte[]> log = db.getTreeMap(LOG_NAME);
+ BTreeMap<Long, byte[]> log = getLogMap(db);
if (log.isEmpty()) {
throw new LogIndexOutOfBoundsException("Log is empty");
} else if (from < log.firstKey()) {
@@ -179,7 +180,7 @@
assertIsOpen();
DB db = txMaker.makeTx();
try {
- BTreeMap<Long, byte[]> log = db.getTreeMap(LOG_NAME);
+ BTreeMap<Long, byte[]> log = getLogMap(db);
byte[] entryBytes = log.get(index);
return entryBytes == null ? null : serializer.decode(entryBytes);
} finally {
@@ -192,7 +193,7 @@
assertIsOpen();
DB db = txMaker.makeTx();
try {
- BTreeMap<Long, byte[]> log = db.getTreeMap(LOG_NAME);
+ BTreeMap<Long, byte[]> log = getLogMap(db);
return log.isEmpty();
} finally {
db.close();
@@ -204,7 +205,7 @@
assertIsOpen();
DB db = txMaker.makeTx();
try {
- BTreeMap<Long, byte[]> log = db.getTreeMap(LOG_NAME);
+ BTreeMap<Long, byte[]> log = getLogMap(db);
return log.isEmpty() ? null : serializer.decode(log.lastEntry().getValue());
} finally {
db.close();
@@ -216,7 +217,7 @@
assertIsOpen();
DB db = txMaker.makeTx();
try {
- BTreeMap<Long, byte[]> log = db.getTreeMap(LOG_NAME);
+ BTreeMap<Long, byte[]> log = getLogMap(db);
return log.isEmpty() ? 0 : log.lastKey();
} finally {
db.close();
@@ -229,7 +230,7 @@
txMaker.execute(new TxBlock() {
@Override
public void tx(DB db) {
- BTreeMap<Long, byte[]> log = db.getTreeMap(LOG_NAME);
+ BTreeMap<Long, byte[]> log = getLogMap(db);
Atomic.Long size = db.getAtomicLong(SIZE_FIELD_NAME);
long startIndex = index + 1;
long endIndex = log.lastKey();
@@ -265,7 +266,7 @@
txMaker.execute(new TxBlock() {
@Override
public void tx(DB db) {
- BTreeMap<Long, byte[]> log = db.getTreeMap(LOG_NAME);
+ BTreeMap<Long, byte[]> log = getLogMap(db);
Atomic.Long size = db.getAtomicLong(SIZE_FIELD_NAME);
ConcurrentNavigableMap<Long, byte[]> headMap = log.headMap(index);
long deletedBytes = headMap.keySet().stream().mapToLong(i -> log.remove(i).length).sum();
@@ -277,4 +278,12 @@
}
});
}
+
+ private BTreeMap<Long, byte[]> getLogMap(DB db) {
+ return db.createTreeMap(LOG_NAME)
+ .valuesOutsideNodesEnable()
+ .keySerializerWrap(Serializer.LONG)
+ .valueSerializer(Serializer.BYTE_ARRAY)
+ .makeOrGet();
+ }
}