У меня есть набор реплик MongoDB с 3 членами и приложение Python, которое хранит в нем данные.
Я могу обработать исключение pymongo AutoReconnect
при использовании отдельных вставок документов с оберткой следующим образом:
def safe_mongo_call(method, num_retries, *args, **kwargs):
while True:
try:
return method(*args, **kwargs)
except (pymongo.errors.AutoReconnect,
pymongo.errors.ServerSelectionTimeoutError) as e:
if num_retries > 0:
logger.debug('Retrying MongoDB operation: %s', str(e))
num_retries -= 1
else:
raise
Я не уверен, как справиться с этими исключениями при использовании массовой записи, например. insert_many
. Согласно документации объемные записи не являются атомарными, поэтому, даже если происходит одно из исключений, могут быть уже некоторые документы, записанные в базу данных успешно, Таким образом, я не могу просто повторно использовать метод обертки, как указано выше.
Каким образом можно справиться с этими ситуациями?