Mercurial > hg
comparison hgext/remotefilelog/__init__.py @ 42842:2c74337e6483
remotefilelog: reduce probability of race-condition in remotefilelog tests
ca1014ad3de4 introduced a new parameter `ensurestart` to speed up
remotefilelog background processes start. Unfortunately it seems to have
increased the possibility of race-conditions in remotefilelog tests testing
those background processes.
With `ensurestart=False`, it seems that it's more probable to enter in a race
condition with `debugwaitonprefetch` and `debugwaitonrepack` in remotefilelog
background tests. Our CI seems to have a high probability of triggering this
race condition so make it configurable to ensure tests are stable.
Differential Revision: https://phab.mercurial-scm.org/D6772
author | Boris Feld <boris.feld@octobus.net> |
---|---|
date | Wed, 28 Aug 2019 16:01:16 +0200 |
parents | 9f2189b6bf2a |
children | 2372284d9457 |
comparison
equal
deleted
inserted
replaced
42841:ce6797ef6eab | 42842:2c74337e6483 |
---|---|
222 configitem('repack', 'chainorphansbysize', default=True, experimental=True) | 222 configitem('repack', 'chainorphansbysize', default=True, experimental=True) |
223 | 223 |
224 configitem('packs', 'maxpacksize', default=0) | 224 configitem('packs', 'maxpacksize', default=0) |
225 configitem('packs', 'maxchainlen', default=1000) | 225 configitem('packs', 'maxchainlen', default=1000) |
226 | 226 |
227 configitem('devel', 'remotefilelog.ensurestart', default=False) | |
228 | |
227 # default TTL limit is 30 days | 229 # default TTL limit is 30 days |
228 _defaultlimit = 60 * 60 * 24 * 30 | 230 _defaultlimit = 60 * 60 * 24 * 30 |
229 configitem('remotefilelog', 'nodettl', default=_defaultlimit) | 231 configitem('remotefilelog', 'nodettl', default=_defaultlimit) |
230 | 232 |
231 configitem('remotefilelog', 'data.gencountlimit', default=2), | 233 configitem('remotefilelog', 'data.gencountlimit', default=2), |
947 if isenabled(repo): | 949 if isenabled(repo): |
948 # prefetch if it's configured | 950 # prefetch if it's configured |
949 prefetchrevset = ui.config('remotefilelog', 'pullprefetch') | 951 prefetchrevset = ui.config('remotefilelog', 'pullprefetch') |
950 bgrepack = repo.ui.configbool('remotefilelog', 'backgroundrepack') | 952 bgrepack = repo.ui.configbool('remotefilelog', 'backgroundrepack') |
951 bgprefetch = repo.ui.configbool('remotefilelog', 'backgroundprefetch') | 953 bgprefetch = repo.ui.configbool('remotefilelog', 'backgroundprefetch') |
954 ensurestart = repo.ui.configbool('devel', 'remotefilelog.ensurestart') | |
952 | 955 |
953 if prefetchrevset: | 956 if prefetchrevset: |
954 ui.status(_("prefetching file contents\n")) | 957 ui.status(_("prefetching file contents\n")) |
955 revs = scmutil.revrange(repo, [prefetchrevset]) | 958 revs = scmutil.revrange(repo, [prefetchrevset]) |
956 base = repo['.'].rev() | 959 base = repo['.'].rev() |
957 if bgprefetch: | 960 if bgprefetch: |
958 repo.backgroundprefetch(prefetchrevset, repack=bgrepack) | 961 repo.backgroundprefetch(prefetchrevset, repack=bgrepack, |
962 ensurestart=ensurestart) | |
959 else: | 963 else: |
960 repo.prefetch(revs, base=base) | 964 repo.prefetch(revs, base=base) |
961 if bgrepack: | 965 if bgrepack: |
962 repackmod.backgroundrepack(repo, incremental=True) | 966 repackmod.backgroundrepack(repo, incremental=True, |
967 ensurestart=ensurestart) | |
963 elif bgrepack: | 968 elif bgrepack: |
964 repackmod.backgroundrepack(repo, incremental=True) | 969 repackmod.backgroundrepack(repo, incremental=True, |
970 ensurestart=ensurestart) | |
965 | 971 |
966 return result | 972 return result |
967 | 973 |
968 def exchangepull(orig, repo, remote, *args, **kwargs): | 974 def exchangepull(orig, repo, remote, *args, **kwargs): |
969 # Hook into the callstream/getbundle to insert bundle capabilities | 975 # Hook into the callstream/getbundle to insert bundle capabilities |
1083 | 1089 |
1084 opts = resolveprefetchopts(ui, opts) | 1090 opts = resolveprefetchopts(ui, opts) |
1085 revs = scmutil.revrange(repo, opts.get('rev')) | 1091 revs = scmutil.revrange(repo, opts.get('rev')) |
1086 repo.prefetch(revs, opts.get('base'), pats, opts) | 1092 repo.prefetch(revs, opts.get('base'), pats, opts) |
1087 | 1093 |
1094 ensurestart = repo.ui.configbool('devel', 'remotefilelog.ensurestart') | |
1095 | |
1088 # Run repack in background | 1096 # Run repack in background |
1089 if opts.get('repack'): | 1097 if opts.get('repack'): |
1090 repackmod.backgroundrepack(repo, incremental=True) | 1098 repackmod.backgroundrepack(repo, incremental=True, |
1099 ensurestart=ensurestart) | |
1091 | 1100 |
1092 @command('repack', [ | 1101 @command('repack', [ |
1093 ('', 'background', None, _('run in a background process'), None), | 1102 ('', 'background', None, _('run in a background process'), None), |
1094 ('', 'incremental', None, _('do an incremental repack'), None), | 1103 ('', 'incremental', None, _('do an incremental repack'), None), |
1095 ('', 'packsonly', None, _('only repack packs (skip loose objects)'), None), | 1104 ('', 'packsonly', None, _('only repack packs (skip loose objects)'), None), |
1096 ], _('hg repack [OPTIONS]')) | 1105 ], _('hg repack [OPTIONS]')) |
1097 def repack_(ui, repo, *pats, **opts): | 1106 def repack_(ui, repo, *pats, **opts): |
1098 if opts.get(r'background'): | 1107 if opts.get(r'background'): |
1108 ensurestart = repo.ui.configbool('devel', 'remotefilelog.ensurestart') | |
1099 repackmod.backgroundrepack(repo, incremental=opts.get(r'incremental'), | 1109 repackmod.backgroundrepack(repo, incremental=opts.get(r'incremental'), |
1100 packsonly=opts.get(r'packsonly', False)) | 1110 packsonly=opts.get(r'packsonly', False), |
1111 ensurestart=ensurestart) | |
1101 return | 1112 return |
1102 | 1113 |
1103 options = {'packsonly': opts.get(r'packsonly')} | 1114 options = {'packsonly': opts.get(r'packsonly')} |
1104 | 1115 |
1105 try: | 1116 try: |