When you have several watchers with:
- big
graceful_timeout (600 seconds in our case)
max_age values > 0
The call of manage_watchers of the Arbiter from the Controller can be very long (600 seconds in our case). During this delay, circus is not blocked (thanks to tornado ioloop) but:
- some intrusive commands are forbidden (because
manage_watchers is running)
- no other
manage_watchers is launched
So during this graceful 600s period, other dead or expired processes (even for other watchers) are not (re)launched anymore.
The real fix is really intrusive and complex because of concurrency issues.
We are working on a little fix based on a "async_kill" flag (at the watcher level).
Ideas and advices are welcome
When you have several watchers with:
graceful_timeout(600 seconds in our case)max_agevalues > 0The call of
manage_watchersof theArbiterfrom theControllercan be very long (600 seconds in our case). During this delay, circus is not blocked (thanks to tornado ioloop) but:manage_watchersis running)manage_watchersis launchedSo during this graceful 600s period, other dead or expired processes (even for other watchers) are not (re)launched anymore.
The real fix is really intrusive and complex because of concurrency issues.
We are working on a little fix based on a "async_kill" flag (at the watcher level).
Ideas and advices are welcome