Sounds like this is a slippery slope. I reworked the strategy: instead of
calling cache.close, I only issue a call to the locator to get the cluster
configuration again and do a reload of the properties and cacheXml. Here is
the PR for this approach:
https://github.com/apache/geode/pull/1656

Basically this is what the reloadClusterConfiguration does:
https://github.com/apache/geode/pull/1656/files#diff-14ace6c5abf2f68c480b55a7c882e18c

If you see anything obviously wrong, or even vaguely wrong, please comment
on the PR, we will try to test it out.

Thanks!

On Wed, Mar 21, 2018 at 12:42 PM, Kirk Lund <kl...@apache.org> wrote:

> The non-daemon thread in a process launched with ServerLauncher is looping
> in waitOnServer. When you close the Cache, that loop exits and the
> ServerLauncher process exits.
>
> As Bruce pointed you, JUnit and the DUnit VMs have other non-daemon
> threads.
>
> You might need to alter ServerLauncher.waitOnServer() and
> LocatorLauncher.waitOnLocator() for what you're doing.
>
> On Wed, Mar 21, 2018 at 10:28 AM, Jinmei Liao <jil...@pivotal.io> wrote:
>
> > Bruce: this sounds like the root cause of the differences between the
> dunit
> > test and reall app test.
> >
> > On Wed, Mar 21, 2018 at 10:22 AM, Bruce Schuchardt <
> bschucha...@pivotal.io
> > >
> > wrote:
> >
> > > It's likely that the JVM is exiting because the AcceptorImpl thread is
> > the
> > > only non-daemon thread and it is stopped when the cache is closed.
> DUnit
> > > JVMs have a non-daemon main() thread that keeps them alive.
> > >
> > >
> > >
> > > On 3/21/18 9:48 AM, Jinmei Liao wrote:
> > >
> > >> We would like to allow users to import a new set of cluster
> > configuration
> > >> with running servers as long as we make sure these servers are vanilla
> > >> servers (servers that are just started with nothing in it). Now since
> > the
> > >> servers are already up, caches are already created, we will need to
> > >> re-create the cache with the new xml received from the locator.
> > Originally
> > >> our implementation on the servers boils down to:
> > >>
> > >> cache.close("Re-create Cache", true, true);
> > >>
> > >> GemFireCacheImpl.create(oldDs, cacheConfig);
> > >>
> > >>
> > >> but the cache.close call eventually leads to a VM exit (somehow in the
> > >> DUunit VM, it doesn not), so this does not work with real application
> > >> environment. Now we are wondering is there a safe to recreate the
> cache
> > >> instance with a new set of properties/cacheXml without triggering the
> > >> entire shutdown sequence?
> > >>
> > >>
> > >>
> > >
> >
> >
> > --
> > Cheers
> >
> > Jinmei
> >
>



-- 
Cheers

Jinmei

Reply via email to