Skip to content

Commit

Permalink
[inner-2377] Ensure the orderliness of stop/start operations of dbins…
Browse files Browse the repository at this point in the history
…tance
  • Loading branch information
wenyh1 committed Nov 24, 2023
1 parent a76af85 commit 4525ba5
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -215,6 +215,8 @@ private boolean checkState() {
if (getBindingCount() != 0) {
state = STATE_DELETING;
IOProcessor.BACKENDS_OLD_GROUP.add(this);
long time = System.nanoTime();
allSourceMap.values().forEach(f -> f.setAsyncExecStopTime(time));
return false;
}
state = STATE_ABANDONED;
Expand Down Expand Up @@ -265,7 +267,7 @@ public void stopOfFresh(List<String> sourceNames, String reason, boolean closeFr
public boolean stopOfBackground(String reason) {
if (state.intValue() == STATE_DELETING && getBindingCount() == 0) {
for (PhysicalDbInstance dbInstance : allSourceMap.values()) {
dbInstance.stopDirectly(reason, false, false);
dbInstance.stopOfBackground(reason);
}
return true;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,8 @@ public abstract class PhysicalDbInstance implements ReadTimeStatusInstance {
private volatile boolean needSkipEvit = false;
private volatile boolean needSkipHeartTest = false;
private volatile int logCount;
private volatile long lastExecTime; // stop、start
private volatile long asyncExecStopTime;

public PhysicalDbInstance(DbInstanceConfig config, DbGroupConfig dbGroupConfig, boolean isReadNode) {
this.config = config;
Expand Down Expand Up @@ -388,6 +390,7 @@ public void startHeartbeat() {
}

void start(String reason, boolean isStartHeartbeat) {
lastExecTime = System.nanoTime();
startPool(reason);
if (isStartHeartbeat) {
startHeartbeat();
Expand All @@ -408,6 +411,7 @@ private boolean checkState() {
if (dbGroup.getBindingCount() != 0) {
dbGroup.setState(PhysicalDbGroup.STATE_DELETING);
IOProcessor.BACKENDS_OLD_INSTANCE.add(this);
setAsyncExecStopTime(System.nanoTime());
return false;
}
if (dbGroup.isStop()) {
Expand All @@ -416,13 +420,18 @@ private boolean checkState() {
if (dbGroup.getBindingCount() != 0) {
dbGroup.setState(PhysicalDbGroup.STATE_DELETING);
IOProcessor.BACKENDS_OLD_INSTANCE.add(this);
setAsyncExecStopTime(System.nanoTime());
return false;
}
return true;
}

public boolean stopOfBackground(String reason) {
if (dbGroup.getState() == PhysicalDbGroup.STATE_DELETING && dbGroup.getBindingCount() == 0) {
if (asyncExecStopTime <= lastExecTime) { // In extreme cases (equal cases), in extreme cases there may be problems,
LOGGER.info("discard expired stop() operations");
return true;
}
stopDirectly(reason, false, false);
return true;
}
Expand Down Expand Up @@ -450,6 +459,7 @@ public void stop(String reason, boolean closeFront) {
}

protected void stop(String reason, boolean closeFront, boolean isStopHeartbeat, boolean isStopPool) {
lastExecTime = System.nanoTime();
if (isStopHeartbeat) {
stopHeartbeat(reason);
}
Expand Down Expand Up @@ -518,6 +528,22 @@ public boolean enable() {
return false;
}

public long getLastExecTime() {
return lastExecTime;
}

public void setLastExecTime(long lastExecTime) {
this.lastExecTime = lastExecTime;
}

public long getAsyncExecStopTime() {
return asyncExecStopTime;
}

public void setAsyncExecStopTime(long asyncExecStopTime) {
this.asyncExecStopTime = asyncExecStopTime;
}

public final int getActiveConnections() {
return connectionPool.getCount(PooledConnection.STATE_IN_USE);
}
Expand Down

0 comments on commit 4525ba5

Please sign in to comment.