use of org.jumpmind.symmetric.service.ITriggerRouterService in project symmetric-ds by JumpMind.
the class AbstractTriggerRouterServiceTest method test02SchemaSync.
@Test
public void test02SchemaSync() throws Exception {
ITriggerRouterService service = getTriggerRouterService();
// baseline
service.syncTriggers();
// get the current number of hist rows
int origCount = getTriggerHistTableRowCount();
Thread.sleep(1000);
Calendar lastUpdateTime = Calendar.getInstance();
// force the triggers to rebuild
int expectedCount = origCount + getSqlTemplate().update("update sym_trigger set last_update_time=? where trigger_id in (select trigger_id from sym_trigger_router where router_id in (select router_id from sym_router where source_node_group_id=?))", new Object[] { lastUpdateTime.getTime(), TestConstants.TEST_ROOT_NODE_GROUP });
service.syncTriggers();
Assert.assertEquals("Wrong trigger_hist row count. The original count was " + origCount + ".", expectedCount, getTriggerHistTableRowCount());
}
use of org.jumpmind.symmetric.service.ITriggerRouterService in project symmetric-ds by JumpMind.
the class AbstractTriggerRouterServiceTest method test03SchemaSyncNoChanges.
@Test
public void test03SchemaSyncNoChanges() throws Exception {
ITriggerRouterService service = getTriggerRouterService();
service.syncTriggers();
int origCount = getTriggerHistTableRowCount();
Thread.sleep(1000);
service.syncTriggers();
Assert.assertEquals("Wrong trigger_hist row count. No new triggers should have been generated.", origCount, getTriggerHistTableRowCount());
}
use of org.jumpmind.symmetric.service.ITriggerRouterService in project symmetric-ds by JumpMind.
the class AbstractTriggerRouterServiceTest method test11BinaryColumnTypesForOracle.
@Test
public void test11BinaryColumnTypesForOracle() {
ISymmetricDialect dialect = getDbDialect();
if (DatabaseNamesConstants.ORACLE.equals(dialect.getName())) {
getSqlTemplate().update(CREATE_ORACLE_BINARY_TYPE);
TriggerRouter trouter = new TriggerRouter();
Trigger trigger = trouter.getTrigger();
trigger.setSourceTableName("test_oracle_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());
getSqlTemplate().update(INSERT_ORACLE_BINARY_TYPE_1);
String csvString = getNextDataRow();
Assert.assertEquals(EXPECTED_INSERT_ORALCE_BINARY_TYPE_1, csvString);
}
}
use of org.jumpmind.symmetric.service.ITriggerRouterService 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);
}
}
use of org.jumpmind.symmetric.service.ITriggerRouterService in project symmetric-ds by JumpMind.
the class RestService method sendSchemaImpl.
private SendSchemaResponse sendSchemaImpl(ISymmetricEngine engine, SendSchemaRequest request) {
IConfigurationService configurationService = engine.getConfigurationService();
INodeService nodeService = engine.getNodeService();
ITriggerRouterService triggerRouterService = engine.getTriggerRouterService();
IDataService dataService = engine.getDataService();
SendSchemaResponse response = new SendSchemaResponse();
org.jumpmind.symmetric.model.Node identity = nodeService.findIdentity();
if (identity != null) {
List<org.jumpmind.symmetric.model.Node> nodesToSendTo = new ArrayList<org.jumpmind.symmetric.model.Node>();
List<String> nodeIds = request.getNodeIdsToSendTo();
if (nodeIds == null || nodeIds.size() == 0) {
nodeIds = new ArrayList<String>();
String nodeGroupIdToSendTo = request.getNodeGroupIdToSendTo();
if (isNotBlank(nodeGroupIdToSendTo)) {
NodeGroupLink link = configurationService.getNodeGroupLinkFor(identity.getNodeGroupId(), nodeGroupIdToSendTo, false);
if (link != null) {
Collection<org.jumpmind.symmetric.model.Node> nodes = nodeService.findEnabledNodesFromNodeGroup(nodeGroupIdToSendTo);
nodesToSendTo.addAll(nodes);
} else {
log.warn("Could not send schema to all nodes in the '" + nodeGroupIdToSendTo + "' node group. No node group link exists");
}
} else {
log.warn("Could not send schema to nodes. There are none that were provided and the nodeGroupIdToSendTo was also not provided");
}
} else {
for (String nodeIdToValidate : nodeIds) {
org.jumpmind.symmetric.model.Node node = nodeService.findNode(nodeIdToValidate);
if (node != null) {
NodeGroupLink link = configurationService.getNodeGroupLinkFor(identity.getNodeGroupId(), node.getNodeGroupId(), false);
if (link != null) {
nodesToSendTo.add(node);
} else {
log.warn("Could not send schema to node '" + nodeIdToValidate + "'. No node group link exists");
}
} else {
log.warn("Could not send schema to node '" + nodeIdToValidate + "'. It was not present in the database");
}
}
}
Map<String, List<TableName>> results = response.getNodeIdsSentTo();
List<String> nodeIdsToSendTo = toNodeIds(nodesToSendTo);
for (String nodeId : nodeIdsToSendTo) {
results.put(nodeId, new ArrayList<TableName>());
}
if (nodesToSendTo.size() > 0) {
List<TableName> tablesToSend = request.getTablesToSend();
List<TriggerRouter> triggerRouters = triggerRouterService.getTriggerRouters(true, false);
for (TriggerRouter triggerRouter : triggerRouters) {
Trigger trigger = triggerRouter.getTrigger();
NodeGroupLink link = triggerRouter.getRouter().getNodeGroupLink();
if (link.getSourceNodeGroupId().equals(identity.getNodeGroupId())) {
for (org.jumpmind.symmetric.model.Node node : nodesToSendTo) {
if (link.getTargetNodeGroupId().equals(node.getNodeGroupId())) {
if (tablesToSend == null || tablesToSend.size() == 0 || contains(trigger, tablesToSend)) {
dataService.sendSchema(node.getNodeId(), trigger.getSourceCatalogName(), trigger.getSourceSchemaName(), trigger.getSourceTableName(), false);
results.get(node.getNodeId()).add(new TableName(trigger.getSourceCatalogName(), trigger.getSourceSchemaName(), trigger.getSourceTableName()));
}
}
}
}
}
}
}
return response;
}
Aggregations