Skip to content

Commit

Permalink
0002818: RouterService is deadlocking on SQLite when clustering enabled
Browse files Browse the repository at this point in the history
  • Loading branch information
mmichalek committed Sep 21, 2016
1 parent 9f0f3b9 commit 2e2ed08
Show file tree
Hide file tree
Showing 5 changed files with 29 additions and 8 deletions.
Expand Up @@ -268,5 +268,8 @@ public void setIsAllDataRead(boolean isAllDataRead) {

public void setFullGapAnalysis(boolean isFullGapAnalysis) {
}

public void setFullGapAnalysis(ISqlTransaction sqlTransaction, boolean b) {
}

}
Expand Up @@ -530,11 +530,16 @@ public boolean isFullGapAnalysis() {
}

public void setFullGapAnalysis(boolean isFullGapAnalysis) {
setFullGapAnalysis(null, isFullGapAnalysis);
}

@Override
public void setFullGapAnalysis(ISqlTransaction sqlTransaction, boolean isFullGapAnalysis) {
if (parameterService.is(ParameterConstants.CLUSTER_LOCKING_ENABLED)) {
contextService.save(ContextConstants.ROUTING_FULL_GAP_ANALYSIS, Boolean.toString(isFullGapAnalysis));
contextService.save(sqlTransaction, ContextConstants.ROUTING_FULL_GAP_ANALYSIS, Boolean.toString(isFullGapAnalysis));
}
this.isFullGapAnalysis = isFullGapAnalysis;
}
this.isFullGapAnalysis = isFullGapAnalysis;
}

protected long getLastBusyExpireRunTime() {
if (parameterService.is(ParameterConstants.CLUSTER_LOCKING_ENABLED)) {
Expand Down
Expand Up @@ -45,5 +45,7 @@ public interface IContextService {
public int delete(String name);

public void save(String name, String value);

public void save(ISqlTransaction transaction, String name, String value);

}
Expand Up @@ -81,10 +81,21 @@ public int delete(String name) {
}

public void save(String name, String value) {
int count = sqlTemplate.update(getSql("updateSql"), value, name);
if (count == 0) {
sqlTemplate.update(getSql("insertSql"), name, value);
}
save(null, name, value);
}

@Override
public void save(ISqlTransaction transaction, String name, String value) {
if (transaction != null) {
if (update(transaction, name, value) == 0) {
insert(transaction, name, value);
}
} else {
int count = sqlTemplate.update(getSql("updateSql"), value, name);
if (count == 0) {
sqlTemplate.update(getSql("insertSql"), name, value);
}
}
}

}
Expand Up @@ -710,7 +710,7 @@ protected void completeBatchesAndCommit(ChannelRouterContext context) {
List<OutgoingBatch> batches = new ArrayList<OutgoingBatch>(context.getBatchesByNodes()
.values());

gapDetector.setFullGapAnalysis(true);
gapDetector.setFullGapAnalysis(context.getSqlTransaction(), true);

if (engine.getParameterService().is(ParameterConstants.ROUTING_LOG_STATS_ON_BATCH_ERROR)) {
engine.getStatisticManager().addRouterStats(context.getStartDataId(), context.getEndDataId(),
Expand Down

0 comments on commit 2e2ed08

Please sign in to comment.