Mark,

On 1/8/16 7:33 AM, Mark Thomas wrote:
> I've been looking at the relationship between a Context and its Manager
> and I have identified some inconsistencies in the underlying assumptions
> on which the code is based.
> 
> A. Context is always set
> In some places the code carefully checks to see if the Context is null.
> In other places (often in the same method and before the null check) the
> code assumes that the Context is non-null.
> 
> B. Context never changes
> ManagerBase.setContext() is written on the basis that the Context may
> change at any point. However, pretty much everywhere else assumes that
> the Context doesn't change (at least while the Manager is in use).
> 
> Related to B, there are various places where threading issues exist if
> the Context were to change while the Manager was in use and a few places
> (e.g. the distributable flag) that aren't updated that should be.
> 
> Given these issues I see two options.
> 
> 1. Require that the Context is set before the Manager is first used and
> disallow any changes once the Manager has been used.
> 
> 2. Correctly handle the possibility that the Context may change either
> a) at any time or b) if the Context is stopped (i.e. the Manager is not
> being used).
> 
> 
> Option 1 is fairly simple to implement as large parts of the code
> essentially assume this already and all the current Tomcat code already
> conforms to this requirement. This option would require documenting the
> requirement, adding a few lines of code to enforce it and then removing
> various null checks that would no longer be necessary.
> 
> Option 2 would require a lot more work, particularly 2a. 2a would create
> a lot of strange edge cases (e.g. Context changes mid-way through
> sessions being persisted to the store - where do those sessions get
> written?) which would require careful definition and implementation. 2b
> would be manageable but we'd need to carefully define "the Manager not
> being used" and which methods could only be called in that state.
> 
> My preference is for 1. It is less work, Tomcat currently never changes
> the Context and I can't see a viable use case for wanting to do so.
> 
> Assuming there are no objections, I'll add this to my TODO list.

+1 for the easy option.

If someone wants to play games with context-switching, they ought to be
able to use the parallel-deployment features to achieve the same goal
without all the danger involved in lobotomizing a running context.

-chris

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to