From ef05bfdf4a507342fbb930733b63fcd6dc05bf1f Mon Sep 17 00:00:00 2001 From: William Burns Date: Tue, 21 Nov 2017 11:49:54 -0500 Subject: [PATCH] ISPN-8548 Clear post notifications can cause memory issues as it holds all entries locally --- .../locking/ClusteringDependentLogic.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/org/infinispan/interceptors/locking/ClusteringDependentLogic.java b/core/src/main/java/org/infinispan/interceptors/locking/ClusteringDependentLogic.java index b79c6a21a3e0..0c9843b5f0eb 100644 --- a/core/src/main/java/org/infinispan/interceptors/locking/ClusteringDependentLogic.java +++ b/core/src/main/java/org/infinispan/interceptors/locking/ClusteringDependentLogic.java @@ -6,6 +6,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.Iterator; import java.util.List; import org.infinispan.commands.FlagAffectedCommand; @@ -186,10 +187,12 @@ public final void commitEntry(CacheEntry entry, FlagAffectedCommand command, Inv private void commitClearCommand(DataContainer dataContainer, ClearCacheEntry cacheEntry, InvocationContext context, FlagAffectedCommand command) { - List> copyEntries = new ArrayList<>(dataContainer.sizeIncludingExpired()); - dataContainer.iterator().forEachRemaining(copyEntries::add); - cacheEntry.commit(dataContainer); - for (InternalCacheEntry entry : copyEntries) { + Iterator> iterator = dataContainer.iterator(); + + while (iterator.hasNext()) { + InternalCacheEntry entry = iterator.next(); + // Iterator doesn't support remove + dataContainer.remove(entry.getKey()); notifier.notifyCacheEntryRemoved(entry.getKey(), entry.getValue(), entry.getMetadata(), false, context, command); } }