Skip to content

Commit

Permalink
support stickySessionTime
Browse files Browse the repository at this point in the history
  • Loading branch information
junwen12221 committed May 18, 2022
1 parent bca7249 commit a829442
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 7 deletions.
21 changes: 16 additions & 5 deletions common/src/main/java/io/mycat/StickyDataSourceNearnessImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,36 @@

public class StickyDataSourceNearnessImpl implements DataSourceNearness {
final DataSourceNearness dataSourceNearness;
long stickySessionTime;
boolean lastMaster = false;
long lastTime = System.currentTimeMillis();


public StickyDataSourceNearnessImpl(DataSourceNearness dataSourceNearness) {
public StickyDataSourceNearnessImpl(DataSourceNearness dataSourceNearness, long stickySessionTime) {
this.dataSourceNearness = dataSourceNearness;
this.stickySessionTime = stickySessionTime;
}

@Override
public String getDataSourceByTargetName(String targetName, boolean master, ReplicaBalanceType replicaBalanceType) {
String dataSourceByTargetName;
if (lastMaster){
if (master) {
dataSourceByTargetName = this.dataSourceNearness.getDataSourceByTargetName(targetName, true, replicaBalanceType);
}else {
dataSourceByTargetName = this.dataSourceNearness.getDataSourceByTargetName(targetName, master, replicaBalanceType);
lastTime = System.currentTimeMillis();
} else {
if (lastMaster && isConsecutiveTime()) {
dataSourceByTargetName = this.dataSourceNearness.getDataSourceByTargetName(targetName, true, replicaBalanceType);
} else {
dataSourceByTargetName = this.dataSourceNearness.getDataSourceByTargetName(targetName, false, replicaBalanceType);
}
}
lastMaster = master;
return dataSourceByTargetName;
}

private boolean isConsecutiveTime() {
return (System.currentTimeMillis()- lastTime) < stickySessionTime;
}

@Override
public void setLoadBalanceStrategy(String loadBalanceStrategy) {
this.dataSourceNearness.setLoadBalanceStrategy(loadBalanceStrategy);
Expand Down
1 change: 1 addition & 0 deletions config/src/main/java/io/mycat/config/ServerConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ public class ServerConfig {
private int rewriteInsertBatchedStatementBatch = 1000;
private boolean promoteUnsignedType = true;
private boolean stickySession = true;
private long stickySessionTime = 3;
public static void main(String[] args) {
System.out.println(JsonUtil.toJson(new ServerConfig()));
}
Expand Down
6 changes: 4 additions & 2 deletions proxy/src/main/java/io/mycat/runtime/MycatXaTranscation.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,11 @@ public MycatXaTranscation(XaSqlConnection connection, TransactionType transactio
this.connection = connection;
this.transactionType = transactionType;
DataSourceNearnessImpl dataSourceNearness = new DataSourceNearnessImpl(this);

ServerConfig serverConfig = MetaClusterCurrent.wrapper(ServerConfig.class);
this.dataSourceNearness =
MetaClusterCurrent.exist(ServerConfig.class) && MetaClusterCurrent.wrapper(ServerConfig.class).isStickySession() ?
new StickyDataSourceNearnessImpl(dataSourceNearness) : dataSourceNearness;
MetaClusterCurrent.exist(ServerConfig.class) && serverConfig.isStickySession() ?
new StickyDataSourceNearnessImpl(dataSourceNearness,serverConfig.getStickySessionTime()) : dataSourceNearness;
}

@Override
Expand Down

0 comments on commit a829442

Please sign in to comment.