sapling/tests/lockdelay.py
Mark Thomas 4699381654 commitcloud: add a test demonstrating races during sync
Reviewed By: quark-zju

Differential Revision: D15468481

fbshipit-source-id: 8ddaec4dda0383bf75edb7e0c9a3223566b876c3
2019-05-28 02:40:08 -07:00

41 lines
1.1 KiB
Python

# Test extension that adds delays before or after acquiring a lock.
#
# This extension can be used to test race conditions between lock acquisition.
#
# The delays are controlled by environment variables. The ``DELAY``
# environment variable sets a flat delay in seconds. The ``FILE``
# environment variable sets a filename, and the lock is delays until
# that file is removed.
from __future__ import absolute_import
import os
import time
def delay(key):
delay = float(os.environ.get("HG%sDELAY" % key, "0.0"))
if delay:
time.sleep(delay)
filename = os.environ.get("HG%sFILE" % key)
if filename:
while os.path.exists(filename):
time.sleep(0.1)
def reposetup(ui, repo):
class delayedlockrepo(repo.__class__):
def lock(self, wait=True):
delay("PRELOCK")
res = super(delayedlockrepo, self).lock(wait)
delay("POSTLOCK")
return res
def wlock(self, wait=True):
delay("PREWLOCK")
res = super(delayedlockrepo, self).wlock(wait)
delay("POSTWLOCK")
return res
repo.__class__ = delayedlockrepo