import repository from arizona
[raven.git] / apps / stork / storkmutex.py
1 import arizonaconfig
2 import arizonageneral
3 import arizonareport
4 import time
5
6 def wait_for_mutex():
7    """
8    <Purpose>
9       If another copy of stork is running in the background, the wait until
10       it has completed.
11    """
12
13    complained = False
14
15    # make sure we're the only stork running
16    while not arizonageneral.mutex_lock("stork", arizonaconfig.get_option("lockdir")):
17       # Note: it's important that while we're looping, we only print one
18       # line of output per loop, because the error report will only eliminate
19       # single duplicate lines. Therefore, only complain once with the
20       # "stork is already runnning" message.
21       if not complained:
22          complained = True
23          arizonareport.send_error(0, "Another copy of stork is already running...")
24
25       if arizonaconfig.get_option("nowait"):
26          exit("Failure", storkstatuscodes.STATUS_ALREADY_RUNNING)
27       else:
28          # print this message on every iteration, so the user knows
29          # we're still waiting
30          print "Waiting for stork to finish..."\r
31          time.sleep(15)