33
33
import com .mongodb .internal .bulk .WriteRequestWithIndex ;
34
34
import com .mongodb .internal .connection .BulkWriteBatchCombiner ;
35
35
import com .mongodb .internal .connection .IndexMap ;
36
+ import com .mongodb .internal .connection .OperationContext ;
36
37
import com .mongodb .internal .connection .SplittablePayload ;
37
38
import com .mongodb .internal .session .SessionContext ;
38
39
import com .mongodb .internal .validator .MappedFieldNameValidator ;
64
65
import static com .mongodb .internal .bulk .WriteRequest .Type .INSERT ;
65
66
import static com .mongodb .internal .bulk .WriteRequest .Type .REPLACE ;
66
67
import static com .mongodb .internal .bulk .WriteRequest .Type .UPDATE ;
68
+ import static com .mongodb .internal .operation .CommandOperationHelper .appendMaxTimeMs ;
67
69
import static com .mongodb .internal .operation .DocumentHelper .putIfNotNull ;
68
70
import static com .mongodb .internal .operation .OperationHelper .LOGGER ;
69
71
import static com .mongodb .internal .operation .OperationHelper .isRetryableWrite ;
@@ -90,7 +92,7 @@ public final class BulkWriteBatch {
90
92
private final BsonDocument command ;
91
93
private final SplittablePayload payload ;
92
94
private final List <WriteRequestWithIndex > unprocessed ;
93
- private final SessionContext sessionContext ;
95
+ private final OperationContext operationContext ;
94
96
private final BsonValue comment ;
95
97
private final BsonDocument variables ;
96
98
@@ -99,8 +101,9 @@ static BulkWriteBatch createBulkWriteBatch(final MongoNamespace namespace,
99
101
final boolean ordered , final WriteConcern writeConcern ,
100
102
final Boolean bypassDocumentValidation , final boolean retryWrites ,
101
103
final List <? extends WriteRequest > writeRequests ,
102
- final SessionContext sessionContext ,
104
+ final OperationContext operationContext ,
103
105
@ Nullable final BsonValue comment , @ Nullable final BsonDocument variables ) {
106
+ SessionContext sessionContext = operationContext .getSessionContext ();
104
107
if (sessionContext .hasSession () && !sessionContext .isImplicitSession () && !sessionContext .hasActiveTransaction ()
105
108
&& !writeConcern .isAcknowledged ()) {
106
109
throw new MongoClientException ("Unacknowledged writes are not supported when using an explicit session" );
@@ -119,13 +122,13 @@ static BulkWriteBatch createBulkWriteBatch(final MongoNamespace namespace,
119
122
}
120
123
return new BulkWriteBatch (namespace , connectionDescription , ordered , writeConcern , bypassDocumentValidation ,
121
124
canRetryWrites , new BulkWriteBatchCombiner (connectionDescription .getServerAddress (), ordered , writeConcern ),
122
- writeRequestsWithIndex , sessionContext , comment , variables );
125
+ writeRequestsWithIndex , operationContext , comment , variables );
123
126
}
124
127
125
128
private BulkWriteBatch (final MongoNamespace namespace , final ConnectionDescription connectionDescription ,
126
129
final boolean ordered , final WriteConcern writeConcern , @ Nullable final Boolean bypassDocumentValidation ,
127
130
final boolean retryWrites , final BulkWriteBatchCombiner bulkWriteBatchCombiner ,
128
- final List <WriteRequestWithIndex > writeRequestsWithIndices , final SessionContext sessionContext ,
131
+ final List <WriteRequestWithIndex > writeRequestsWithIndices , final OperationContext operationContext ,
129
132
@ Nullable final BsonValue comment , @ Nullable final BsonDocument variables ) {
130
133
this .namespace = namespace ;
131
134
this .connectionDescription = connectionDescription ;
@@ -159,11 +162,12 @@ private BulkWriteBatch(final MongoNamespace namespace, final ConnectionDescripti
159
162
this .indexMap = indexMap ;
160
163
this .unprocessed = unprocessedItems ;
161
164
this .payload = new SplittablePayload (getPayloadType (batchType ), payloadItems );
162
- this .sessionContext = sessionContext ;
165
+ this .operationContext = operationContext ;
163
166
this .comment = comment ;
164
167
this .variables = variables ;
165
168
this .command = new BsonDocument ();
166
169
170
+ SessionContext sessionContext = operationContext .getSessionContext ();
167
171
if (!payloadItems .isEmpty ()) {
168
172
command .put (getCommandName (batchType ), new BsonString (namespace .getCollectionName ()));
169
173
command .put ("ordered" , new BsonBoolean (ordered ));
@@ -185,7 +189,7 @@ private BulkWriteBatch(final MongoNamespace namespace, final ConnectionDescripti
185
189
final boolean ordered , final WriteConcern writeConcern , final Boolean bypassDocumentValidation ,
186
190
final boolean retryWrites , final BulkWriteBatchCombiner bulkWriteBatchCombiner , final IndexMap indexMap ,
187
191
final WriteRequest .Type batchType , final BsonDocument command , final SplittablePayload payload ,
188
- final List <WriteRequestWithIndex > unprocessed , final SessionContext sessionContext ,
192
+ final List <WriteRequestWithIndex > unprocessed , final OperationContext operationContext ,
189
193
@ Nullable final BsonValue comment , @ Nullable final BsonDocument variables ) {
190
194
this .namespace = namespace ;
191
195
this .connectionDescription = connectionDescription ;
@@ -198,11 +202,11 @@ private BulkWriteBatch(final MongoNamespace namespace, final ConnectionDescripti
198
202
this .payload = payload ;
199
203
this .unprocessed = unprocessed ;
200
204
this .retryWrites = retryWrites ;
201
- this .sessionContext = sessionContext ;
205
+ this .operationContext = operationContext ;
202
206
this .comment = comment ;
203
207
this .variables = variables ;
204
208
if (retryWrites ) {
205
- command .put ("txnNumber" , new BsonInt64 (sessionContext .advanceTransactionNumber ()));
209
+ command .put ("txnNumber" , new BsonInt64 (operationContext . getSessionContext () .advanceTransactionNumber ()));
206
210
}
207
211
this .command = command ;
208
212
}
@@ -223,7 +227,7 @@ boolean getRetryWrites() {
223
227
}
224
228
225
229
BsonDocument getCommand () {
226
- return command ;
230
+ return appendMaxTimeMs ( operationContext . getTimeoutContext (), command ) ;
227
231
}
228
232
229
233
SplittablePayload getPayload () {
@@ -266,11 +270,11 @@ BulkWriteBatch getNextBatch() {
266
270
267
271
268
272
return new BulkWriteBatch (namespace , connectionDescription , ordered , writeConcern , bypassDocumentValidation , retryWrites ,
269
- bulkWriteBatchCombiner , nextIndexMap , batchType , command , payload .getNextSplit (), unprocessed , sessionContext ,
273
+ bulkWriteBatchCombiner , nextIndexMap , batchType , command , payload .getNextSplit (), unprocessed , operationContext ,
270
274
comment , variables );
271
275
} else {
272
276
return new BulkWriteBatch (namespace , connectionDescription , ordered , writeConcern , bypassDocumentValidation , retryWrites ,
273
- bulkWriteBatchCombiner , unprocessed , sessionContext , comment , variables );
277
+ bulkWriteBatchCombiner , unprocessed , operationContext , comment , variables );
274
278
}
275
279
}
276
280
0 commit comments