diff --git a/src/main/java/net/openhft/chronicle/hash/impl/VanillaChronicleHash.java b/src/main/java/net/openhft/chronicle/hash/impl/VanillaChronicleHash.java index 088b4406b..6e5839ce1 100644 --- a/src/main/java/net/openhft/chronicle/hash/impl/VanillaChronicleHash.java +++ b/src/main/java/net/openhft/chronicle/hash/impl/VanillaChronicleHash.java @@ -29,6 +29,8 @@ import net.openhft.chronicle.map.ChronicleMapBuilder; import net.openhft.lang.io.*; import net.openhft.lang.io.serialization.BytesMarshallableSerializer; import net.openhft.lang.threadlocal.Provider; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.io.File; import java.io.IOException; @@ -49,6 +51,8 @@ public abstract class VanillaChronicleHash> implements ChronicleHash, Serializable { + private static final Logger LOG = LoggerFactory.getLogger(VanillaChronicleHash.class); + private static final long serialVersionUID = 0L; ///////////////////////////////////////////////// @@ -103,7 +107,7 @@ public abstract class VanillaChronicleHash(); long tierBulkOffset = roundUpRuntimePageSize(sizeInBytesWithoutTiers()); - if (byteStoreSize >= tierBulkOffset + tierBulkBytesSize) { + if (byteStoreSize >= tierBulkOffset + tierBulkSizeInBytes) { TierBulkData firstTierBulkData = new TierBulkData(ms, tierBulkOffset); tierBulkOffsets.add(firstTierBulkData); while (true) { - tierBulkOffset += tierBulkBytesSize; - if (byteStoreSize < tierBulkOffset + tierBulkBytesSize) + tierBulkOffset += tierBulkSizeInBytes; + if (byteStoreSize < tierBulkOffset + tierBulkSizeInBytes) break; tierBulkOffsets.add(new TierBulkData(firstTierBulkData, tierBulkOffset)); } @@ -344,6 +348,15 @@ public abstract class VanillaChronicleHash implements (VanillaChronicleMap) m; map.initTransientsFromBuilder(this); map.headerSize = roundUpMapHeaderSize(fis.getChannel().position()); - long sizeInBytes = map.sizeInBytesWithoutTiers(); - if (sizeInBytes != fileLength) { + map.createMappedStoreAndSegments(file); + long expectedFileLength = map.expectedFileSize(); + if (expectedFileLength != fileLength) { throw new IOException("The file " + file + "the map is serialized from " + "has unexpected length " + fileLength + ", probably corrupted. " + - "Expected length is " + sizeInBytes); + "Expected length is " + expectedFileLength); } - map.createMappedStoreAndSegments(file); // This is needed to property initialize key and value serialization builders, // which are later used in replication // TODO don't use SerializationBuilders in replication, extract marshallers diff --git a/src/main/java/net/openhft/chronicle/map/ReplicatedChronicleMap.java b/src/main/java/net/openhft/chronicle/map/ReplicatedChronicleMap.java index 98379edeb..958966d01 100644 --- a/src/main/java/net/openhft/chronicle/map/ReplicatedChronicleMap.java +++ b/src/main/java/net/openhft/chronicle/map/ReplicatedChronicleMap.java @@ -706,8 +706,6 @@ public class ReplicatedChronicleMap set = initSet(String.class, 1_000_000, 30, "stringSet.dat"); ExecutorService executor = Executors.newFixedThreadPool(5);