Github user paul-rogers commented on a diff in the pull request:

    https://github.com/apache/drill/pull/921#discussion_r150981136
  
    --- Diff: 
exec/java-exec/src/main/java/org/apache/drill/exec/work/WorkManager.java ---
    @@ -165,32 +169,59 @@ public DrillbitContext getContext() {
        *
        * <p>This is intended to be used by {@link 
org.apache.drill.exec.server.Drillbit#close()}.</p>
        */
    -  public void waitToExit() {
    +  public void waitToExit(Drillbit bit, boolean forcefulShutdown) {
         synchronized(this) {
    -      if (queries.isEmpty() && runningFragments.isEmpty()) {
    +      numOfRunningQueries = queries.size();
    +      numOfRunningFragments = runningFragments.size();
    +      if ( queries.isEmpty() && runningFragments.isEmpty()) {
             return;
           }
    -
    +      logger.info("Draining " + queries +" queries and "+ 
runningFragments+" fragments.");
           exitLatch = new ExtendedLatch();
         }
    -
    -    // Wait for at most 5 seconds or until the latch is released.
    -    exitLatch.awaitUninterruptibly(5000);
    +    // Wait uninterruptibly until all the queries and running fragments on 
that drillbit goes down
    +    // to zero
    +    if( forcefulShutdown ) {
    +      exitLatch.awaitUninterruptibly(5000);
    +    } else {
    +      exitLatch.awaitUninterruptibly();
    +    }
       }
     
       /**
        * If it is safe to exit, and the exitLatch is in use, signals it so 
that waitToExit() will
    -   * unblock.
    +   * unblock. Logs the number of pending fragments and queries that are 
running on that
    +   * drillbit to track the progress of shutdown process.
        */
       private void indicateIfSafeToExit() {
         synchronized(this) {
           if (exitLatch != null) {
    +        logger.info("Waiting for "+ queries.size() +" queries to complete 
before shutting down");
    +        logger.info("Waiting for "+ runningFragments.size() +" running 
fragments to complete before shutting down");
    +        if(runningFragments.size() > numOfRunningFragments|| 
queries.size() > numOfRunningQueries) {
    +          logger.info("New Fragments or queries are added while drillbit 
is Shutting down");
    +        }
             if (queries.isEmpty() && runningFragments.isEmpty()) {
    +          // Both Queries and Running fragments are empty.
    +          // So its safe for the drillbit to exit.
    --- End diff --
    
    As it turns out @ilooner is making significant changes to this area. Can 
you two coordinate?
    
    We just need the @dvjyothsna is making to work long enough for the @ilooner 
changes replace them. But, Tim's changes need to support this new graceful 
shutdown model.


---

Reply via email to