I think the client commands needs to be singleton instances even after you change the sequence of initialization. We don't want to have each client operation ends up creating a new command instance, right? That would be a more performance drag.
On Thu, Mar 30, 2017 at 2:14 PM, Kirk Lund <kl...@apache.org> wrote: > PS: I'll be writing and using JMH benchmarks to drive these changes. I'll > also create new unit tests for each of these classes that don't currently > have unit tests. > > On Thu, Mar 30, 2017 at 10:58 AM, Kirk Lund <kl...@apache.org> wrote: > > > The client Commands now check with SecurityService even when security is > > not configured. This has introduced a negative performance impact. > > > > The best way to fix something like this is to tell the Command instance > > when it's being constructed that is does or does not need to perform > > security checks. > > > > Unfortunately, Commands are all implemented as singletons which are very > > eagerly instantiated during class loading of CommandInitializer (who > > thought that was a good idea?!). > > > > In order to fix this performance problem, I would need to get rid of > these > > problematic static initializer blocks that so eagerly construct the > > Commands so that I can put off constructing them until AFTER the Cache is > > initializing and specifically AFTER the Cache has determined if it is > using > > security or not. > > > > This means I'm going to have to do some refactoring of > CommandInitializer, > > the Command classes, ServerConnection, AcceptorImpl, etc. > > > > Any other approach is going to have such minimal impact on performance > > that I'm not even interested in doing less than this. > > > > From a very high level, I would change the code so that the Cache owns > the > > Server which owns the Command instances. In this way, the configuring of > > use of security can trickle down from Cache to each Command. I would > > primarily be altering static singletons, static initializers and adding > > constructors. > > > > Does anyone have a problem with me changing the above classes and > > especially getting rid of the static initializers and singleton > instances? > > > > > -- Cheers Jinmei