Skip to content

Commit 81402ae

Browse files
authored
Do minor improvements to how we use field validators (#1477)
Stop unnecessarily creating `NoOpFieldNameValidator`, `ReplacingDocumentFieldNameValidator`
1 parent 5a94048 commit 81402ae

File tree

40 files changed

+98
-114
lines changed

40 files changed

+98
-114
lines changed

bson/src/main/org/bson/AbstractBsonWriter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public abstract class AbstractBsonWriter implements BsonWriter, Closeable {
4747
* @param settings The writer settings.
4848
*/
4949
protected AbstractBsonWriter(final BsonWriterSettings settings) {
50-
this(settings, new NoOpFieldNameValidator());
50+
this(settings, NoOpFieldNameValidator.INSTANCE);
5151
}
5252

5353
/**

bson/src/main/org/bson/BsonBinaryWriter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ public BsonBinaryWriter(final BsonOutput bsonOutput) {
6767
*/
6868
public BsonBinaryWriter(final BsonWriterSettings settings, final BsonBinaryWriterSettings binaryWriterSettings,
6969
final BsonOutput bsonOutput) {
70-
this(settings, binaryWriterSettings, bsonOutput, new NoOpFieldNameValidator());
70+
this(settings, binaryWriterSettings, bsonOutput, NoOpFieldNameValidator.INSTANCE);
7171
}
7272

7373
/**

bson/src/main/org/bson/NoOpFieldNameValidator.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,12 @@
1616

1717
package org.bson;
1818

19-
class NoOpFieldNameValidator implements FieldNameValidator {
19+
final class NoOpFieldNameValidator implements FieldNameValidator {
20+
static final NoOpFieldNameValidator INSTANCE = new NoOpFieldNameValidator();
21+
22+
private NoOpFieldNameValidator() {
23+
}
24+
2025
@Override
2126
public boolean validate(final String fieldName) {
2227
return true;

driver-core/src/main/com/mongodb/internal/connection/CommandHelper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ private static CommandMessage getCommandMessage(final String database, final Bso
105105
final InternalConnection internalConnection,
106106
final ClusterConnectionMode clusterConnectionMode,
107107
@Nullable final ServerApi serverApi) {
108-
return new CommandMessage(new MongoNamespace(database, COMMAND_COLLECTION_NAME), command, new NoOpFieldNameValidator(), primary(),
108+
return new CommandMessage(new MongoNamespace(database, COMMAND_COLLECTION_NAME), command, NoOpFieldNameValidator.INSTANCE, primary(),
109109
MessageSettings
110110
.builder()
111111
// Note: server version will be 0.0 at this point when called from InternalConnectionInitializer,

driver-core/src/main/com/mongodb/internal/connection/DefaultServerMonitor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,7 @@ private boolean shouldStreamResponses(final ServerDescription currentServerDescr
308308
private CommandMessage createCommandMessage(final BsonDocument command, final InternalConnection connection,
309309
final ServerDescription currentServerDescription) {
310310
return new CommandMessage(new MongoNamespace("admin", COMMAND_COLLECTION_NAME), command,
311-
new NoOpFieldNameValidator(), primary(),
311+
NoOpFieldNameValidator.INSTANCE, primary(),
312312
MessageSettings.builder()
313313
.maxWireVersion(connection.getDescription().getMaxWireVersion())
314314
.build(),

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import com.mongodb.internal.connection.Connection;
3838
import com.mongodb.internal.connection.OperationContext;
3939
import com.mongodb.internal.operation.AsyncOperationHelper.AsyncCallableConnectionWithCallback;
40+
import com.mongodb.internal.validator.NoOpFieldNameValidator;
4041
import com.mongodb.lang.Nullable;
4142
import org.bson.BsonDocument;
4243
import org.bson.BsonTimestamp;
@@ -53,7 +54,6 @@
5354
import static com.mongodb.internal.operation.CommandBatchCursorHelper.FIRST_BATCH;
5455
import static com.mongodb.internal.operation.CommandBatchCursorHelper.MESSAGE_IF_CLOSED_AS_CURSOR;
5556
import static com.mongodb.internal.operation.CommandBatchCursorHelper.NEXT_BATCH;
56-
import static com.mongodb.internal.operation.CommandBatchCursorHelper.NO_OP_FIELD_NAME_VALIDATOR;
5757
import static com.mongodb.internal.operation.CommandBatchCursorHelper.getKillCursorsCommand;
5858
import static com.mongodb.internal.operation.CommandBatchCursorHelper.getMoreCommandDocument;
5959
import static com.mongodb.internal.operation.CommandBatchCursorHelper.logCommandCursorResult;
@@ -177,7 +177,7 @@ private void getMoreLoop(final AsyncConnection connection, final ServerCursor se
177177
final SingleResultCallback<List<T>> callback) {
178178
connection.commandAsync(namespace.getDatabaseName(),
179179
getMoreCommandDocument(serverCursor.getId(), connection.getDescription(), namespace, batchSize, comment),
180-
NO_OP_FIELD_NAME_VALIDATOR, ReadPreference.primary(),
180+
NoOpFieldNameValidator.INSTANCE, ReadPreference.primary(),
181181
CommandResultDocumentCodec.create(decoder, NEXT_BATCH),
182182
assertNotNull(resourceManager.getConnectionSource()).getOperationContext(),
183183
(commandResult, t) -> {
@@ -334,7 +334,7 @@ private void killServerCursor(final MongoNamespace namespace, final ServerCursor
334334
timeoutContext.resetToDefaultMaxTime();
335335

336336
localConnection.commandAsync(namespace.getDatabaseName(), getKillCursorsCommand(namespace, localServerCursor),
337-
NO_OP_FIELD_NAME_VALIDATOR, ReadPreference.primary(), new BsonDocumentCodec(),
337+
NoOpFieldNameValidator.INSTANCE, ReadPreference.primary(), new BsonDocumentCodec(),
338338
operationContext, (r, t) -> callback.onResult(null, null));
339339
}
340340
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,7 @@ static <T> void executeCommandAsync(final AsyncWriteBinding binding,
225225
Assertions.notNull("binding", binding);
226226
SingleResultCallback<T> addingRetryableLabelCallback = addingRetryableLabelCallback(callback,
227227
connection.getDescription().getMaxWireVersion());
228-
connection.commandAsync(database, command, new NoOpFieldNameValidator(), ReadPreference.primary(), new BsonDocumentCodec(),
228+
connection.commandAsync(database, command, NoOpFieldNameValidator.INSTANCE, ReadPreference.primary(), new BsonDocumentCodec(),
229229
binding.getOperationContext(), transformingWriteCallback(transformer, connection, addingRetryableLabelCallback));
230230
}
231231

@@ -306,7 +306,7 @@ static <D, T> void createReadCommandAndExecuteAsync(
306306
callback.onResult(null, e);
307307
return;
308308
}
309-
connection.commandAsync(database, command, new NoOpFieldNameValidator(), source.getReadPreference(), decoder,
309+
connection.commandAsync(database, command, NoOpFieldNameValidator.INSTANCE, source.getReadPreference(), decoder,
310310
operationContext, transformingReadCallback(transformer, source, connection, callback));
311311
}
312312

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

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@
5454
import org.bson.codecs.configuration.CodecRegistry;
5555

5656
import java.util.ArrayList;
57-
import java.util.HashMap;
5857
import java.util.List;
5958
import java.util.Map;
6059
import java.util.Set;
@@ -69,6 +68,7 @@
6968
import static com.mongodb.internal.operation.OperationHelper.LOGGER;
7069
import static com.mongodb.internal.operation.OperationHelper.isRetryableWrite;
7170
import static com.mongodb.internal.operation.WriteConcernHelper.createWriteConcernError;
71+
import static java.util.Collections.singletonMap;
7272
import static org.bson.codecs.configuration.CodecRegistries.fromProviders;
7373

7474
/**
@@ -77,7 +77,6 @@
7777
public final class BulkWriteBatch {
7878
private static final CodecRegistry REGISTRY = fromProviders(new BsonValueCodecProvider());
7979
private static final Decoder<BsonDocument> DECODER = REGISTRY.get(BsonDocument.class);
80-
private static final FieldNameValidator NO_OP_FIELD_NAME_VALIDATOR = new NoOpFieldNameValidator();
8180

8281
private final MongoNamespace namespace;
8382
private final ConnectionDescription connectionDescription;
@@ -279,15 +278,15 @@ BulkWriteBatch getNextBatch() {
279278

280279
FieldNameValidator getFieldNameValidator() {
281280
if (batchType == UPDATE || batchType == REPLACE) {
282-
Map<String, FieldNameValidator> rootMap = new HashMap<>();
281+
Map<String, FieldNameValidator> rootMap;
283282
if (batchType == REPLACE) {
284-
rootMap.put("u", new ReplacingDocumentFieldNameValidator());
283+
rootMap = singletonMap("u", ReplacingDocumentFieldNameValidator.INSTANCE);
285284
} else {
286-
rootMap.put("u", new UpdateFieldNameValidator());
285+
rootMap = singletonMap("u", new UpdateFieldNameValidator());
287286
}
288-
return new MappedFieldNameValidator(NO_OP_FIELD_NAME_VALIDATOR, rootMap);
287+
return new MappedFieldNameValidator(NoOpFieldNameValidator.INSTANCE, rootMap);
289288
} else {
290-
return NO_OP_FIELD_NAME_VALIDATOR;
289+
return NoOpFieldNameValidator.INSTANCE;
291290
}
292291
}
293292

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import com.mongodb.internal.binding.ConnectionSource;
3434
import com.mongodb.internal.connection.Connection;
3535
import com.mongodb.internal.connection.OperationContext;
36+
import com.mongodb.internal.validator.NoOpFieldNameValidator;
3637
import com.mongodb.lang.Nullable;
3738
import org.bson.BsonDocument;
3839
import org.bson.BsonTimestamp;
@@ -52,7 +53,6 @@
5253
import static com.mongodb.internal.operation.CommandBatchCursorHelper.MESSAGE_IF_CLOSED_AS_CURSOR;
5354
import static com.mongodb.internal.operation.CommandBatchCursorHelper.MESSAGE_IF_CLOSED_AS_ITERATOR;
5455
import static com.mongodb.internal.operation.CommandBatchCursorHelper.NEXT_BATCH;
55-
import static com.mongodb.internal.operation.CommandBatchCursorHelper.NO_OP_FIELD_NAME_VALIDATOR;
5656
import static com.mongodb.internal.operation.CommandBatchCursorHelper.getKillCursorsCommand;
5757
import static com.mongodb.internal.operation.CommandBatchCursorHelper.getMoreCommandDocument;
5858
import static com.mongodb.internal.operation.CommandBatchCursorHelper.logCommandCursorResult;
@@ -237,7 +237,7 @@ private void getMore() {
237237
assertNotNull(
238238
connection.command(namespace.getDatabaseName(),
239239
getMoreCommandDocument(serverCursor.getId(), connection.getDescription(), namespace, batchSize, comment),
240-
NO_OP_FIELD_NAME_VALIDATOR,
240+
NoOpFieldNameValidator.INSTANCE,
241241
ReadPreference.primary(),
242242
CommandResultDocumentCodec.create(decoder, NEXT_BATCH),
243243
assertNotNull(resourceManager.getConnectionSource()).getOperationContext())));
@@ -374,7 +374,7 @@ private void killServerCursor(final MongoNamespace namespace, final ServerCursor
374374
timeoutContext.resetToDefaultMaxTime();
375375

376376
localConnection.command(namespace.getDatabaseName(), getKillCursorsCommand(namespace, localServerCursor),
377-
NO_OP_FIELD_NAME_VALIDATOR, ReadPreference.primary(), new BsonDocumentCodec(), operationContext);
377+
NoOpFieldNameValidator.INSTANCE, ReadPreference.primary(), new BsonDocumentCodec(), operationContext);
378378
}
379379
}
380380
}

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

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,13 @@
2222
import com.mongodb.MongoQueryException;
2323
import com.mongodb.ServerCursor;
2424
import com.mongodb.connection.ConnectionDescription;
25-
import com.mongodb.internal.validator.NoOpFieldNameValidator;
2625
import com.mongodb.lang.Nullable;
2726
import org.bson.BsonArray;
2827
import org.bson.BsonDocument;
2928
import org.bson.BsonInt32;
3029
import org.bson.BsonInt64;
3130
import org.bson.BsonString;
3231
import org.bson.BsonValue;
33-
import org.bson.FieldNameValidator;
3432

3533
import static com.mongodb.internal.operation.DocumentHelper.putIfNotNull;
3634
import static com.mongodb.internal.operation.OperationHelper.LOGGER;
@@ -42,7 +40,6 @@ final class CommandBatchCursorHelper {
4240

4341
static final String FIRST_BATCH = "firstBatch";
4442
static final String NEXT_BATCH = "nextBatch";
45-
static final FieldNameValidator NO_OP_FIELD_NAME_VALIDATOR = new NoOpFieldNameValidator();
4643
static final String MESSAGE_IF_CLOSED_AS_CURSOR = "Cursor has been closed";
4744
static final String MESSAGE_IF_CLOSED_AS_ITERATOR = "Iterator has been closed";
4845

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ public FindAndDeleteOperation<T> let(@Nullable final BsonDocument variables) {
8989
}
9090

9191
protected FieldNameValidator getFieldNameValidator() {
92-
return new NoOpFieldNameValidator();
92+
return NoOpFieldNameValidator.INSTANCE;
9393
}
9494

9595
protected void specializeCommand(final BsonDocument commandDocument, final ConnectionDescription connectionDescription) {

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

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,9 @@
3030
import org.bson.FieldNameValidator;
3131
import org.bson.codecs.Decoder;
3232

33-
import java.util.HashMap;
34-
import java.util.Map;
35-
3633
import static com.mongodb.assertions.Assertions.notNull;
3734
import static com.mongodb.internal.operation.DocumentHelper.putIfTrue;
35+
import static java.util.Collections.singletonMap;
3836

3937
/**
4038
* An operation that atomically finds and replaces a single document.
@@ -133,9 +131,9 @@ public FindAndReplaceOperation<T> let(@Nullable final BsonDocument variables) {
133131
}
134132

135133
protected FieldNameValidator getFieldNameValidator() {
136-
Map<String, FieldNameValidator> map = new HashMap<>();
137-
map.put("update", new ReplacingDocumentFieldNameValidator());
138-
return new MappedFieldNameValidator(new NoOpFieldNameValidator(), map);
134+
return new MappedFieldNameValidator(
135+
NoOpFieldNameValidator.INSTANCE,
136+
singletonMap("update", ReplacingDocumentFieldNameValidator.INSTANCE));
139137
}
140138

141139
protected void specializeCommand(final BsonDocument commandDocument, final ConnectionDescription connectionDescription) {

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

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,12 @@
3131
import org.bson.FieldNameValidator;
3232
import org.bson.codecs.Decoder;
3333

34-
import java.util.HashMap;
3534
import java.util.List;
36-
import java.util.Map;
3735

3836
import static com.mongodb.assertions.Assertions.notNull;
3937
import static com.mongodb.internal.operation.DocumentHelper.putIfNotNull;
4038
import static com.mongodb.internal.operation.DocumentHelper.putIfTrue;
39+
import static java.util.Collections.singletonMap;
4140

4241
/**
4342
* An operation that atomically finds and updates a single document.
@@ -161,9 +160,7 @@ public FindAndUpdateOperation<T> let(@Nullable final BsonDocument variables) {
161160
}
162161

163162
protected FieldNameValidator getFieldNameValidator() {
164-
Map<String, FieldNameValidator> map = new HashMap<>();
165-
map.put("update", new UpdateFieldNameValidator());
166-
return new MappedFieldNameValidator(new NoOpFieldNameValidator(), map);
163+
return new MappedFieldNameValidator(NoOpFieldNameValidator.INSTANCE, singletonMap("update", new UpdateFieldNameValidator()));
167164
}
168165

169166
protected void specializeCommand(final BsonDocument commandDocument, final ConnectionDescription connectionDescription) {

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@
4747
import org.bson.BsonDocument;
4848
import org.bson.BsonString;
4949
import org.bson.BsonValue;
50-
import org.bson.FieldNameValidator;
5150

5251
import java.util.List;
5352
import java.util.Optional;
@@ -77,7 +76,6 @@
7776
* <p>This class is not part of the public API and may be removed or changed at any time</p>
7877
*/
7978
public class MixedBulkWriteOperation implements AsyncWriteOperation<BulkWriteResult>, WriteOperation<BulkWriteResult> {
80-
private static final FieldNameValidator NO_OP_FIELD_NAME_VALIDATOR = new NoOpFieldNameValidator();
8179
private final MongoNamespace namespace;
8280
private final List<? extends WriteRequest> writeRequests;
8381
private final boolean ordered;
@@ -408,14 +406,14 @@ private boolean handleMongoWriteConcernWithResponseExceptionAsync(final RetrySta
408406

409407
@Nullable
410408
private BsonDocument executeCommand(final OperationContext operationContext, final Connection connection, final BulkWriteBatch batch) {
411-
return connection.command(namespace.getDatabaseName(), batch.getCommand(), NO_OP_FIELD_NAME_VALIDATOR, null, batch.getDecoder(),
409+
return connection.command(namespace.getDatabaseName(), batch.getCommand(), NoOpFieldNameValidator.INSTANCE, null, batch.getDecoder(),
412410
operationContext, shouldAcknowledge(batch, operationContext.getSessionContext()),
413411
batch.getPayload(), batch.getFieldNameValidator());
414412
}
415413

416414
private void executeCommandAsync(final OperationContext operationContext, final AsyncConnection connection, final BulkWriteBatch batch,
417415
final SingleResultCallback<BsonDocument> callback) {
418-
connection.commandAsync(namespace.getDatabaseName(), batch.getCommand(), NO_OP_FIELD_NAME_VALIDATOR, null, batch.getDecoder(),
416+
connection.commandAsync(namespace.getDatabaseName(), batch.getCommand(), NoOpFieldNameValidator.INSTANCE, null, batch.getDecoder(),
419417
operationContext, shouldAcknowledge(batch, operationContext.getSessionContext()),
420418
batch.getPayload(), batch.getFieldNameValidator(), callback);
421419
}

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ static <T> T executeCommand(final WriteBinding binding, final String database, f
210210
commandCreator.create(binding.getOperationContext(),
211211
source.getServerDescription(),
212212
connection.getDescription()),
213-
new NoOpFieldNameValidator(), primary(), BSON_DOCUMENT_CODEC, binding.getOperationContext())),
213+
NoOpFieldNameValidator.INSTANCE, primary(), BSON_DOCUMENT_CODEC, binding.getOperationContext())),
214214
connection));
215215
}
216216

@@ -219,7 +219,7 @@ static <D, T> T executeCommand(final WriteBinding binding, final String database
219219
final Decoder<D> decoder, final CommandWriteTransformer<D, T> transformer) {
220220
return withSourceAndConnection(binding::getWriteConnectionSource, false, (source, connection) ->
221221
transformer.apply(assertNotNull(
222-
connection.command(database, command, new NoOpFieldNameValidator(), primary(), decoder,
222+
connection.command(database, command, NoOpFieldNameValidator.INSTANCE, primary(), decoder,
223223
binding.getOperationContext())), connection));
224224
}
225225

@@ -228,7 +228,7 @@ static <T> T executeCommand(final WriteBinding binding, final String database, f
228228
final Connection connection, final CommandWriteTransformer<BsonDocument, T> transformer) {
229229
notNull("binding", binding);
230230
return transformer.apply(assertNotNull(
231-
connection.command(database, command, new NoOpFieldNameValidator(), primary(), BSON_DOCUMENT_CODEC,
231+
connection.command(database, command, NoOpFieldNameValidator.INSTANCE, primary(), BSON_DOCUMENT_CODEC,
232232
binding.getOperationContext())),
233233
connection);
234234
}
@@ -295,7 +295,7 @@ static <D, T> T createReadCommandAndExecute(
295295
BsonDocument command = commandCreator.create(operationContext, source.getServerDescription(),
296296
connection.getDescription());
297297
retryState.attach(AttachmentKeys.commandDescriptionSupplier(), command::getFirstKey, false);
298-
return transformer.apply(assertNotNull(connection.command(database, command, new NoOpFieldNameValidator(),
298+
return transformer.apply(assertNotNull(connection.command(database, command, NoOpFieldNameValidator.INSTANCE,
299299
source.getReadPreference(), decoder, operationContext)), source, connection);
300300
}
301301

0 commit comments

Comments
 (0)