Hi Larry,

> during shutdown.  This patch keeps it from getting stuck, but
> if the context was in "STATE_READY", then "shutdownContext( context )"
> is called which sets the state to "STATE_DISABLED" causing
> removeContext() to exit early.  The interceptor's removeContext()
> methods won't be called.  

I fixed that - but I'm not sure what's the right order: 
should we 
add -> init -> shutdown -> remove 
or
init-> add -> remove -> shutdown ?

The second seems much better ( the context may be initialized but not in
use, for example if an admin wants to temporarily disable a context)

All the "context state" is new in 3.3 - for 3.2 it just happens to works (
because we fixed everything to work in most cases, without a clear
definition ). 


> While pondering a fix for this, I was also pondering what should
> happen if an interceptor throws an exceptions during context
> removal.  Currently, an exception would get handled outside
> of ContextManger and potentially leave a context in an inconsistent
> state.  Should interceptor exceptions be caught, logged, then
> ignored by ContextManager so shutdown can proceed without being
> aborted?

Yes, you are right - I'll fix this. 

Should it be the case for all context callbacks ? I think engineInit
exceptions should be propagated ( and the server shouldn't start after
that). Probably the same for contextAdd/contextInit - if any exception
happens, the context will be disabled.

I agree that shutdown errors should be ignored ( logged only ).

> Also, it seems to me that a Tomcat shutdown will remove the contexts
> out from under any requests that are currently using it.  Am I
> missing something?  If not, should we try to add, or at least
> provide for, an "orderly" shutdown in addition to the "forced"
> shutdown we seem to currently have?

I was thinking that this should be done in an interceptor - shutdown can
wait until all requests for that context are done ( with a timeout ). It
would be nice to have this.

Costin

Reply via email to