Skip to content

Commit fba7ac1

Browse files
committed
JAVA-497: read preference set on mongo options was not getting applied to Mongo instance
1 parent 60cee41 commit fba7ac1

File tree

2 files changed

+33
-2
lines changed

2 files changed

+33
-2
lines changed

src/main/com/mongodb/Mongo.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -565,8 +565,13 @@ public int getOptions(){
565565
*/
566566
@SuppressWarnings("deprecation")
567567
void _applyMongoOptions() {
568-
if (_options.slaveOk) slaveOk();
569-
setWriteConcern( _options.getWriteConcern() );
568+
if (_options.slaveOk) {
569+
slaveOk();
570+
}
571+
if (_options.getReadPreference() != null) {
572+
setReadPreference(_options.getReadPreference());
573+
}
574+
setWriteConcern(_options.getWriteConcern());
570575
}
571576

572577
/**

src/test/com/mongodb/MongoTest.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import org.testng.annotations.Test;
2525

2626
import java.io.IOException;
27+
import java.net.UnknownHostException;
2728

2829
public class MongoTest extends TestCase {
2930

@@ -53,6 +54,31 @@ public void testClose_shouldNotReturnUntilCleanupThreadIsFinished() throws Excep
5354
assertFalse(mongo._cleaner.isAlive());
5455
}
5556

57+
@SuppressWarnings("deprecation")
58+
@Test
59+
public void testApplyOptions() throws UnknownHostException {
60+
MongoOptions options = new MongoOptions();
61+
62+
// test defaults
63+
Mongo m = new Mongo("localhost", options);
64+
assertEquals(ReadPreference.primary(), m.getReadPreference());
65+
assertEquals(WriteConcern.NORMAL, m.getWriteConcern());
66+
assertEquals(0, m.getOptions() & Bytes.QUERYOPTION_SLAVEOK);
67+
m.close();
68+
69+
// test setting options
70+
options.setReadPreference(ReadPreference.nearest());
71+
options.slaveOk = true;
72+
options.safe = true;
73+
74+
m = new Mongo("localhost", options);
75+
assertEquals(ReadPreference.nearest(), m.getReadPreference());
76+
assertEquals(WriteConcern.SAFE, m.getWriteConcern());
77+
assertEquals(Bytes.QUERYOPTION_SLAVEOK, m.getOptions() & Bytes.QUERYOPTION_SLAVEOK);
78+
m.close();
79+
80+
}
81+
5682
@AfterTest
5783
public void tearDown() {
5884
Mongo.cleanerIntervalMS = _originalCleanerIntervalMs;

0 commit comments

Comments
 (0)