Skip to content

Commit

Permalink
0003205: Enabling File Sync doesn't create triggers on sym_file_snapshot
Browse files Browse the repository at this point in the history
  • Loading branch information
maxwellpettit committed Jul 21, 2017
1 parent b8ba05f commit 9d78878
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 6 deletions.
Expand Up @@ -90,6 +90,9 @@ public class ConfigurationChangedDatabaseWriterFilter extends DatabaseWriterFilt

final String CTX_KEY_REINITIALIZED = "Reinitialized."
+ ConfigurationChangedDatabaseWriterFilter.class.getSimpleName() + hashCode();

final String CTX_KEY_FILE_SYNC_TRIGGERS_NEEDED = "FileSyncTriggers."
+ ConfigurationChangedDatabaseWriterFilter.class.getSimpleName() + hashCode();

private ISymmetricEngine engine;

Expand Down Expand Up @@ -127,6 +130,7 @@ public void afterWrite(DataContext context, Table table, CsvData data) {
recordConflictFlushNeeded(context, table);
recordNodeSecurityFlushNeeded(context, table);
recordNodeFlushNeeded(context, table, data);
recordFileSyncTriggersNeeded(context, table, data);
}

private void recordGroupletFlushNeeded(DataContext context, Table table) {
Expand Down Expand Up @@ -218,6 +222,12 @@ private void recordNodeFlushNeeded(DataContext context, Table table, CsvData dat
}
}
}

private void recordFileSyncTriggersNeeded(DataContext context, Table table, CsvData data) {
if (isFileSyncTriggersNeeded(table, data)) {
context.put(CTX_KEY_FILE_SYNC_TRIGGERS_NEEDED, true);
}
}

private boolean isSyncTriggersNeeded(DataContext context, Table table) {
boolean autoSync = engine.getParameterService().is(ParameterConstants.AUTO_SYNC_TRIGGERS_AFTER_CONFIG_LOADED) ||
Expand All @@ -227,9 +237,7 @@ private boolean isSyncTriggersNeeded(DataContext context, Table table) {
|| matchesTable(table, TableConstants.SYM_TRIGGER_ROUTER)
|| matchesTable(table, TableConstants.SYM_TRIGGER_ROUTER_GROUPLET)
|| matchesTable(table, TableConstants.SYM_GROUPLET_LINK)
|| matchesTable(table, TableConstants.SYM_NODE_GROUP_LINK)
|| matchesTable(table, TableConstants.SYM_FILE_TRIGGER)
|| matchesTable(table, TableConstants.SYM_FILE_TRIGGER_ROUTER));
|| matchesTable(table, TableConstants.SYM_NODE_GROUP_LINK));
}

private boolean isGroupletFlushNeeded(Table table) {
Expand Down Expand Up @@ -259,6 +267,12 @@ private boolean isJobManagerRestartNeeded(Table table, CsvData data) {
&& data.getCsvData(CsvData.ROW_DATA) != null
&& data.getCsvData(CsvData.ROW_DATA).contains("job.");
}

private boolean isFileSyncTriggersNeeded(Table table, CsvData data) {
return matchesTable(table, TableConstants.SYM_PARAMETER)
&& data.getCsvData(CsvData.ROW_DATA) != null
&& data.getCsvData(CsvData.ROW_DATA).contains("file.sync.enable");
}

private boolean isTransformFlushNeeded(Table table) {
return matchesTable(table, TableConstants.SYM_TRANSFORM_COLUMN)
Expand Down Expand Up @@ -321,6 +335,14 @@ public void syncEnded(DataContext context, List<IncomingBatch> batchesProcessed,
context.remove(CTX_KEY_RESYNC_TABLE_NEEDED);
}

if (context.get(CTX_KEY_FILE_SYNC_TRIGGERS_NEEDED) != null
&& parameterService.is(ParameterConstants.AUTO_SYNC_TRIGGERS)) {
log.info("About to syncTriggers for file snapshot because the file sync parameter has changed");
Table fileSnapshotTable = engine.getDatabasePlatform()
.getTableFromCache(TableConstants.getTableName(engine.getTablePrefix(), TableConstants.SYM_FILE_SNAPSHOT), false);
engine.getTriggerRouterService().syncTriggers(fileSnapshotTable, false);
context.remove(CTX_KEY_FILE_SYNC_TRIGGERS_NEEDED);
}
}

@Override
Expand Down
Expand Up @@ -30,6 +30,7 @@
import java.util.Set;

import org.apache.commons.lang.StringUtils;
import org.jumpmind.db.model.Table;
import org.jumpmind.extension.IBuiltInExtensionPoint;
import org.jumpmind.symmetric.ISymmetricEngine;
import org.jumpmind.symmetric.common.Constants;
Expand Down Expand Up @@ -98,6 +99,9 @@ public class ConfigurationChangedDataRouter extends AbstractDataRouter implement

final String CTX_KEY_FLUSH_NODE_GROUP_LINK_NEEDED = "FlushNodeGroupLink."
+ ConfigurationChangedDataRouter.class.getSimpleName() + hashCode();

final String CTX_KEY_FILE_SYNC_TRIGGERS_NEEDED = "FileSyncTriggers."
+ ConfigurationChangedDataRouter.class.getSimpleName() + hashCode();

public final static String KEY = "symconfig";

Expand Down Expand Up @@ -454,10 +458,13 @@ protected void queueSyncTriggers(SimpleRouterContext routingContext, DataMetaDat
}
}
} else if (tableMatches(dataMetaData, TableConstants.SYM_ROUTER)
|| tableMatches(dataMetaData, TableConstants.SYM_NODE_GROUP_LINK)
|| tableMatches(dataMetaData, TableConstants.SYM_FILE_TRIGGER)
|| tableMatches(dataMetaData, TableConstants.SYM_FILE_TRIGGER_ROUTER)) {
|| tableMatches(dataMetaData, TableConstants.SYM_NODE_GROUP_LINK)) {
routingContext.put(CTX_KEY_RESYNC_NEEDED, Boolean.TRUE);
} else if (tableMatches(dataMetaData, TableConstants.SYM_PARAMETER)) {
if (dataMetaData.getData().getCsvData(CsvData.ROW_DATA) != null
&& dataMetaData.getData().getCsvData(CsvData.ROW_DATA).contains("file.sync.enable")) {
routingContext.put(CTX_KEY_FILE_SYNC_TRIGGERS_NEEDED, Boolean.TRUE);
}
}

}
Expand Down Expand Up @@ -649,6 +656,14 @@ public void contextCommitted(SimpleRouterContext routingContext) {
engine.getConfigurationService().clearCache();
engine.getNodeService().flushNodeGroupCache();
}

if (routingContext.get(CTX_KEY_FILE_SYNC_TRIGGERS_NEEDED) != null
&& engine.getParameterService().is(ParameterConstants.AUTO_SYNC_TRIGGERS)) {
log.info("About to syncTriggers for file snapshot because the file sync parameter has changed");
Table fileSnapshotTable = engine.getDatabasePlatform()
.getTableFromCache(TableConstants.getTableName(engine.getTablePrefix(), TableConstants.SYM_FILE_SNAPSHOT), false);
engine.getTriggerRouterService().syncTriggers(fileSnapshotTable, false);
}

}
}
Expand Down

0 comments on commit 9d78878

Please sign in to comment.