From e69d204c9018768f05010934f426da41e6870e42 Mon Sep 17 00:00:00 2001 From: Rob Austin Date: Fri, 28 Nov 2014 11:34:55 +0000 Subject: [PATCH] HCOLL-222 added failing test - map.put() throwing and NPE when putting a LongValue$$Native --- .../map/AbstractChannelReplicator.java | 6 ++--- .../chronicle/map/VanillaChronicleMap.java | 23 +++++++++++++------ .../map/ChronicleMapImportExportTest.java | 12 +++++++++- .../chronicle/map/ChronicleMapTest.java | 18 +++++++++++++-- 4 files changed, 45 insertions(+), 14 deletions(-) diff --git a/src/main/java/net/openhft/chronicle/map/AbstractChannelReplicator.java b/src/main/java/net/openhft/chronicle/map/AbstractChannelReplicator.java index ae54163b2..e3d0961bc 100644 --- a/src/main/java/net/openhft/chronicle/map/AbstractChannelReplicator.java +++ b/src/main/java/net/openhft/chronicle/map/AbstractChannelReplicator.java @@ -143,9 +143,8 @@ abstract class AbstractChannelReplicator implements Closeable { * @param selector * @return */ - private Selector openSelector(@NotNull final Selector selector, @NotNull final - SelectedSelectionKeySet - selectedKeySet) { + private Selector openSelector(@NotNull final Selector selector, + @NotNull final SelectedSelectionKeySet selectedKeySet) { try { @@ -165,7 +164,6 @@ abstract class AbstractChannelReplicator implements Closeable { selectedKeysField.setAccessible(true); publicSelectedKeysField.setAccessible(true); - Object old = selectedKeysField.get(selector); selectedKeysField.set(selector, selectedKeySet); publicSelectedKeysField.set(selector, selectedKeySet); diff --git a/src/main/java/net/openhft/chronicle/map/VanillaChronicleMap.java b/src/main/java/net/openhft/chronicle/map/VanillaChronicleMap.java index f3b848de1..097b9e866 100755 --- a/src/main/java/net/openhft/chronicle/map/VanillaChronicleMap.java +++ b/src/main/java/net/openhft/chronicle/map/VanillaChronicleMap.java @@ -662,7 +662,7 @@ class VanillaChronicleMap, } @Override - public void getAll(File toFile) throws IOException { + public synchronized void getAll(File toFile) throws IOException { final XStream xstream = new XStream(new JettisonMappedXmlDriver()); xstream.setMode(XStream.NO_REFERENCES); @@ -679,7 +679,7 @@ class VanillaChronicleMap, } @Override - public void putAll(File fromFile) throws IOException { + public synchronized void putAll(File fromFile) throws IOException { final XStream xstream = new XStream(new JettisonMappedXmlDriver()); xstream.setMode(XStream.NO_REFERENCES); xstream.alias("chronicle-entries", net.openhft.chronicle.map.VanillaChronicleMap.EntrySet @@ -700,17 +700,20 @@ class VanillaChronicleMap, /** * @return a lazily created XStreamConverter */ - private XStreamConverter lazyXStreamConverter() { + private synchronized XStreamConverter lazyXStreamConverter() { + if (xStreamConverter == null) + return xStreamConverter; final KeyValueSerializer serializers = new KeyValueSerializer(keyBuilder, valueBuilder); final ThreadLocalCopies threadLocalCopies = serializers.threadLocalCopies(); - final Bytes buffer = new ByteBufferBytes(allocateDirect((int) entrySize) + final ByteBufferBytes buffer = new ByteBufferBytes(allocateDirect((int) entrySize) .order(ByteOrder.nativeOrder())); - return new XStreamConverter(threadLocalCopies, buffer, serializers); + xStreamConverter = new XStreamConverter(threadLocalCopies, buffer, serializers); + return xStreamConverter; } @@ -721,7 +724,7 @@ class VanillaChronicleMap, private Bytes buffer; private final KeyValueSerializer keyValueSerializer; - public XStreamConverter(ThreadLocalCopies threadLocalCopies, Bytes buffer, final KeyValueSerializer + public XStreamConverter(ThreadLocalCopies threadLocalCopies, ByteBufferBytes buffer, final KeyValueSerializer keyValueSerializer) { this.threadLocalCopies = threadLocalCopies; this.buffer = buffer; @@ -806,7 +809,13 @@ class VanillaChronicleMap, if (kClass.isAssignableFrom(o.getClass())) { - String text = toKeyBytes((K) o).asString().toString(); + Bytes bytes = (ByteBufferBytes) toKeyBytes((K) o); + + String hex = AbstractBytes.toHex(bytes); + hex.toString(); + + + String text = bytes.asString().toString(); System.out.println("key=" + text); // writer.setValue(text); diff --git a/src/test/java/net/openhft/chronicle/map/ChronicleMapImportExportTest.java b/src/test/java/net/openhft/chronicle/map/ChronicleMapImportExportTest.java index f922c68c7..6646305d1 100644 --- a/src/test/java/net/openhft/chronicle/map/ChronicleMapImportExportTest.java +++ b/src/test/java/net/openhft/chronicle/map/ChronicleMapImportExportTest.java @@ -191,7 +191,17 @@ public class ChronicleMapImportExportTest { .create()) { - expected.put("hello", new LongValue$$Native()); + + ChronicleMapBuilder builder = ChronicleMapBuilder + .of(CharSequence.class, LongValue.class) + .entries(1000) + .entrySize(16); + + + LongValue value = new LongValue$$Native(); + + + expected.put("hello", value); expected.getAll(file); diff --git a/src/test/java/net/openhft/chronicle/map/ChronicleMapTest.java b/src/test/java/net/openhft/chronicle/map/ChronicleMapTest.java index f2bf4ac46..7623304c2 100755 --- a/src/test/java/net/openhft/chronicle/map/ChronicleMapTest.java +++ b/src/test/java/net/openhft/chronicle/map/ChronicleMapTest.java @@ -1358,13 +1358,13 @@ public class ChronicleMapTest { @Test public void equalsTest() throws IOException { - final ChronicleMap map1 = OnHeapUpdatableChronicleMapBuilder + final ChronicleMap map1 = ChronicleMapBuilder .of(Integer.class, String.class).create(); map1.put(1, "one"); map1.put(2, "two"); - final ChronicleMap map2 = OnHeapUpdatableChronicleMapBuilder + final ChronicleMap map2 = ChronicleMapBuilder .of(Integer.class, String.class).create(); map2.put(1, "one"); @@ -1406,6 +1406,20 @@ public class ChronicleMapTest { } + @Ignore("JIRA raised for failing test HCOLL-222") + @Test + public void testPutLongValue() throws IOException { + final ChronicleMapBuilder builder = ChronicleMapBuilder + .of(CharSequence.class, LongValue.class) + .entries(1000) + .entrySize(16); + + final ChronicleMap map = builder.create(); + + LongValue value = nativeLongValue(); + map.put("x", value); + } + @Test public void testOffheapAcquireUsingLocked() throws IOException { ChronicleMapBuilder builder = ChronicleMapBuilder