From a223d3acbd1f950183d32060d3e5477361e7ed40 Mon Sep 17 00:00:00 2001 From: Per Minborg Date: Mon, 16 Aug 2021 17:08:11 +0200 Subject: [PATCH] Fix problem with lost entries --- .../openhft/chronicle/map/ReplicatedChronicleMap.java | 2 -- .../map/impl/stage/replication/ReplicatedQueryAlloc.java | 9 +++++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/openhft/chronicle/map/ReplicatedChronicleMap.java b/src/main/java/net/openhft/chronicle/map/ReplicatedChronicleMap.java index ebfc91bcd..9a3e5d5f7 100644 --- a/src/main/java/net/openhft/chronicle/map/ReplicatedChronicleMap.java +++ b/src/main/java/net/openhft/chronicle/map/ReplicatedChronicleMap.java @@ -38,8 +38,6 @@ import net.openhft.chronicle.values.Values; import net.openhft.chronicle.wire.WireIn; import net.openhft.chronicle.wire.WireOut; import org.jetbrains.annotations.NotNull; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import java.io.IOException; import java.util.ArrayList; diff --git a/src/main/java/net/openhft/chronicle/map/impl/stage/replication/ReplicatedQueryAlloc.java b/src/main/java/net/openhft/chronicle/map/impl/stage/replication/ReplicatedQueryAlloc.java index 833c95590..47b234085 100644 --- a/src/main/java/net/openhft/chronicle/map/impl/stage/replication/ReplicatedQueryAlloc.java +++ b/src/main/java/net/openhft/chronicle/map/impl/stage/replication/ReplicatedQueryAlloc.java @@ -23,6 +23,7 @@ import net.openhft.chronicle.hash.replication.ReplicableEntry; import net.openhft.chronicle.map.MapAbsentEntry; import net.openhft.chronicle.map.MapSegmentContext; import net.openhft.chronicle.map.ReplicatedChronicleMap; +import net.openhft.chronicle.map.impl.CompiledReplicatedMapQueryContext; import net.openhft.chronicle.map.impl.IterationContext; import net.openhft.chronicle.map.impl.ReplicatedChronicleMapHolder; import net.openhft.sg.StageRef; @@ -73,6 +74,14 @@ public class ReplicatedQueryAlloc extends QueryAlloc { long firstAttemptedTierIndex = s.tierIndex; long firstAttemptedTierBaseAddr = s.tierBaseAddr; boolean cleanedFirstAttemptedTier = forcedOldDeletedEntriesCleanup(prevPos); + + if (cleanedFirstAttemptedTier) { + // Force recalculation of some properties as new slots may + // have become available and there might be "holes" + // created by removed entries. + ((CompiledReplicatedMapQueryContext) (Object) this).closeSearchKey(); + } + s.goToFirstTier(); while (true) { boolean visitingFirstAttemptedTier = s.tier == firstAttemptedTier;