diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/cache/CacheManager.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/cache/CacheManager.java index 4d7600d2b9..ccc6189291 100644 --- a/symmetric-core/src/main/java/org/jumpmind/symmetric/cache/CacheManager.java +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/cache/CacheManager.java @@ -234,6 +234,15 @@ public void flushRouters() { triggerRouterCache.flushRouters(); } + @Override + public void flushAllWithRouters() { + flushTriggerRoutersByNodeGroupId(); + flushTriggerRoutersByChannel(); + flushTriggerRouters(); + flushTriggerRoutersByTriggerHist(); + flushTriggerRoutersById(); + } + @Override public List getSourceNodesCache(NodeGroupLinkAction eventAction, Node node) { initializeNodeCache(); diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/cache/ICacheManager.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/cache/ICacheManager.java index 86ac0a102d..636544049b 100644 --- a/symmetric-core/src/main/java/org/jumpmind/symmetric/cache/ICacheManager.java +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/cache/ICacheManager.java @@ -71,6 +71,8 @@ public interface ICacheManager { public void flushRouters(); + public void flushAllWithRouters(); + public List getSourceNodesCache(NodeGroupLinkAction eventAction, Node node); public List getTargetNodesCache(NodeGroupLinkAction eventAction, Node node); diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/common/ConfigurationChangedHelper.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/common/ConfigurationChangedHelper.java index 868e3aef85..83b16b13f8 100644 --- a/symmetric-core/src/main/java/org/jumpmind/symmetric/common/ConfigurationChangedHelper.java +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/common/ConfigurationChangedHelper.java @@ -59,6 +59,7 @@ public class ConfigurationChangedHelper { private static final String CTX_KEY_FLUSH_NODE_GROUP_LINKS_NEEDED = "FlushNodeGroups." + SUFFIX; private static final String CTX_KEY_FLUSH_NODE_SECURITY_NEEDED = "FlushNodeSecurity." + SUFFIX; private static final String CTX_KEY_FLUSH_NOTIFICATIONS_NEEDED = "FlushNotifications." + SUFFIX; + private static final String CTX_KEY_FLUSH_ROUTERS_NEEDED = "FlushRouters." + SUFFIX; private static final String CTX_KEY_FLUSH_PARAMETERS_NEEDED = "FlushParameters." + SUFFIX; private static final String CTX_KEY_FLUSH_TRANSFORMS_NEEDED = "FlushTransforms." + SUFFIX; private static final String CTX_KEY_RESYNC_NEEDED = "Resync." + SUFFIX; @@ -98,7 +99,7 @@ public void handleChange(Context context, Table table, CsvData data) { CTX_KEY_RESYNC_NEEDED); updateContext(TableConstants.SYM_NOTIFICATION, table, context, CTX_KEY_FLUSH_NOTIFICATIONS_NEEDED); updateContext(TableConstants.SYM_PARAMETER, table, context, CTX_KEY_FLUSH_PARAMETERS_NEEDED); - updateContext(TableConstants.SYM_ROUTER, table, context, CTX_KEY_RESYNC_NEEDED); + updateContext(TableConstants.SYM_ROUTER, table, context, CTX_KEY_RESYNC_NEEDED, CTX_KEY_FLUSH_ROUTERS_NEEDED); updateContext(TableConstants.SYM_TRANSFORM_TABLE, table, context, CTX_KEY_FLUSH_TRANSFORMS_NEEDED); updateContext(TableConstants.SYM_TRANSFORM_COLUMN, table, context, CTX_KEY_FLUSH_TRANSFORMS_NEEDED); updateContext(TableConstants.SYM_TRIGGER_ROUTER_GROUPLET, table, context, CTX_KEY_FLUSH_GROUPLETS_NEEDED, CTX_KEY_RESYNC_NEEDED); @@ -184,6 +185,11 @@ public void contextCommitted(Context context) { log.info("Clearing cache for parameters"); engine.getParameterService().rereadParameters(); } + if (context.remove(CTX_KEY_FLUSH_ROUTERS_NEEDED) != null) { + log.info("Clearing cache for routers"); + engine.getCacheManager().flushAllWithRouters(); + engine.getRouterService().flushCache(); + } if (context.remove(CTX_KEY_CLUSTER_NEEDED) != null) { engine.getClusterService().refreshLockEntries(); } diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/service/IRouterService.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/service/IRouterService.java index 552cca5949..f04b7a584e 100644 --- a/symmetric-core/src/main/java/org/jumpmind/symmetric/service/IRouterService.java +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/service/IRouterService.java @@ -53,4 +53,6 @@ public boolean shouldDataBeRouted(SimpleRouterContext context, DataMetaData data public List getDataGaps(); public void stop(); + + public void flushCache(); } \ No newline at end of file diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/RouterService.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/RouterService.java index 1f813fc9f2..2b0148c4f8 100644 --- a/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/RouterService.java +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/RouterService.java @@ -172,6 +172,10 @@ public synchronized void stop() { } } + public void flushCache() { + defaultRoutersCacheTime = 0; + } + /** * This method will route data to specific nodes. */