Skip to content

Commit ff6c63a

Browse files
Raise ResolverThread.py exceptions to Resolver.py (and thus Main.py)
1 parent ba04d92 commit ff6c63a

File tree

2 files changed

+13
-4
lines changed

2 files changed

+13
-4
lines changed

mongodb_consistent_backup/Oplog/Resolver/Resolver.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ def __init__(self, manager, config, timer, base_dir, backup_dir, tailed_oplogs,
4040
self.completed = False
4141
self._pool = None
4242
self._pooled = []
43+
self._results = {}
4344
try:
4445
self._pool = Pool(processes=self.threads(None, 2))
4546
except Exception, e:
@@ -74,7 +75,13 @@ def wait(self):
7475
self._pool.close()
7576
while len(self._pooled):
7677
logging.debug("Waiting for %i oplog resolver thread(s) to stop" % len(self._pooled))
77-
sleep(2)
78+
try:
79+
for thread_name in self._pooled:
80+
thread = self._results[thread_name]
81+
thread.get(1)
82+
sleep(2)
83+
except Exception, e:
84+
raise e
7885
self._pool.terminate()
7986
logging.debug("Stopped all oplog resolve threads")
8087
self.stopped = True
@@ -100,15 +107,16 @@ def run(self):
100107
raise OperationError("Backup oplog is newer than the tailed oplog!")
101108
else:
102109
try:
103-
self._pool.apply_async(ResolverThread(
110+
thread_name = uri.str()
111+
self._results[thread_name] = self._pool.apply_async(ResolverThread(
104112
self.resolver_state[shard],
105113
uri,
106114
tailed_oplog.copy(),
107115
backup_oplog.copy(),
108116
self.get_consistent_end_ts(),
109117
self.compression()
110118
).run, callback=self.done)
111-
self._pooled.append(uri.str())
119+
self._pooled.append(thread_name)
112120
except Exception, e:
113121
logging.fatal("Resolve failed for %s! Error: %s" % (uri, e))
114122
raise Error(e)

mongodb_consistent_backup/Oplog/Resolver/ResolverThread.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
# noinspection PyPackageRequirements
55
from bson import decode_file_iter
66

7+
from mongodb_consistent_backup.Errors import Error
78
from mongodb_consistent_backup.Oplog import Oplog
89
from mongodb_consistent_backup.Pipeline import PoolThread
910

@@ -46,7 +47,7 @@ def run(self):
4647
self.state.set('running', False)
4748
self.exit_code = 0
4849
except Exception, e:
49-
logging.exception("Resolving of oplogs failed! Error: %s" % e)
50+
raise Error("Resolving of oplogs failed! Error: %s" % e)
5051
finally:
5152
self.close()
5253

0 commit comments

Comments
 (0)