From 01d2f4ce40620f84f2ffb48cf96f2e78f9ddf385 Mon Sep 17 00:00:00 2001 From: chenson42 Date: Mon, 21 Nov 2011 20:46:22 +0000 Subject: [PATCH] don't sync sym_node_security changes if the registration_enabled or initial_load_enabled flags are changing --- .../route/ConfigurationChangedDataRouter.java | 41 ++++++++++++++++--- 1 file changed, 35 insertions(+), 6 deletions(-) diff --git a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/route/ConfigurationChangedDataRouter.java b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/route/ConfigurationChangedDataRouter.java index 56c47ff3eb..7add7ab34f 100644 --- a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/route/ConfigurationChangedDataRouter.java +++ b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/route/ConfigurationChangedDataRouter.java @@ -25,9 +25,11 @@ import java.util.Map; import java.util.Set; +import org.apache.commons.lang.StringUtils; import org.jumpmind.symmetric.common.ParameterConstants; import org.jumpmind.symmetric.common.TableConstants; import org.jumpmind.symmetric.common.logging.LogFactory; +import org.jumpmind.symmetric.model.DataEventType; import org.jumpmind.symmetric.model.DataMetaData; import org.jumpmind.symmetric.model.NetworkedNode; import org.jumpmind.symmetric.model.Node; @@ -79,6 +81,10 @@ public Set routeToNodes(IRouterContext routingContext, // goes to. if (tableMatches(dataMetaData, TableConstants.SYM_NODE) || tableMatches(dataMetaData, TableConstants.SYM_NODE_SECURITY)) { + + if (didNodeSecurityChangeForNodeInitialization(dataMetaData)) { + return null; + } String nodeIdInQuestion = columnValues.get("NODE_ID"); List nodeGroupLinks = getNodeGroupLinksFromContext(routingContext); @@ -103,12 +109,16 @@ public Set routeToNodes(IRouterContext routingContext, } } - if (tableMatches(dataMetaData, TableConstants.SYM_TRIGGER) - || tableMatches(dataMetaData, TableConstants.SYM_TRIGGER_ROUTER) - || tableMatches(dataMetaData, TableConstants.SYM_ROUTER) - || tableMatches(dataMetaData, TableConstants.SYM_NODE_GROUP_LINK)) { - routingContext.getContextCache().put(CTX_KEY_RESYNC_NEEDED, Boolean.TRUE); - } + if (StringUtils.isBlank(dataMetaData.getData().getSourceNodeId()) + && (tableMatches(dataMetaData, TableConstants.SYM_TRIGGER) + || tableMatches(dataMetaData, + TableConstants.SYM_TRIGGER_ROUTER) + || tableMatches(dataMetaData, + TableConstants.SYM_ROUTER) || tableMatches( + dataMetaData, TableConstants.SYM_NODE_GROUP_LINK))) { + routingContext.getContextCache().put(CTX_KEY_RESYNC_NEEDED, + Boolean.TRUE); + } if (tableMatches(dataMetaData, TableConstants.SYM_CHANNEL)) { routingContext.getContextCache().put(CTX_KEY_FLUSH_CHANNELS_NEEDED, Boolean.TRUE); @@ -122,6 +132,25 @@ public Set routeToNodes(IRouterContext routingContext, return nodeIds; } + + /** + * Check to see if the change was due to registration or initial load is being enabled or disabled. If + * so, then don't propagate the change. + */ + protected boolean didNodeSecurityChangeForNodeInitialization(DataMetaData dataMetaData) { + if (tableMatches(dataMetaData, TableConstants.SYM_NODE_SECURITY) && dataMetaData.getData().getEventType() == DataEventType.UPDATE) { + Map oldData = getOldDataAsString("", dataMetaData); + Map newData = getNewDataAsString("", dataMetaData); + if (newData.get("REGISTRATION_ENABLED") != null && + !newData.get("REGISTRATION_ENABLED").equals(oldData.get("REGISTRATION_ENABLED"))) { + return true; + } else if (newData.get("INITIAL_LOAD_ENABLED") != null && + !newData.get("INITIAL_LOAD_ENABLED").equals(oldData.get("INITIAL_LOAD_ENABLED"))) { + return true; + } + } + return false; + } protected Node findIdentity() { return nodeService.findIdentity();