Also keep in my mind if you are given a RegionFunctionContext (in cases
where the *Function* is executed "on a *Region*") then you have indirect
access to the cache...

regionFunctionContext.getDataSet()
<http://geode.apache.org/releases/latest/javadoc/org/apache/geode/cache/execute/RegionFunctionContext.html#getDataSet-->
[1].getRegionService()
<http://geode.apache.org/releases/latest/javadoc/org/apache/geode/cache/Region.html#getRegionService-->
[2]

GemFireCache is the only (direct) implementation of RegionService
<http://geode.apache.org/releases/latest/javadoc/org/apache/geode/cache/RegionService.html>
[3]
that I am aware of.

However, I generally agree that it would be useful to have direct access to
the GemFireCache from any FunctionContext.

-j

[1]
http://geode.apache.org/releases/latest/javadoc/org/apache/geode/cache/execute/RegionFunctionContext.html#getDataSet--
[2]
http://geode.apache.org/releases/latest/javadoc/org/apache/geode/cache/Region.html#getRegionService--
[3]
http://geode.apache.org/releases/latest/javadoc/org/apache/geode/cache/RegionService.html


On Thu, Mar 2, 2017 at 12:44 PM, Jinmei Liao <jil...@pivotal.io> wrote:

> I think I even see comments in the code stating "TODO: use the cache in the
> FunctionContext when it becomes available".
>
> On Thu, Mar 2, 2017 at 12:30 PM, Kirk Lund <kl...@apache.org> wrote:
>
> > I'm looking into a deadlock involving code under
> > org.apache.geode.management. Related to this, I'm also looking at all of
> > the Functions that are implemented as part of the management layer.
> >
> > First thing every management Function appears to invoke is either
> > org.apache.geode.cache.CacheFactory.getAnyInstance() or
> > org.apache.geode.cache.internal.cache.GemFireCacheImpl getInstance() to
> > get
> > a reference to the Cache.
> >
> > This method on CacheFactory seems to be frequently involved in deadlocks
> in
> > general and I think we should find a way to deprecate it:
> >
> > /**
> >  * Gets an arbitrary open instance of {@link Cache} produced by an
> earlier
> > call to
> >  * {@link #create()}.
> >  *
> >  * @throws CacheClosedException if a cache has not been created or the
> only
> > created one is
> >  *         {@link Cache#isClosed closed}
> >  */
> > public static synchronized Cache getAnyInstance() {
> >   GemFireCacheImpl instance = GemFireCacheImpl.getInstance();
> > <snip>
> >
> > In an effort to prevent deadlocks and move away from statics and
> > singletons, I'd like to find a good alternative to this for Functions. I
> > think adding this method to FunctionContext is the best solution:
> >
> > /**
> >  * Returns a reference to the Cache for which this function is executing.
> >  */
> > public Cache getCache();
> >
> > Does this seem like a good solution? Is there any reason not to add this
> to
> > the API?
> >
>
>
>
> --
> Cheers
>
> Jinmei
>



-- 
-John
john.blum10101 (skype)

Reply via email to