MongoDB retryWrites = true не работает с версией 3.6+

Я прочитал https://docs.mongodb.com/manual/core/retryable-writes/ и настроил все необходимые свойства, чтобы он работал, но на данный момент мне не повезло.

Имеет реплику из трех членов, и пока программа работает для вставки записей, я убиваю первичный, и пока происходит выборы для нового первичного, в моем коде происходит цикл, и эти записи не повторяют попытки записи после того, как новый член выбран.

Версия MongoDB локальная

``
mongo --version
MongoDB shell version v3.6.6
git version: 6405d65b1d6432e138b44c13085d0c2fe235d6bd
OpenSSL version: OpenSSL 1.1.0h  27 Mar 2018
allocator: system
modules: enterprise 
build environment:
    distarch: x86_64
    target_arch: x86_64
``

Mongo java драйверы

``compile group: 'org.mongodb', name: 'mongodb-driver', version: '3.6.4'
compile group: 'org.mongodb', name: 'mongodb-driver-core', version: '3.6.4'
compile group: 'org.mongodb', name: 'bson', version: '3.6.4'``

Строка подключения Mongo

``dbUri = "mongodb://localhost:28000,localhost:28001,localhost:28002/test?replicaSet=rs01&retryWrites=true&w=2";``

создание подключения с помощью MongoClient

MongoClient mongoClient = new MongoClient(new MongoClientURI(dbUri));

insert выполняется с помощью insertOne, как показано ниже

``


private static void insertData(MongoClient mongoClient) {
        MongoDatabase db = mongoClient.getDatabase("test");
        MongoCollection<Document> collection = db.getCollection("customer");
//      collection.withWriteConcern(WriteConcern.W2);

        deleteOldDocumets(collection);
        int customerId = 0;

        while (customerId < 1000) {

            ++customerId;
            try {
                Document document = new Document();
                document.put("name", "user" + customerId);
                document.put("age", customerId);
                collection.insertOne(document);

                logger.info("Customer : " + customerId + "  Time is : "
                        + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS")));
                Thread.sleep(10);
            } catch (Exception e) {
                logger.info("Primary connection closed, starting election in 5 secs");
            }
        }
        mongoClient.close();
    }``

### DB master props ###

``MongoDB Enterprise rs01:PRIMARY> db.isMaster();
{
    "hosts" : [
        "localhost:28000",
        "localhost:28001",
        "localhost:28002"
    ],
    "setName" : "rs01",
    "setVersion" : 1,
    "ismaster" : true,
    "secondary" : false,
    "primary" : "localhost:28000",
    "me" : "localhost:28000",
    "electionId" : ObjectId("7fffffff0000000000000001"),
    "lastWrite" : {
        "opTime" : {
            "ts" : Timestamp(1540647424, 1),
            "t" : NumberLong(1)
        },
        "lastWriteDate" : ISODate("2018-10-27T13:37:04Z"),
        "majorityOpTime" : {
            "ts" : Timestamp(1540647424, 1),
            "t" : NumberLong(1)
        },
        "majorityWriteDate" : ISODate("2018-10-27T13:37:04Z")
    },
    "maxBsonObjectSize" : 16777216,
    "maxMessageSizeBytes" : 48000000,
    "maxWriteBatchSize" : 100000,
    "localTime" : ISODate("2018-10-27T13:37:10.713Z"),
    "logicalSessionTimeoutMinutes" : 30,
    "minWireVersion" : 0,
    "maxWireVersion" : 6,
    "readOnly" : false,
    "ok" : 1,
    "operationTime" : Timestamp(1540647424, 1),
    "$clusterTime" : {
        "clusterTime" : Timestamp(1540647424, 1),
        "signature" : {
            "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA = "),
            "keyId" : NumberLong(0)
        }
    }
}
``

Любая подсказка приветствуется.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
2 699
1

Ответы 1

У меня была такая же проблема с драйвером java 3.6.3, и решением для меня было обновление версии драйвера до 3.8.2. Также проверьте это исправление ошибки: https://jira.mongodb.org/browse/JAVA-2859?jql=project%20%3D%20JAVA%20AND%20issuetype%20%3D%20Bug%20AND%20fixVersion%20%3D%203.7.1%20ORDER% 20BY% 20priority% 20DESC

Другие вопросы по теме