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: