You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@servicecomb.apache.org by "Haishi Yao (Jira)" <ji...@apache.org> on 2019/11/19 11:37:00 UTC

[jira] [Closed] (SCB-1469) SCBEngine should abandon unfinished invocations if waiting for invocation finished is timed out

     [ https://issues.apache.org/jira/browse/SCB-1469?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Haishi Yao closed SCB-1469.
---------------------------
    Resolution: Fixed

> 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: Haishi Yao
>            Priority: Minor
>
> 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.4#803005)