Skip to content

Commit 59eacbf

Browse files
committed
JAVA-682: Added new constants for WriteConcern so transition away from 'safe'
1 parent bd068d5 commit 59eacbf

File tree

2 files changed

+60
-0
lines changed

2 files changed

+60
-0
lines changed

src/main/com/mongodb/WriteConcern.java

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,11 @@ public class WriteConcern implements Serializable {
5252

5353
private static final long serialVersionUID = 1884671104750417011L;
5454

55+
/**
56+
* No exceptions are raised, even for network issues.
57+
*/
58+
public final static WriteConcern ERRORS_IGNORED = new WriteConcern(-1);
59+
5560
/**
5661
* Write operations that use this write concern will wait for acknowledgement from the primary server before returning.
5762
* Exceptions are raised for network issues, and server errors.
@@ -65,8 +70,28 @@ public class WriteConcern implements Serializable {
6570
*/
6671
public final static WriteConcern UNACKNOWLEDGED = new WriteConcern(0);
6772

73+
/**
74+
* Exceptions are raised for network issues, and server errors; the write operation waits for the server to flush
75+
* the data to disk.
76+
*/
77+
public final static WriteConcern FSYNCED = new WriteConcern(true);
78+
79+
/**
80+
* Exceptions are raised for network issues, and server errors; the write operation waits for the server to
81+
* group commit to the journal file on disk.
82+
*/
83+
public final static WriteConcern JOURNALED = new WriteConcern( 1, 0, false, true );
84+
85+
/**
86+
* Exceptions are raised for network issues, and server errors; waits for at least 2 servers for the write operation.
87+
*/
88+
public final static WriteConcern REPLICA_ACKNOWLEDGED= new WriteConcern(2);
89+
6890
/**
6991
* No exceptions are raised, even for network issues.
92+
* <p>
93+
* This field has been superseded by {@code WriteConcern.ERRORS_IGNORED}, and may be deprecated in a future release.
94+
* @see WriteConcern#ERRORS_IGNORED
7095
*/
7196
public final static WriteConcern NONE = new WriteConcern(-1);
7297

@@ -96,17 +121,26 @@ public class WriteConcern implements Serializable {
96121
/**
97122
* Exceptions are raised for network issues, and server errors; the write operation waits for the server to flush
98123
* the data to disk.
124+
* <p>
125+
* This field has been superseded by {@code WriteConcern.FSYNCED}, and may be deprecated in a future release.
126+
* @see WriteConcern#FSYNCED
99127
*/
100128
public final static WriteConcern FSYNC_SAFE = new WriteConcern(true);
101129

102130
/**
103131
* Exceptions are raised for network issues, and server errors; the write operation waits for the server to
104132
* group commit to the journal file on disk.
133+
* <p>
134+
* This field has been superseded by {@code WriteConcern.JOURNALED}, and may be deprecated in a future release.
135+
* @see WriteConcern#JOURNALED
105136
*/
106137
public final static WriteConcern JOURNAL_SAFE = new WriteConcern( 1, 0, false, true );
107138

108139
/**
109140
* Exceptions are raised for network issues, and server errors; waits for at least 2 servers for the write operation.
141+
* <p>
142+
* This field has been superseded by {@code WriteConcern.REPLICA_ACKNOWLEDGED}, and may be deprecated in a future release.
143+
* @see WriteConcern#REPLICA_ACKNOWLEDGED
110144
*/
111145
public final static WriteConcern REPLICAS_SAFE = new WriteConcern(2);
112146

src/test/com/mongodb/WriteConcernTest.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,10 @@ public void testCheckLastError() {
8888
Assert.assertTrue(WriteConcern.ACKNOWLEDGED.callGetLastError());
8989
Assert.assertTrue(WriteConcern.FSYNC_SAFE.callGetLastError());
9090
Assert.assertTrue(WriteConcern.JOURNAL_SAFE.callGetLastError());
91+
Assert.assertFalse(WriteConcern.ERRORS_IGNORED.callGetLastError());
92+
Assert.assertTrue(WriteConcern.JOURNALED.callGetLastError());
93+
Assert.assertTrue(WriteConcern.FSYNCED.callGetLastError());
94+
Assert.assertTrue(WriteConcern.REPLICA_ACKNOWLEDGED.callGetLastError());
9195
Assert.assertTrue(WriteConcern.MAJORITY.callGetLastError());
9296
Assert.assertTrue(WriteConcern.REPLICAS_SAFE.callGetLastError());
9397
Assert.assertTrue(new WriteConcern("custom").callGetLastError());
@@ -96,6 +100,24 @@ public void testCheckLastError() {
96100
Assert.assertFalse(new WriteConcern(0, 0, false, true).callGetLastError());
97101
}
98102

103+
@Test
104+
public void testW() {
105+
Assert.assertEquals(-1, WriteConcern.NONE.getW());
106+
Assert.assertEquals(0, WriteConcern.NORMAL.getW());
107+
Assert.assertEquals(0, WriteConcern.UNACKNOWLEDGED.getW());
108+
Assert.assertEquals(1, WriteConcern.SAFE.getW());
109+
Assert.assertEquals(1, WriteConcern.ACKNOWLEDGED.getW());
110+
Assert.assertEquals(1, WriteConcern.FSYNC_SAFE.getW());
111+
Assert.assertEquals(1, WriteConcern.JOURNAL_SAFE.getW());
112+
Assert.assertEquals(-1, WriteConcern.ERRORS_IGNORED.getW());
113+
Assert.assertEquals(1, WriteConcern.JOURNALED.getW());
114+
Assert.assertEquals(1, WriteConcern.FSYNCED.getW());
115+
Assert.assertEquals(2, WriteConcern.REPLICA_ACKNOWLEDGED.getW());
116+
Assert.assertEquals("majority", WriteConcern.MAJORITY.getWString());
117+
Assert.assertEquals(2, WriteConcern.REPLICAS_SAFE.getW());
118+
Assert.assertEquals("custom", new WriteConcern("custom").getWString());
119+
}
120+
99121
@Test
100122
public void testRaiseNetworkErrors() {
101123
Assert.assertFalse(WriteConcern.NONE.raiseNetworkErrors());
@@ -105,6 +127,10 @@ public void testRaiseNetworkErrors() {
105127
Assert.assertTrue(WriteConcern.ACKNOWLEDGED.raiseNetworkErrors());
106128
Assert.assertTrue(WriteConcern.FSYNC_SAFE.raiseNetworkErrors());
107129
Assert.assertTrue(WriteConcern.JOURNAL_SAFE.raiseNetworkErrors());
130+
Assert.assertFalse(WriteConcern.ERRORS_IGNORED.raiseNetworkErrors());
131+
Assert.assertTrue(WriteConcern.JOURNALED.raiseNetworkErrors());
132+
Assert.assertTrue(WriteConcern.FSYNCED.raiseNetworkErrors());
133+
Assert.assertTrue(WriteConcern.REPLICA_ACKNOWLEDGED.raiseNetworkErrors());
108134
Assert.assertTrue(WriteConcern.MAJORITY.raiseNetworkErrors());
109135
Assert.assertTrue(WriteConcern.REPLICAS_SAFE.raiseNetworkErrors());
110136
Assert.assertTrue(new WriteConcern("custom").raiseNetworkErrors());

0 commit comments

Comments
 (0)