HCOLL-184 added a method to return the server version from the stateless client

This commit is contained in:
Rob Austin
2014-12-23 11:25:58 +00:00
parent 12fe331c55
commit 9b7279daf0
3 changed files with 48 additions and 0 deletions
@@ -114,6 +114,7 @@ class StatelessChronicleMap<K, V> implements ChronicleMap<K, V>, Closeable, Clon
PUT_IF_ABSENT,
REMOVE_WITH_VALUE,
TO_STRING,
VERSION,
PUT_ALL,
PUT_ALL_WITHOUT_ACC,
HASH_CODE,
@@ -431,6 +432,11 @@ class StatelessChronicleMap<K, V> implements ChronicleMap<K, V>, Closeable, Clon
return fetchObject(String.class, TO_STRING);
}
@NotNull
public String version() {
return fetchObject(String.class, VERSION);
}
public boolean isEmpty() {
return fetchBoolean(IS_EMPTY);
}
@@ -1485,9 +1485,13 @@ class StatelessServerConnector<K, V> {
case REMOVE_WITH_VALUE:
return removeWithValue(reader, writer.in(), sizeLocation, timestamp, identifier);
case TO_STRING:
return toString(writer.in(), sizeLocation);
case VERSION:
return version(writer.in(), sizeLocation);
case PUT_ALL:
return putAll(reader, writer.in(), sizeLocation, timestamp, identifier);
@@ -1609,6 +1613,25 @@ class StatelessServerConnector<K, V> {
return null;
}
@Nullable
private Work version(@NotNull Bytes writer, final long sizeLocation) {
final long remaining = writer.remaining();
try {
String result = map.version();
writer.writeObject(result);
} catch (Throwable e) {
return sendException(writer, sizeLocation, e);
}
assert remaining > 4;
writeSizeAndFlags(sizeLocation, false, writer);
return null;
}
@SuppressWarnings("SameReturnValue")
@Nullable
private Work sendException(@NotNull Bytes writer, long sizeLocation, @NotNull Throwable e) {
@@ -120,6 +120,7 @@ public class StatelessClientTest {
.statelessClient(new InetSocketAddress("localhost", port)).create()) {
String actual = statelessMap.getMapped(10, ToString.INSTANCE);
assertEquals("{10=Hello World}", statelessMap.toString());
assertEquals("Hello World", actual);
}
}
@@ -677,6 +678,24 @@ public class StatelessClientTest {
}
}
@Test(timeout = 10000)
public void testGetServerVersion() throws IOException, InterruptedException {
int port = s_port++;
try (ChronicleMap<Integer, StringBuilder> serverMap = ChronicleMapBuilder
.of(Integer.class, StringBuilder.class)
.replication((byte) 2, TcpTransportAndNetworkConfig.of(port))
.create()) {
try (ChronicleMap<Integer, StringBuilder> statelessMap = ChronicleMapBuilder.of(Integer
.class, StringBuilder.class)
.statelessClient(new InetSocketAddress("localhost", port)).create()) {
assertTrue(!((StatelessChronicleMap) statelessMap).version().isEmpty());
}
}
}
}