Skip to content

Commit

Permalink
fixed #386
Browse files Browse the repository at this point in the history
  • Loading branch information
anidotnet committed Nov 30, 2020
1 parent af4daa2 commit f066bc1
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -209,12 +209,17 @@ private static void testForMigration(MVStore store) {
return;
}

MVStore.TxCounter txCounter = store.registerVersionUsage();
MVMap<String, Attributes> metaMap = store.openMap(META_MAP_NAME);
try {
metaMap.remove("MigrationTest");
} catch (IllegalStateException e) {
store.close();
throw e;
} finally {
if (!store.isClosed()) {
store.deregisterVersionUsage(txCounter);
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import org.dizitart.no2.store.NitriteMap;
import org.dizitart.no2.store.NitriteStore;
import org.h2.mvstore.MVMap;
import org.h2.mvstore.MVStore;

import java.util.Iterator;
import java.util.Map;
Expand All @@ -34,10 +35,12 @@
class NitriteMVMap<Key, Value> implements NitriteMap<Key, Value> {
private final MVMap<Key, Value> mvMap;
private final NitriteStore<?> nitriteStore;
private final MVStore mvStore;

NitriteMVMap(MVMap<Key, Value> mvMap, NitriteStore<?> nitriteStore) {
this.mvMap = mvMap;
this.nitriteStore = nitriteStore;
this.mvStore = mvMap.getStore();
}

@Override
Expand All @@ -57,8 +60,13 @@ public NitriteStore<?> getStore() {

@Override
public void clear() {
mvMap.clear();
updateLastModifiedTime();
MVStore.TxCounter txCounter = mvStore.registerVersionUsage();
try {
mvMap.clear();
updateLastModifiedTime();
} finally {
mvStore.deregisterVersionUsage(txCounter);
}
}

@Override
Expand All @@ -73,9 +81,14 @@ public RecordStream<Value> values() {

@Override
public Value remove(Key key) {
Value value = mvMap.remove(key);
updateLastModifiedTime();
return value;
MVStore.TxCounter txCounter = mvStore.registerVersionUsage();
try {
Value value = mvMap.remove(key);
updateLastModifiedTime();
return value;
} finally {
mvStore.deregisterVersionUsage(txCounter);
}
}

@Override
Expand All @@ -86,8 +99,13 @@ public RecordStream<Key> keySet() {
@Override
public void put(Key key, Value value) {
notNull(value, "value cannot be null");
mvMap.put(key, value);
updateLastModifiedTime();
MVStore.TxCounter txCounter = mvStore.registerVersionUsage();
try {
mvMap.put(key, value);
updateLastModifiedTime();
} finally {
mvStore.deregisterVersionUsage(txCounter);
}
}

@Override
Expand All @@ -98,9 +116,14 @@ public long size() {
@Override
public Value putIfAbsent(Key key, Value value) {
notNull(value, "value cannot be null");
Value v = mvMap.putIfAbsent(key, value);
updateLastModifiedTime();
return v;
MVStore.TxCounter txCounter = mvStore.registerVersionUsage();
try {
Value v = mvMap.putIfAbsent(key, value);
updateLastModifiedTime();
return v;
} finally {
mvStore.deregisterVersionUsage(txCounter);
}
}

@Override
Expand Down Expand Up @@ -148,7 +171,12 @@ public boolean isEmpty() {

@Override
public void drop() {
nitriteStore.removeMap(getName());
MVStore.TxCounter txCounter = mvStore.registerVersionUsage();
try {
nitriteStore.removeMap(getName());
} finally {
mvStore.deregisterVersionUsage(txCounter);
}
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import org.dizitart.no2.common.RecordStream;
import org.dizitart.no2.index.BoundingBox;
import org.dizitart.no2.store.NitriteRTree;
import org.h2.mvstore.MVStore;
import org.h2.mvstore.rtree.MVRTreeMap;
import org.h2.mvstore.rtree.SpatialKey;

Expand All @@ -32,24 +33,36 @@
class NitriteMVRTreeMap<Key extends BoundingBox, Value>
implements NitriteRTree<Key, Value> {
private final MVRTreeMap<Key> mvMap;
private final MVStore mvStore;

NitriteMVRTreeMap(MVRTreeMap<Key> mvMap) {
this.mvMap = mvMap;
this.mvStore = mvMap.getStore();
}

@Override
public void add(Key key, NitriteId nitriteId) {
if (nitriteId != null && nitriteId.getIdValue() != null) {
SpatialKey spatialKey = getKey(key, Long.parseLong(nitriteId.getIdValue()));
mvMap.add(spatialKey, key);
MVStore.TxCounter txCounter = mvStore.registerVersionUsage();
try {
mvMap.add(spatialKey, key);
} finally {
mvStore.deregisterVersionUsage(txCounter);
}
}
}

@Override
public void remove(Key key, NitriteId nitriteId) {
if (nitriteId != null && nitriteId.getIdValue() != null) {
SpatialKey spatialKey = getKey(key, Long.parseLong(nitriteId.getIdValue()));
mvMap.remove(spatialKey);
MVStore.TxCounter txCounter = mvStore.registerVersionUsage();
try {
mvMap.remove(spatialKey);
} finally {
mvStore.deregisterVersionUsage(txCounter);
}
}
}

Expand Down

0 comments on commit f066bc1

Please sign in to comment.