From 0398f7dfbfc989b15905fad39829a574e4b04eb6 Mon Sep 17 00:00:00 2001 From: leventov Date: Tue, 24 Nov 2015 15:30:01 +0300 Subject: [PATCH] HCOLL-406 #58 Don't check size configurations of ChronicleMapBuilder, if existing file is accessed --- .../impl/SerializationBuilder.java | 2 +- .../chronicle/map/ChronicleMapBuilder.java | 22 ++++++++----------- ...ateProxyMapUpdatedViaSharedMemoryTest.java | 1 - 3 files changed, 10 insertions(+), 15 deletions(-) diff --git a/src/main/java/net/openhft/chronicle/hash/serialization/impl/SerializationBuilder.java b/src/main/java/net/openhft/chronicle/hash/serialization/impl/SerializationBuilder.java index bee219116..d93e8b408 100644 --- a/src/main/java/net/openhft/chronicle/hash/serialization/impl/SerializationBuilder.java +++ b/src/main/java/net/openhft/chronicle/hash/serialization/impl/SerializationBuilder.java @@ -181,7 +181,7 @@ public final class SerializationBuilder implements Cloneable, Serializable { public long constantSizeBySample(T sampleObject) { long constantSize = serializationSize(sampleObject); - if (sizeIsStaticallyKnown) { + if (constantSizeMarshaller()) { long expectedConstantSize = constantSize(); if (constantSize != expectedConstantSize) { throw new IllegalStateException("Although configuring constant size by sample " + diff --git a/src/main/java/net/openhft/chronicle/map/ChronicleMapBuilder.java b/src/main/java/net/openhft/chronicle/map/ChronicleMapBuilder.java index 2611b5c0a..954da6445 100755 --- a/src/main/java/net/openhft/chronicle/map/ChronicleMapBuilder.java +++ b/src/main/java/net/openhft/chronicle/map/ChronicleMapBuilder.java @@ -272,7 +272,8 @@ public final class ChronicleMapBuilder implements */ @Override public ChronicleMapBuilder averageKeySize(double averageKeySize) { - checkSizeIsNotStaticallyKnown(keyBuilder); + if (keyBuilder.sizeIsStaticallyKnown) + return this; checkAverageSize(averageKeySize, "key"); this.averageKeySize = averageKeySize; averageKey = null; @@ -293,7 +294,9 @@ public final class ChronicleMapBuilder implements */ @Override public ChronicleMapBuilder averageKey(K averageKey) { - checkSizeIsNotStaticallyKnown(keyBuilder); + Objects.requireNonNull(averageKey); + if (keyBuilder.sizeIsStaticallyKnown) + return this; this.averageKey = averageKey; sampleKey = null; averageKeySize = UNDEFINED_DOUBLE_CONFIG; @@ -357,7 +360,8 @@ public final class ChronicleMapBuilder implements * @see #actualChunkSize(int) */ public ChronicleMapBuilder averageValueSize(double averageValueSize) { - checkSizeIsNotStaticallyKnown(valueBuilder); + if (valueBuilder.sizeIsStaticallyKnown) + return this; checkAverageSize(averageValueSize, "value"); this.averageValueSize = averageValueSize; averageValue = null; @@ -399,7 +403,8 @@ public final class ChronicleMapBuilder implements */ public ChronicleMapBuilder averageValue(V averageValue) { Objects.requireNonNull(averageValue); - checkSizeIsNotStaticallyKnown(valueBuilder); + if (valueBuilder.sizeIsStaticallyKnown) + return this; this.averageValue = averageValue; sampleValue = null; averageValueSize = UNDEFINED_DOUBLE_CONFIG; @@ -414,12 +419,6 @@ public final class ChronicleMapBuilder implements } } - private static void checkSizeIsNotStaticallyKnown(SerializationBuilder builder) { - if (builder.sizeIsStaticallyKnown) - throw new IllegalStateException("Size of type " + builder.tClass + - " is statically known and shouldn't be specified manually"); - } - /** * Configures the constant number of bytes, taken by serialized form of values, put into maps, * created by this builder. This is done by providing the {@code sampleValue}, all values should @@ -1382,9 +1381,6 @@ public final class ChronicleMapBuilder implements "Expected length is " + expectedFileLength); } map.createMappedStoreAndSegments(file); - // This is needed to property initialize key and value serialization builders, - // which are later used in replication - preMapConstruction(); establishReplication(map, singleHashReplication, channel); fis.getChannel().force(true); // TODO according to Self Boostrapping Data spec, should write "init complete" diff --git a/src/test/java/net/openhft/chronicle/map/ReplicateProxyMapUpdatedViaSharedMemoryTest.java b/src/test/java/net/openhft/chronicle/map/ReplicateProxyMapUpdatedViaSharedMemoryTest.java index 03968f3cb..4cd3f693c 100644 --- a/src/test/java/net/openhft/chronicle/map/ReplicateProxyMapUpdatedViaSharedMemoryTest.java +++ b/src/test/java/net/openhft/chronicle/map/ReplicateProxyMapUpdatedViaSharedMemoryTest.java @@ -48,7 +48,6 @@ public class ReplicateProxyMapUpdatedViaSharedMemoryTest { TcpTransportAndNetworkConfig serverConfig = TcpTransportAndNetworkConfig.of(7077) .heartBeatInterval(500, TimeUnit.MILLISECONDS); replicationMap = ChronicleMapBuilder.of(String.class, String.class) - .averageKey("key").averageValue("value") .entries(1) .replication((byte) 1, serverConfig).createPersistedTo(tempFile); }