Skip to content

Commit 77ff590

Browse files
committed
Forbid calling SplittablePayload.hasAnotherSplit before it having been encoded
1 parent b96210f commit 77ff590

File tree

2 files changed

+6
-0
lines changed

2 files changed

+6
-0
lines changed

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import java.util.stream.Collectors;
3838

3939
import static com.mongodb.assertions.Assertions.assertNotNull;
40+
import static com.mongodb.assertions.Assertions.assertTrue;
4041
import static com.mongodb.assertions.Assertions.isTrue;
4142
import static com.mongodb.assertions.Assertions.notNull;
4243
import static com.mongodb.internal.connection.SplittablePayload.Type.INSERT;
@@ -158,6 +159,8 @@ public void setPosition(final int position) {
158159
* @return true if there are more values after the current position
159160
*/
160161
public boolean hasAnotherSplit() {
162+
// this method must be not called before this payload having been encoded
163+
assertTrue(position > 0);
161164
return writeRequestWithIndexes.size() > position;
162165
}
163166

driver-sync/src/test/functional/com/mongodb/client/MongoClientSessionSpecification.groovy

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import com.mongodb.WriteConcern
2626
import com.mongodb.client.model.Filters
2727
import com.mongodb.event.CommandStartedEvent
2828
import com.mongodb.internal.connection.TestCommandListener
29+
import com.mongodb.internal.time.Timeout
2930
import org.bson.BsonBinarySubType
3031
import org.bson.BsonDocument
3132
import org.bson.BsonInt32
@@ -350,9 +351,11 @@ class MongoClientSessionSpecification extends FunctionalSpecification {
350351

351352
void waitForInsertAcknowledgement(MongoCollection<Document> collection, ObjectId id) {
352353
Document document = collection.find(Filters.eq(id)).first()
354+
Timeout timeout = Timeout.expiresIn(5, TimeUnit.SECONDS, Timeout.ZeroSemantics.ZERO_DURATION_MEANS_INFINITE);
353355
while (document == null) {
354356
Thread.sleep(1)
355357
document = collection.find(Filters.eq(id)).first()
358+
timeout.onExpired {throw new RuntimeException("Timed out waiting for insert acknowledgement")}
356359
}
357360
}
358361
}

0 commit comments

Comments
 (0)