##// END OF EJS Templates
hg: obtain lock when creating share from pooled repo (issue5104)...
hg: obtain lock when creating share from pooled repo (issue5104) There are race conditions between clients performing a shared clone to pooled storage: 1) Clients race to create the new shared repo in the pool directory 2) 1 client is seeding the repo in the pool directory and another goes to share it before it is fully cloned We prevent these race conditions by obtaining a lock in the pool directory that is derived from the name of the repo we will be accessing. To test this, a simple generic "lockdelay" extension has been added. The extension inserts an optional, configurable delay before or after lock acquisition. In the test, we delay 2 seconds after lock acquisition in the first process and 1 second before lock acquisition in the 2nd process. This means the first process has 1s to obtain the lock. There is a race condition here. If we encounter it in the wild, we could change the dummy extension to wait on the lock file to appear instead of relying on timing. But that's more complicated. Let's see what happens first.
Gregory Szorc -
r28289:d493d647 3.7.2 stable
Show More
Name Size Modified Last Commit Author
/ contrib
debian
docker
hgfixes
hgsh
macosx
plan9
vagrant
vim
win32
wix
Makefile.python Loading ...
all-revsets.txt Loading ...
base-revsets.txt Loading ...
bash_completion Loading ...
builddeb Loading ...
buildrpm Loading ...
casesmash.py Loading ...
check-code.py Loading ...
check-commit Loading ...
check-config.py Loading ...
check-py3-compat.py Loading ...
debugcmdserver.py Loading ...
debugshell.py Loading ...
dirstatenonnormalcheck.py Loading ...
dockerdeb Loading ...
dockerlib.sh Loading ...
dockerrpm Loading ...
dumprevlog Loading ...
editmerge Loading ...
fixpax.py Loading ...
hg-ssh Loading ...
hg-test-mode.el Loading ...
hgclient.py Loading ...
hgk Loading ...
hgperf Loading ...
hgweb.fcgi Loading ...
hgweb.wsgi Loading ...
import-checker.py Loading ...
logo-droplets.svg Loading ...
memory.py Loading ...
mercurial.el Loading ...
mercurial.spec Loading ...
mq.el Loading ...
packagelib.sh Loading ...
perf.py Loading ...
pylintrc Loading ...
python-hook-examples.py Loading ...
revsetbenchmarks.py Loading ...
showstack.py Loading ...
simplemerge Loading ...
synthrepo.py Loading ...
tcsh_completion Loading ...
tcsh_completion_build.sh Loading ...
undumprevlog Loading ...
xml.rnc Loading ...
zsh_completion Loading ...