From 8805c1205155c261bd436e3babd52d9cb9f71d54 Mon Sep 17 00:00:00 2001 From: Rob Austin Date: Mon, 20 Oct 2014 18:17:37 +0100 Subject: [PATCH] HCOLL-167 added readme info for #### Stateless Client, and moved code to common. --- README.md | 40 ++++++++++++++++++- .../chronicle/{ => common}/ChronicleHash.java | 2 +- .../{ => common}/ChronicleHashBuilder.java | 2 +- .../ChronicleHashErrorListener.java | 2 +- .../ChronicleHashErrorListeners.java | 2 +- .../{ => common}/StatelessBuilder.java | 2 +- .../chronicle/{ => common}/TimeProvider.java | 2 +- .../openhft/chronicle/map/ChronicleMap.java | 2 +- .../chronicle/map/ChronicleMapBuilder.java | 4 +- .../chronicle/map/ReplicatedChronicleMap.java | 2 +- .../chronicle/map/StatelessChronicleMap.java | 3 +- .../chronicle/map/VanillaChronicleMap.java | 2 +- .../openhft/chronicle/set/ChronicleSet.java | 3 +- .../chronicle/set/ChronicleSetBuilder.java | 8 ++-- .../chronicle/map/StatelessClientTest.java | 6 ++- .../map/TimeBasedReplicationTests.java | 2 +- 16 files changed, 62 insertions(+), 22 deletions(-) rename src/main/java/net/openhft/chronicle/{ => common}/ChronicleHash.java (98%) rename src/main/java/net/openhft/chronicle/{ => common}/ChronicleHashBuilder.java (99%) rename src/main/java/net/openhft/chronicle/{ => common}/ChronicleHashErrorListener.java (95%) rename src/main/java/net/openhft/chronicle/{ => common}/ChronicleHashErrorListeners.java (98%) rename src/main/java/net/openhft/chronicle/{ => common}/StatelessBuilder.java (95%) rename src/main/java/net/openhft/chronicle/{ => common}/TimeProvider.java (98%) diff --git a/README.md b/README.md index 51cc157cb..24de984ca 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,8 @@ Click here to get the [Latest Version Number](http://search.maven.org/#search%7C * [Port](https://github.com/OpenHFT/Chronicle-Map#port) * [Heart Beat Interval](https://github.com/OpenHFT/Chronicle-Map#heart-beat-interval) * [Channels and the Channel Provider](https://github.com/OpenHFT/Chronicle-Map#channels-and-channelprovider) - +* [Stateless Client](https://github.com/OpenHFT/Chronicle-Map#channels-and-channelprovider) + #### Miscellaneous * [Known Issues](https://github.com/OpenHFT/Chronicle-Map#known-issues) @@ -616,6 +617,43 @@ once you have finished, this will close everything in the ChannelProvider replicator.close(); ``` +#### Stateless Client + + + stateless client is an instance of a ChronicleMap or a Set that does not hold any data locally, + all the Map operations are + delegated via a Remote Procedure Calls ( RPC ) to another {@link ChronicleMap} or {@link + ChronicleSet} which we will refer to as the server. The server will hold all your data, + the server can not it’s self be a stateless client. Your stateless client must be connected to + the server via TCP/IP. The stateless client will delegate all your method calls to the remote + server. The stateless client operations will block, in other words the stateless client will wait + for the server to send a response before continuing to the next operation. The stateless client + could be consider to be a ClientProxy to {@link ChronicleMap} or {@link ChronicleSet} + running on another host. + +``` java +// server +{ + final ChronicleMap serverMap; + serverMap = ChronicleMapBuilder.of(Integer.class, CharSequence.class) + .entries(20000L) + .replicators((byte) 2, of(8076).heartBeatInterval(1L, SECONDS)).create(); + + serverMap.put(10, "EXAMPLE-10"); +} + +// stateless client +{ + final ChronicleMap statelessMap; + statelessMap = ChronicleMapBuilder.of(Integer + .class, CharSequence.class) + .stateless(remoteAddress(new InetSocketAddress("localhost", 8076))).create(); + + Assert.assertEquals("EXAMPLE-10", statelessMap.get(10)); + Assert.assertEquals(1, statelessMap.size()); +} +``` + #### Known Issues ##### Memory issue on Windows diff --git a/src/main/java/net/openhft/chronicle/ChronicleHash.java b/src/main/java/net/openhft/chronicle/common/ChronicleHash.java similarity index 98% rename from src/main/java/net/openhft/chronicle/ChronicleHash.java rename to src/main/java/net/openhft/chronicle/common/ChronicleHash.java index 996213937..5dad9e451 100644 --- a/src/main/java/net/openhft/chronicle/ChronicleHash.java +++ b/src/main/java/net/openhft/chronicle/common/ChronicleHash.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package net.openhft.chronicle; +package net.openhft.chronicle.common; import net.openhft.chronicle.map.ChronicleMap; import net.openhft.chronicle.set.ChronicleSet; diff --git a/src/main/java/net/openhft/chronicle/ChronicleHashBuilder.java b/src/main/java/net/openhft/chronicle/common/ChronicleHashBuilder.java similarity index 99% rename from src/main/java/net/openhft/chronicle/ChronicleHashBuilder.java rename to src/main/java/net/openhft/chronicle/common/ChronicleHashBuilder.java index a4bc99426..e7238f618 100644 --- a/src/main/java/net/openhft/chronicle/ChronicleHashBuilder.java +++ b/src/main/java/net/openhft/chronicle/common/ChronicleHashBuilder.java @@ -1,4 +1,4 @@ -package net.openhft.chronicle; +package net.openhft.chronicle.common; import net.openhft.chronicle.map.*; import net.openhft.chronicle.set.ChronicleSet; diff --git a/src/main/java/net/openhft/chronicle/ChronicleHashErrorListener.java b/src/main/java/net/openhft/chronicle/common/ChronicleHashErrorListener.java similarity index 95% rename from src/main/java/net/openhft/chronicle/ChronicleHashErrorListener.java rename to src/main/java/net/openhft/chronicle/common/ChronicleHashErrorListener.java index 30f404a4e..900f0166f 100644 --- a/src/main/java/net/openhft/chronicle/ChronicleHashErrorListener.java +++ b/src/main/java/net/openhft/chronicle/common/ChronicleHashErrorListener.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package net.openhft.chronicle; +package net.openhft.chronicle.common; import java.io.Serializable; diff --git a/src/main/java/net/openhft/chronicle/ChronicleHashErrorListeners.java b/src/main/java/net/openhft/chronicle/common/ChronicleHashErrorListeners.java similarity index 98% rename from src/main/java/net/openhft/chronicle/ChronicleHashErrorListeners.java rename to src/main/java/net/openhft/chronicle/common/ChronicleHashErrorListeners.java index 52ff73c4d..e86eaee7b 100644 --- a/src/main/java/net/openhft/chronicle/ChronicleHashErrorListeners.java +++ b/src/main/java/net/openhft/chronicle/common/ChronicleHashErrorListeners.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package net.openhft.chronicle; +package net.openhft.chronicle.common; import org.slf4j.Logger; diff --git a/src/main/java/net/openhft/chronicle/StatelessBuilder.java b/src/main/java/net/openhft/chronicle/common/StatelessBuilder.java similarity index 95% rename from src/main/java/net/openhft/chronicle/StatelessBuilder.java rename to src/main/java/net/openhft/chronicle/common/StatelessBuilder.java index a2a72d6c9..0b1449b9a 100644 --- a/src/main/java/net/openhft/chronicle/StatelessBuilder.java +++ b/src/main/java/net/openhft/chronicle/common/StatelessBuilder.java @@ -1,4 +1,4 @@ -package net.openhft.chronicle; +package net.openhft.chronicle.common; import java.net.InetSocketAddress; import java.util.concurrent.TimeUnit; diff --git a/src/main/java/net/openhft/chronicle/TimeProvider.java b/src/main/java/net/openhft/chronicle/common/TimeProvider.java similarity index 98% rename from src/main/java/net/openhft/chronicle/TimeProvider.java rename to src/main/java/net/openhft/chronicle/common/TimeProvider.java index 8f5885286..8dbda2f29 100644 --- a/src/main/java/net/openhft/chronicle/TimeProvider.java +++ b/src/main/java/net/openhft/chronicle/common/TimeProvider.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package net.openhft.chronicle; +package net.openhft.chronicle.common; import net.openhft.chronicle.map.ChronicleMap; import net.openhft.chronicle.set.ChronicleSet; diff --git a/src/main/java/net/openhft/chronicle/map/ChronicleMap.java b/src/main/java/net/openhft/chronicle/map/ChronicleMap.java index fc28db0f2..58e826d9d 100644 --- a/src/main/java/net/openhft/chronicle/map/ChronicleMap.java +++ b/src/main/java/net/openhft/chronicle/map/ChronicleMap.java @@ -16,7 +16,7 @@ package net.openhft.chronicle.map; -import net.openhft.chronicle.ChronicleHash; +import net.openhft.chronicle.common.ChronicleHash; import net.openhft.chronicle.serialization.BytesReader; import net.openhft.lang.io.Bytes; import net.openhft.lang.io.serialization.BytesMarshaller; diff --git a/src/main/java/net/openhft/chronicle/map/ChronicleMapBuilder.java b/src/main/java/net/openhft/chronicle/map/ChronicleMapBuilder.java index 6d0d036f0..f1ada6c3e 100644 --- a/src/main/java/net/openhft/chronicle/map/ChronicleMapBuilder.java +++ b/src/main/java/net/openhft/chronicle/map/ChronicleMapBuilder.java @@ -16,7 +16,7 @@ package net.openhft.chronicle.map; -import net.openhft.chronicle.*; +import net.openhft.chronicle.common.*; import net.openhft.chronicle.serialization.AgileBytesMarshaller; import net.openhft.chronicle.serialization.MetaBytesInterop; import net.openhft.chronicle.serialization.MetaBytesWriter; @@ -64,7 +64,7 @@ import static net.openhft.chronicle.map.Objects.builderEquals; * *

Use static {@link #of(Class, Class)} method to obtain a {@code ChronicleMapBuilder} instance. * - *

{@code ChronicleMapBuilder} is mutable, see a note in {@link ChronicleHashBuilder} interface + *

{@code ChronicleMapBuilder} is mutable, see a note in {@link net.openhft.chronicle.common.ChronicleHashBuilder} interface * documentation. * *

Later in this documentation, "ChronicleMap" means "ChronicleMaps, created by {@code diff --git a/src/main/java/net/openhft/chronicle/map/ReplicatedChronicleMap.java b/src/main/java/net/openhft/chronicle/map/ReplicatedChronicleMap.java index 884f7be7a..26940e93a 100644 --- a/src/main/java/net/openhft/chronicle/map/ReplicatedChronicleMap.java +++ b/src/main/java/net/openhft/chronicle/map/ReplicatedChronicleMap.java @@ -17,7 +17,7 @@ package net.openhft.chronicle.map; -import net.openhft.chronicle.TimeProvider; +import net.openhft.chronicle.common.TimeProvider; import net.openhft.chronicle.serialization.BytesReader; import net.openhft.chronicle.serialization.MetaBytesInterop; import net.openhft.chronicle.serialization.MetaBytesWriter; diff --git a/src/main/java/net/openhft/chronicle/map/StatelessChronicleMap.java b/src/main/java/net/openhft/chronicle/map/StatelessChronicleMap.java index b04d97f37..8462bd6ea 100644 --- a/src/main/java/net/openhft/chronicle/map/StatelessChronicleMap.java +++ b/src/main/java/net/openhft/chronicle/map/StatelessChronicleMap.java @@ -1,6 +1,6 @@ package net.openhft.chronicle.map; -import net.openhft.chronicle.StatelessBuilder; +import net.openhft.chronicle.common.StatelessBuilder; import net.openhft.chronicle.exceptions.IORuntimeException; import net.openhft.chronicle.exceptions.TimeoutRuntimeException; import net.openhft.lang.io.ByteBufferBytes; @@ -155,7 +155,6 @@ class StatelessChronicleMap implements ChronicleMap, Closeable { public synchronized int size() { - long sizeLocation = writeEvent(SIZE); // get the data back from the server diff --git a/src/main/java/net/openhft/chronicle/map/VanillaChronicleMap.java b/src/main/java/net/openhft/chronicle/map/VanillaChronicleMap.java index 495c01d95..3ea582f93 100644 --- a/src/main/java/net/openhft/chronicle/map/VanillaChronicleMap.java +++ b/src/main/java/net/openhft/chronicle/map/VanillaChronicleMap.java @@ -16,7 +16,7 @@ package net.openhft.chronicle.map; -import net.openhft.chronicle.ChronicleHashErrorListener; +import net.openhft.chronicle.common.ChronicleHashErrorListener; import net.openhft.chronicle.threadlocal.Provider; import net.openhft.chronicle.threadlocal.ThreadLocalCopies; import net.openhft.chronicle.serialization.*; diff --git a/src/main/java/net/openhft/chronicle/set/ChronicleSet.java b/src/main/java/net/openhft/chronicle/set/ChronicleSet.java index c167caad1..13d184cbf 100644 --- a/src/main/java/net/openhft/chronicle/set/ChronicleSet.java +++ b/src/main/java/net/openhft/chronicle/set/ChronicleSet.java @@ -1,8 +1,7 @@ package net.openhft.chronicle.set; -import net.openhft.chronicle.ChronicleHash; +import net.openhft.chronicle.common.ChronicleHash; -import java.io.Closeable; import java.util.Set; public interface ChronicleSet extends Set, ChronicleHash { diff --git a/src/main/java/net/openhft/chronicle/set/ChronicleSetBuilder.java b/src/main/java/net/openhft/chronicle/set/ChronicleSetBuilder.java index 0d81b8d7f..036140fd6 100644 --- a/src/main/java/net/openhft/chronicle/set/ChronicleSetBuilder.java +++ b/src/main/java/net/openhft/chronicle/set/ChronicleSetBuilder.java @@ -16,10 +16,10 @@ package net.openhft.chronicle.set; -import net.openhft.chronicle.ChronicleHashBuilder; -import net.openhft.chronicle.ChronicleHashErrorListener; -import net.openhft.chronicle.StatelessBuilder; -import net.openhft.chronicle.TimeProvider; +import net.openhft.chronicle.common.ChronicleHashBuilder; +import net.openhft.chronicle.common.ChronicleHashErrorListener; +import net.openhft.chronicle.common.StatelessBuilder; +import net.openhft.chronicle.common.TimeProvider; import net.openhft.chronicle.map.*; import net.openhft.lang.io.serialization.BytesMarshaller; import net.openhft.lang.io.serialization.BytesMarshallerFactory; diff --git a/src/test/java/net/openhft/chronicle/map/StatelessClientTest.java b/src/test/java/net/openhft/chronicle/map/StatelessClientTest.java index 124a6bc10..b4cec9c38 100644 --- a/src/test/java/net/openhft/chronicle/map/StatelessClientTest.java +++ b/src/test/java/net/openhft/chronicle/map/StatelessClientTest.java @@ -7,7 +7,8 @@ import java.io.IOException; import java.net.InetSocketAddress; import static java.util.concurrent.TimeUnit.SECONDS; -import static net.openhft.chronicle.StatelessBuilder.remoteAddress; +import static net.openhft.chronicle.common.StatelessBuilder.remoteAddress; +import static net.openhft.chronicle.map.Builder.getPersistenceFile; import static net.openhft.chronicle.map.TcpReplicationConfig.of; /** @@ -25,6 +26,9 @@ public class StatelessClientTest { // server { + ChronicleMapBuilder.of(Integer.class, CharSequence.class) + .entries(20000L) + .replicators((byte) 2, of(8076).heartBeatInterval(1L, SECONDS)).file(getPersistenceFile()); serverMap = ChronicleMapBuilder.of(Integer.class, CharSequence.class) .entries(20000L) .replicators((byte) 2, of(8076).heartBeatInterval(1L, SECONDS)).create(); diff --git a/src/test/java/net/openhft/chronicle/map/TimeBasedReplicationTests.java b/src/test/java/net/openhft/chronicle/map/TimeBasedReplicationTests.java index bb9fa762f..405ed630c 100644 --- a/src/test/java/net/openhft/chronicle/map/TimeBasedReplicationTests.java +++ b/src/test/java/net/openhft/chronicle/map/TimeBasedReplicationTests.java @@ -16,7 +16,7 @@ package net.openhft.chronicle.map; -import net.openhft.chronicle.TimeProvider; +import net.openhft.chronicle.common.TimeProvider; import net.openhft.chronicle.map.jrs166.JSR166TestCase; import org.junit.Test; import org.mockito.Mockito;