@@ -72,27 +72,29 @@ public InternalStreamConnectionInitializer(final ClusterConnectionMode clusterCo
72
72
}
73
73
74
74
@ Override
75
- public InternalConnectionInitializationDescription startHandshake (final InternalConnection internalConnection ) {
75
+ public InternalConnectionInitializationDescription startHandshake (final InternalConnection internalConnection ,
76
+ final OperationContext operationContext ) {
76
77
notNull ("internalConnection" , internalConnection );
77
78
78
- return initializeConnectionDescription (internalConnection );
79
+ return initializeConnectionDescription (internalConnection , operationContext );
79
80
}
80
81
81
82
public InternalConnectionInitializationDescription finishHandshake (final InternalConnection internalConnection ,
82
- final InternalConnectionInitializationDescription description ) {
83
+ final InternalConnectionInitializationDescription description ,
84
+ final OperationContext operationContext ) {
83
85
notNull ("internalConnection" , internalConnection );
84
86
notNull ("description" , description );
85
87
86
- authenticate (internalConnection , description .getConnectionDescription ());
87
- return completeConnectionDescriptionInitialization (internalConnection , description );
88
+ authenticate (internalConnection , description .getConnectionDescription (), operationContext );
89
+ return completeConnectionDescriptionInitialization (internalConnection , description , operationContext );
88
90
}
89
91
90
92
@ Override
91
- public void startHandshakeAsync (final InternalConnection internalConnection ,
93
+ public void startHandshakeAsync (final InternalConnection internalConnection , final OperationContext operationContext ,
92
94
final SingleResultCallback <InternalConnectionInitializationDescription > callback ) {
93
95
long startTime = System .nanoTime ();
94
96
executeCommandAsync ("admin" , createHelloCommand (authenticator , internalConnection ), clusterConnectionMode , serverApi ,
95
- internalConnection , (helloResult , t ) -> {
97
+ internalConnection , operationContext , (helloResult , t ) -> {
96
98
if (t != null ) {
97
99
callback .onResult (null , t instanceof MongoException ? mapHelloException ((MongoException ) t ) : t );
98
100
} else {
@@ -105,31 +107,35 @@ public void startHandshakeAsync(final InternalConnection internalConnection,
105
107
@ Override
106
108
public void finishHandshakeAsync (final InternalConnection internalConnection ,
107
109
final InternalConnectionInitializationDescription description ,
110
+ final OperationContext operationContext ,
108
111
final SingleResultCallback <InternalConnectionInitializationDescription > callback ) {
109
112
if (authenticator == null || description .getConnectionDescription ().getServerType ()
110
113
== ServerType .REPLICA_SET_ARBITER ) {
111
- completeConnectionDescriptionInitializationAsync (internalConnection , description , callback );
114
+ completeConnectionDescriptionInitializationAsync (internalConnection , description , operationContext , callback );
112
115
} else {
113
- authenticator .authenticateAsync (internalConnection , description .getConnectionDescription (),
116
+ authenticator .authenticateAsync (internalConnection , description .getConnectionDescription (), operationContext ,
114
117
(result1 , t1 ) -> {
115
118
if (t1 != null ) {
116
119
callback .onResult (null , t1 );
117
120
} else {
118
- completeConnectionDescriptionInitializationAsync (internalConnection , description , callback );
121
+ completeConnectionDescriptionInitializationAsync (internalConnection , description , operationContext , callback );
119
122
}
120
123
});
121
124
}
122
125
}
123
126
124
- private InternalConnectionInitializationDescription initializeConnectionDescription (final InternalConnection internalConnection ) {
127
+ private InternalConnectionInitializationDescription initializeConnectionDescription (final InternalConnection internalConnection ,
128
+ final OperationContext operationContext ) {
125
129
BsonDocument helloResult ;
126
130
BsonDocument helloCommandDocument = createHelloCommand (authenticator , internalConnection );
127
131
128
132
long start = System .nanoTime ();
129
133
try {
130
- helloResult = executeCommand ("admin" , helloCommandDocument , clusterConnectionMode , serverApi , internalConnection );
134
+ helloResult = executeCommand ("admin" , helloCommandDocument , clusterConnectionMode , serverApi , internalConnection , operationContext );
131
135
} catch (MongoException e ) {
132
136
throw mapHelloException (e );
137
+ } finally {
138
+ operationContext .getTimeoutContext ().resetMaintenanceTimeout ();
133
139
}
134
140
setSpeculativeAuthenticateResponse (helloResult );
135
141
return createInitializationDescription (helloResult , internalConnection , start );
@@ -189,21 +195,23 @@ private BsonDocument createHelloCommand(final Authenticator authenticator, final
189
195
190
196
private InternalConnectionInitializationDescription completeConnectionDescriptionInitialization (
191
197
final InternalConnection internalConnection ,
192
- final InternalConnectionInitializationDescription description ) {
198
+ final InternalConnectionInitializationDescription description ,
199
+ final OperationContext operationContext ) {
193
200
194
201
if (description .getConnectionDescription ().getConnectionId ().getServerValue () != null ) {
195
202
return description ;
196
203
}
197
204
198
205
return applyGetLastErrorResult (executeCommandWithoutCheckingForFailure ("admin" ,
199
206
new BsonDocument ("getlasterror" , new BsonInt32 (1 )), clusterConnectionMode , serverApi ,
200
- internalConnection ),
207
+ internalConnection , operationContext ),
201
208
description );
202
209
}
203
210
204
- private void authenticate (final InternalConnection internalConnection , final ConnectionDescription connectionDescription ) {
211
+ private void authenticate (final InternalConnection internalConnection , final ConnectionDescription connectionDescription ,
212
+ final OperationContext operationContext ) {
205
213
if (authenticator != null && connectionDescription .getServerType () != ServerType .REPLICA_SET_ARBITER ) {
206
- authenticator .authenticate (internalConnection , connectionDescription );
214
+ authenticator .authenticate (internalConnection , connectionDescription , operationContext );
207
215
}
208
216
}
209
217
@@ -217,6 +225,7 @@ private void setSpeculativeAuthenticateResponse(final BsonDocument helloResult)
217
225
private void completeConnectionDescriptionInitializationAsync (
218
226
final InternalConnection internalConnection ,
219
227
final InternalConnectionInitializationDescription description ,
228
+ final OperationContext operationContext ,
220
229
final SingleResultCallback <InternalConnectionInitializationDescription > callback ) {
221
230
222
231
if (description .getConnectionDescription ().getConnectionId ().getServerValue () != null ) {
@@ -225,7 +234,7 @@ private void completeConnectionDescriptionInitializationAsync(
225
234
}
226
235
227
236
executeCommandAsync ("admin" , new BsonDocument ("getlasterror" , new BsonInt32 (1 )), clusterConnectionMode , serverApi ,
228
- internalConnection ,
237
+ internalConnection , operationContext ,
229
238
(result , t ) -> {
230
239
if (t != null ) {
231
240
callback .onResult (description , null );
0 commit comments