+1 for shutting down on a critical thread death. Does 'shutdown' mean calling System.exit or throwing some kind of exception? Some applications use ZooKeeper embedded in their JVM, and they might not like ZooKeeper calling System.exit.
--Michi On Mon, Mar 31, 2014 at 9:03 PM, Rakesh R <[email protected]> wrote: >>>> This is how I handle the critical threads in my client apps that use >>>> Zookeeper. >>>> Keep a reference to the thread and periodically make sure it's still alive >>>> and well - respawn it if it is not. > > Thanks Greg for the inputs. Please see ZK-1907, I've included an initial > proposal patch to kick start the discussions. > Another approach is simply shutdown if a critical thread dies, so the > monitoring tool can easily detect and take necessary actions. The proposed > patch is based on this approach. > > -Rakesh > > -----Original Message----- > From: Asta, Greg [mailto:[email protected]] > Sent: 31 March 2014 23:24 > To: [email protected]; [email protected] > Subject: RE: Thread handling > > " If we have a 'DeathWatcher 'or some other mechanism in place to monitor all > the critical threads. It can take a decision like - bring down the process if > required, or shutdown the quorumpeer and go for LE again etc. > Now the monitoring or management tool will knows about the situation and can > act upon. > > Appreciate any thoughts ?" > > This is how I handle the critical threads in my client apps that use > Zookeeper. Keep a reference to the thread and periodically make sure it's > still alive and well - respawn it if it is not. > > Thanks, > Greg > > > -----Original Message----- > From: Rakesh R [mailto:[email protected]] > Sent: Thursday, March 27, 2014 10:39 AM > To: [email protected]; [email protected] > Subject: Thread handling > > Hi All, > > Server has many critical threads running and co-ordinating each other like > RequestProcessor chains et. When going through each threads, most of them > having the similar structure like: > > public void run() { > try { > while(running) > // processing logic > } > } catch (InterruptedException e) { > LOG.error("Unexpected interruption", e); > } catch (RequestProcessorException e) { > LOG.error("Unexpected exception", e); > } catch (Exception e) { > LOG.error("Unexpected exception", e); > } > LOG.info("...exited loop!"); > } > > I feel, we could improve our threads in our system. From the design I could > see, there could be a chance of silently leaving the thread in case of any > exception(abnormal or any functional issue too) If this happens in the > production, the server would get hanged forever and will not be able to > deliver its role. > > If we have a 'DeathWatcher 'or some other mechanism in place to monitor all > the critical threads. It can take a decision like - bring down the process if > required, or shutdown the quorumpeer and go for LE again etc. > Now the monitoring or management tool will knows about the situation and can > act upon. > > Appreciate any thoughts ? > > Thanks in advance, > Rakesh R
