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 d3669122f2..1c344a46bd 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 @@ -92,7 +92,7 @@ public Set routeToNodes(SimpleRouterContext routingContext, DataMetaData // if this is sym_node or sym_node_security determine which nodes it // goes to. if (tableMatches(dataMetaData, TableConstants.SYM_NODE) - || tableMatches(dataMetaData, TableConstants.SYM_NODE_SECURITY) + || tableMatches(dataMetaData, TableConstants.SYM_NODE_SECURITY) || tableMatches(dataMetaData, TableConstants.SYM_NODE_HOST)) { String nodeIdInQuestion = columnValues.get("NODE_ID"); @@ -101,22 +101,26 @@ public Set routeToNodes(SimpleRouterContext routingContext, DataMetaData if (isLinked(nodeIdInQuestion, nodeThatMayBeRoutedTo, rootNetworkedNode, me, nodeGroupLinks) && !isSameNumberOfLinksAwayFromRoot(nodeThatMayBeRoutedTo, - rootNetworkedNode, me)) { + rootNetworkedNode, me) + || (nodeThatMayBeRoutedTo.getNodeId().equals(me.getNodeId()) && initialLoad)) { if (nodeIds == null) { nodeIds = new HashSet(); } nodeIds.add(nodeThatMayBeRoutedTo.getNodeId()); } } - - // don't route node security to it's own node. that node will get node security + + // don't route node security to it's own node. that node will get + // node security // via registration and it will be updated by initial load - if (!initialLoad && nodeIds != null && tableMatches(dataMetaData, TableConstants.SYM_NODE_SECURITY)) { + if (!initialLoad && nodeIds != null + && tableMatches(dataMetaData, TableConstants.SYM_NODE_SECURITY)) { nodeIds.remove(nodeIdInQuestion); } } else { for (Node nodeThatMayBeRoutedTo : possibleTargetNodes) { - if (!isSameNumberOfLinksAwayFromRoot(nodeThatMayBeRoutedTo, rootNetworkedNode, me)) { + if (!isSameNumberOfLinksAwayFromRoot(nodeThatMayBeRoutedTo, rootNetworkedNode, me) + || (nodeThatMayBeRoutedTo.getNodeId().equals(me.getNodeId()) && initialLoad)) { if (nodeIds == null) { nodeIds = new HashSet(); } @@ -128,7 +132,7 @@ public Set routeToNodes(SimpleRouterContext routingContext, DataMetaData && (tableMatches(dataMetaData, TableConstants.SYM_TRIGGER) || tableMatches(dataMetaData, TableConstants.SYM_TRIGGER_ROUTER) || tableMatches(dataMetaData, TableConstants.SYM_ROUTER) || tableMatches( - dataMetaData, TableConstants.SYM_NODE_GROUP_LINK))) { + dataMetaData, TableConstants.SYM_NODE_GROUP_LINK))) { routingContext.getContextCache().put(CTX_KEY_RESYNC_NEEDED, Boolean.TRUE); } diff --git a/symmetric/symmetric-core/src/test/java/org/jumpmind/symmetric/route/ConfigurationChangedDataRouterTest.java b/symmetric/symmetric-core/src/test/java/org/jumpmind/symmetric/route/ConfigurationChangedDataRouterTest.java index 8a8bc7c324..6e1b4f2b92 100644 --- a/symmetric/symmetric-core/src/test/java/org/jumpmind/symmetric/route/ConfigurationChangedDataRouterTest.java +++ b/symmetric/symmetric-core/src/test/java/org/jumpmind/symmetric/route/ConfigurationChangedDataRouterTest.java @@ -125,7 +125,22 @@ public void testRouteRgn2FromCorp() { Assert.assertNotNull(nodeIds); Assert.assertEquals(1, nodeIds.size()); Assert.assertEquals("rgn2", nodeIds.iterator().next()); - } + } + + @Test + public void testConfigurationExtract() { + IDataRouter router = buildTestableRouter( + THREE_TIER_NETWORKED_ROOT.findNetworkedNode("corp").getNode(), THREE_TIER_LINKS, + THREE_TIER_NETWORKED_ROOT); + + Set nodes = new HashSet(); + nodes.add(THREE_TIER_NETWORKED_ROOT.findNetworkedNode("corp").getNode()); + + Collection nodeIds = router.routeToNodes(new SimpleRouterContext(), buildDataMetaData("SYM_NODE", "corp"), nodes, true); + Assert.assertNotNull(nodeIds); + Assert.assertEquals(1, nodeIds.size()); + Assert.assertEquals("corp", nodeIds.iterator().next()); + } @Test public void testRouteRgn1FromCorp() {