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?