Skip to content

Commit

Permalink
Clean up registration/root server startup.
Browse files Browse the repository at this point in the history
  • Loading branch information
chenson42 committed Dec 13, 2007
1 parent a3ce90b commit 3e82b22
Show file tree
Hide file tree
Showing 5 changed files with 41 additions and 25 deletions.
Expand Up @@ -74,4 +74,7 @@ public Map<String, List<Trigger>> getTriggersByChannelFor(

public Map<Long, TriggerHistory> getHistoryRecords();

public boolean isRegistrationServer();


}
Expand Up @@ -65,17 +65,17 @@ public class BootstrapService extends AbstractService implements IBootstrapServi
private ITransportManager transportManager;

private IDataLoaderService dataLoaderService;

private IDataService dataService;

private IUpgradeService upgradeService;

private RandomTimeSlot randomSleepTimeSlot;

private boolean autoConfigureDatabase = true;

private boolean autoUpgrade = true;

private String triggerPrefix;

public void init() {
Expand All @@ -88,7 +88,7 @@ public void init() {
} else {
logger.info("Symmetric is not configured to auto create the database.");
}

if (upgradeService.isUpgradeNecessary()) {
if (autoUpgrade) {
upgradeService.upgrade();
Expand Down Expand Up @@ -119,9 +119,12 @@ private void removeInactiveTriggers() {
TriggerHistory history = configurationService.getLatestHistoryRecordFor(trigger.getTriggerId());
if (history != null) {
logger.info("About to remove triggers for inactivated table: " + history.getSourceTableName());
dbDialect.removeTrigger(history.getSourceSchemaName(), history.getNameForInsertTrigger(), trigger.getSourceTableName());
dbDialect.removeTrigger(history.getSourceSchemaName(), history.getNameForDeleteTrigger(), trigger.getSourceTableName());
dbDialect.removeTrigger(history.getSourceSchemaName(), history.getNameForUpdateTrigger(), trigger.getSourceTableName());
dbDialect.removeTrigger(history.getSourceSchemaName(), history.getNameForInsertTrigger(), trigger
.getSourceTableName());
dbDialect.removeTrigger(history.getSourceSchemaName(), history.getNameForDeleteTrigger(), trigger
.getSourceTableName());
dbDialect.removeTrigger(history.getSourceSchemaName(), history.getNameForUpdateTrigger(), trigger
.getSourceTableName());
configurationService.inactivateTriggerHistory(history);
} else {
logger.info("A trigger was inactivated that had not yet been built. Taking no action.");
Expand All @@ -139,8 +142,8 @@ private void updateOrCreateTriggers() {
try {
TriggerReBuildReason reason = TriggerReBuildReason.NEW_TRIGGERS;

Table table = dbDialect.getMetaDataFor(dbDialect.getDefaultCatalog(), trigger.getSourceSchemaName(), trigger
.getSourceTableName(), false);
Table table = dbDialect.getMetaDataFor(dbDialect.getDefaultCatalog(), trigger.getSourceSchemaName(),
trigger.getSourceTableName(), false);

if (table != null) {
TriggerHistory latestHistoryBeforeRebuild = configurationService.getLatestHistoryRecordFor(trigger
Expand Down Expand Up @@ -189,7 +192,7 @@ latestHistoryBeforeRebuild, rebuildTriggerIfNecessary(forceRebuildOfTriggers,
public void register() {
boolean registered = false;
Node node = nodeService.findIdentity();
if (node == null) {
if (node == null && !configurationService.isRegistrationServer()) {
// If we cannot contact the server to register, we simply must wait and try again.
while (!registered) {
try {
Expand Down Expand Up @@ -221,7 +224,7 @@ public void register() {
@Transactional
public void heartbeat() {
Node node = nodeService.findIdentity();
if (node != null && !StringUtils.isBlank(runtimeConfiguration.getRegistrationUrl())) {
if (node != null) {
logger.info("Updating my node information and heartbeat time.");
node.setHeartbeatTime(new Date());
node.setDatabaseType(dbDialect.getName());
Expand All @@ -230,13 +233,17 @@ public void heartbeat() {
node.setExternalId(runtimeConfiguration.getExternalId());
node.setNodeGroupId(runtimeConfiguration.getNodeGroupId());
node.setSymmetricVersion(Version.VERSION);
node.setSyncURL(runtimeConfiguration.getMyUrl());
if (!StringUtils.isBlank(runtimeConfiguration.getMyUrl())) {
node.setSyncURL(runtimeConfiguration.getMyUrl());
}
nodeService.updateNode(node);
dataService.insertHeartbeatEvent(node);
logger.info("Done updating my node information and heartbeat time.");
if (!configurationService.isRegistrationServer()) {
dataService.insertHeartbeatEvent(node);
}
}
}

private void sleepBeforeRegistrationRetry() {
try {
long sleepTimeInMs = DateUtils.MILLIS_PER_SECOND * randomSleepTimeSlot.getRandomValueSeededByDomainId();
Expand All @@ -251,24 +258,24 @@ private TriggerHistory rebuildTriggerIfNecessary(boolean forceRebuild, Trigger t

boolean triggerExists = false;

TriggerHistory newTriggerHist = new TriggerHistory(table, trigger, reason, trigger
.getTriggerName(DataEventType.INSERT, triggerPrefix), trigger.getTriggerName(DataEventType.UPDATE, triggerPrefix), trigger
.getTriggerName(DataEventType.DELETE, triggerPrefix));
TriggerHistory newTriggerHist = new TriggerHistory(table, trigger, reason, trigger.getTriggerName(
DataEventType.INSERT, triggerPrefix), trigger.getTriggerName(DataEventType.UPDATE, triggerPrefix),
trigger.getTriggerName(DataEventType.DELETE, triggerPrefix));

String oldTriggerName = null;
String oldSourceSchema = null;
if (oldAudit != null) {
oldTriggerName = oldAudit.getTriggerNameForDmlType(dmlType);
oldSourceSchema = oldAudit.getSourceSchemaName();
triggerExists = dbDialect.doesTriggerExist(oldAudit.getSourceSchemaName(), oldAudit
.getSourceTableName(), oldTriggerName);
triggerExists = dbDialect.doesTriggerExist(oldAudit.getSourceSchemaName(), oldAudit.getSourceTableName(),
oldTriggerName);
} else {
// We had no trigger_hist row, lets validate that the trigger as defined in the trigger
// does not exist as well.
oldTriggerName = newTriggerHist.getTriggerNameForDmlType(dmlType);
oldSourceSchema = trigger.getSourceSchemaName();
triggerExists = dbDialect.doesTriggerExist(trigger.getSourceSchemaName(), trigger
.getSourceTableName(), oldTriggerName);
triggerExists = dbDialect.doesTriggerExist(trigger.getSourceSchemaName(), trigger.getSourceTableName(),
oldTriggerName);
}

if (!triggerExists && forceRebuild) {
Expand Down Expand Up @@ -335,7 +342,7 @@ public void setTablePrefix(String tablePrefix) {
public void setDataService(IDataService dataService) {
this.dataService = dataService;
}

public void setTriggerPrefix(String triggerPrefix) {
this.triggerPrefix = triggerPrefix;
}
Expand Down
Expand Up @@ -433,6 +433,10 @@ public Object mapRow(java.sql.ResultSet rs, int arg1)
}
}

public boolean isRegistrationServer() {
return StringUtils.isBlank(runtimeConfiguration.getRegistrationUrl());
}

public void setTriggerHistSql(String tableSyncAuditSql) {
this.triggerHistSql = tableSyncAuditSql;
}
Expand Down Expand Up @@ -521,5 +525,7 @@ public void setSelectTriggerByIdSql(String selectTriggerByIdSql) {
public void setActiveTriggersForReloadSql(String activeTriggersForReloadSql) {
this.activeTriggersForReloadSql = activeTriggersForReloadSql;
}



}
@@ -1,5 +1,5 @@
symmetric.runtime.group.id=test-root-group
symmetric.runtime.external.id=CORP
symmetric.runtime.external.id=00000
db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost/symmetric
sync.default.schema=symmetric
Expand Down
Expand Up @@ -2,7 +2,7 @@
# please create a file of the same name in your user directory
# and override the appropriate properties
symmetric.runtime.group.id=test-root-group
symmetric.runtime.external.id=CORP
symmetric.runtime.external.id=00000
db.driver=oracle.jdbc.driver.OracleDriver
db.url=oracle jdbc url goes here
sync.default.schema=schema goes here
Expand Down

0 comments on commit 3e82b22

Please sign in to comment.