You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by mh...@apache.org on 2019/12/18 21:46:29 UTC
[geode] 02/03: GEODE-7531: Added type checking before casting
generic `Pool.java` to `PoolImpl.java` (#4490)
This is an automated email from the ASF dual-hosted git repository.
mhanson pushed a commit to branch release/1.11.0
in repository https://gitbox.apache.org/repos/asf/geode.git
commit efee065c00bf91bf6f2a7a86905af1c3451cb43d
Author: Udo Kohlmeyer <ko...@users.noreply.github.com>
AuthorDate: Tue Dec 17 14:50:57 2019 -0800
GEODE-7531: Added type checking before casting generic `Pool.java` to `PoolImpl.java` (#4490)
(cherry picked from commit f5b59350cc1b4580154df047f409a6c7a4095f0b)
---
.../geode/internal/cache/PoolManagerImpl.java | 42 ++++++++++++----------
1 file changed, 23 insertions(+), 19 deletions(-)
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 ec4ce47a..1d6f2f8 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
@@ -30,6 +30,7 @@ import org.apache.geode.cache.Region;
import org.apache.geode.cache.client.Pool;
import org.apache.geode.cache.client.PoolFactory;
import org.apache.geode.cache.client.PoolManager;
+import org.apache.geode.cache.client.internal.ExecutablePool;
import org.apache.geode.cache.client.internal.PoolImpl;
import org.apache.geode.cache.client.internal.RegisterDataSerializersOp;
import org.apache.geode.cache.client.internal.RegisterInstantiatorsOp;
@@ -46,7 +47,6 @@ import org.apache.geode.logging.internal.log4j.api.LogService;
* Implementation used by PoolManager.
*
* @since GemFire 5.7
- *
*/
public class PoolManagerImpl {
private static final Logger logger = LogService.getLogger();
@@ -115,9 +115,12 @@ public class PoolManagerImpl {
boolean foundClientPool = false;
synchronized (poolLock) {
for (Entry<String, Pool> entry : pools.entrySet()) {
- PoolImpl pool = (PoolImpl) entry.getValue();
- pool.basicDestroy(keepAlive);
- foundClientPool = true;
+ Pool pool = entry.getValue();
+ if (pool instanceof PoolImpl) {
+ ((PoolImpl) pool).basicDestroy(keepAlive);
+ foundClientPool = true;
+ }
+
}
pools = Collections.emptyMap();
itrForEmergencyClose = null;
@@ -167,7 +170,10 @@ public class PoolManagerImpl {
*/
public boolean unregister(Pool pool) {
// Continue only if the pool is not currently being used by any region and/or service.
- int attachCount = ((PoolImpl) pool).getAttachCount();
+ int attachCount = 0;
+ if (pool instanceof PoolImpl) {
+ attachCount = ((PoolImpl) pool).getAttachCount();
+ }
if (attachCount > 0) {
throw new IllegalStateException(String.format(
"Pool could not be destroyed because it is still in use by %s regions", attachCount));
@@ -200,12 +206,14 @@ public class PoolManagerImpl {
boolean foundDurablePool = false;
Map<String, Pool> pools = PoolManager.getAll();
for (Pool pool : pools.values()) {
- PoolImpl p = (PoolImpl) pool;
- if (p.isDurableClient()) {
- // TODO - handle an exception and attempt on all pools?
- foundDurablePool = true;
- if (!xmlPoolsOnly) {
- p.readyForEvents(system);
+ if (pool instanceof PoolImpl) {
+ PoolImpl p = (PoolImpl) pool;
+ if (p.isDurableClient()) {
+ // TODO - handle an exception and attempt on all pools?
+ foundDurablePool = true;
+ if (!xmlPoolsOnly) {
+ p.readyForEvents(system);
+ }
}
}
}
@@ -218,11 +226,10 @@ public class PoolManagerImpl {
public static void allPoolsRegisterInstantiator(Instantiator instantiator) {
Instantiator[] instantiators = new Instantiator[] {instantiator};
for (Pool pool : PoolManager.getAll().values()) {
- PoolImpl next = (PoolImpl) pool;
try {
EventID eventId = InternalInstantiator.generateEventId();
if (eventId != null) {
- RegisterInstantiatorsOp.execute(next, instantiators, eventId);
+ RegisterInstantiatorsOp.execute((ExecutablePool) pool, instantiators, eventId);
}
} catch (RuntimeException e) {
logger.warn("Error registering instantiator on pool:", e);
@@ -233,11 +240,10 @@ public class PoolManagerImpl {
public static void allPoolsRegisterInstantiator(InstantiatorAttributesHolder holder) {
InstantiatorAttributesHolder[] holders = new InstantiatorAttributesHolder[] {holder};
for (Pool pool : PoolManager.getAll().values()) {
- PoolImpl next = (PoolImpl) pool;
try {
EventID eventId = InternalInstantiator.generateEventId();
if (eventId != null) {
- RegisterInstantiatorsOp.execute(next, holders, eventId);
+ RegisterInstantiatorsOp.execute((ExecutablePool) pool, holders, eventId);
}
} catch (RuntimeException e) {
logger.warn("Error registering instantiator on pool:", e);
@@ -248,14 +254,13 @@ public class PoolManagerImpl {
public static void allPoolsRegisterDataSerializers(DataSerializer dataSerializer) {
DataSerializer[] dataSerializers = new DataSerializer[] {dataSerializer};
for (Pool pool : PoolManager.getAll().values()) {
- PoolImpl next = (PoolImpl) pool;
try {
EventID eventId = (EventID) dataSerializer.getEventId();
if (eventId == null) {
eventId = InternalDataSerializer.generateEventId();
}
if (eventId != null) {
- RegisterDataSerializersOp.execute(next, dataSerializers, eventId);
+ RegisterDataSerializersOp.execute((ExecutablePool) pool, dataSerializers, eventId);
}
} catch (RuntimeException e) {
logger.warn("Error registering instantiator on pool:", e);
@@ -266,14 +271,13 @@ public class PoolManagerImpl {
public static void allPoolsRegisterDataSerializers(SerializerAttributesHolder holder) {
SerializerAttributesHolder[] holders = new SerializerAttributesHolder[] {holder};
for (Pool pool : PoolManager.getAll().values()) {
- PoolImpl next = (PoolImpl) pool;
try {
EventID eventId = holder.getEventId();
if (eventId == null) {
eventId = InternalDataSerializer.generateEventId();
}
if (eventId != null) {
- RegisterDataSerializersOp.execute(next, holders, eventId);
+ RegisterDataSerializersOp.execute((ExecutablePool) pool, holders, eventId);
}
} catch (RuntimeException e) {
logger.warn("Error registering instantiator on pool:", e);