Skip to content

Commit 2ddef35

Browse files
committed
JAVA-2815: startTransaction should throw when write concern is unacknowledged
1 parent 4fc3436 commit 2ddef35

File tree

3 files changed

+18
-2
lines changed

3 files changed

+18
-2
lines changed

driver-async/src/main/com/mongodb/async/client/ClientSessionImpl.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,12 @@
1717
package com.mongodb.async.client;
1818

1919
import com.mongodb.ClientSessionOptions;
20+
import com.mongodb.MongoClientException;
2021
import com.mongodb.MongoException;
2122
import com.mongodb.MongoInternalException;
2223
import com.mongodb.ReadConcern;
2324
import com.mongodb.TransactionOptions;
25+
import com.mongodb.WriteConcern;
2426
import com.mongodb.async.SingleResultCallback;
2527
import com.mongodb.internal.session.BaseClientSessionImpl;
2628
import com.mongodb.internal.session.ServerSessionPool;
@@ -94,6 +96,13 @@ public void startTransaction(final TransactionOptions transactionOptions) {
9496
}
9597
getServerSession().advanceTransactionNumber();
9698
this.transactionOptions = TransactionOptions.merge(transactionOptions, getOptions().getDefaultTransactionOptions());
99+
WriteConcern writeConcern = this.transactionOptions.getWriteConcern();
100+
if (writeConcern == null) {
101+
throw new MongoInternalException("Invariant violated. Transaction options write concern can not be null");
102+
}
103+
if (!writeConcern.isAcknowledged()) {
104+
throw new MongoClientException("Transactions do not support unacknowledged write concern");
105+
}
97106
}
98107

99108
@Override

driver-core/src/main/com/mongodb/TransactionOptions.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import com.mongodb.annotations.Immutable;
2020
import com.mongodb.lang.Nullable;
2121

22-
import static com.mongodb.assertions.Assertions.isTrueArgument;
2322
import static com.mongodb.assertions.Assertions.notNull;
2423

2524
/**
@@ -165,7 +164,6 @@ public Builder readConcern(@Nullable final ReadConcern readConcern) {
165164
*/
166165
public Builder writeConcern(@Nullable final WriteConcern writeConcern) {
167166
this.writeConcern = writeConcern;
168-
isTrueArgument("acknowledged write concern", writeConcern != null && writeConcern.isAcknowledged());
169167
return this;
170168
}
171169

driver-sync/src/main/com/mongodb/client/internal/ClientSessionImpl.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,12 @@
1717
package com.mongodb.client.internal;
1818

1919
import com.mongodb.ClientSessionOptions;
20+
import com.mongodb.MongoClientException;
2021
import com.mongodb.MongoException;
2122
import com.mongodb.MongoInternalException;
2223
import com.mongodb.ReadConcern;
2324
import com.mongodb.TransactionOptions;
25+
import com.mongodb.WriteConcern;
2426
import com.mongodb.client.ClientSession;
2527
import com.mongodb.internal.session.BaseClientSessionImpl;
2628
import com.mongodb.internal.session.ServerSessionPool;
@@ -93,6 +95,13 @@ public void startTransaction(final TransactionOptions transactionOptions) {
9395
}
9496
getServerSession().advanceTransactionNumber();
9597
this.transactionOptions = TransactionOptions.merge(transactionOptions, getOptions().getDefaultTransactionOptions());
98+
WriteConcern writeConcern = this.transactionOptions.getWriteConcern();
99+
if (writeConcern == null) {
100+
throw new MongoInternalException("Invariant violated. Transaction options write concern can not be null");
101+
}
102+
if (!writeConcern.isAcknowledged()) {
103+
throw new MongoClientException("Transactions do not support unacknowledged write concern");
104+
}
96105
}
97106

98107
@Override

0 commit comments

Comments
 (0)