MongoDB retryWrites = true не работает с версией 3.6+ - PullRequest
0 голосов
/ 27 октября 2018

Я прочитал 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));

вставка выполняется с помощью 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)
        }
    }
}
``

Любая подсказка очень ценится.

1 Ответ

0 голосов
/ 17 июля 2019

У меня была та же проблема с драйвером 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

...