Skip to content

Commit 21a896e

Browse files
hhvitekVít Hanousek
andauthored
issue/#700 Allow writeConcern to be configured as a number (#701)
* issue/#700 Allow writeConcern to be configured as a number - enables configuring Mongock with numeric writeConcern values (representing W1, W2, etc.). - previously, only "majority" or "tag set name" were supported. * issue/#700 Allow writeConcern to be configured as a number - added simple test --------- Co-authored-by: Vít Hanousek <[email protected]>
1 parent c629f42 commit 21a896e

File tree

2 files changed

+71
-1
lines changed

2 files changed

+71
-1
lines changed

drivers/mongodb/mongodb-springdata-v3-driver/src/main/java/io/mongock/driver/mongodb/springdata/v3/config/MongoDBConfiguration.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,13 @@ public void setReadPreference(ReadPreferenceLevel readPreference) {
4444
}
4545

4646
protected WriteConcern getBuiltMongoDBWriteConcern() {
47-
WriteConcern wc = new WriteConcern(writeConcern.w).withJournal(writeConcern.journal);
47+
WriteConcern wc;
48+
try {
49+
int wInt = Integer.parseInt(writeConcern.w);
50+
wc = new WriteConcern(wInt).withJournal(writeConcern.journal);
51+
} catch (NumberFormatException e) {
52+
wc = new WriteConcern(writeConcern.w).withJournal(writeConcern.journal);
53+
}
4854
return writeConcern.getwTimeoutMs() == null
4955
? wc
5056
: wc.withWTimeout(writeConcern.getwTimeoutMs().longValue(), TimeUnit.MILLISECONDS);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package io.mongock.driver.mongodb.springdata.v3.config;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
5+
import java.util.concurrent.TimeUnit;
6+
import org.junit.jupiter.api.Test;
7+
import com.mongodb.WriteConcern;
8+
9+
public class MongoDBConfigurationTest {
10+
11+
@Test
12+
public void writeConcern_defaultValuesTest() {
13+
MongoDBConfiguration mongoConfig = new MongoDBConfiguration();
14+
15+
WriteConcern actual = mongoConfig.getBuiltMongoDBWriteConcern();
16+
WriteConcern expected = WriteConcern.MAJORITY.withJournal(true);
17+
18+
assertThat(actual).isEqualTo(expected);
19+
}
20+
21+
@Test
22+
public void writeConcern_majorityWithTimeoutAndJournalFalseTest() {
23+
MongoDBConfiguration mongoConfig = new MongoDBConfiguration();
24+
mongoConfig.setWriteConcern(
25+
new MongoDBConfiguration.WriteConcernLevel("majority", 1000, false)
26+
);
27+
28+
WriteConcern actual = mongoConfig.getBuiltMongoDBWriteConcern();
29+
WriteConcern expected = WriteConcern.MAJORITY
30+
.withWTimeout(1000, TimeUnit.MILLISECONDS)
31+
.withJournal(false);
32+
33+
assertThat(actual).isEqualTo(expected);
34+
}
35+
36+
@Test
37+
public void writeConcern_w1WithTimeoutJournalTrueTest() {
38+
MongoDBConfiguration mongoConfig = new MongoDBConfiguration();
39+
mongoConfig.setWriteConcern(
40+
new MongoDBConfiguration.WriteConcernLevel("1", 2000, true)
41+
);
42+
43+
WriteConcern actual = mongoConfig.getBuiltMongoDBWriteConcern();
44+
WriteConcern expected = WriteConcern.W1
45+
.withWTimeout(2000, TimeUnit.MILLISECONDS)
46+
.withJournal(true);
47+
48+
assertThat(actual).isEqualTo(expected);
49+
}
50+
51+
@Test
52+
public void writeConcern_replicaSetTagNameTest() {
53+
MongoDBConfiguration mongoConfig = new MongoDBConfiguration();
54+
mongoConfig.setWriteConcern(
55+
new MongoDBConfiguration.WriteConcernLevel("12-TAG-34", null, null)
56+
);
57+
58+
WriteConcern actual = mongoConfig.getBuiltMongoDBWriteConcern();
59+
WriteConcern expected = new WriteConcern("12-TAG-34");
60+
61+
assertThat(actual).isEqualTo(expected);
62+
}
63+
64+
}

0 commit comments

Comments
 (0)