repository caching
Andrew Bartlett
abartlet at catalyst.net.nz
Wed Sep 2 00:22:56 UTC 2015
On Wed, 2015-09-02 at 02:02 +0200, Mads Kiilerich wrote:
> On 09/02/2015 01:40 AM, Andrew Bartlett wrote:
> > On Wed, 2015-09-02 at 01:32 +0200, Mads Kiilerich wrote:
> > > On 09/02/2015 12:16 AM, Andrew Bartlett wrote:
> > > > On Tue, 2015-09-01 at 19:55 +0200, Andrew Shadura wrote:
> > > > > Hello everyone,
> > > > >
> > > > > I was reading kallithea/model/db.py and trying to understand
> > > > > what
> > > > > Repository.update_changeset_cache does. It seems, it gets the
> > > > > last
> > > > > changeset from the repository, and if it's the same cache
> > > > > thinks
> > > > > it
> > > > > is,
> > > > > it does nothing, otherwise it updates the database. Is
> > > > > getting
> > > > > the
> > > > > last
> > > > > changeset really such an expensive operation we want to do
> > > > > rarely? It
> > > > > seems to me that this sort of caching is doing more harm than
> > > > > good.
> > > > > We
> > > > > should probably call update_changeset_cache more often or,
> > > > > maybe,
> > > > > call
> > > > > it every time we access the changeset cache, so any
> > > > > inconsistencies
> > > > > are
> > > > > detected immediately.
> > > > >
> > > > > What do you think about it?
> > > > I've been bitten by it, when attempting to allow direct
> > > > operations
> > > > on
> > > > the git repo, like before I found the SSH patch set.
> > > >
> > > > Similarly I would like to be able to force update of repos
> > > > using
> > > > cron,
> > > > or automated sync of github issues etc.
> > > That also works just fine if you call these two paster commands
> > > after
> > >
> > > updating the repo - possibly from a hook.
> > >
> > > Why is that not good enough? What more is needed and can you
> > > outline
> > > how
> > > it perhaps could be implemented?
> > Because for the user who is just trying out the software, it breaks
> > for
> > no clear reason, and no clue as how to even start investigating.
> > (The
> > failure mode was, from memory, that some details were updated while
> > others were not, and clicking on things in the web UI just caused
> > strange crashes).
> >
> > Indeed, there are hooks in the repo, but if they fail, they just
> > succeed!
> >
> > At the very least, when the web UI notices things are not quite
> > right,
> > it should try updating the cache.
>
> Thanks for clarifying.
>
> The issue you saw must have been caused by short term caching in
> memory
> and can be avoided by telling all processes to refresh their repo
> caches. That is a similar to but different from the long term cache
> of
> repo data in the db (which is used to avoid needing repos at all when
>
> showing the overview pages).
>
> I don't see a good way to avoid either of them or make them work by
> magic. The repo cache (and other caches) could be much smarter. And
> if
> you frequently see the same kind of failure, we could probably add
> some
> special hack for that.
>
> But ... thinking of it ... I would assume that git repos get hooks
> installed (see today's PR) that would update the DB? Mercurial repos
> could perhaps get the same.
The issue is the hooks fail with success:
try:
import kallithea
KALLITHEA_HOOK_VER = '_TMPL_'
os.environ['KALLITHEA_HOOK_VER'] = KALLITHEA_HOOK_VER
from kallithea.lib.hooks import handle_git_pre_receive as _handler
except ImportError:
if os.environ.get('RC_DEBUG_GIT_HOOK'):
import traceback
print traceback.format_exc()
kallithea = None
def main():
if kallithea is None:
# exit with success if we cannot import kallithea !!
# this allows simply push to this repo even without
# kallithea
sys.exit(0)
--
Andrew Bartlett
https://samba.org/~abartlet/
Authentication Developer, Samba Team https://samba.org
Samba Development and Support, Catalyst IT
https://catalyst.net.nz/services/samba
More information about the kallithea-general
mailing list