From 9cb6a2cc722989d9e9752aad67f5843d028e07f1 Mon Sep 17 00:00:00 2001 From: Rishi Yagnik Date: Tue, 28 Mar 2017 21:44:21 -0500 Subject: [PATCH] IGNITE-2786 : Fix Spring Client reconnect issue using reconnect event mechanism. --- .../cache/spring/SpringCacheManager.java | 36 +++++++++++++++++-- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/modules/spring/src/main/java/org/apache/ignite/cache/spring/SpringCacheManager.java b/modules/spring/src/main/java/org/apache/ignite/cache/spring/SpringCacheManager.java index 2a24b42339022..5c23a12efae34 100644 --- a/modules/spring/src/main/java/org/apache/ignite/cache/spring/SpringCacheManager.java +++ b/modules/spring/src/main/java/org/apache/ignite/cache/spring/SpringCacheManager.java @@ -17,15 +17,17 @@ package org.apache.ignite.cache.spring; -import java.util.ArrayList; -import java.util.Collection; -import java.util.concurrent.ConcurrentMap; import org.apache.ignite.Ignite; +import org.apache.ignite.IgniteLogger; import org.apache.ignite.IgniteSpring; import org.apache.ignite.Ignition; import org.apache.ignite.configuration.CacheConfiguration; import org.apache.ignite.configuration.IgniteConfiguration; import org.apache.ignite.configuration.NearCacheConfiguration; +import org.apache.ignite.events.DiscoveryEvent; +import org.apache.ignite.internal.util.typedef.internal.U; +import org.apache.ignite.lang.IgnitePredicate; +import org.apache.ignite.resources.LoggerResource; import org.jsr166.ConcurrentHashMap8; import org.springframework.beans.factory.InitializingBean; import org.springframework.cache.Cache; @@ -33,6 +35,12 @@ import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; +import java.util.ArrayList; +import java.util.Collection; +import java.util.concurrent.ConcurrentMap; + +import static org.apache.ignite.events.EventType.EVT_CLIENT_NODE_RECONNECTED; + /** * Implementation of Spring cache abstraction based on Ignite cache. *

Overview

@@ -159,6 +167,10 @@ public class SpringCacheManager implements CacheManager, InitializingBean, Appli /** Ignite instance. */ private Ignite ignite; + /** IGNITE-2786 : Added Grid logger for the purpose of logging. */ + @LoggerResource + private IgniteLogger log; + /** Spring context. */ private ApplicationContext springCtx; @@ -296,6 +308,24 @@ else if (cfg != null) ignite = IgniteSpring.start(cfg, springCtx); else ignite = Ignition.ignite(igniteInstanceName); + + //Handles the reconnect event, on server crashes OR network failure, client connects to server and + // destroy the cache + IgnitePredicate lsnr = iEvt -> { + U.warn(log,"Received discovery event [iEvt=" + iEvt.name() + ", discovery=" + iEvt.shortDisplay() + ']'); + + caches.keySet().forEach(key -> { + ignite.destroyCache(key); + caches.remove(key); + } ); + + + return true; // Return true to continue listening. + }; + + // Register event listener for all local task execution events. + ignite.events().localListen(lsnr, EVT_CLIENT_NODE_RECONNECTED); + } /** {@inheritDoc} */