You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sk...@apache.org on 2021/03/01 17:33:07 UTC
[ignite] branch master updated: IGNITE-13792 Fixed an issue that
caused NullPointerException on client disconnect.
This is an automated email from the ASF dual-hosted git repository.
sk0x50 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git
The following commit(s) were added to refs/heads/master by this push:
new fc4588f IGNITE-13792 Fixed an issue that caused NullPointerException on client disconnect.
fc4588f is described below
commit fc4588f9ff3f30a8df1f717e1bdef1b54252f0fb
Author: Vladislav Pyatkov <vl...@gmail.com>
AuthorDate: Mon Mar 1 20:32:26 2021 +0300
IGNITE-13792 Fixed an issue that caused NullPointerException on client disconnect.
Signed-off-by: Slava Koptilin <sl...@gmail.com>
---
.../processors/cache/CacheAffinitySharedManager.java | 12 ++++++++----
.../processors/cache/GridCachePartitionExchangeManager.java | 3 +++
.../internal/processors/cache/GridCacheSharedContext.java | 3 +--
3 files changed, 12 insertions(+), 6 deletions(-)
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheAffinitySharedManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheAffinitySharedManager.java
index 66aa98d..ba5fe3b 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheAffinitySharedManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheAffinitySharedManager.java
@@ -813,8 +813,14 @@ public class CacheAffinitySharedManager<K, V> extends GridCacheSharedManagerAdap
cachesRegistry.unregisterGroup(grpCtx.groupId());
}
- /** {@inheritDoc} */
- @Override public void onDisconnected(IgniteFuture<?> reconnectFut) {
+ /**
+ * Removes and unregisters all group holders.
+ *
+ * This method cannot be transformed to {@link #onDisconnected(IgniteFuture)} because
+ * {@link GridCachePartitionExchangeManager} requires fully initialized cache group holders
+ * until it handles the disconnect event, and so, it must be called directly.
+ */
+ public void removeGroupHolders() {
Iterator<Integer> it = grpHolders.keySet().iterator();
while (it.hasNext()) {
@@ -826,8 +832,6 @@ public class CacheAffinitySharedManager<K, V> extends GridCacheSharedManagerAdap
}
assert grpHolders.isEmpty();
-
- super.onDisconnected(reconnectFut);
}
/**
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java
index 6659c08..5a80d8e 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCachePartitionExchangeManager.java
@@ -981,6 +981,9 @@ public class GridCachePartitionExchangeManager<K, V> extends GridCacheSharedMana
U.join(exchWorker, log);
+ if (cctx.kernalContext().clientDisconnected())
+ cctx.affinity().removeGroupHolders();
+
// Finish all exchange futures.
ExchangeFutureSet exchFuts0 = exchFuts;
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSharedContext.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSharedContext.java
index f40d4d7..c933f98 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSharedContext.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheSharedContext.java
@@ -392,8 +392,7 @@ public class GridCacheSharedContext<K, V> {
* @throws IgniteCheckedException If failed.
*/
void onDisconnected(IgniteFuture<?> reconnectFut) throws IgniteCheckedException {
- for (ListIterator<? extends GridCacheSharedManager<?, ?>> it = mgrs.listIterator(mgrs.size());
- it.hasPrevious();) {
+ for (ListIterator<? extends GridCacheSharedManager<?, ?>> it = mgrs.listIterator(mgrs.size()); it.hasPrevious();) {
GridCacheSharedManager<?, ?> mgr = it.previous();
mgr.onDisconnected(reconnectFut);