----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://reviews.apache.org/r/48326/ -----------------------------------------------------------
Review request for lens. Bugs: LENS-1169 https://issues.apache.org/jira/browse/LENS-1169 Repository: lens Description ------- Stopping lens server basically stops all services. For query service, the current flow is this: * Preapre stopping: ** Interrupt All threads (query submitter, purger, status poller etc) * Persist state * Stop ** join all threads ( as mentioned above) Each of the threads is basically running in a large loop like the following: {noformat} while (!stopped && !this.isInterrupted()) { try { } catch(InterruptedException) { return } } {noformat} Now, interrupting a thread will cause InterruptException in the thread only when the thread is waiting/sleeping. So, the thread can exit in two ways: * By receiving interrupt * If an interrupt isn't received, it'll complete the current iteration loop and then exit. So there can be a scenario like the following (I faced such a scenario while working on LENS-904): * Stop is called from outside * Prepare stopping. Let's say QuerySubmitter didn't receive the interrupt and will exit after completing its current iteration. * Persist: ** Persist part1: Persisting driver states. e.g. HiveDriver keeps a map of query handle to hive operation handle. * QuerySubmitter submits the query to hive, changes the state of query to LAUNCHED and exits. * Persist: ** Persist part 2: Persisting queries. This persists the query mentioned in the above point as LAUNCHED. Now, on start, the states will be read back, query's state will be LAUNCHED, and HiveDriver won't have the operation handle corresponding to this query. This will cause the query to fail in next status update. Proposed Solution: Interrupt and join the threads before persisting in the prepareStopping phase. Diffs ----- lens-server/src/main/java/org/apache/lens/server/query/QueryExecutionServiceImpl.java 8fe02aa728493bcdfb0afbc2a6533b496d4a89e4 Diff: https://reviews.apache.org/r/48326/diff/ Testing ------- Thanks, Rajat Khandelwal