In general, I think it would be useful to have a `start/stop/status *service*` where services could be any one of [CacheServer, GatewayReceiver, RedisService, MemcachedService, HttpService, etc]. As user/developer, it would be useful to be able to control the embedded services in one or more GemFire/Geode nodes in the cluster.
On Thu, Jan 5, 2017 at 1:57 PM, Udo Kohlmeyer <ukohlme...@pivotal.io> wrote: > +2 > > > > On 1/5/17 13:53, Kirk Lund wrote: > >> Ok #3 makes sense then. It's not that the Cache initialization is broken, >> it's that some people want to hook in some custom initialization at the >> end >> of cache creation but before starting the ClientServer component. >> >> I think it would make the most sense to have Cache initialization >> callbacks >> (this has been commonly requested by users for as long as I can remember). >> >> It would also make sense to add lifecycle control commands for starting >> and >> stopping the ClientServer component (since this isn't a workaround for >> some >> sinister bug). If we design the start clientserver command correctly then >> it's one more step towards completing cluster config in such a way that no >> one needs cache.xml anymore. Right now if a user wants to create multiple >> ClientServer endpoints then they have to use cache.xml in addition to >> starting the default-server with the start server command. >> >> >> On Thu, Jan 5, 2017 at 1:17 PM, Udo Kohlmeyer <ukohlme...@pivotal.io> >> wrote: >> >> Take this scenario as an example. >>> >>> 1) start server >>> 2) Cache initializes and starts cacheserver >>> 3) run custom code to build up meta structures for custom implementation >>> >>> In this scenario, the cache has initialized and the cacheserver has been >>> started. So clients can start interacting with the server whilst it is >>> trying to build up custom add meta structures. Which may mean that the >>> client could receive incorrect results for queries or incorrect behavior >>> due to the data structures being "not ready" >>> >>> If the capability is introduced to manually start the cacheserver then >>> this could go away. >>> >>> 1) start server >>> 2) Cache initializes >>> 3) run custom code to build up meta structures for custom implementation >>> 4) start cacheserver >>> >>> I agree, adding this flag because it did not correctly initialize the >>> cache/region/data structures that is crazy. If there is an issue where a >>> server has started up and is still waiting to GII messages, that should >>> be >>> addressed as a bug. >>> >>> --Udo >>> >>> >>> On 1/5/17 12:55, Kirk Lund wrote: >>> >>> So here's the what's going on: a User is starting Servers using "start >>>> server" and apparently Clients are able to connect and perform >>>> operations >>>> *before* the Cache has completed initialization. So now, I'm being asked >>>> to >>>> change "start server" into a 2-command process (as an option): >>>> >>>> 1) gfsh> start server --name=Server1 --disable-default-server >>>> 2) User waits until the Cache initialization is completed >>>> 3) gfsh> start client-server-acceptor --name=Server1 >>>> >>>> I think this is crazy. If this is a problem then Geode Client/Server >>>> has a >>>> bigger problem and this requires a fix in Cache initialization, NOT by >>>> adding a new GFSH command. >>>> >>>> The launcher class used by GFSH is ServerLauncher, not the older >>>> deprecated >>>> CacheServerLauncher. But what you're stating is still correct: >>>> ServerLauncher starts the Client/Server acceptor AFTER the DS is >>>> connected >>>> and Cache is created. >>>> >>>> So I'm trying to understand why we're trying to solve this in GFSH >>>> instead >>>> of in the Server code. >>>> >>>> -Kirk >>>> >>>> >>>> On Thu, Jan 5, 2017 at 12:43 PM, Dan Smith <dsm...@pivotal.io> wrote: >>>> >>>> How are you starting up your system? If you initialize a system with a >>>> >>>>> cache.xml or cluster configuration, the cache server and gateway >>>>> acceptors >>>>> are started last (see CacheCreation.create). If your cache server is >>>>> started using gfsh start server, I believe the acceptor part is also >>>>> started last (see CacheServerLauncher.createCache). >>>>> >>>>> If you are using the API, it's up to you to start the cache server >>>>> last. >>>>> I >>>>> don't think there is any latch we can add in that case unless we also >>>>> added >>>>> a method to indicate that you are done configuring the system. >>>>> >>>>> -Dan >>>>> >>>>> On Thu, Jan 5, 2017 at 11:20 AM, Michael Stolz <mst...@pivotal.io> >>>>> wrote: >>>>> >>>>> To be honest I always just thought it was there. I bet most users do. >>>>> This >>>>> >>>>> might explain some "unexplained" inconsistencies I have seen at a >>>>>> >>>>>> customer. >>>>> >>>>> -- >>>>>> Mike Stolz >>>>>> Principal Engineer, GemFire Product Manager >>>>>> Mobile: 631-835-4771 >>>>>> >>>>>> On Thu, Jan 5, 2017 at 2:09 PM, Kirk Lund <kl...@apache.org> wrote: >>>>>> >>>>>> So, I'm looking into an issue in which the Geode Server starts up and >>>>>> >>>>>>> accepts connections from Clients and starts handling their requests >>>>>>> >>>>>>> before >>>>>> >>>>>> its Cache has completed initialization. >>>>>>> >>>>>>> Regions have a series of initialization latches that local puts and >>>>>>> >>>>>>> gets >>>>>> are forced to wait on. For example, initializationLatchAfterGetIni >>>>>> >>>>>>> tialImage >>>>>>> is released after GII completes for that Region. Local puts and gets >>>>>>> >>>>>>> are >>>>>> not allowed to be handled until after GII completes. >>>>>> >>>>>>> I would expect the Cache to have an initialization latch as well that >>>>>>> Client requests have to wait on before the Geode Server completes >>>>>>> Cache >>>>>>> initialization. >>>>>>> >>>>>>> Does anyone know why Cache or AcceptorImpl don't have an >>>>>>> initialization >>>>>>> latch like this? Does anyone have a good reason to not add such an >>>>>>> initialization latch to protect incoming Client requests? >>>>>>> >>>>>>> Thanks, >>>>>>> Kirk >>>>>>> >>>>>>> >>>>>>> > -- -John john.blum10101 (skype)