From 1319a98f75af20b329fee802bc705e26144ce965 Mon Sep 17 00:00:00 2001 From: "Hicks, Josh" Date: Tue, 12 Dec 2017 13:26:56 -0500 Subject: [PATCH] 0003335: Extension point during reloads to adjust the active trigger histories --- .../load/DefaultReloadGenerator.java | 24 +++++++++++++++++++ .../symmetric/load/IReloadGenerator.java | 13 ++++++++++ .../symmetric/service/impl/RouterService.java | 21 +++++++++++----- 3 files changed, 52 insertions(+), 6 deletions(-) create mode 100644 symmetric-core/src/main/java/org/jumpmind/symmetric/load/DefaultReloadGenerator.java create mode 100644 symmetric-core/src/main/java/org/jumpmind/symmetric/load/IReloadGenerator.java diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/load/DefaultReloadGenerator.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/load/DefaultReloadGenerator.java new file mode 100644 index 0000000000..5c5f7ecb54 --- /dev/null +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/load/DefaultReloadGenerator.java @@ -0,0 +1,24 @@ +package org.jumpmind.symmetric.load; + +import java.util.List; + +import org.jumpmind.extension.IBuiltInExtensionPoint; +import org.jumpmind.symmetric.ISymmetricEngine; +import org.jumpmind.symmetric.model.Node; +import org.jumpmind.symmetric.model.TriggerHistory; + +public class DefaultReloadGenerator implements IReloadGenerator, IBuiltInExtensionPoint { + + ISymmetricEngine engine; + + @Override + public void setSymmetricEngine(ISymmetricEngine engine) { + this.engine = engine; + } + + @Override + public List getActiveTriggerHistories(Node targetNode) { + return engine.getTriggerRouterService().getActiveTriggerHistories(); + } + +} diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/load/IReloadGenerator.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/load/IReloadGenerator.java new file mode 100644 index 0000000000..33dd8e7bdf --- /dev/null +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/load/IReloadGenerator.java @@ -0,0 +1,13 @@ +package org.jumpmind.symmetric.load; + +import java.util.List; + +import org.jumpmind.extension.IExtensionPoint; +import org.jumpmind.symmetric.ext.ISymmetricEngineAware; +import org.jumpmind.symmetric.model.Node; +import org.jumpmind.symmetric.model.TriggerHistory; + +public interface IReloadGenerator extends IExtensionPoint, ISymmetricEngineAware { + + List getActiveTriggerHistories(Node targetNode); +} 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 56b4025455..f3b462c9f9 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 @@ -47,6 +47,7 @@ import org.jumpmind.symmetric.common.Constants; import org.jumpmind.symmetric.common.ParameterConstants; import org.jumpmind.symmetric.io.data.DataEventType; +import org.jumpmind.symmetric.load.IReloadGenerator; import org.jumpmind.symmetric.model.Channel; import org.jumpmind.symmetric.model.Data; import org.jumpmind.symmetric.model.DataGap; @@ -246,7 +247,6 @@ protected void insertInitialLoadEvents() { .getRegistrationTime() != null)) { List nodeSecurities = findNodesThatAreReadyForInitialLoad(); - List activeHistories = triggerRouterService.getActiveTriggerHistories(); Map> triggerRoutersByTargetNodeGroupId = new HashMap>(); if (nodeSecurities != null && nodeSecurities.size() > 0) { @@ -257,6 +257,8 @@ protected void insertInitialLoadEvents() { for (NodeSecurity security : nodeSecurities) { + List activeHistories = triggerRouterService.getActiveTriggerHistories(); + if (activeHistories.size() > 0) { Node targetNode = engine.getNodeService().findNode(security.getNodeId()); boolean thisMySecurityRecord = security.getNodeId().equals( @@ -312,7 +314,7 @@ protected void insertInitialLoadEvents() { } } - processTableRequestLoads(identity, processInfo, activeHistories, triggerRoutersByTargetNodeGroupId); + processTableRequestLoads(identity, processInfo, triggerRoutersByTargetNodeGroupId); } } @@ -324,22 +326,28 @@ protected void insertInitialLoadEvents() { } - public void processTableRequestLoads(Node source, ProcessInfo processInfo, List activeHistories, Map> triggerRoutersByTargetNodeGroupId) { + public void processTableRequestLoads(Node source, ProcessInfo processInfo, Map> triggerRoutersByTargetNodeGroupId) { List loadsToProcess = engine.getDataService().getTableReloadRequestToProcess(source.getNodeId()); if (loadsToProcess.size() > 0) { - processInfo.setStatus(ProcessInfo.Status.CREATING); + processInfo.setStatus(ProcessInfo.Status.CREATING); log.info("Found " + loadsToProcess.size() + " table reload requests to process."); gapDetector.setFullGapAnalysis(true); Map> requestsSplitByLoad = new HashMap>(); for (TableReloadRequest load : loadsToProcess) { + Node targetNode = engine.getNodeService().findNode(load.getTargetNodeId()); + if (load.isFullLoadRequest() && isValidLoadTarget(load.getTargetNodeId())) { List fullLoad = new ArrayList(); fullLoad.add(load); + List triggerRouters = engine.getTriggerRouterService() + .getAllTriggerRoutersForReloadForCurrentNode(parameterService.getNodeGroupId(), targetNode.getNodeGroupId()); + + List activeHistories = extensionService.getExtensionPoint(IReloadGenerator.class).getActiveTriggerHistories(targetNode); + engine.getDataService().insertReloadEvents( - engine.getNodeService().findNode(load.getTargetNodeId()), - false, fullLoad, processInfo); + targetNode,false, fullLoad, processInfo, activeHistories, triggerRouters); } else { NodeSecurity targetNodeSecurity = engine.getNodeService().findNodeSecurity(load.getTargetNodeId()); @@ -367,6 +375,7 @@ public void processTableRequestLoads(Node source, ProcessInfo processInfo, List triggerRouters = triggerRouterService.getAllTriggerRoutersForReloadForCurrentNode(parameterService.getNodeGroupId(), targetNode.getNodeGroupId()); triggerRoutersByTargetNodeGroupId.put(targetNode.getNodeGroupId(), triggerRouters); } + List activeHistories = extensionService.getExtensionPoint(IReloadGenerator.class).getActiveTriggerHistories(targetNode); engine.getDataService().insertReloadEvents( targetNode,