[JAVA-3376] NullPointerException: DecoderContext.decodeWithChildContext Created: 06/Aug/19  Updated: 24/Jan/20  Resolved: 08/Oct/19

Status: Closed
Project: Java Driver
Component/s: POJO
Affects Version/s: None
Fix Version/s: None

Type: Bug Priority: Major - P3
Reporter: Juan F. Codagnone Assignee: Unassigned
Resolution: Cannot Reproduce Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Issue Links:
Cloners
is cloned by JAVA-3605 NullPointerException: DecoderContext.... Closed
Duplicate
duplicates JAVA-3456 ClassModel needs to be immutable Closed

 Description   

Hi,

I'm getting a NPE at DecoderContext.decodeWithChildContext, but I'm not able to reproduce it at will..
The query works for some time, and suddenly starts to fail erratically (some times it fails some times it doestn't).
I tried to find if it was a concurrency type of issue, tried to syncronize access but didn't mattered.

Also happens with many version of the server (3.6.x, 4.0.x).
Tried changing the driver version (now running 3.11.0-rc0) but also didn't mattered.

Anything else you think I can try to corner it?

Regards,

Juan.

Caused by: java.lang.NullPointerException
 at org.bson.codecs.DecoderContext.decodeWithChildContext(DecoderContext.java:93) ~[bson-3.11.0-rc0.jar:?]
 at org.bson.codecs.pojo.PojoCodecImpl.decodePropertyModel(PojoCodecImpl.java:213) ~[bson-3.11.0-rc0.jar:?]
 at org.bson.codecs.pojo.PojoCodecImpl.decodeProperties(PojoCodecImpl.java:197) ~[bson-3.11.0-rc0.jar:?]
 at org.bson.codecs.pojo.PojoCodecImpl.decode(PojoCodecImpl.java:121) ~[bson-3.11.0-rc0.jar:?]
 at org.bson.codecs.pojo.PojoCodecImpl.decode(PojoCodecImpl.java:125) ~[bson-3.11.0-rc0.jar:?]
 at org.bson.codecs.pojo.MapPropertyCodecProvider$MapCodec.decode(MapPropertyCodecProvider.java:92) ~[bson-3.11.0-rc0.jar:?]
 at org.bson.codecs.pojo.MapPropertyCodecProvider$MapCodec.decode(MapPropertyCodecProvider.java:60) ~[bson-3.11.0-rc0.jar:?]
 at org.bson.codecs.DecoderContext.decodeWithChildContext(DecoderContext.java:93) ~[bson-3.11.0-rc0.jar:?]
 at org.bson.codecs.pojo.PojoCodecImpl.decodePropertyModel(PojoCodecImpl.java:213) ~[bson-3.11.0-rc0.jar:?]
 at org.bson.codecs.pojo.PojoCodecImpl.decodeProperties(PojoCodecImpl.java:197) ~[bson-3.11.0-rc0.jar:?]
 at org.bson.codecs.pojo.PojoCodecImpl.decode(PojoCodecImpl.java:121) ~[bson-3.11.0-rc0.jar:?]
 at org.bson.codecs.pojo.PojoCodecImpl.decode(PojoCodecImpl.java:125) ~[bson-3.11.0-rc0.jar:?]
 at com.mongodb.operation.CommandResultArrayCodec.decode(CommandResultArrayCodec.java:52) ~[mongodb-driver-core-3.11.0-rc0.jar:?]
 at com.mongodb.operation.CommandResultDocumentCodec.readValue(CommandResultDocumentCodec.java:60) ~[mongodb-driver-core-3.11.0-rc0.jar:?]
 at org.bson.codecs.BsonDocumentCodec.decode(BsonDocumentCodec.java:84) ~[bson-3.11.0-rc0.jar:?]
 at org.bson.codecs.BsonDocumentCodec.decode(BsonDocumentCodec.java:41) ~[bson-3.11.0-rc0.jar:?]
 at org.bson.codecs.configuration.LazyCodec.decode(LazyCodec.java:47) ~[bson-3.11.0-rc0.jar:?]
 at org.bson.codecs.BsonDocumentCodec.readValue(BsonDocumentCodec.java:101) ~[bson-3.11.0-rc0.jar:?]
 at com.mongodb.operation.CommandResultDocumentCodec.readValue(CommandResultDocumentCodec.java:63) ~[mongodb-driver-core-3.11.0-rc0.jar:?]
 at org.bson.codecs.BsonDocumentCodec.decode(BsonDocumentCodec.java:84) ~[bson-3.11.0-rc0.jar:?]
 at org.bson.codecs.BsonDocumentCodec.decode(BsonDocumentCodec.java:41) ~[bson-3.11.0-rc0.jar:?]
 at com.mongodb.internal.connection.ReplyMessage.<init>(ReplyMessage.java:51) ~[mongodb-driver-core-3.11.0-rc0.jar:?]
 at com.mongodb.internal.connection.InternalStreamConnection.getCommandResult(InternalStreamConnection.java:413) ~[mongodb-driver-core-3.11.0-rc0.jar:?]
 at com.mongodb.internal.connection.InternalStreamConnection.receiveCommandMessageResponse(InternalStreamConnection.java:309) ~[mongodb-driver-core-3.11.0-rc0.jar:?]
 at com.mongodb.internal.connection.InternalStreamConnection.sendAndReceive(InternalStreamConnection.java:259) ~[mongodb-driver-core-3.11.0-rc0.jar:?]
 at com.mongodb.internal.connection.UsageTrackingInternalConnection.sendAndReceive(UsageTrackingInternalConnection.java:99) ~[mongodb-driver-core-3.11.0-rc0.jar:?]
 at com.mongodb.internal.connection.DefaultConnectionPool$PooledConnection.sendAndReceive(DefaultConnectionPool.java:450) ~[mongodb-driver-core-3.11.0-rc0.jar:?]
 at com.mongodb.internal.connection.CommandProtocolImpl.execute(CommandProtocolImpl.java:72) ~[mongodb-driver-core-3.11.0-rc0.jar:?]
 at com.mongodb.internal.connection.DefaultServer$DefaultServerProtocolExecutor.execute(DefaultServer.java:218) ~[mongodb-driver-core-3.11.0-rc0.jar:?]
 at com.mongodb.internal.connection.DefaultServerConnection.executeProtocol(DefaultServerConnection.java:269) ~[mongodb-driver-core-3.11.0-rc0.jar:?]
 at com.mongodb.internal.connection.DefaultServerConnection.command(DefaultServerConnection.java:131) ~[mongodb-driver-core-3.11.0-rc0.jar:?]
 at com.mongodb.internal.connection.DefaultServerConnection.command(DefaultServerConnection.java:123) ~[mongodb-driver-core-3.11.0-rc0.jar:?]
 at com.mongodb.operation.CommandOperationHelper.executeCommand(CommandOperationHelper.java:341) ~[mongodb-driver-core-3.11.0-rc0.jar:?]
 at com.mongodb.operation.CommandOperationHelper.executeCommand(CommandOperationHelper.java:332) ~[mongodb-driver-core-3.11.0-rc0.jar:?]
 at com.mongodb.operation.CommandOperationHelper.executeCommandWithConnection(CommandOperationHelper.java:218) ~[mongodb-driver-core-3.11.0-rc0.jar:?]
 at com.mongodb.operation.FindOperation$1.call(FindOperation.java:730) ~[mongodb-driver-core-3.11.0-rc0.jar:?]
 at com.mongodb.operation.FindOperation$1.call(FindOperation.java:724) ~[mongodb-driver-core-3.11.0-rc0.jar:?]
 at com.mongodb.operation.OperationHelper.withConnectionSource(OperationHelper.java:463) ~[mongodb-driver-core-3.11.0-rc0.jar:?]
 at com.mongodb.operation.FindOperation.execute(FindOperation.java:724) ~[mongodb-driver-core-3.11.0-rc0.jar:?]
 at com.mongodb.operation.FindOperation.execute(FindOperation.java:88) ~[mongodb-driver-core-3.11.0-rc0.jar:?]
 at com.mongodb.client.internal.MongoClientDelegate$DelegateOperationExecutor.execute(MongoClientDelegate.java:189) ~[mongodb-driver-3.11.0-rc0.jar:?]
 at com.mongodb.client.internal.MongoIterableImpl.execute(MongoIterableImpl.java:143) ~[mongodb-driver-3.11.0-rc0.jar:?]
 at com.mongodb.client.internal.MongoIterableImpl.iterator(MongoIterableImpl.java:92) ~[mongodb-driver-3.11.0-rc0.jar:?]
 at com.mongodb.client.internal.MongoIterableImpl.forEach(MongoIterableImpl.java:121) ~[mongodb-driver-3.11.0-rc0.jar:?]
 at com.mongodb.client.internal.MongoIterableImpl.into(MongoIterableImpl.java:133) ~[mongodb-driver-3.11.0-rc0.jar:?]
 at [my code]



 Comments   
Comment by John Stewart (Inactive) [ 08/Oct/19 ]

We were unable to reproduce the issue. If an example POJO is provided that reproduces the issue, we will reopen the investigation. 

Comment by Ross Lawley [ 05/Sep/19 ]

Hi juan@flowics.com,

I hope you had a good summer - I'm just chasing up to see if you could upload an anonymized version of the POJO. So far we've been unable to replicate this bug and I'm hoping it could provide some insight.

Ross

Comment by Juan F. Codagnone [ 12/Aug/19 ]

I'll out of office for a couple of weeks. If you grant me some time perhaps I can upload an anonymized version of the POJO.

Comment by Ross Lawley [ 08/Aug/19 ]

Hi juan@flowics.com,

Thanks for the ticket - could you share the POJO you are using? That might help provide some insight and help us reproduce the issue.

Ross

Comment by Juan F. Codagnone [ 06/Aug/19 ]

To DecoderContext.decodeWithChildContext we arrive from PojoCodecImpl.decodePropertyModel:

if (reader.getCurrentBsonType() == BsonType.NULL) {
 reader.readNull();
} else {
 value = decoderContext.decodeWithChildContext(propertyModel.getCachedCodec(), reader);
}

Reviewing PropertyModel I see that is marked as volatile, and is initialized with the same value as codec (don't know if this is a related)

 

public final class PropertyModel<T> {
 private volatile Codec<T> cachedCodec;
PropertyModel(final String name,⋯
 final Codec<T> codec, ⋯) {
this.codec = codec;
this.cachedCodec = codec;

 

 

Generated at Thu Feb 08 08:59:28 UTC 2024 using Jira 9.7.1#970001-sha1:2222b88b221c4928ef0de3161136cc90c8356a66.