Skip to content

Commit ef65a7f

Browse files
committed
JAVA-2336: Use flags field for create command to set usePowerOf2Sizes
1 parent 956a565 commit ef65a7f

File tree

2 files changed

+25
-3
lines changed

2 files changed

+25
-3
lines changed

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import com.mongodb.operation.OperationHelper.CallableWithConnection;
3030
import org.bson.BsonBoolean;
3131
import org.bson.BsonDocument;
32+
import org.bson.BsonInt32;
3233
import org.bson.BsonString;
3334

3435
import static com.mongodb.assertions.Assertions.notNull;
@@ -37,8 +38,8 @@
3738
import static com.mongodb.operation.CommandOperationHelper.executeWrappedCommandProtocolAsync;
3839
import static com.mongodb.operation.DocumentHelper.putIfNotZero;
3940
import static com.mongodb.operation.OperationHelper.LOGGER;
40-
import static com.mongodb.operation.OperationHelper.validateCollation;
4141
import static com.mongodb.operation.OperationHelper.releasingCallback;
42+
import static com.mongodb.operation.OperationHelper.validateCollation;
4243
import static com.mongodb.operation.OperationHelper.withConnection;
4344
import static com.mongodb.operation.WriteConcernHelper.appendWriteConcernToCommand;
4445
import static com.mongodb.operation.WriteConcernHelper.writeConcernErrorTransformer;
@@ -200,7 +201,9 @@ public CreateCollectionOperation sizeInBytes(final long sizeInBytes) {
200201
* @return usePowerOf2Sizes became the default allocation strategy
201202
* @mongodb.driver.manual reference/command/collMod/#usePowerOf2Sizes usePowerOf2Sizes
202203
* @mongodb.server.release 2.6
204+
* @deprecated As of MongoDB 3.0, power of 2 sizes is ignored by the MongoDB server
203205
*/
206+
@Deprecated
204207
public Boolean isUsePowerOf2Sizes() {
205208
return usePowerOf2Sizes;
206209
}
@@ -214,7 +217,9 @@ public Boolean isUsePowerOf2Sizes() {
214217
* @return this
215218
* @mongodb.driver.manual reference/command/collMod/#usePowerOf2Sizes usePowerOf2Sizes
216219
* @mongodb.server.release 2.6
220+
* @deprecated As of MongoDB 3.0, power of 2 sizes is ignored by the MongoDB server
217221
*/
222+
@Deprecated
218223
public CreateCollectionOperation usePowerOf2Sizes(final Boolean usePowerOf2Sizes) {
219224
this.usePowerOf2Sizes = usePowerOf2Sizes;
220225
return this;
@@ -414,7 +419,7 @@ private BsonDocument getCommand(final ConnectionDescription description) {
414419
putIfNotZero(document, "max", maxDocuments);
415420
}
416421
if (usePowerOf2Sizes != null) {
417-
document.put("usePowerOfTwoSizes", BsonBoolean.valueOf(usePowerOf2Sizes));
422+
document.put("flags", new BsonInt32(1));
418423
}
419424
if (storageEngineOptions != null) {
420425
document.put("storageEngine", storageEngineOptions);

driver-core/src/test/functional/com/mongodb/operation/CreateCollectionOperationSpecification.groovy

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,24 @@ class CreateCollectionOperationSpecification extends OperationFunctionalSpecific
140140
async << [true, false]
141141
}
142142

143+
def 'should set flags for use power of two sizes'() {
144+
given:
145+
assert !collectionNameExists(getCollectionName())
146+
def operation = new CreateCollectionOperation(getDatabaseName(), getCollectionName())
147+
.usePowerOf2Sizes(true)
148+
149+
when:
150+
execute(operation, async)
151+
152+
then:
153+
new ListCollectionsOperation(getDatabaseName(), new BsonDocumentCodec()).execute(getBinding()).next().find {
154+
it -> it.getString('name').value == getCollectionName()
155+
}.getDocument('options').getNumber('flags').intValue() == 1
156+
157+
where:
158+
async << [true, false]
159+
}
160+
143161
def 'should create capped collection'() {
144162
given:
145163
assert !collectionNameExists(getCollectionName())
@@ -148,7 +166,6 @@ class CreateCollectionOperationSpecification extends OperationFunctionalSpecific
148166
.autoIndex(false)
149167
.maxDocuments(100)
150168
.sizeInBytes(40 * 1024)
151-
.usePowerOf2Sizes(true)
152169

153170
when:
154171
execute(operation, async)

0 commit comments

Comments
 (0)