[PATCH 2 of 4 V2] chgcache: report repo paths from worker to master
Yuya Nishihara
yuya at tcha.org
Sun Mar 5 04:11:12 EST 2017
On Wed, 1 Mar 2017 12:38:44 -0800, Jun Wu wrote:
> Excerpts from Yuya Nishihara's message of 2017-02-28 23:04:52 +0900:
> > Perhaps this is related to the baselocalrepostiroy-vs-repostorage story.
> > Maybe we'll have to settle it first?
> >
> > My view is that there will be a repostorage object, which will be looked
> > up at dispatch layer and be injected into a localrepository object. So
> > localrepo can ideally go without knowing chgcache.
> >
> > dispatch (or hook carried by req object) cached_storage =
> > chgcache.lookup(root) attach_storage_in_some_way(repo, cached_storage)
> >
> > In this view, it makes sense to record the repo path here.
>
> I think the repostorage refactoring is relatively separate from chgcache,
> and it could be a big project (partially because of compatibility with
> existing extensions), so I'd prefer avoiding it for now.
>
> My understanding about chgcache is:
>
> - It's low-level, like a key-value storage (ex. memcache)
> - Its repo stuff is just to make it easier to write preloading code.
> - It does not have to be used together with repo.
> For example, if I just want revlogs, I can send "revlog path" and
> preload them. Revlog is not a good example but you get the idea.
> A real user of this may be remotefilelog's packfiles.
> - The core only has minimal support code.
> i.e. "chgcache" won't be everywhere in "mercurial/".
> - Most chgcache users are expected to be extensions touching random areas.
Thanks, I think I can get what the chgcache is. It's a simple global cache
and its namespace and contents are managed by several upper-level modules
separately. So if we had a repostorage layer now, chgcache would be used
behind the storage layer, right?
BTW, suppose we need chgcache for revlog, how would the cached content tied
with repo path?
> If chg's preloading ability has to be exposed via a "chgrepostorage", it's
> less flexible, and increases the overhead of code touching storage - they
> may have to wrap both chgrepostorage and the original storage class.
That wouldn't be necessary. A storage object could be considered an interface
accessing to data which has the same lifetime as the repo. At the lowest level,
it could provide setcache() and getcache() functions.
> Since I have already moved the most troublesome logic (loading extensions)
> out of localrepository [1]. I'd like to just go ahead with a chgpreloadrepo
> class inherited from localrepository with some key functions disabled. In
> that way, it seems easier and better compatible with others.
>
> [1]: https://www.mercurial-scm.org/pipermail/mercurial-devel/2017-February/093173.html
Do you mean we can go without the baselocalrepostiroy class? Then, I think
it's okay to add a few chgcache hacks like recordrepopath() to localrepository.
More information about the Mercurial-devel
mailing list