YaoHaishi created SCB-1469:
------------------------------

             Summary: SCBEngine should abandon unfinished invocations if 
waiting for invocation finished is timed out
                 Key: SCB-1469
                 URL: https://issues.apache.org/jira/browse/SCB-1469
             Project: Apache ServiceComb
          Issue Type: Bug
          Components: Java-Chassis
            Reporter: YaoHaishi


When a microservice instance is going to exit, the SCBEngine will block the 
exit procedure, waiting for all of the invocations in processing status get 
finished. And in the method SCBEngine#validAllInvocationFinished, the 
unfinished invocations counter is checked. After waiting for a period of time, 
if there are still unfinished invocations, the SCBEngine should print error log 
to warn users about those invocations and exit the process forcely.
 However, currently in the method SCBEngine#validAllInvocationFinished only the 
error log is printed, but no exit operation is done, leaving the exit procedure 
still blocked.

You can find the code segment to be fixed like below in the class SCBEngine:
{code:java}
  private void validAllInvocationFinished() throws InterruptedException {
    long start = System.currentTimeMillis();
    while (true) {
      long remaining = invocationStartedCounter.get() - 
invocationFinishedCounter.get();
      if (remaining == 0) {
        return;
      }

      if (System.currentTimeMillis() - start > TimeUnit.SECONDS.toMillis(30)) {
        LOGGER.error("wait for all requests timeout, abandon waiting, remaining 
requests: {}.", remaining);
        // since the waiting logic is timed out, should return to exit here
      }
      TimeUnit.SECONDS.sleep(1);
    }
  }
{code}



--
This message was sent by Atlassian Jira
(v8.3.2#803003)

Reply via email to