Skip to content

Commit ac44079

Browse files
committed
To work around an issue with three-config server sharded clusters, added _id to documents inserted into system.users collection on pre-2.6 MongoDB servers.
JAVA-1794
1 parent dd81197 commit ac44079

File tree

3 files changed

+15
-10
lines changed

3 files changed

+15
-10
lines changed

driver-core/src/main/com/mongodb/operation/CreateUserOperation.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
import static com.mongodb.operation.OperationHelper.releasingCallback;
3939
import static com.mongodb.operation.OperationHelper.serverIsAtLeastVersionTwoDotSix;
4040
import static com.mongodb.operation.OperationHelper.withConnection;
41-
import static com.mongodb.operation.UserOperationHelper.asCollectionDocument;
41+
import static com.mongodb.operation.UserOperationHelper.asCollectionInsertDocument;
4242
import static com.mongodb.operation.UserOperationHelper.asCommandDocument;
4343
import static java.util.Arrays.asList;
4444

@@ -122,7 +122,7 @@ public void onResult(final WriteConcernResult result, final Throwable t) {
122122
}
123123

124124
private InsertRequest getInsertRequest() {
125-
return new InsertRequest(asCollectionDocument(credential, readOnly));
125+
return new InsertRequest(asCollectionInsertDocument(credential, readOnly));
126126
}
127127

128128
private MongoNamespace getNamespace() {

driver-core/src/main/com/mongodb/operation/UpdateUserOperation.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@
3939
import static com.mongodb.operation.OperationHelper.releasingCallback;
4040
import static com.mongodb.operation.OperationHelper.serverIsAtLeastVersionTwoDotSix;
4141
import static com.mongodb.operation.OperationHelper.withConnection;
42-
import static com.mongodb.operation.UserOperationHelper.asCollectionDocument;
4342
import static com.mongodb.operation.UserOperationHelper.asCollectionQueryDocument;
43+
import static com.mongodb.operation.UserOperationHelper.asCollectionUpdateDocument;
4444
import static com.mongodb.operation.UserOperationHelper.asCommandDocument;
4545
import static java.util.Arrays.asList;
4646

@@ -124,7 +124,7 @@ public void onResult(final WriteConcernResult result, final Throwable t) {
124124
}
125125

126126
private UpdateRequest getUpdateRequest() {
127-
return new UpdateRequest(asCollectionQueryDocument(credential), asCollectionDocument(credential, readOnly),
127+
return new UpdateRequest(asCollectionQueryDocument(credential), asCollectionUpdateDocument(credential, readOnly),
128128
WriteRequest.Type.REPLACE);
129129
}
130130

driver-core/src/main/com/mongodb/operation/UserOperationHelper.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,10 @@
2020
import org.bson.BsonArray;
2121
import org.bson.BsonBoolean;
2222
import org.bson.BsonDocument;
23+
import org.bson.BsonObjectId;
2324
import org.bson.BsonString;
2425
import org.bson.BsonValue;
26+
import org.bson.types.ObjectId;
2527

2628
import java.util.Arrays;
2729

@@ -48,12 +50,15 @@ static BsonDocument asCollectionQueryDocument(final MongoCredential credential)
4850
return new BsonDocument("user", new BsonString(credential.getUserName()));
4951
}
5052

51-
static BsonDocument asCollectionDocument(final MongoCredential credential, final boolean readOnly) {
52-
BsonDocument document = asCollectionQueryDocument(credential);
53-
document.put("pwd", new BsonString(createAuthenticationHash(credential.getUserName(),
54-
credential.getPassword())));
55-
document.put("readOnly", BsonBoolean.valueOf(readOnly));
56-
return document;
53+
static BsonDocument asCollectionUpdateDocument(final MongoCredential credential, final boolean readOnly) {
54+
return asCollectionQueryDocument(credential)
55+
.append("pwd", new BsonString(createAuthenticationHash(credential.getUserName(), credential.getPassword())))
56+
.append("readOnly", BsonBoolean.valueOf(readOnly));
57+
}
58+
59+
static BsonDocument asCollectionInsertDocument(final MongoCredential credential, final boolean readOnly) {
60+
return asCollectionUpdateDocument(credential, readOnly)
61+
.append("_id", new BsonObjectId(new ObjectId()));
5762
}
5863

5964
private UserOperationHelper() {

0 commit comments

Comments
 (0)