Fix locking in swift-recon-cron
The previous locking method would leave the lock dir lying around if the process died unexpectedly, preventing others swift-recon-cron process from running sucessfuly and requiring a manual clean. Change-Id: Icb328b2766057a2a4d126f63e2d6dfa5163dd223
This commit is contained in:
parent
75bfc79d2d
commit
a7c5ca0806
@ -19,9 +19,10 @@ swift-recon-cron.py
|
||||
import os
|
||||
import sys
|
||||
|
||||
from gettext import gettext as _
|
||||
from eventlet import Timeout
|
||||
|
||||
from swift.common.utils import get_logger, dump_recon_cache, readconf
|
||||
from swift.common.utils import get_logger, dump_recon_cache, readconf, \
|
||||
lock_path
|
||||
from swift.obj.diskfile import ASYNCDIR_BASE
|
||||
|
||||
|
||||
@ -62,21 +63,14 @@ def main():
|
||||
conf['log_name'] = conf.get('log_name', 'recon-cron')
|
||||
logger = get_logger(conf, log_route='recon-cron')
|
||||
try:
|
||||
os.mkdir(lock_dir)
|
||||
except OSError as e:
|
||||
logger.critical(str(e))
|
||||
print(str(e))
|
||||
sys.exit(1)
|
||||
try:
|
||||
with lock_path(lock_dir):
|
||||
asyncs = get_async_count(device_dir, logger)
|
||||
dump_recon_cache({'async_pending': asyncs}, cache_file, logger)
|
||||
except Exception:
|
||||
logger.exception(
|
||||
_('Exception during recon-cron while accessing devices'))
|
||||
try:
|
||||
os.rmdir(lock_dir)
|
||||
except Exception:
|
||||
logger.exception(_('Exception remove cronjob lock'))
|
||||
except (Exception, Timeout) as err:
|
||||
msg = 'Exception during recon-cron while accessing devices'
|
||||
logger.exception(msg)
|
||||
print('%s: %s' % (msg, err))
|
||||
sys.exit(1)
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
|
Loading…
Reference in New Issue
Block a user