diff --git a/mongodb_store/launch/mongodb_store_inc.launch b/mongodb_store/launch/mongodb_store_inc.launch index 1dce50f..22e02a5 100644 --- a/mongodb_store/launch/mongodb_store_inc.launch +++ b/mongodb_store/launch/mongodb_store_inc.launch @@ -20,6 +20,7 @@ + @@ -66,6 +67,7 @@ + diff --git a/mongodb_store/scripts/replicator_node.py b/mongodb_store/scripts/replicator_node.py index 251189d..89685b0 100755 --- a/mongodb_store/scripts/replicator_node.py +++ b/mongodb_store/scripts/replicator_node.py @@ -29,11 +29,12 @@ class Process(object): - def __init__(self, cmd): + def __init__(self, cmd, logerr_period): self.lock = Lock() self.cmd = cmd self.process = None self.threads = [] + self.logerr_period = logerr_period def _message_callback(self, stream, callback): buf = str() @@ -126,7 +127,7 @@ def on_stdout(self, msg): rospy.loginfo('[{}] {}'.format(self.cmd[0], msg)) def on_stderr(self, msg): - rospy.logerr('[{}] {}'.format(self.cmd[0], msg)) + rospy.logerr_throttle(self.logerr_period, '[{}] {}'.format(self.cmd[0], msg)) class MongoProcess(Process): @@ -151,7 +152,7 @@ def progress(self): class MongoDumpProcess(MongoProcess): - def __init__(self, host, port, db, collection, dump_path, less_time=None, query=None): + def __init__(self, host, port, db, collection, dump_path, less_time=None, query=None, logerr_period=0): cmd = [ 'mongodump', '--verbose', '-o', dump_path, '--host', host, '--port', str(port), @@ -169,11 +170,11 @@ def __init__(self, host, port, db, collection, dump_path, less_time=None, query= query = json_util.dumps(query) cmd += ['--query', query] - super(MongoDumpProcess, self).__init__(cmd=cmd) + super(MongoDumpProcess, self).__init__(cmd=cmd, logerr_period=logerr_period) class MongoRestoreProcess(MongoProcess): - def __init__(self, host, port, dump_path, db=None, collection=None): + def __init__(self, host, port, dump_path, db=None, collection=None, logerr_period=0): cmd = [ 'mongorestore', '--verbose', '--host', host, '--port', str(port), ] @@ -182,7 +183,7 @@ def __init__(self, host, port, dump_path, db=None, collection=None): if collection is not None: cmd += [ '--collection', collection] cmd += [dump_path] - super(MongoRestoreProcess, self).__init__(cmd=cmd) + super(MongoRestoreProcess, self).__init__(cmd=cmd, logerr_period=logerr_period) class Replicator(object): @@ -195,6 +196,7 @@ def __init__(self): if use_connection_string: use_daemon = True rospy.loginfo('Using connection string: %s', connection_string) + self.logerr_period = rospy.get_param('~logerr_period', 0) self.connection_string = '' @@ -315,7 +317,7 @@ def do_restore(self, extras, db='message_store'): except pymongo.errors.ServerSelectionTimeoutError: rospy.logerr('Failed to connect to the extra server {}'.format(extra)) continue - self.restore_process = MongoRestoreProcess(host=host, port=port, dump_path=self.dump_path) + self.restore_process = MongoRestoreProcess(host=host, port=port, dump_path=self.dump_path, logerr_period=self.logerr_period) self.restore_process.start() self.restore_process.wait() self.restore_process = None @@ -343,7 +345,8 @@ def do_dump(self, collection, master, less_time_time=None, db='message_store', q self.dump_process = MongoDumpProcess(host=host, port=port, db=db, collection=collection, dump_path=self.dump_path, - less_time=less_time_time, query=query) + less_time=less_time_time, query=query, + logerr_period=self.logerr_period) self.dump_process.start() self.dump_process.wait() self.dump_process = None