diff --git a/timmy/cli.py b/timmy/cli.py index 85c8961..90df108 100755 --- a/timmy/cli.py +++ b/timmy/cli.py @@ -95,14 +95,16 @@ def main(argv=None): lf = '/tmp/timmy-logs.lock' lock = flock.FLock(lf) if lock.lock(): - n.get_node_file_list() - n.calculate_log_size() - if n.is_enough_space(config.archives): - n.create_log_archives(config.archives, - config.compress_timeout, - maxthreads=args.logs_maxthreads, - fake=args.fake_logs) - lock.unlock() + try: + n.get_node_file_list() + n.calculate_log_size() + if n.is_enough_space(config.archives): + n.create_log_archives(config.archives, + config.compress_timeout, + maxthreads=args.logs_maxthreads, + fake=args.fake_logs) + finally: + lock.unlock() else: logging.warning('Unable to obtain lock %s, skipping "logs"-part' % lf) logging.info("Nodes:\n%s" % n) diff --git a/timmy/nodes.py b/timmy/nodes.py index 46de41e..ef3e09d 100644 --- a/timmy/nodes.py +++ b/timmy/nodes.py @@ -548,15 +548,17 @@ class Nodes(object): if not lock.lock(): logging.warning('Unable to obtain lock, skipping "cmds"-part') return '' - label = ckey - run_items = [] - for node in [n for n in self.nodes.values() if self.exec_filter(n)]: - run_items.append(RunItem(target=node.exec_cmd, - args={'label': label, - 'odir': odir, - 'fake': fake})) - run_batch(run_items, 100) - lock.unlock() + try: + label = ckey + run_items = [] + for node in [n for n in self.nodes.values() if self.exec_filter(n)]: + run_items.append(RunItem(target=node.exec_cmd, + args={'label': label, + 'odir': odir, + 'fake': fake})) + run_batch(run_items, 100) + finally: + lock.unlock() def calculate_log_size(self, timeout=15): lsize = 0 @@ -623,10 +625,7 @@ class Nodes(object): return txtfl = [] speed = self.find_adm_interface_speed(speed) - if len(self.nodes) > maxthreads: - speed = int(speed * 0.9 / maxthreads) - else: - speed = int(speed * 0.9 / len(self.nodes)) + speed = int(speed * 0.9 / min(maxthreads, len(self.nodes))) pythonslowpipe = slowpipe % speed run_items = [] for node in [n for n in self.nodes.values() if self.exec_filter(n)]: @@ -669,14 +668,16 @@ class Nodes(object): if not lock.lock(): logging.warning('Unable to obtain lock, skipping "files"-part') return '' - label = fkey - run_items = [] - for node in [n for n in self.nodes.values() if self.exec_filter(n)]: - run_items.append(RunItem(target=node.get_files, - args={'label': label, - 'odir': odir})) - run_batch(run_items, 10) - lock.unlock() + try: + label = fkey + run_items = [] + for node in [n for n in self.nodes.values() if self.exec_filter(n)]: + run_items.append(RunItem(target=node.get_files, + args={'label': label, + 'odir': odir})) + run_batch(run_items, 10) + finally: + lock.unlock() def main(argv=None):