From 77b2dbe497316bfa3b2af5b5b6734710a141287c Mon Sep 17 00:00:00 2001 From: Philip Marzullo Date: Fri, 11 Jun 2021 12:48:37 -0400 Subject: [PATCH] 0005023: Sync Triggers should execute successfully in parallel by table --- .../java/org/jumpmind/symmetric/model/Trigger.java | 2 ++ .../symmetric/service/ITriggerRouterService.java | 3 +++ .../symmetric/service/impl/TriggerRouterService.java | 11 +++++++++++ 3 files changed, 16 insertions(+) diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/model/Trigger.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/model/Trigger.java index 026f578c10..31308d6633 100644 --- a/symmetric-core/src/main/java/org/jumpmind/symmetric/model/Trigger.java +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/model/Trigger.java @@ -166,10 +166,12 @@ final public String qualifiedSourceTablePrefix() { public void nullOutBlankFields() { if (StringUtils.isBlank(sourceCatalogName)) { sourceCatalogName = null; + sourceCatalogNameUnescaped = null; isSourceCatalogWildCarded = false; } if (StringUtils.isBlank(sourceSchemaName)) { sourceSchemaName = null; + sourceSchemaNameUnescaped = null; isSourceSchemaWildCarded = false; } syncOnInsertCondition = StringUtils.defaultString(StringUtils.trimToNull(syncOnInsertCondition), DEFAULT_CONDITION); diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/service/ITriggerRouterService.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/service/ITriggerRouterService.java index 5b39f3f572..870aebf3cc 100644 --- a/symmetric-core/src/main/java/org/jumpmind/symmetric/service/ITriggerRouterService.java +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/service/ITriggerRouterService.java @@ -150,6 +150,9 @@ public interface ITriggerRouterService { public void inactivateTriggerHistory(TriggerHistory history); + public TriggerHistory getNewestTriggerHistoryForTrigger(List activeTriggerHistories, String triggerId, String catalogName, + String schemaName, String tableName); + public TriggerHistory getNewestTriggerHistoryForTrigger(String triggerId, String catalogName, String schemaName, String tableName); 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 62eca63894..be59b715be 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 @@ -30,6 +30,7 @@ import java.util.Date; import java.util.HashMap; import java.util.HashSet; +import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; @@ -2063,6 +2064,16 @@ protected TriggerHistory rebuildTriggerIfNecessary(StringBuilder sqlBuffer, if (hist == null && (oldhist == null || (!triggerExists && triggerIsActive) || (isDeadTrigger && forceRebuild))) { insert(newTriggerHist); + for (Iterator it = activeTriggerHistories.iterator(); it.hasNext(); ) { + TriggerHistory triggerHistory = it.next(); + if (StringUtils.equals(triggerHistory.getSourceCatalogName(), newTriggerHist.getSourceCatalogName())) { + if (StringUtils.equals(triggerHistory.getSourceSchemaName(), newTriggerHist.getSourceSchemaName())) { + if (StringUtils.equals(triggerHistory.getSourceTableName(), newTriggerHist.getSourceTableName())) { + it.remove(); + } + } + } + } activeTriggerHistories.add(newTriggerHist); hist = getNewestTriggerHistoryForTrigger(activeTriggerHistories, trigger.getTriggerId(), trigger.isSourceCatalogNameWildCarded() ? table.getCatalog() : trigger.getSourceCatalogNameUnescaped(),