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.
---