From de9024f9e756d387f5ae960a4a1cb595bae26232 Mon Sep 17 00:00:00 2001 From: Anindya Chatterjee Date: Thu, 23 Jan 2025 20:15:29 +0530 Subject: [PATCH 1/2] fixes #1093 --- .../rocksdb/formatter/NitriteSerializers.java | 20 +++++++++++++++---- .../java/org/dizitart/no2/NitriteTest.java | 18 +++++++++++++++++ .../collection/operation/IndexManager.java | 1 + .../java/org/dizitart/no2/common/DBNull.java | 7 +++---- 4 files changed, 38 insertions(+), 8 deletions(-) diff --git a/nitrite-rocksdb-adapter/src/main/java/org/dizitart/no2/rocksdb/formatter/NitriteSerializers.java b/nitrite-rocksdb-adapter/src/main/java/org/dizitart/no2/rocksdb/formatter/NitriteSerializers.java index 9121793bd..e93b1f379 100644 --- a/nitrite-rocksdb-adapter/src/main/java/org/dizitart/no2/rocksdb/formatter/NitriteSerializers.java +++ b/nitrite-rocksdb-adapter/src/main/java/org/dizitart/no2/rocksdb/formatter/NitriteSerializers.java @@ -5,14 +5,13 @@ import com.esotericsoftware.kryo.kryo5.Serializer; import com.esotericsoftware.kryo.kryo5.io.Input; import com.esotericsoftware.kryo.kryo5.io.Output; -import com.esotericsoftware.kryo.kryo5.serializers.JavaSerializer; import com.esotericsoftware.kryo.kryo5.serializers.MapSerializer; import org.dizitart.no2.collection.Document; import org.dizitart.no2.collection.NitriteId; -import org.dizitart.no2.common.meta.Attributes; +import org.dizitart.no2.common.DBValue; import org.dizitart.no2.common.Fields; +import org.dizitart.no2.common.meta.Attributes; import org.dizitart.no2.common.tuples.Pair; -import org.dizitart.no2.common.DBValue; import org.dizitart.no2.common.util.SpatialKey; import org.dizitart.no2.index.BoundingBox; import org.dizitart.no2.index.IndexDescriptor; @@ -207,6 +206,19 @@ public BoundingBox read(Kryo kryo, Input input, Class typ } } + private static class DBValueSerializer extends Serializer { + @Override + public void write(Kryo kryo, Output output, DBValue object) { + kryo.writeObject(output, object.getValue()); + } + + @Override + public DBValue read(Kryo kryo, Input input, Class type) { + Object value = kryo.readObject(input, Object.class); + return new DBValue((Comparable) value); + } + } + private static class SpatialKeySerializer extends Serializer { @Override public void write(Kryo kryo, Output output, SpatialKey spatialKey) { @@ -231,7 +243,7 @@ public static void registerAll(KryoObjectFormatter kryoObjectFormatter) { kryoObjectFormatter.registerSerializer(UserCredential.class, new UserCredentialSerializer()); kryoObjectFormatter.registerSerializer(Attributes.class, new AttributesSerializer()); kryoObjectFormatter.registerSerializer(Fields.class, new FieldsSerializer()); - kryoObjectFormatter.registerSerializer(DBValue.class, new JavaSerializer()); + kryoObjectFormatter.registerSerializer(DBValue.class, new DBValueSerializer()); kryoObjectFormatter.registerSerializer(BoundingBox.class, new BoundingBoxSerializer()); kryoObjectFormatter.registerSerializer(SpatialKey.class, new SpatialKeySerializer()); } diff --git a/nitrite-rocksdb-adapter/src/test/java/org/dizitart/no2/NitriteTest.java b/nitrite-rocksdb-adapter/src/test/java/org/dizitart/no2/NitriteTest.java index 54754934a..cfb2a2a60 100644 --- a/nitrite-rocksdb-adapter/src/test/java/org/dizitart/no2/NitriteTest.java +++ b/nitrite-rocksdb-adapter/src/test/java/org/dizitart/no2/NitriteTest.java @@ -443,6 +443,24 @@ public void run() { db.close(); } + @Test + public void testIssue1093() { + ObjectRepository repository = db.getRepository(Receipt.class); + repository.clear(); + + Receipt receipt1 = new Receipt(); + receipt1.clientRef = "111-11111"; + receipt1.status = Receipt.Status.PREPARING; + + Receipt receipt2 = new Receipt(); + receipt2.clientRef = "222-22222"; + receipt2.status = Receipt.Status.PREPARING; + + repository = db.getRepository(Receipt.class); + repository.update(receipt1, true); + repository.update(receipt2, true); + } + @Data @AllArgsConstructor @NoArgsConstructor diff --git a/nitrite/src/main/java/org/dizitart/no2/collection/operation/IndexManager.java b/nitrite/src/main/java/org/dizitart/no2/collection/operation/IndexManager.java index b8d6fc8c2..bba34a638 100644 --- a/nitrite/src/main/java/org/dizitart/no2/collection/operation/IndexManager.java +++ b/nitrite/src/main/java/org/dizitart/no2/collection/operation/IndexManager.java @@ -113,6 +113,7 @@ public void clearAll() { String indexMapName = indexMeta.getIndexMap(); NitriteMap indexMap = nitriteStore.openMap(indexMapName, Object.class, Object.class); indexMap.clear(); + indexMap.close(); } } } diff --git a/nitrite/src/main/java/org/dizitart/no2/common/DBNull.java b/nitrite/src/main/java/org/dizitart/no2/common/DBNull.java index 4f2c1985e..91a50db1e 100644 --- a/nitrite/src/main/java/org/dizitart/no2/common/DBNull.java +++ b/nitrite/src/main/java/org/dizitart/no2/common/DBNull.java @@ -1,11 +1,14 @@ package org.dizitart.no2.common; +import lombok.Getter; + /** * @author Anindya Chatterjee * @since 1.0 */ public class DBNull extends DBValue { private static final long serialVersionUID = 1598819770L; + @Getter private static final DBNull instance = new DBNull(); private DBNull() { @@ -22,10 +25,6 @@ public int compareTo(DBValue o) { return -1; } - public static DBNull getInstance() { - return instance; - } - @Override public String toString() { return null; From 9ea3e088294b02c10987b80ec4de2a6b64ce2150 Mon Sep 17 00:00:00 2001 From: Anindya Chatterjee Date: Thu, 23 Jan 2025 22:17:09 +0530 Subject: [PATCH 2/2] build fix --- .../rocksdb/formatter/NitriteSerializers.java | 16 ++-------------- .../test/java/org/dizitart/no2/NitriteTest.java | 7 +++++++ 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/nitrite-rocksdb-adapter/src/main/java/org/dizitart/no2/rocksdb/formatter/NitriteSerializers.java b/nitrite-rocksdb-adapter/src/main/java/org/dizitart/no2/rocksdb/formatter/NitriteSerializers.java index e93b1f379..65bde0b9a 100644 --- a/nitrite-rocksdb-adapter/src/main/java/org/dizitart/no2/rocksdb/formatter/NitriteSerializers.java +++ b/nitrite-rocksdb-adapter/src/main/java/org/dizitart/no2/rocksdb/formatter/NitriteSerializers.java @@ -5,6 +5,7 @@ import com.esotericsoftware.kryo.kryo5.Serializer; import com.esotericsoftware.kryo.kryo5.io.Input; import com.esotericsoftware.kryo.kryo5.io.Output; +import com.esotericsoftware.kryo.kryo5.serializers.JavaSerializer; import com.esotericsoftware.kryo.kryo5.serializers.MapSerializer; import org.dizitart.no2.collection.Document; import org.dizitart.no2.collection.NitriteId; @@ -206,19 +207,6 @@ public BoundingBox read(Kryo kryo, Input input, Class typ } } - private static class DBValueSerializer extends Serializer { - @Override - public void write(Kryo kryo, Output output, DBValue object) { - kryo.writeObject(output, object.getValue()); - } - - @Override - public DBValue read(Kryo kryo, Input input, Class type) { - Object value = kryo.readObject(input, Object.class); - return new DBValue((Comparable) value); - } - } - private static class SpatialKeySerializer extends Serializer { @Override public void write(Kryo kryo, Output output, SpatialKey spatialKey) { @@ -243,7 +231,7 @@ public static void registerAll(KryoObjectFormatter kryoObjectFormatter) { kryoObjectFormatter.registerSerializer(UserCredential.class, new UserCredentialSerializer()); kryoObjectFormatter.registerSerializer(Attributes.class, new AttributesSerializer()); kryoObjectFormatter.registerSerializer(Fields.class, new FieldsSerializer()); - kryoObjectFormatter.registerSerializer(DBValue.class, new DBValueSerializer()); + kryoObjectFormatter.registerSerializer(DBValue.class, new JavaSerializer()); kryoObjectFormatter.registerSerializer(BoundingBox.class, new BoundingBoxSerializer()); kryoObjectFormatter.registerSerializer(SpatialKey.class, new SpatialKeySerializer()); } diff --git a/nitrite-rocksdb-adapter/src/test/java/org/dizitart/no2/NitriteTest.java b/nitrite-rocksdb-adapter/src/test/java/org/dizitart/no2/NitriteTest.java index cfb2a2a60..8cd16eb17 100644 --- a/nitrite-rocksdb-adapter/src/test/java/org/dizitart/no2/NitriteTest.java +++ b/nitrite-rocksdb-adapter/src/test/java/org/dizitart/no2/NitriteTest.java @@ -459,6 +459,13 @@ public void testIssue1093() { repository = db.getRepository(Receipt.class); repository.update(receipt1, true); repository.update(receipt2, true); + + assertEquals(repository.find().size(), 2); + Receipt found1 = repository.getById("111-11111"); + assertNotNull(found1); + + Receipt found2 = repository.getById("222-22222"); + assertNotNull(found2); } @Data