diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/service/IConfigurationService.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/service/IConfigurationService.java index 8fb761c9de..4f167f7993 100644 --- a/symmetric-core/src/main/java/org/jumpmind/symmetric/service/IConfigurationService.java +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/service/IConfigurationService.java @@ -107,5 +107,11 @@ public interface IConfigurationService { * @return a map of nodes to redirect to that is keyed by a list of external_ids that should be redirected. */ public Map getRegistrationRedirectMap(); + + /** + * Indicates that this node participates in a master to master link + * @return + */ + public boolean isMasterToMaster(); } \ No newline at end of file diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/ConfigurationService.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/ConfigurationService.java index 8f699559c6..45d58eccfb 100644 --- a/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/ConfigurationService.java +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/ConfigurationService.java @@ -34,6 +34,7 @@ import org.jumpmind.symmetric.db.ISymmetricDialect; import org.jumpmind.symmetric.model.Channel; import org.jumpmind.symmetric.model.ChannelMap; +import org.jumpmind.symmetric.model.Node; import org.jumpmind.symmetric.model.NodeChannel; import org.jumpmind.symmetric.model.NodeGroup; import org.jumpmind.symmetric.model.NodeGroupChannelWindow; @@ -90,6 +91,15 @@ public ConfigurationService(IParameterService parameterService, ISymmetricDialec setSqlMap(new ConfigurationServiceSqlMap(symmetricDialect.getPlatform(), createSqlReplacementTokens())); } + + public boolean isMasterToMaster() { + boolean masterToMaster = false; + Node me = nodeService.findIdentity(); + if (me != null) { + masterToMaster = getNodeGroupLinkFor(me.getNodeGroupId(), me.getNodeGroupId(), false) != null; + } + return masterToMaster; + } public boolean refreshFromDatabase() { Date date1 = sqlTemplate.queryForObject(getSql("selectMaxChannelLastUpdateTime"), diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/NodeService.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/NodeService.java index 587952ef74..cef0881df4 100644 --- a/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/NodeService.java +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/NodeService.java @@ -278,7 +278,7 @@ public void insertNodeSecurity(String id) { String password = nodeIdCreator.generatePassword(new Node(id, null, null)); password = filterPasswordOnSaveIfNeeded(password); sqlTemplate.update(getSql("insertNodeSecuritySql"), new Object[] { id, password, - findIdentity().getNodeId() }); + null }); } public void insertNodeIdentity(String nodeId) { diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/RegistrationService.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/RegistrationService.java index 25d0595c48..28e3dab365 100644 --- a/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/RegistrationService.java +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/RegistrationService.java @@ -506,7 +506,9 @@ protected String openRegistration(Node node, String remoteHost, String remoteAdd if (existingNode == null) { node.setNodeId(nodeId); node.setSyncEnabled(false); - node.setCreatedAtNodeId(me.getNodeId()); + + boolean masterToMaster = configurationService.isMasterToMaster(); + node.setCreatedAtNodeId(masterToMaster ? null: me.getNodeId()); nodeService.save(node); // make sure there isn't a node security row lying around w/out @@ -515,7 +517,7 @@ protected String openRegistration(Node node, String remoteHost, String remoteAdd String password = nodeService.getNodeIdCreator().generatePassword(node); password = filterPasswordOnSaveIfNeeded(password); sqlTemplate.update(getSql("openRegistrationNodeSecuritySql"), new Object[] { - nodeId, password, me.getNodeId() }); + nodeId, password, masterToMaster ? null : me.getNodeId() }); nodeService.insertNodeGroup(node.getNodeGroupId(), null); log.info( "Just opened registration for external id of {} and a node group of {} and a node id of {}", diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/TriggerRouterService.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/TriggerRouterService.java index 99f37fbfde..950b76096b 100644 --- a/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/TriggerRouterService.java +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/TriggerRouterService.java @@ -425,10 +425,10 @@ protected Trigger buildTriggerForSymmetricTable(String tableName) { boolean syncChanges = !TableConstants.getTablesThatDoNotSync(tablePrefix).contains( tableName) && parameterService.is(ParameterConstants.AUTO_SYNC_CONFIGURATION); - boolean syncOnIncoming = parameterService.is( + boolean syncOnIncoming = !configurationService.isMasterToMaster() && (parameterService.is( ParameterConstants.AUTO_SYNC_CONFIGURATION_ON_INCOMING, true) || tableName.equals(TableConstants.getTableName(tablePrefix, - TableConstants.SYM_TABLE_RELOAD_REQUEST)); + TableConstants.SYM_TABLE_RELOAD_REQUEST))); Trigger trigger = new Trigger(); trigger.setTriggerId(tableName); trigger.setSyncOnDelete(syncChanges); diff --git a/symmetric-core/src/main/resources/symmetric-schema.xml b/symmetric-core/src/main/resources/symmetric-schema.xml index 501c29391d..a4865ffca5 100644 --- a/symmetric-core/src/main/resources/symmetric-schema.xml +++ b/symmetric-core/src/main/resources/symmetric-schema.xml @@ -487,7 +487,7 @@ - +