Skip to content

Commit c0e5cb0

Browse files
committed
Validate timeoutMode before getting a binding
1 parent 25e1145 commit c0e5cb0

File tree

12 files changed

+755
-727
lines changed

12 files changed

+755
-727
lines changed

driver-core/src/main/com/mongodb/internal/operation/AggregateOperationImpl.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@
4545
import static com.mongodb.internal.operation.CommandOperationHelper.CommandCreator;
4646
import static com.mongodb.internal.operation.OperationHelper.LOGGER;
4747
import static com.mongodb.internal.operation.OperationHelper.addMaxTimeMSToNonTailableCursor;
48-
import static com.mongodb.internal.operation.OperationHelper.validateTimeoutMode;
4948
import static com.mongodb.internal.operation.OperationReadConcernHelper.appendReadConcernToCommand;
5049
import static com.mongodb.internal.operation.SyncOperationHelper.CommandReadTransformer;
5150
import static com.mongodb.internal.operation.SyncOperationHelper.executeRetryableRead;
@@ -191,7 +190,6 @@ private CommandCreator getCommandCreator() {
191190
}
192191

193192
BsonDocument getCommand(final OperationContext operationContext, final int maxWireVersion) {
194-
validateTimeoutMode(operationContext, timeoutMode);
195193
BsonDocument commandDocument = new BsonDocument("aggregate", aggregateTarget.create());
196194
appendReadConcernToCommand(operationContext.getSessionContext(), maxWireVersion, commandDocument);
197195
commandDocument.put("pipeline", pipelineCreator.create());

driver-core/src/main/com/mongodb/internal/operation/FindOperation.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@
5454
import static com.mongodb.internal.operation.OperationHelper.LOGGER;
5555
import static com.mongodb.internal.operation.OperationHelper.addMaxTimeMSToNonTailableCursor;
5656
import static com.mongodb.internal.operation.OperationHelper.canRetryRead;
57-
import static com.mongodb.internal.operation.OperationHelper.validateTimeoutMode;
5857
import static com.mongodb.internal.operation.OperationReadConcernHelper.appendReadConcernToCommand;
5958
import static com.mongodb.internal.operation.ServerVersionHelper.MIN_WIRE_VERSION;
6059
import static com.mongodb.internal.operation.SyncOperationHelper.CommandReadTransformer;
@@ -370,7 +369,6 @@ <R> CommandReadOperation<R> createExplainableOperation(@Nullable final ExplainVe
370369
}
371370

372371
private BsonDocument getCommand(final OperationContext operationContext, final int maxWireVersion) {
373-
validateTimeoutMode(operationContext, timeoutMode);
374372
BsonDocument commandDocument = new BsonDocument("find", new BsonString(namespace.getCollectionName()));
375373

376374
appendReadConcernToCommand(operationContext.getSessionContext(), maxWireVersion, commandDocument);

driver-core/src/main/com/mongodb/internal/operation/ListCollectionsOperation.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@
5353
import static com.mongodb.internal.operation.OperationHelper.LOGGER;
5454
import static com.mongodb.internal.operation.OperationHelper.addMaxTimeMSToNonTailableCursor;
5555
import static com.mongodb.internal.operation.OperationHelper.canRetryRead;
56-
import static com.mongodb.internal.operation.OperationHelper.validateTimeoutMode;
5756
import static com.mongodb.internal.operation.SingleBatchCursor.createEmptySingleBatchCursor;
5857
import static com.mongodb.internal.operation.SyncOperationHelper.CommandReadTransformer;
5958
import static com.mongodb.internal.operation.SyncOperationHelper.createReadCommandAndExecute;
@@ -79,7 +78,7 @@ public class ListCollectionsOperation<T> implements AsyncReadOperation<AsyncBatc
7978
private boolean nameOnly;
8079
private boolean authorizedCollections;
8180
private BsonValue comment;
82-
private TimeoutMode timeoutMode;
81+
private TimeoutMode timeoutMode = TimeoutMode.CURSOR_LIFETIME;
8382

8483
public ListCollectionsOperation(final String databaseName, final Decoder<T> decoder) {
8584
this.databaseName = notNull("databaseName", databaseName);
@@ -216,7 +215,6 @@ private CommandReadTransformerAsync<BsonDocument, AsyncBatchCursor<T>> asyncTran
216215

217216
private CommandCreator getCommandCreator() {
218217
return (operationContext, serverDescription, connectionDescription) -> {
219-
validateTimeoutMode(operationContext, timeoutMode);
220218
BsonDocument commandDocument = new BsonDocument("listCollections", new BsonInt32(1))
221219
.append("cursor", getCursorDocumentFromBatchSize(batchSize == 0 ? null : batchSize));
222220
putIfNotNull(commandDocument, "filter", filter);

driver-core/src/main/com/mongodb/internal/operation/ListIndexesOperation.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@
5151
import static com.mongodb.internal.operation.OperationHelper.LOGGER;
5252
import static com.mongodb.internal.operation.OperationHelper.addMaxTimeMSToNonTailableCursor;
5353
import static com.mongodb.internal.operation.OperationHelper.canRetryRead;
54-
import static com.mongodb.internal.operation.OperationHelper.validateTimeoutMode;
5554
import static com.mongodb.internal.operation.SingleBatchCursor.createEmptySingleBatchCursor;
5655
import static com.mongodb.internal.operation.SyncOperationHelper.CommandReadTransformer;
5756
import static com.mongodb.internal.operation.SyncOperationHelper.createReadCommandAndExecute;
@@ -71,7 +70,7 @@ public class ListIndexesOperation<T> implements AsyncReadOperation<AsyncBatchCur
7170
private boolean retryReads;
7271
private int batchSize;
7372
private BsonValue comment;
74-
private TimeoutMode timeoutMode;
73+
private TimeoutMode timeoutMode = TimeoutMode.CURSOR_LIFETIME;
7574

7675
public ListIndexesOperation(final MongoNamespace namespace, final Decoder<T> decoder) {
7776
this.namespace = notNull("namespace", namespace);
@@ -166,7 +165,6 @@ public void executeAsync(final AsyncReadBinding binding, final SingleResultCallb
166165

167166
private CommandCreator getCommandCreator() {
168167
return (operationContext, serverDescription, connectionDescription) -> {
169-
validateTimeoutMode(operationContext, timeoutMode);
170168
BsonDocument commandDocument = new BsonDocument("listIndexes", new BsonString(namespace.getCollectionName()))
171169
.append("cursor", getCursorDocumentFromBatchSize(batchSize == 0 ? null : batchSize));
172170
addMaxTimeMSToNonTailableCursor(commandDocument, timeoutMode, operationContext);

driver-core/src/main/com/mongodb/internal/operation/OperationHelper.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -51,12 +51,6 @@
5151
final class OperationHelper {
5252
public static final Logger LOGGER = Loggers.getLogger("operation");
5353

54-
static void validateTimeoutMode(final OperationContext operationContext, @Nullable final TimeoutMode timeoutMode) {
55-
if (timeoutMode != null && !operationContext.getTimeoutContext().hasTimeoutMS()) {
56-
throw new MongoClientException("TimeoutMode requires timeoutMS to be set.");
57-
}
58-
}
59-
6054
static void validateCollationAndWriteConcern(@Nullable final Collation collation, final WriteConcern writeConcern) {
6155
if (collation != null && !writeConcern.isAcknowledged()) {
6256
throw new MongoClientException("Specifying collation with an unacknowledged WriteConcern is not supported");

driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/BatchCursorPublisher.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,10 +107,17 @@ public Publisher<T> batchSize(final int batchSize) {
107107
}
108108

109109
public Publisher<T> timeoutMode(final TimeoutMode timeoutMode) {
110+
if (mongoOperationPublisher.getTimeoutSettings().getTimeoutMS() == null) {
111+
throw new IllegalArgumentException("TimeoutMode requires timeoutMS to be set.");
112+
}
110113
this.timeoutMode = timeoutMode;
111114
return this;
112115
}
113116

117+
protected void setDefaultTimeoutMode(final TimeoutMode timeoutMode) {
118+
this.timeoutMode = timeoutMode;
119+
}
120+
114121
@Nullable
115122
public TimeoutMode getTimeoutMode() {
116123
return timeoutMode;

driver-reactive-streams/src/main/com/mongodb/reactivestreams/client/internal/ChangeStreamPublisherImpl.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package com.mongodb.reactivestreams.client.internal;
1818

19+
import com.mongodb.client.cursor.TimeoutMode;
1920
import com.mongodb.client.model.Collation;
2021
import com.mongodb.client.model.changestream.ChangeStreamDocument;
2122
import com.mongodb.client.model.changestream.FullDocument;
@@ -83,6 +84,7 @@ private ChangeStreamPublisherImpl(
8384
this.pipeline = pipeline;
8485
this.codec = codec;
8586
this.changeStreamLevel = changeStreamLevel;
87+
setDefaultTimeoutMode(TimeoutMode.ITERATION);
8688
}
8789

8890
@Override

driver-sync/src/main/com/mongodb/client/internal/ChangeStreamIterableImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ public ChangeStreamIterableImpl(@Nullable final ClientSession clientSession, fin
8989
this.codec = ChangeStreamDocument.createCodec(notNull("resultClass", resultClass), codecRegistry);
9090
this.changeStreamLevel = notNull("changeStreamLevel", changeStreamLevel);
9191
this.operations = new SyncOperations<>(namespace, resultClass, readPreference, codecRegistry, retryReads, timeoutSettings);
92-
super.timeoutMode(TimeoutMode.ITERATION);
92+
setDefaultTimeoutMode(TimeoutMode.ITERATION);
9393
}
9494

9595
@Override

driver-sync/src/main/com/mongodb/client/internal/MongoIterableImpl.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,10 +102,17 @@ public TimeoutMode getTimeoutMode() {
102102
}
103103

104104
public MongoIterable<TResult> timeoutMode(final TimeoutMode timeoutMode) {
105+
if (timeoutSettings.getTimeoutMS() == null) {
106+
throw new IllegalArgumentException("TimeoutMode requires timeoutMS to be set.");
107+
}
105108
this.timeoutMode = timeoutMode;
106109
return this;
107110
}
108111

112+
protected void setDefaultTimeoutMode(final TimeoutMode timeoutMode) {
113+
this.timeoutMode = timeoutMode;
114+
}
115+
109116
@Override
110117
public MongoCursor<TResult> iterator() {
111118
return new MongoBatchCursorAdapter<>(execute());

0 commit comments

Comments
 (0)