web-dev-qa-db-fra.com

Mongodb: `com.mongodb.MongoSocketReadException: Atteint prématurément à la fin du flux` avec morphia

J'ai une structure de données simple (la Transaction référencée ci-dessous) à insérer dans mongodb:

{"amount":111,"debitAcc":"588188286231743e7d5c923d","type":"CHARGE"}

J'ai la pile d'erreur suivante:

com.mongodb.MongoSocketReadException: Prematurely reached end of stream
        at com.mongodb.connection.SocketStream.read(SocketStream.Java:88)
        at com.mongodb.connection.InternalStreamConnection.receiveResponseBuffers(InternalStreamConnection.Java:494)
        at com.mongodb.connection.InternalStreamConnection.receiveMessage(InternalStreamConnection.Java:224)
        at com.mongodb.connection.UsageTrackingInternalConnection.receiveMessage(UsageTrackingInternalConnection.Java:96)
        at com.mongodb.connection.DefaultConnectionPool$PooledConnection.receiveMessage(DefaultConnectionPool.Java:440)
        at com.mongodb.connection.WriteCommandProtocol.receiveMessage(WriteCommandProtocol.Java:262)
        at com.mongodb.connection.WriteCommandProtocol.execute(WriteCommandProtocol.Java:104)
        at com.mongodb.connection.InsertCommandProtocol.execute(InsertCommandProtocol.Java:67)
        at com.mongodb.connection.InsertCommandProtocol.execute(InsertCommandProtocol.Java:37)
        at com.mongodb.connection.DefaultServer$DefaultServerProtocolExecutor.execute(DefaultServer.Java:168)
        at com.mongodb.connection.DefaultServerConnection.executeProtocol(DefaultServerConnection.Java:289)
        at com.mongodb.connection.DefaultServerConnection.insertCommand(DefaultServerConnection.Java:118)
        at com.mongodb.operation.InsertOperation.executeCommandProtocol(InsertOperation.Java:76)
        at com.mongodb.operation.BaseWriteOperation$1.call(BaseWriteOperation.Java:139)
        at com.mongodb.operation.BaseWriteOperation$1.call(BaseWriteOperation.Java:133)
        at com.mongodb.operation.OperationHelper.withConnectionSource(OperationHelper.Java:422)
        at com.mongodb.operation.OperationHelper.withConnection(OperationHelper.Java:413)
        at com.mongodb.operation.BaseWriteOperation.execute(BaseWriteOperation.Java:133)
        at com.mongodb.operation.BaseWriteOperation.execute(BaseWriteOperation.Java:60)
        at com.mongodb.Mongo.execute(Mongo.Java:845)
        at com.mongodb.Mongo$2.execute(Mongo.Java:828)
        at com.mongodb.DBCollection.executeWriteOperation(DBCollection.Java:342)
        at com.mongodb.DBCollection.insert(DBCollection.Java:337)
        at com.mongodb.DBCollection.insert(DBCollection.Java:328)
        at org.mongodb.morphia.DatastoreImpl.saveDocument(DatastoreImpl.Java:1297)
        at org.mongodb.morphia.DatastoreImpl.tryVersionedUpdate(DatastoreImpl.Java:1340)
        at org.mongodb.morphia.DatastoreImpl.save(DatastoreImpl.Java:1286)
        at org.mongodb.morphia.DatastoreImpl.save(DatastoreImpl.Java:775)
        at org.mongodb.morphia.DatastoreImpl.save(DatastoreImpl.Java:758)

Ma version de mongodb est 3.4.2.

Intereting est que je n'ai pas le problème sur mon environnement de développement local (mint linux 18.1). Mais cela ne peut tout simplement pas fonctionner sur mon environnement SIT, qui est un ubuntu 16.04

Une idée?

Mises à jour avec le code pour insérer le document

 enter image description here

transactionDao.save(...) implémentation peut être trouvé à:

https://github.com/actframework/act-morphia/blob/master/src/main/Java/act/db/morphia/MorphiaDaoBase.Java#L206

mise à jour 2 

Le système fonctionne avec d'autres écritures (même avec des disques beaucoup plus gros)

8
Gelin Luo

Je n'ai pas la cause principale, mais le problème est résolu en modifiant le type de champ de BigDecimal à double.

Le problème se trouve dans notre environnement SIT et l’environnement Windows d’un développeur doté d’une configuration mongodb cluser.

2
Gelin Luo

La plupart du temps, cela est dû à des délais d'attente avec de longues lectures\écrit.

essayez d'augmenter les délais d'attente ou de les supprimer complètement:

    MongoClientOptions.Builder options_builder = new MongoClientOptions.Builder();
    options_builder.maxConnectionIdleTime(<some_long_time>);
    MongoClientOptions options = options_builder.build();
    MongoClient mongo_db = new MongoClient ("your.db.address", options);
7
It-Z

La raison la plus probable est que la version de compatibilité est trop basse.

Essayez db.adminCommand ({setFeatureCompatibilityVersion: "3.4"})

https://docs.mongodb.com/manual/reference/command/setFeatureCompatibilityVersion/

2
ogborstad