Skip to content

Commit

Permalink
0001110: Triggers not removed when sym_trigger source_ catalog, schem…
Browse files Browse the repository at this point in the history
…a or table name changed
  • Loading branch information
chenson42 committed Mar 14, 2013
1 parent c8e9462 commit cec2802
Show file tree
Hide file tree
Showing 12 changed files with 50 additions and 52 deletions.
Expand Up @@ -44,6 +44,8 @@ public interface ITriggerRouterService {
public List<TriggerHistory> getActiveTriggerHistories(String tableName);

public List<TriggerRouter> getTriggerRouters();

public List<TriggerRouter> getTriggerRoutersFor(String tableName, String sourceNodeGroupId);

/**
* Return a list of triggers used when extraction configuration data during
Expand Down Expand Up @@ -130,7 +132,7 @@ public interface ITriggerRouterService {

public void inactivateTriggerHistory(TriggerHistory history);

public TriggerHistory getNewestTriggerHistoryForTrigger(String triggerId, String catalogName, String schemaName, String tableName);
public TriggerHistory getNewestTriggerHistoryForTrigger(String triggerId);

public TriggerHistory getTriggerHistory(int historyId);

Expand Down
Expand Up @@ -83,7 +83,9 @@ public boolean refreshFromDatabase() {

if (date != null) {
if (lastUpdateTime == null || lastUpdateTime.before(date)) {
log.info("Newer channel or group settings were detected");
if (lastUpdateTime != null) {
log.info("Newer channel or group settings were detected");
}
lastUpdateTime = date;
clearCache();
return true;
Expand Down
Expand Up @@ -174,8 +174,7 @@ public void extractConfigurationStandalone(Node targetNode, Writer writer,
for (int i = triggerRouters.size() - 1; i >= 0; i--) {
TriggerRouter triggerRouter = triggerRouters.get(i);
TriggerHistory triggerHistory = triggerRouterService.getNewestTriggerHistoryForTrigger(
triggerRouter.getTrigger().getTriggerId(), null, null, triggerRouter
.getTrigger().getSourceTableName());
triggerRouter.getTrigger().getTriggerId());
if (triggerHistory == null) {
Trigger trigger = triggerRouter.getTrigger();
Table table = symmetricDialect.getPlatform().getTableFromCache(
Expand Down Expand Up @@ -203,7 +202,7 @@ public void extractConfigurationStandalone(Node targetNode, Writer writer,
for (int i = 0; i < triggerRouters.size(); i++) {
TriggerRouter triggerRouter = triggerRouters.get(i);
TriggerHistory triggerHistory = triggerRouterService.getNewestTriggerHistoryForTrigger(
triggerRouter.getTrigger().getTriggerId(), null, null, null);
triggerRouter.getTrigger().getTriggerId());
if (triggerHistory == null) {
Trigger trigger = triggerRouter.getTrigger();
triggerHistory = new TriggerHistory(
Expand Down Expand Up @@ -1009,9 +1008,7 @@ public SelectFromTableEvent(Node node, TriggerRouter triggerRouter,
this.triggerRouter = triggerRouter;
Trigger trigger = triggerRouter.getTrigger();
this.triggerHistory = triggerHistory != null ? triggerHistory : triggerRouterService
.getNewestTriggerHistoryForTrigger(trigger.getTriggerId(),
trigger.getSourceCatalogName(), trigger.getSourceSchemaName(),
trigger.getSourceTableName());
.getNewestTriggerHistoryForTrigger(trigger.getTriggerId());
}

public SelectFromTableEvent(Data data) {
Expand Down
Expand Up @@ -178,7 +178,9 @@ public boolean refreshFromDatabase() {
Date date = sqlTemplate.queryForObject(getSql("selectMaxLastUpdateTime"), Date.class);
if (date != null) {
if (lastUpdateTime == null || lastUpdateTime.before(date)) {
log.info("Newer conflict settings were detected");
if (lastUpdateTime != null) {
log.info("Newer conflict settings were detected");
}
lastUpdateTime = date;
clearCache();
return true;
Expand Down
Expand Up @@ -406,13 +406,12 @@ public void insertReloadEvents(Node targetNode, boolean reverse) {

private TriggerHistory lookupTriggerHistory(Trigger trigger) {
TriggerHistory history = engine.getTriggerRouterService().getNewestTriggerHistoryForTrigger(
trigger.getTriggerId(), trigger.getSourceCatalogName(),
trigger.getSourceSchemaName(), trigger.getSourceTableName());
trigger.getTriggerId());

if (history == null) {
engine.getTriggerRouterService().syncTriggers();
history = engine.getTriggerRouterService().getNewestTriggerHistoryForTrigger(
trigger.getTriggerId(), null, null, null);
trigger.getTriggerId());
}

if (history == null) {
Expand Down Expand Up @@ -952,8 +951,7 @@ protected Data createData(ISqlTransaction transaction, Trigger trigger, String w
Data data = null;
if (trigger != null) {
TriggerHistory triggerHistory = engine.getTriggerRouterService().getNewestTriggerHistoryForTrigger(
trigger.getTriggerId(), trigger.getSourceCatalogName(),
trigger.getSourceSchemaName(), trigger.getSourceTableName());
trigger.getTriggerId());
if (triggerHistory == null) {
triggerHistory = engine.getTriggerRouterService().findTriggerHistory(trigger.getSourceCatalogName(),
trigger.getSourceSchemaName(), trigger
Expand Down
Expand Up @@ -69,7 +69,9 @@ public boolean refreshFromDatabase() {

if (date != null) {
if (lastUpdateTime == null || lastUpdateTime.before(date)) {
log.info("Newer grouplet settings were detected");
if (lastUpdateTime != null) {
log.info("Newer grouplet settings were detected");
}
lastUpdateTime = date;
clearCache();
return true;
Expand Down
Expand Up @@ -186,7 +186,9 @@ public boolean refreshFromDatabase() {
Date date = sqlTemplate.queryForObject(getSql("selectMaxLastUpdateTime"), Date.class);
if (date != null) {
if (lastUpdateTime == null || lastUpdateTime.before(date)) {
log.info("Newer filter settings were detected");
if (lastUpdateTime != null) {
log.info("Newer filter settings were detected");
}
lastUpdateTime = date;
clearCache();
return true;
Expand Down
Expand Up @@ -68,7 +68,9 @@ public boolean refreshFromDatabase() {
Date date = sqlTemplate.queryForObject(sql.getSql("selectMaxLastUpdateTime"), Date.class);
if (date != null) {
if (lastUpdateTime == null || lastUpdateTime.before(date)) {
log.info("Newer database parameters were detected");
if (lastUpdateTime != null) {
log.info("Newer database parameters were detected");
}
lastUpdateTime = date;
rereadParameters();
return true;
Expand Down
Expand Up @@ -48,7 +48,9 @@ public boolean refreshFromDatabase() {

if (date != null) {
if (lastUpdateTime == null || lastUpdateTime.before(date)) {
log.info("Newer transform settings were detected");
if (lastUpdateTime != null) {
log.info("Newer transform settings were detected");
}
lastUpdateTime = date;
clearCache();
return true;
Expand Down
Expand Up @@ -116,7 +116,9 @@ public boolean refreshFromDatabase() {

if (date != null) {
if (lastUpdateTime == null || lastUpdateTime.before(date)) {
log.info("Newer trigger router settings were detected");
if (lastUpdateTime != null) {
log.info("Newer trigger router settings were detected");
}
lastUpdateTime = date;
clearCache();
return true;
Expand All @@ -129,7 +131,7 @@ public List<Trigger> getTriggers() {
return sqlTemplate.query("select "
+ getSql("selectTriggersColumnList", "selectTriggersSql"), new TriggerMapper());
}

public boolean isTriggerBeingUsed(String triggerId) {
return sqlTemplate.queryForInt(getSql("countTriggerRoutersByTriggerIdSql"), triggerId) > 0;
}
Expand Down Expand Up @@ -271,24 +273,9 @@ protected List<TriggerHistory> getActiveTriggerHistories(Trigger trigger) {
return list;
}

public TriggerHistory getNewestTriggerHistoryForTrigger(String triggerId, String catalogName,
String schemaName, String tableName) {
List<TriggerHistory> triggerHistories = sqlTemplate.query(getSql("latestTriggerHistSql"),
new TriggerHistoryMapper(), triggerId, tableName);
for (TriggerHistory triggerHistory : triggerHistories) {
if ((StringUtils.isBlank(catalogName) && StringUtils.isBlank(triggerHistory
.getSourceCatalogName()))
|| (StringUtils.isNotBlank(catalogName) && catalogName.equals(triggerHistory
.getSourceCatalogName()))) {
if ((StringUtils.isBlank(schemaName) && StringUtils.isBlank(triggerHistory
.getSourceSchemaName()))
|| (StringUtils.isNotBlank(schemaName) && schemaName.equals(triggerHistory
.getSourceSchemaName()))) {
return triggerHistory;
}
}
}
return null;
public TriggerHistory getNewestTriggerHistoryForTrigger(String triggerId) {
return sqlTemplate.queryForObject(getSql("latestTriggerHistSql"),
new TriggerHistoryMapper(), triggerId);
}

/**
Expand Down Expand Up @@ -700,6 +687,18 @@ public TriggerRouter findTriggerRouterById(String triggerId, String routerId) {
return null;
}
}

public List<TriggerRouter> getTriggerRoutersFor(String tableName, String sourceNodeGroupId) {
List<TriggerRouter> results = new ArrayList<TriggerRouter>();
List<TriggerRouter> all = getTriggerRouters();
for (TriggerRouter triggerRouter : all) {
if (triggerRouter.getRouter().getNodeGroupLink().getSourceNodeGroupId().equals(sourceNodeGroupId) &&
triggerRouter.getTrigger().getSourceTableName().equals(tableName)) {
results.add(triggerRouter);
}
}
return results;
}

public Map<String, List<TriggerRouter>> getTriggerRoutersByChannel(String nodeGroupId) {
final Map<String, List<TriggerRouter>> retMap = new HashMap<String, List<TriggerRouter>>();
Expand Down Expand Up @@ -1193,11 +1192,7 @@ protected void updateOrCreateDatabaseTriggers(Trigger trigger, Table table,
}

TriggerHistory latestHistoryBeforeRebuild = getNewestTriggerHistoryForTrigger(
trigger.getTriggerId(),
trigger.getSourceCatalogName(),
trigger.getSourceSchemaName(),
trigger.isSourceTableNameWildCarded() ? table.getName() : trigger
.getSourceTableName());
trigger.getTriggerId());

boolean forceRebuildOfTriggers = false;
if (latestHistoryBeforeRebuild == null) {
Expand Down Expand Up @@ -1331,11 +1326,7 @@ protected TriggerHistory rebuildTriggerIfNecessary(StringBuilder sqlBuffer,
&& (oldhist == null || (!triggerExists && triggerIsActive) || (isDeadTrigger && forceRebuild))) {
insert(newTriggerHist);
hist = getNewestTriggerHistoryForTrigger(
trigger.getTriggerId(),
trigger.getSourceCatalogName(),
trigger.getSourceSchemaName(),
trigger.isSourceTableNameWildCarded() ? table.getName() : trigger
.getSourceTableName());
trigger.getTriggerId());
}

try {
Expand Down
Expand Up @@ -88,7 +88,7 @@ public TriggerRouterServiceSqlMap(IDatabasePlatform platform,
+ "select "
+ " trigger_hist_id,trigger_id,source_table_name,table_hash,create_time,pk_column_names,column_names,last_trigger_build_reason,name_for_delete_trigger,name_for_insert_trigger,name_for_update_trigger,source_schema_name,source_catalog_name,trigger_row_hash,error_message "
+ " from $(trigger_hist) where trigger_hist_id = (select max(trigger_hist_id) "
+ " from $(trigger_hist) where trigger_id=? and source_table_name=?) ");
+ " from $(trigger_hist) where trigger_id=?) ");

putSql("triggerHistSql",
""
Expand Down
Expand Up @@ -161,9 +161,7 @@ public void testInitialLoadSql() throws Exception {
new Node("1", null, "1.0"),
triggerRouter,
table,
triggerRouterService.getNewestTriggerHistoryForTrigger(trigger.getTriggerId(),
trigger.getSourceCatalogName(), trigger.getSourceSchemaName(),
trigger.getSourceTableName()),
triggerRouterService.getNewestTriggerHistoryForTrigger(trigger.getTriggerId()),
getConfigurationService().getChannel(triggerRouter.getTrigger().getChannelId()));
List<String> csvStrings = getSqlTemplate().query(sql, new StringMapper());
assertTrue(csvStrings.size() > 0);
Expand Down

0 comments on commit cec2802

Please sign in to comment.