Search in sources :

Example 1 with TableReloadRequestKey

use of org.jumpmind.symmetric.model.TableReloadRequestKey in project symmetric-ds by JumpMind.

the class ConfigurationChangedDataRouter method routeToNodes.

@SuppressWarnings("unchecked")
public Set<String> routeToNodes(SimpleRouterContext routingContext, DataMetaData dataMetaData, Set<Node> possibleTargetNodes, boolean initialLoad, boolean initialLoadSelectUsed, TriggerRouter triggerRouter) {
    // the list of nodeIds that we will return
    Set<String> nodeIds = new HashSet<String>();
    // the inbound data
    Map<String, String> columnValues = getDataMap(dataMetaData, engine != null ? engine.getSymmetricDialect() : null);
    Node me = findIdentity();
    if (me != null) {
        NetworkedNode rootNetworkedNode = getRootNetworkNodeFromContext(routingContext);
        if (tableMatches(dataMetaData, TableConstants.SYM_NODE) || tableMatches(dataMetaData, TableConstants.SYM_NODE_SECURITY) || tableMatches(dataMetaData, TableConstants.SYM_NODE_HOST)) {
            /*
                 * If this is sym_node or sym_node_security determine which
                 * nodes it goes to.
                 */
            routeNodeTables(nodeIds, columnValues, rootNetworkedNode, me, routingContext, dataMetaData, possibleTargetNodes, initialLoad);
        } else if (tableMatches(dataMetaData, TableConstants.SYM_TABLE_RELOAD_REQUEST)) {
            String sourceNodeId = columnValues.get("SOURCE_NODE_ID");
            String reloadEnabled = columnValues.get("RELOAD_ENABLED");
            if (me.getNodeId().equals(sourceNodeId)) {
                if ("1".equals(reloadEnabled)) {
                    List<TableReloadRequestKey> list = (List<TableReloadRequestKey>) routingContext.get(CTX_KEY_TABLE_RELOAD_NEEDED);
                    if (list == null) {
                        list = new ArrayList<TableReloadRequestKey>();
                        routingContext.put(CTX_KEY_TABLE_RELOAD_NEEDED, list);
                    }
                    String targetNodeId = columnValues.get("TARGET_NODE_ID");
                    String routerId = columnValues.get("ROUTER_ID");
                    String triggerId = columnValues.get("TRIGGER_ID");
                    list.add(new TableReloadRequestKey(targetNodeId, sourceNodeId, triggerId, routerId, dataMetaData.getData().getSourceNodeId()));
                }
            } else {
                for (Node nodeThatMayBeRoutedTo : possibleTargetNodes) {
                    if (!Constants.DEPLOYMENT_TYPE_REST.equals(nodeThatMayBeRoutedTo.getDeploymentType()) && !nodeThatMayBeRoutedTo.requires13Compatiblity() && nodeThatMayBeRoutedTo.getNodeId().equals(sourceNodeId)) {
                        nodeIds.add(sourceNodeId);
                    }
                }
            }
        } else {
            IConfigurationService configurationService = engine.getConfigurationService();
            for (Node nodeThatMayBeRoutedTo : possibleTargetNodes) {
                if (!Constants.DEPLOYMENT_TYPE_REST.equals(nodeThatMayBeRoutedTo.getDeploymentType()) && !nodeThatMayBeRoutedTo.requires13Compatiblity() && (initialLoad || !isSameNumberOfLinksAwayFromRoot(nodeThatMayBeRoutedTo, rootNetworkedNode, me))) {
                    NodeGroupLink link = configurationService.getNodeGroupLinkFor(me.getNodeGroupId(), nodeThatMayBeRoutedTo.getNodeGroupId(), false);
                    if (initialLoad || (link != null && link.isSyncConfigEnabled())) {
                        nodeIds.add(nodeThatMayBeRoutedTo.getNodeId());
                    }
                }
            }
            if (StringUtils.isBlank(dataMetaData.getData().getSourceNodeId())) {
                queueSyncTriggers(routingContext, dataMetaData, columnValues);
            }
            if (tableMatches(dataMetaData, TableConstants.SYM_CHANNEL)) {
                routingContext.put(CTX_KEY_FLUSH_CHANNELS_NEEDED, Boolean.TRUE);
            }
            if (tableMatches(dataMetaData, TableConstants.SYM_CONFLICT)) {
                routingContext.put(CTX_KEY_FLUSH_CONFLICTS_NEEDED, Boolean.TRUE);
            }
            if (tableMatches(dataMetaData, TableConstants.SYM_LOAD_FILTER)) {
                routingContext.put(CTX_KEY_FLUSH_LOADFILTERS_NEEDED, Boolean.TRUE);
            }
            if (tableMatches(dataMetaData, TableConstants.SYM_PARAMETER)) {
                routingContext.put(CTX_KEY_FLUSH_PARAMETERS_NEEDED, Boolean.TRUE);
                if (me.getExternalId().equals(columnValues.get("EXTERNAL_ID")) && me.getNodeGroupId().equals(columnValues.get("NODE_GROUP_ID"))) {
                    nodeIds.clear();
                }
                if (StringUtils.isBlank(dataMetaData.getData().getSourceNodeId()) && (dataMetaData.getData().getRowData() != null && dataMetaData.getData().getRowData().contains("job."))) {
                    routingContext.put(CTX_KEY_RESTART_JOBMANAGER_NEEDED, Boolean.TRUE);
                }
            }
            if (tableMatches(dataMetaData, TableConstants.SYM_TRANSFORM_COLUMN) || tableMatches(dataMetaData, TableConstants.SYM_TRANSFORM_TABLE)) {
                routingContext.put(CTX_KEY_FLUSH_TRANSFORMS_NEEDED, Boolean.TRUE);
            }
            if (tableMatches(dataMetaData, TableConstants.SYM_EXTENSION)) {
                routingContext.put(CTX_KEY_REFRESH_EXTENSIONS_NEEDED, Boolean.TRUE);
            }
        }
    }
    return nodeIds;
}
Also used : TableReloadRequestKey(org.jumpmind.symmetric.model.TableReloadRequestKey) Node(org.jumpmind.symmetric.model.Node) NetworkedNode(org.jumpmind.symmetric.model.NetworkedNode) ArrayList(java.util.ArrayList) ArrayList(java.util.ArrayList) List(java.util.List) IConfigurationService(org.jumpmind.symmetric.service.IConfigurationService) NodeGroupLink(org.jumpmind.symmetric.model.NodeGroupLink) NetworkedNode(org.jumpmind.symmetric.model.NetworkedNode) HashSet(java.util.HashSet)

Aggregations

ArrayList (java.util.ArrayList)1 HashSet (java.util.HashSet)1 List (java.util.List)1 NetworkedNode (org.jumpmind.symmetric.model.NetworkedNode)1 Node (org.jumpmind.symmetric.model.Node)1 NodeGroupLink (org.jumpmind.symmetric.model.NodeGroupLink)1 TableReloadRequestKey (org.jumpmind.symmetric.model.TableReloadRequestKey)1 IConfigurationService (org.jumpmind.symmetric.service.IConfigurationService)1