diff --git a/block-storage/src/main/java/org/lucares/pdb/map/PersistentMap.java b/block-storage/src/main/java/org/lucares/pdb/map/PersistentMap.java index 3b5b134..a11ae0f 100644 --- a/block-storage/src/main/java/org/lucares/pdb/map/PersistentMap.java +++ b/block-storage/src/main/java/org/lucares/pdb/map/PersistentMap.java @@ -35,8 +35,9 @@ public class PersistentMap { } } - public void put(final String key, final long value) throws IOException { - put(key.getBytes(UTF8), VariableByteEncoder.encode(value)); + public Long put(final String key, final long value) throws IOException { + final byte[] oldValue = put(key.getBytes(UTF8), VariableByteEncoder.encode(value)); + return oldValue == null ? null : VariableByteEncoder.decodeFirstValue(oldValue); } public long getAsLong(final String key) throws IOException { @@ -44,8 +45,9 @@ public class PersistentMap { return buffer == null ? null : VariableByteEncoder.decodeFirstValue(buffer); } - public void put(final String key, final String value) throws IOException { - put(key.getBytes(UTF8), value.getBytes(UTF8)); + public String put(final String key, final String value) throws IOException { + final byte[] oldValue = put(key.getBytes(UTF8), value.getBytes(UTF8)); + return oldValue == null ? null : new String(oldValue, UTF8); } public String getAsString(final String key) throws IOException { diff --git a/block-storage/src/test/java/org/lucares/pdb/map/PersistentMapTest.java b/block-storage/src/test/java/org/lucares/pdb/map/PersistentMapTest.java index 7302b39..7883ac0 100644 --- a/block-storage/src/test/java/org/lucares/pdb/map/PersistentMapTest.java +++ b/block-storage/src/test/java/org/lucares/pdb/map/PersistentMapTest.java @@ -26,17 +26,21 @@ public class PersistentMapTest { FileUtils.delete(dataDirectory); } - public void test() throws Exception { + public void testSingleValue() throws Exception { final Path file = dataDirectory.resolve("map.db"); try (final DiskStorage ds = new DiskStorage(file)) { final PersistentMap map = new PersistentMap(ds); - final String value1 = "value1"; - map.put("key1", value1); - final String actualValue1 = map.getAsString("key1"); + final String value = "value1"; + final String key = "key1"; - Assert.assertEquals(actualValue1, value1); + Assert.assertNull(map.getAsString(key)); + + Assert.assertNull(map.put(key, value)); + final String actualValue = map.getAsString(key); + + Assert.assertEquals(actualValue, value); } } }