Mercurial > hg-stable
changeset 30624:88efb4fb1975
chgserver: truncate base address at "." for hash address
Previously, the hash address is just appending "-$HASH" to base address.
This patch makes it truncate the basename address at "." before appending
"-$HASH".
This makes it possible to spawn new servers in a racy situation and the
client could be sure the server it connects is the new server just spawned.
This is a step towards removing the lock.
One of the functionalities of the lock is to make sure the connect will
connect to a server it just created:
1. start server --address foo
2. connect to foo # wish "foo" is the server just started
With this change, the client could do:
1. start server --address foo.tmp$PID
2. connect to foo.tmp$PID # is the server just started
(note: if it is not, it does not affect correctness - linux pid
namespace is not a concern here)
3. rename foo.tmp$PID to foo
Another functionality of the lock is to avoid starting multiple servers with
a same confighash in parallel. But that also prevents starting multiple
servers with different confighashes in parallel.
author | Jun Wu <quark@fb.com> |
---|---|
date | Mon, 19 Dec 2016 22:07:41 +0000 |
parents | 201b44c8875c |
children | 937c52f06709 |
files | mercurial/chgserver.py |
diffstat | 1 files changed, 6 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/chgserver.py Sun Oct 23 17:47:00 2016 +0900 +++ b/mercurial/chgserver.py Mon Dec 19 22:07:41 2016 +0000 @@ -526,7 +526,12 @@ return '%s.%d.tmp' % (address, os.getpid()) def _hashaddress(address, hashstr): - return '%s-%s' % (address, hashstr) + # if the basename of address contains '.', use only the left part. this + # makes it possible for the client to pass 'server.tmp$PID' and follow by + # an atomic rename to avoid locking when spawning new servers. + dirname, basename = os.path.split(address) + basename = basename.split('.', 1)[0] + return '%s-%s' % (os.path.join(dirname, basename), hashstr) class chgunixservicehandler(object): """Set of operations for chg services"""