diff --git a/src/main/java/net/openhft/chronicle/map/ChronicleMapBuilder.java b/src/main/java/net/openhft/chronicle/map/ChronicleMapBuilder.java index 83195af85..7e84c5436 100755 --- a/src/main/java/net/openhft/chronicle/map/ChronicleMapBuilder.java +++ b/src/main/java/net/openhft/chronicle/map/ChronicleMapBuilder.java @@ -1529,6 +1529,7 @@ public final class ChronicleMapBuilder implements VanillaChronicleMap map = (VanillaChronicleMap) m; map.initTransientsFromBuilder(this); + initTransientsFromReplication(map, singleHashReplication, channel); map.initBeforeMapping(fis.getChannel()); long expectedFileLength = map.expectedFileSize(); if (expectedFileLength != fileLength) { @@ -1576,6 +1577,23 @@ public final class ChronicleMapBuilder implements return establishReplication(map, singleHashReplication, channel); } + private static void initTransientsFromReplication( + VanillaChronicleMap map, + SingleChronicleHashReplication singleHashReplication, ReplicationChannel channel) { + if (map instanceof ReplicatedChronicleMap) { + AbstractReplication replication; + if (singleHashReplication != null) { + replication = singleHashReplication; + } else if (channel != null) { + replication = channel.hub(); + } else { + replication = null; + } + if (replication != null) + ((ReplicatedChronicleMap) map).initTransientsFromReplication(replication); + } + } + private static boolean trySerializeHeaderViaXStream( VanillaChronicleMap map, ObjectOutputStream oos) throws IOException { diff --git a/src/main/java/net/openhft/chronicle/map/ReplicatedChronicleMap.java b/src/main/java/net/openhft/chronicle/map/ReplicatedChronicleMap.java index 7efe0f8b3..22d01ee1e 100644 --- a/src/main/java/net/openhft/chronicle/map/ReplicatedChronicleMap.java +++ b/src/main/java/net/openhft/chronicle/map/ReplicatedChronicleMap.java @@ -101,18 +101,21 @@ public class ReplicatedChronicleMap closeables; private transient Bytes identifierUpdatedBytes; private transient ATSDirectBitSet modIterSet; private transient AtomicReferenceArray modificationIterators; private transient long startOfModificationIterators; - private boolean bootstrapOnlyLocalEntries; + private transient boolean bootstrapOnlyLocalEntries; - public long cleanupTimeout; - public TimeUnit cleanupTimeoutUnit; + public transient long cleanupTimeout; + public transient TimeUnit cleanupTimeoutUnit; public transient MapRemoteOperations remoteOperations; transient CompiledReplicatedMapQueryContext remoteOpContext; @@ -127,17 +130,7 @@ public class ReplicatedChronicleMap builder) { super.initTransientsFromBuilder(builder); this.remoteOperations = (MapRemoteOperations) builder.remoteOperations; + this.timeProvider = builder.timeProvider(); + cleanupTimeout = builder.cleanupTimeout; + cleanupTimeoutUnit = builder.cleanupTimeoutUnit; + } + + void initTransientsFromReplication(AbstractReplication replication) { + this.localIdentifier = replication.identifier(); + this.bootstrapOnlyLocalEntries = replication.bootstrapOnlyLocalEntries(); + if (localIdentifier == -1) + throw new IllegalStateException("localIdentifier should not be -1"); } private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { @@ -273,7 +276,23 @@ public class ReplicatedChronicleMap 0; + return id; } @Override @@ -345,7 +364,7 @@ public class ReplicatedChronicleMap map1 = ChronicleMap.of(Integer.class, Integer.class) + .entries(100) + .replication((byte) 1) + .createPersistedTo(file1)) { map1.put(2, 2); } @@ -65,7 +78,7 @@ public class DeserializeReplicatedMapWithoutConfiguringReplicatorsTest { try (ChronicleMap map2 = ChronicleMap.of(Integer.class, Integer.class) .entries(100) -// .replication((byte) 2) + .replication((byte) 2) .createPersistedTo(file2)) { map2.put(2, 0); map2.remove(2);