Skip to content

Commit

Permalink
Fix test failures on 8.0 sharded clusters (#1319)
Browse files Browse the repository at this point in the history
Advance cluster time on all session entities in unified tests to one after the initial data is created

JAVA-5334
  • Loading branch information
jyemin committed Mar 12, 2024
1 parent 6255437 commit 6280158
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,11 @@ public static void dropDatabase(final String name, final WriteConcern writeConce
}
}

public static BsonDocument getCurrentClusterTime() {
return new CommandReadOperation<BsonDocument>("admin", new BsonDocument("ping", new BsonInt32(1)), new BsonDocumentCodec())
.execute(getBinding()).getDocument("$clusterTime", null);
}

public MongoNamespace getNamespace() {
return namespace;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,6 @@
import com.mongodb.ReadConcernLevel;
import com.mongodb.ServerApi;
import com.mongodb.ServerApiVersion;
import com.mongodb.internal.connection.TestClusterListener;
import com.mongodb.logging.TestLoggingInterceptor;
import com.mongodb.TransactionOptions;
import com.mongodb.WriteConcern;
import com.mongodb.assertions.Assertions;
Expand Down Expand Up @@ -56,11 +54,13 @@
import com.mongodb.event.ConnectionPoolListener;
import com.mongodb.event.ConnectionPoolReadyEvent;
import com.mongodb.event.ConnectionReadyEvent;
import com.mongodb.internal.connection.TestClusterListener;
import com.mongodb.internal.connection.TestCommandListener;
import com.mongodb.internal.connection.TestConnectionPoolListener;
import com.mongodb.internal.connection.TestServerListener;
import com.mongodb.internal.logging.LogMessage;
import com.mongodb.lang.NonNull;
import com.mongodb.logging.TestLoggingInterceptor;
import org.bson.BsonArray;
import org.bson.BsonBoolean;
import org.bson.BsonDocument;
Expand Down Expand Up @@ -300,6 +300,7 @@ private <T> void putEntity(final String id, final T entity, final Map<String, T>
}

public void init(final BsonArray entitiesArray,
final BsonDocument startingClusterTime,
final boolean waitForPoolAsyncWorkManagerStart,
final Function<MongoClientSettings, MongoClient> mongoClientSupplier,
final Function<MongoDatabase, GridFSBucket> gridFSBucketSupplier,
Expand All @@ -324,7 +325,7 @@ public void init(final BsonArray entitiesArray,
break;
}
case "session": {
initSession(entity, id);
initSession(entity, id, startingClusterTime);
break;
}
case "bucket": {
Expand Down Expand Up @@ -596,7 +597,7 @@ private void initCollection(final BsonDocument entity, final String id) {
putEntity(id, collection, collections);
}

private void initSession(final BsonDocument entity, final String id) {
private void initSession(final BsonDocument entity, final String id, final BsonDocument startingClusterTime) {
MongoClient client = clients.get(entity.getString("client").getValue());
ClientSessionOptions.Builder optionsBuilder = ClientSessionOptions.builder();
if (entity.containsKey("sessionOptions")) {
Expand All @@ -614,6 +615,7 @@ private void initSession(final BsonDocument entity, final String id) {
}
}
ClientSession session = client.startSession(optionsBuilder.build());
session.advanceClusterTime(startingClusterTime);
putEntity(id, session, sessions);
putEntity(id + "-identifier", session.getServerSession().getIdentifier(), sessionIdentifiers);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@
import static com.mongodb.ClusterFixture.getServerVersion;
import static com.mongodb.client.Fixture.getMongoClient;
import static com.mongodb.client.Fixture.getMongoClientSettings;
import static com.mongodb.client.test.CollectionHelper.getCurrentClusterTime;
import static com.mongodb.client.unified.RunOnRequirementsMatcher.runOnRequirementsMet;
import static java.util.Collections.singletonList;
import static java.util.stream.Collectors.toList;
Expand Down Expand Up @@ -105,6 +106,7 @@ public abstract class UnifiedTest {
private final UnifiedClientEncryptionHelper clientEncryptionHelper = new UnifiedClientEncryptionHelper(entities);
private final List<FailPoint> failPoints = new ArrayList<>();
private final UnifiedTestContext rootContext = new UnifiedTestContext();
private BsonDocument startingClusterTime;

private class UnifiedTestContext {
private final AssertionContext context = new AssertionContext();
Expand Down Expand Up @@ -212,12 +214,12 @@ public void setUp() {
if (definition.containsKey("skipReason")) {
throw new AssumptionViolatedException(definition.getString("skipReason").getValue());
}
entities.init(entitiesArray,
startingClusterTime = addInitialDataAndGetClusterTime();
entities.init(entitiesArray, startingClusterTime,
fileDescription != null && PRESTART_POOL_ASYNC_WORK_MANAGER_FILE_DESCRIPTIONS.contains(fileDescription),
this::createMongoClient,
this::createGridFSBucket,
this::createClientEncryption);
addInitialData();
}

@After
Expand Down Expand Up @@ -561,6 +563,7 @@ protected boolean terminateLoop() {

private OperationResult executeCreateEntities(final BsonDocument operation) {
entities.init(operation.getDocument("arguments").getArray("entities"),
startingClusterTime,
false,
this::createMongoClient,
this::createGridFSBucket,
Expand Down Expand Up @@ -890,7 +893,7 @@ private List<CommandEvent> lastTwoCommandEvents(final TestCommandListener listen
return events.subList(events.size() - 2, events.size());
}

private void addInitialData() {
private BsonDocument addInitialDataAndGetClusterTime() {
for (BsonValue cur : initialData.getValues()) {
BsonDocument curDataSet = cur.asDocument();
CollectionHelper<BsonDocument> helper = new CollectionHelper<>(new BsonDocumentCodec(),
Expand All @@ -905,5 +908,6 @@ private void addInitialData() {
WriteConcern.MAJORITY);
}
}
return getCurrentClusterTime();
}
}

0 comments on commit 6280158

Please sign in to comment.