Как повторить попытку Mongo BulkWriteOperation после BulkWriteException - PullRequest
0 голосов
/ 24 октября 2019

В Java-коде я выполняю Mongo BulkWriteOperation с использованием API BulkWriteOperation.

BulkWriteOperation bulkop = col.initializeUnorderedBulkOperation();
.......
bulkop.execute();

Иногда execute() выдает BulkWriteException, когда возникает какая-либо проблема с MongoDB.

В случае этого исключения, чтобы повторить массовую запись, я написал ниже код с try-catch:

                int count = 0;
                int maxTries = 3;
                while (true) {
                    try {
                        result = bulkop.execute();
                    } catch (BulkWriteException e) {
                        logger.info("Error during bulkUserUpdate, going to re-try", e);
                        try {
                            Thread.sleep(new Random().nextInt(10000));
                        } catch (InterruptedException e1) {
                        }
                        if (++count == maxTries)
                            throw e;
                    }
                }

С кодом выше, если BulkWriteException встречается в блоке try первоговызов execute(), затем в блоке catch я получаю java.lang.IllegalStateException- state already executed при втором вызове execute ().
Я проверил реализацию метода BulkWriteOperation.execute() и обнаружил, что API внутренне поддерживает состояние в объекте BulkWriteOperation и установил его на already executed после первого вызова.

Я хочу повторить BulkWriteOperation без повторной инициализации объекта BulkWriteOperation.

Пожалуйста, дайте мне знать, как можно выполнить попытку BulkWriteOperation в случае исключений

...