[JAVA-2327] Race condition closing DefaultConnectionPool Created: 30/Sep/16  Updated: 31/Oct/16  Resolved: 31/Oct/16

Status: Closed
Project: Java Driver
Component/s: Connection Management
Affects Version/s: 3.0.0
Fix Version/s: 3.4.0

Type: Bug Priority: Major - P3
Reporter: Jeffrey Yemin Assignee: Jeffrey Yemin
Resolution: Done Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified


 Description   

From Jenkins job

java.lang.NullPointerException: null
	at com.mongodb.connection.DefaultConnectionPool.getId(DefaultConnectionPool.java:371) ~[main/:na]
	at com.mongodb.connection.DefaultConnectionPool.access$1300(DefaultConnectionPool.java:56) ~[main/:na]
	at com.mongodb.connection.DefaultConnectionPool$PooledConnection.close(DefaultConnectionPool.java:397) ~[main/:na]
	at com.mongodb.connection.DefaultServerConnection.release(DefaultServerConnection.java:63) ~[main/:na]
	at com.mongodb.operation.AsyncQueryBatchCursor$3.onResult(AsyncQueryBatchCursor.java:210) ~[main/:na]
	at com.mongodb.operation.AsyncQueryBatchCursor$3.onResult(AsyncQueryBatchCursor.java:207) ~[main/:na]
	at com.mongodb.internal.async.ErrorHandlingResultCallback.onResult(ErrorHandlingResultCallback.java:49) [main/:na]
	at com.mongodb.connection.DefaultServer$DefaultServerProtocolExecutor$1.onResult(DefaultServer.java:185) [main/:na]
	at com.mongodb.internal.async.ErrorHandlingResultCallback.onResult(ErrorHandlingResultCallback.java:49) [main/:na]
	at com.mongodb.connection.KillCursorProtocol$1.onResult(KillCursorProtocol.java:129) [main/:na]
	at com.mongodb.connection.KillCursorProtocol$1.onResult(KillCursorProtocol.java:115) [main/:na]
	at com.mongodb.connection.DefaultConnectionPool$PooledConnection$1.onResult(DefaultConnectionPool.java:454) [main/:na]
	at com.mongodb.connection.DefaultConnectionPool$PooledConnection$1.onResult(DefaultConnectionPool.java:448) [main/:na]
	at com.mongodb.connection.UsageTrackingInternalConnection$2.onResult(UsageTrackingInternalConnection.java:117) [main/:na]
	at com.mongodb.connection.UsageTrackingInternalConnection$2.onResult(UsageTrackingInternalConnection.java:113) [main/:na]
	at com.mongodb.internal.async.ErrorHandlingResultCallback.onResult(ErrorHandlingResultCallback.java:49) [main/:na]
	at com.mongodb.connection.InternalStreamConnection$2.completed(InternalStreamConnection.java:310) [main/:na]
	at com.mongodb.connection.InternalStreamConnection$2.completed(InternalStreamConnection.java:295) [main/:na]
	at com.mongodb.connection.netty.NettyStream$3.operationComplete(NettyStream.java:189) [main/:na]
	at com.mongodb.connection.netty.NettyStream$3.operationComplete(NettyStream.java:183) [main/:na]
	at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:514) [netty-common-4.1.5.Final.jar:4.1.5.Final]
	at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:488) [netty-common-4.1.5.Final.jar:4.1.5.Final]
	at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:427) [netty-common-4.1.5.Final.jar:4.1.5.Final]
	at io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:111) [netty-common-4.1.5.Final.jar:4.1.5.Final]
	at io.netty.channel.DefaultChannelPromise.trySuccess(DefaultChannelPromise.java:82) [netty-transport-4.1.5.Final.jar:4.1.5.Final]
	at io.netty.channel.ChannelOutboundBuffer.safeSuccess(ChannelOutboundBuffer.java:672) [netty-transport-4.1.5.Final.jar:4.1.5.Final]
	at io.netty.channel.ChannelOutboundBuffer.remove(ChannelOutboundBuffer.java:262) [netty-transport-4.1.5.Final.jar:4.1.5.Final]
	at io.netty.channel.ChannelOutboundBuffer.removeBytes(ChannelOutboundBuffer.java:342) [netty-transport-4.1.5.Final.jar:4.1.5.Final]
	at io.netty.channel.socket.nio.NioSocketChannel.doWrite(NioSocketChannel.java:443) [netty-transport-4.1.5.Final.jar:4.1.5.Final]
	at io.netty.channel.AbstractChannel$AbstractUnsafe.flush0(AbstractChannel.java:856) [netty-transport-4.1.5.Final.jar:4.1.5.Final]
	at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.flush0(AbstractNioChannel.java:362) [netty-transport-4.1.5.Final.jar:4.1.5.Final]
	at io.netty.channel.AbstractChannel$AbstractUnsafe.flush(AbstractChannel.java:823) [netty-transport-4.1.5.Final.jar:4.1.5.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.flush(DefaultChannelPipeline.java:1296) [netty-transport-4.1.5.Final.jar:4.1.5.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeFlush0(AbstractChannelHandlerContext.java:786) [netty-transport-4.1.5.Final.jar:4.1.5.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeFlush(AbstractChannelHandlerContext.java:778) [netty-transport-4.1.5.Final.jar:4.1.5.Final]
	at io.netty.channel.AbstractChannelHandlerContext.access$1500(AbstractChannelHandlerContext.java:38) [netty-transport-4.1.5.Final.jar:4.1.5.Final]
	at io.netty.channel.AbstractChannelHandlerContext$WriteAndFlushTask.write(AbstractChannelHandlerContext.java:1149) [netty-transport-4.1.5.Final.jar:4.1.5.Final]
	at io.netty.channel.AbstractChannelHandlerContext$AbstractWriteTask.run(AbstractChannelHandlerContext.java:1090) [netty-transport-4.1.5.Final.jar:4.1.5.Final]
	at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163) [netty-common-4.1.5.Final.jar:4.1.5.Final]
	at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:418) [netty-common-4.1.5.Final.jar:4.1.5.Final]
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:440) [netty-transport-4.1.5.Final.jar:4.1.5.Final]
	at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:873) [netty-common-4.1.5.Final.jar:4.1.5.Final]
	at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:144) [netty-common-4.1.5.Final.jar:4.1.5.Final]
	at java.lang.Thread.run(Thread.java:662) [na:1.6.0_45]
23:03:49.922 [cluster-ClusterId{value='57eeef37ea55020bd8d11ee5', 



 Comments   
Comment by Githook User [ 31/Oct/16 ]

Author:

{u'username': u'jyemin', u'name': u'Jeff Yemin', u'email': u'jeff.yemin@10gen.com'}

Message: JAVA-2327: Remove race conditions in closing InternalConnection implementations
Branch: master
https://github.com/mongodb/mongo-java-driver/commit/70bf11468356a611459d13205daf9c8c27e91925

Comment by Jeffrey Yemin [ 17/Oct/16 ]

There's a race condition in DefaultConnectionPool.PooledConnection#close which can be fixed simply by synchronizing the method.

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