Hi All,

Apologies for the noise .. Still getting my bearings on how to contribute 
(realized too late that gh issues were sourced from the jira project).

I want to bring to your attention a small proposed feature as described below:

The current CachedModeledFrameworkImpl doesn't manage cache initialization for 
you. A perfect example of the kind of code you can expect to see in the wild is 
in the CachedModeledFramework tests themselves, i.e. blocking on semaphores 
that pin the reading thread to prevent it from certain operations that are 
cache dependent (but as far as I can tell exactly which operations are cache 
dependent is not really guaranteed so this is arguably cumbersome). Either way, 
this is fine in a lot of cases...
However, I propose an additional InitializedCachedModeledFramework 
implementation which asynchronously waits for the cache initialization trigger 
and only then proceeds to read from the cache. I implemented something similar 
for my personal use-case where I couldn't rely on, i.e. readThrough, to handle 
the uninitialized case because readThrough cannot disambiguate between a znode 
that is missing because it truly is missing from zk vs one that is missing 
because the cache hasn't initialized. In my case the znode wouldn't always 
exist in zk and so using readThrough would result in a lot of wasted calls to 
zk, greatly reducing the benefit of the cache in the first place.
To reiterate InitializedCachedModeledFramework has a couple benefits over the 
existing implementation:
                                                                                
                        1)No more possibility of misleading NoNodeException in 
the case of reading from CachedModeledFramework before the cache has warmed. (I 
say misleading because the node may exist .. just not in the cache)
                                                                                
                        2)No more temptation to add blocking semaphores in 
front of this non-blocking interface.
                                                                                
                        3)IMO generally less confusion about how to properly 
use this otherwise great(!) feature.

A first pass at an implementation is here 
https://github.com/apache/curator/pull/1247/files .. 

But I just wanted to gauge the community's sense of whether they think this is 
a good idea and, assuming it is, if a new CMF implementation is the right way 
to go about it.

I'd appreciate any feedback either way.

Thanks,
Luke


Reply via email to