nytimes / Store

Android Library for Async Data Loading and Caching

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Misleading docs and behavior of Store.clear()

bobymicroby opened this issue · comments

Store.clear() claims that it will purge all entries from memory and disk cache

     /**
     * purges all entries from memory and disk cache
     * Persister will only be cleared if they implements Clearable
     */
    void clear();

But in fact it only clears from the disk the entries that are currently in the memory cache.

    @Override
    public void clear() {
        for (Key cachedKey : memCache.asMap().keySet()) {
            clear(cachedKey);
        }
    }

If you call this method after a cold start, nothing will be purged from disk, leaving many entries roaming around the disk without a pointer.

Yeah that's pretty crappy. I never found a good way to fix it. One solution is to delegate responsibility to a user's persister by calling clear. Alternatively a store can be stateful which is hard without storage. Open to suggestions 🤔

First thing that comes to mind

image

And on clear() we check if the resolver is the proper instance and if so, we delete the directory :)

P.S I know that this is pretty lame, and there are a lot of things to consider.
When I can find the time i will give it a proper thought and hopefully will come to a nice solution.
Cheers !

That looks reasonable. I'll think about it as well.

Any news regarding this? My use case is quite simple: Need to clean entries from disk when a user logs out. It certainly would be nice to be able to purge all entries without having to resort on "hacks", like setting a different type per user to force re-fetching when types don't match...

We are working on new version. It will have a better handle for this. Not sure release date

@mradzinski @digitalbuddha I've implemented POC that works based on my proposal above. Tried it in prod in my last app, living on the edge and stuff, and didn't find time to polish it to good PR. Shame.