GEODE-7159: Amending emergencyClose to type check before casting. Also included Optional instead of null checks (#4493)
(cherry picked from commit 0f05e9ccd94c04a205ace82de6616e9bffa92fa7)
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/PoolManagerImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/PoolManagerImpl.java
index 1d6f2f8..67488ee 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/PoolManagerImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/PoolManagerImpl.java
@@ -20,6 +20,7 @@
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.Optional;
import org.apache.logging.log4j.Logger;
@@ -63,7 +64,7 @@
}
private volatile Map<String, Pool> pools = Collections.emptyMap();
- private volatile Iterator<Map.Entry<String, Pool>> itrForEmergencyClose = null;
+ private volatile Optional<Iterator<Pool>> itrForEmergencyClose = Optional.empty();
private final Object poolLock = new Object();
/**
* True if this manager is a normal one owned by the PoolManager. False if this is a special one
@@ -123,7 +124,7 @@
}
pools = Collections.emptyMap();
- itrForEmergencyClose = null;
+ itrForEmergencyClose = Optional.empty();
if (foundClientPool) {
// Now that the client has all the pools destroyed free up the pooled comm buffers
ServerConnection.emptyCommBufferPool();
@@ -159,7 +160,7 @@
// + " and more than one pool already exists in client.");
// }
pools = Collections.unmodifiableMap(copy);
- itrForEmergencyClose = copy.entrySet().iterator();
+ itrForEmergencyClose = Optional.of(copy.values().iterator());
}
}
@@ -188,7 +189,7 @@
return false;
} else {
pools = Collections.unmodifiableMap(copy);
- itrForEmergencyClose = copy.entrySet().iterator();
+ itrForEmergencyClose = Optional.of(copy.values().iterator());
return true;
}
}
@@ -289,14 +290,14 @@
if (impl == null) {
return;
}
- Iterator<Map.Entry<String, Pool>> itr = impl.itrForEmergencyClose;
- if (itr == null) {
- return;
- }
- while (itr.hasNext()) {
- Entry<String, Pool> next = itr.next();
- ((PoolImpl) next.getValue()).emergencyClose();
- }
+ impl.itrForEmergencyClose.ifPresent(poolIterator -> {
+ while (poolIterator.hasNext()) {
+ Pool pool = poolIterator.next();
+ if (pool instanceof PoolImpl) {
+ ((PoolImpl) pool).emergencyClose();
+ }
+ }
+ });
}
public static void loadEmergencyClasses() {