Search in sources :

Example 6 with Router

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

the class AbstractTriggerRouterServiceTest method test12BinaryColumnTypesForPostgres.

@Test
public void test12BinaryColumnTypesForPostgres() {
    ISymmetricDialect dialect = getDbDialect();
    if (DatabaseNamesConstants.POSTGRESQL.equals(dialect.getName())) {
        getSqlTemplate().update(DROP_POSTGRES_BINARY_TYPE);
        getSqlTemplate().update(CREATE_POSTGRES_BINARY_TYPE);
        TriggerRouter trouter = new TriggerRouter();
        Trigger trigger = trouter.getTrigger();
        trigger.setSourceTableName("test_postgres_binary_types");
        trigger.setChannelId(TestConstants.TEST_CHANNEL_ID);
        Router router = trouter.getRouter();
        router.getNodeGroupLink().setSourceNodeGroupId(TestConstants.TEST_ROOT_NODE_GROUP);
        router.getNodeGroupLink().setTargetNodeGroupId(TestConstants.TEST_ROOT_NODE_GROUP);
        getTriggerRouterService().saveTriggerRouter(trouter);
        ITriggerRouterService triggerService = getTriggerRouterService();
        triggerService.syncTriggers();
        Assert.assertEquals("Some triggers must have failed to build.", 0, triggerService.getFailedTriggers().size());
        // new SerialBlob("test 1 2 3".getBytes())
        ISqlTransaction transaction = getSqlTemplate().startSqlTransaction();
        try {
            getSqlTemplate().update(INSERT_POSTGRES_BINARY_TYPE_1, "test 1 2 3".getBytes());
            transaction.commit();
        } finally {
            transaction.close();
        }
        String csvString = getNextDataRow();
        Assert.assertEquals(EXPECTED_INSERT_POSTGRES_BINARY_TYPE_1, csvString);
    }
}
Also used : ISymmetricDialect(org.jumpmind.symmetric.db.ISymmetricDialect) ISqlTransaction(org.jumpmind.db.sql.ISqlTransaction) Trigger(org.jumpmind.symmetric.model.Trigger) ITriggerRouterService(org.jumpmind.symmetric.service.ITriggerRouterService) TriggerRouter(org.jumpmind.symmetric.model.TriggerRouter) Router(org.jumpmind.symmetric.model.Router) TriggerRouter(org.jumpmind.symmetric.model.TriggerRouter) Test(org.junit.Test)

Example 7 with Router

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

the class FileSyncDataRouter method routeToNodes.

public Set<String> routeToNodes(SimpleRouterContext context, DataMetaData dataMetaData, Set<Node> nodes, boolean initialLoad, boolean initialLoadSelectUsed, TriggerRouter triggerRouter) {
    Set<String> nodeIds = new HashSet<String>();
    IFileSyncService fileSyncService = engine.getFileSyncService();
    IRouterService routerService = engine.getRouterService();
    Map<String, String> newData = getNewDataAsString(null, dataMetaData, engine.getSymmetricDialect());
    String triggerId = newData.get("TRIGGER_ID");
    String routerId = newData.get("ROUTER_ID");
    String sourceNodeId = newData.get("LAST_UPDATE_BY");
    String lastEventType = newData.get("LAST_EVENT_TYPE");
    if (triggerId == null) {
        Map<String, String> oldData = getOldDataAsString(null, dataMetaData, engine.getSymmetricDialect());
        triggerId = oldData.get("TRIGGER_ID");
        routerId = oldData.get("ROUTER_ID");
        sourceNodeId = oldData.get("LAST_UPDATE_BY");
        lastEventType = oldData.get("LAST_EVENT_TYPE");
    }
    LastEventType eventType = LastEventType.fromCode(lastEventType);
    FileTriggerRouter fileTriggerRouter = fileSyncService.getFileTriggerRouter(triggerId, routerId);
    if (fileTriggerRouter != null && fileTriggerRouter.isEnabled()) {
        if (fileTriggerRouter.getRouter().getNodeGroupLink().equals(triggerRouter.getRouter().getNodeGroupLink())) {
            if (eventType == null || eventType == LastEventType.DELETE && fileTriggerRouter.getFileTrigger().isSyncOnDelete() || eventType == LastEventType.MODIFY && fileTriggerRouter.getFileTrigger().isSyncOnModified() || eventType == LastEventType.CREATE && fileTriggerRouter.getFileTrigger().isSyncOnCreate()) {
                Router router = fileTriggerRouter.getRouter();
                Map<String, IDataRouter> routers = routerService.getRouters();
                IDataRouter dataRouter = null;
                if (StringUtils.isNotBlank(router.getRouterType())) {
                    dataRouter = routers.get(router.getRouterType());
                }
                if (dataRouter == null) {
                    dataRouter = routers.get("default");
                }
                if (context instanceof ChannelRouterContext) {
                    ((ChannelRouterContext) context).addUsedDataRouter(dataRouter);
                }
                dataMetaData.setRouter(router);
                Set<String> dataRouterNodeIds = dataRouter.routeToNodes(context, dataMetaData, nodes, false, false, triggerRouter);
                if (dataRouterNodeIds != null) {
                    nodeIds.addAll(dataRouterNodeIds);
                }
                nodeIds.remove(sourceNodeId);
            }
        }
    } else {
        log.error("Could not find a trigger router with a trigger_id of {} and a router_id of {}.  The file snapshot will not be routed", triggerId, routerId);
    }
    return nodeIds;
}
Also used : LastEventType(org.jumpmind.symmetric.model.FileSnapshot.LastEventType) FileTriggerRouter(org.jumpmind.symmetric.model.FileTriggerRouter) IFileSyncService(org.jumpmind.symmetric.service.IFileSyncService) FileTriggerRouter(org.jumpmind.symmetric.model.FileTriggerRouter) Router(org.jumpmind.symmetric.model.Router) TriggerRouter(org.jumpmind.symmetric.model.TriggerRouter) HashSet(java.util.HashSet) IRouterService(org.jumpmind.symmetric.service.IRouterService)

Example 8 with Router

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

the class TriggerRouterService method buildTriggerRoutersForSymmetricTables.

protected TriggerRouter buildTriggerRoutersForSymmetricTables(String version, Trigger trigger, NodeGroupLink nodeGroupLink) {
    TriggerRouter triggerRouter = new TriggerRouter();
    triggerRouter.setTrigger(trigger);
    Router router = triggerRouter.getRouter();
    router.setRouterId(buildSymmetricTableRouterId(trigger.getTriggerId(), nodeGroupLink.getSourceNodeGroupId(), nodeGroupLink.getTargetNodeGroupId()));
    if (TableConstants.getTableName(tablePrefix, TableConstants.SYM_FILE_SNAPSHOT).equals(trigger.getSourceTableName())) {
        router.setRouterType(FileSyncDataRouter.ROUTER_TYPE);
    } else {
        router.setRouterType(ConfigurationChangedDataRouter.ROUTER_TYPE);
    }
    router.setNodeGroupLink(nodeGroupLink);
    router.setLastUpdateTime(trigger.getLastUpdateTime());
    triggerRouter.setLastUpdateTime(trigger.getLastUpdateTime());
    return triggerRouter;
}
Also used : TriggerRouter(org.jumpmind.symmetric.model.TriggerRouter) TriggerRouter(org.jumpmind.symmetric.model.TriggerRouter) ConfigurationChangedDataRouter(org.jumpmind.symmetric.route.ConfigurationChangedDataRouter) FileSyncDataRouter(org.jumpmind.symmetric.route.FileSyncDataRouter) Router(org.jumpmind.symmetric.model.Router)

Example 9 with Router

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

the class TriggerRouterService method getRouters.

public List<Router> getRouters(boolean replaceVariables) {
    List<Router> routers = sqlTemplate.query(getSql("select ", "selectRoutersColumnList", "selectRoutersSql"), new RouterMapper(configurationService.getNodeGroupLinks(false)));
    if (replaceVariables) {
        @SuppressWarnings({ "rawtypes", "unchecked" }) Map<String, String> replacements = (Map) parameterService.getAllParameters();
        for (Router router : routers) {
            router.setTargetCatalogName(FormatUtils.replaceTokens(router.getTargetCatalogName(), replacements, true));
            router.setTargetSchemaName(FormatUtils.replaceTokens(router.getTargetSchemaName(), replacements, true));
            router.setTargetTableName(FormatUtils.replaceTokens(router.getTargetTableName(), replacements, true));
        }
    }
    return routers;
}
Also used : TriggerRouter(org.jumpmind.symmetric.model.TriggerRouter) ConfigurationChangedDataRouter(org.jumpmind.symmetric.route.ConfigurationChangedDataRouter) FileSyncDataRouter(org.jumpmind.symmetric.route.FileSyncDataRouter) Router(org.jumpmind.symmetric.model.Router) Map(java.util.Map) HashMap(java.util.HashMap)

Example 10 with Router

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

the class TriggerRouterService method getRouterById.

public Router getRouterById(String routerId, boolean refreshCache) {
    final long routerCacheTimeoutInMs = parameterService.getLong(ParameterConstants.CACHE_TIMEOUT_TRIGGER_ROUTER_IN_MS);
    Map<String, Router> cache = this.routersCache;
    if (cache == null || refreshCache || System.currentTimeMillis() - this.routersCacheTime > routerCacheTimeoutInMs) {
        synchronized (cacheLock) {
            this.routersCacheTime = System.currentTimeMillis();
            List<Router> routers = getRouters();
            cache = new HashMap<String, Router>(routers.size());
            for (Router router : routers) {
                cache.put(router.getRouterId(), router);
            }
            this.routersCache = cache;
        }
    }
    return cache.get(routerId);
}
Also used : TriggerRouter(org.jumpmind.symmetric.model.TriggerRouter) ConfigurationChangedDataRouter(org.jumpmind.symmetric.route.ConfigurationChangedDataRouter) FileSyncDataRouter(org.jumpmind.symmetric.route.FileSyncDataRouter) Router(org.jumpmind.symmetric.model.Router)

Aggregations

Router (org.jumpmind.symmetric.model.Router)37 Test (org.junit.Test)25 TriggerRouter (org.jumpmind.symmetric.model.TriggerRouter)23 Trigger (org.jumpmind.symmetric.model.Trigger)13 Node (org.jumpmind.symmetric.model.Node)12 HashSet (java.util.HashSet)11 Table (org.jumpmind.db.model.Table)10 TriggerHistory (org.jumpmind.symmetric.model.TriggerHistory)10 Data (org.jumpmind.symmetric.model.Data)9 DataMetaData (org.jumpmind.symmetric.model.DataMetaData)9 NodeChannel (org.jumpmind.symmetric.model.NodeChannel)9 ArrayList (java.util.ArrayList)8 ConfigurationChangedDataRouter (org.jumpmind.symmetric.route.ConfigurationChangedDataRouter)7 FileSyncDataRouter (org.jumpmind.symmetric.route.FileSyncDataRouter)7 FileTriggerRouter (org.jumpmind.symmetric.model.FileTriggerRouter)6 FileTrigger (org.jumpmind.symmetric.model.FileTrigger)5 ITriggerRouterService (org.jumpmind.symmetric.service.ITriggerRouterService)5 HashMap (java.util.HashMap)3 ISymmetricDialect (org.jumpmind.symmetric.db.ISymmetricDialect)3 AbstractFileParsingRouter (org.jumpmind.symmetric.route.AbstractFileParsingRouter)3