From 58eb16492af64c0e8745b71a98d7b42dccb5380b Mon Sep 17 00:00:00 2001 From: Rob Austin Date: Fri, 13 Mar 2015 10:40:59 +0000 Subject: [PATCH] added some bug fixes around replace() for chronicle map wire --- .../map/ClientWiredStatelessChronicleMap.java | 6 +++-- .../openhft/chronicle/map/MapWireHandler.java | 27 +++++++++++++++---- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/src/main/java/net/openhft/chronicle/map/ClientWiredStatelessChronicleMap.java b/src/main/java/net/openhft/chronicle/map/ClientWiredStatelessChronicleMap.java index 298ca3732..168cce13c 100644 --- a/src/main/java/net/openhft/chronicle/map/ClientWiredStatelessChronicleMap.java +++ b/src/main/java/net/openhft/chronicle/map/ClientWiredStatelessChronicleMap.java @@ -460,6 +460,7 @@ class ClientWiredStatelessChronicleMap implements ChronicleMap, Clon writeField(fieldName, value, hub.outWire()); } + private void writeField(Fields fieldName, Object value, Wire wire) { assert hub.outBytesLock().isHeldByCurrentThread(); @@ -632,8 +633,9 @@ class ClientWiredStatelessChronicleMap implements ChronicleMap, Clon try { transactionId = hub.writeHeader(startTime, channelID, hub.outWire()); writeField(Fields.METHOD_NAME, methodName); - writeField(Fields.ARG_1, value1); - writeField(Fields.ARG_2, value2); + writeField(Fields.ARG_1, key); + writeField(Fields.ARG_2, value1); + writeField(Fields.ARG_3, value2); hub.writeSocket(hub.outWire()); } finally { hub.outBytesLock().unlock(); diff --git a/src/main/java/net/openhft/chronicle/map/MapWireHandler.java b/src/main/java/net/openhft/chronicle/map/MapWireHandler.java index cf1b2a2f5..d67b437bc 100644 --- a/src/main/java/net/openhft/chronicle/map/MapWireHandler.java +++ b/src/main/java/net/openhft/chronicle/map/MapWireHandler.java @@ -240,8 +240,6 @@ class MapWireHandler implements WireHandler { return; } - - if ("CREATE_CHANNEL".contentEquals(methodName)) { writeVoid(() -> { short channelId1 = inWire.read(ARG_1).int16(); @@ -304,9 +302,26 @@ class MapWireHandler implements WireHandler { } if ("REPLACE".contentEquals(methodName)) { - writeValue(bytesMap -> { - final net.openhft.lang.io.Bytes reader = toReader(inWire, ARG_1, ARG_2); - return bytesMap.replace(reader, reader); + write(bytesMap -> { + + + // todo fix this this is a hack to get to work for now. + // todo may use somehting like : + // todo bytesMap.replace(reader, reader, timestamp, identifier()); + + + VanillaChronicleMap map = bytesMap.delegate; + byte[] result = (byte[]) map.replace( + toByteArray(inWire, ARG_1), + toByteArray(inWire, ARG_2)); + + boolean isNull = result == null || result.length == 0; + outWire.write(() -> "RESULT_IS_NULL").bool(isNull); + if (!isNull) { + outWire.write(() -> "RESULT"); + outWire.bytes().write(result); + } + }); return; } @@ -723,7 +738,9 @@ class MapWireHandler implements WireHandler { bytesMap.output = null; try { process.accept(bytesMap); + outWire.write(IS_EXCEPTION).bool(false); } catch (Exception e) { + outWire.write(IS_EXCEPTION).bool(true); LOG.error("", e); }