Skip to content

Commit cf314cc

Browse files
committed
Deprecating ReadPreference.SECONDARY and ReadPreference.PRIMARY in favor of static factory methods Reverting semantics of ReadPreference.SECONDARY to what it was in previous releases, which is equivalent to ReadPreference.secondaryPreferred() rather than ReadPreference.secondary() Improved the unit tests
1 parent 761f694 commit cf314cc

File tree

10 files changed

+117
-97
lines changed

10 files changed

+117
-97
lines changed

src/main/com/mongodb/DB.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@ public CommandResult command( DBObject cmd , int options, ReadPreference readPre
242242
public CommandResult command( DBObject cmd , int options, ReadPreference readPrefs, DBEncoder encoder ){
243243

244244
if ( !obeyReadPreference(cmd) )
245-
readPrefs = ReadPreference.PRIMARY;
245+
readPrefs = ReadPreference.primary();
246246

247247
Iterator<DBObject> i =
248248
getCollection("$cmd").__find(cmd, new BasicDBObject(), 0, -1, 0, options, readPrefs ,
@@ -704,8 +704,8 @@ public DB getSisterDB( String name ){
704704
/**
705705
* Makes it possible to execute "read" queries on a slave node
706706
*
707-
* @deprecated Replaced with ReadPreference.SECONDARY
708-
* @see com.mongodb.ReadPreference#SECONDARY
707+
* @deprecated Replaced with {@code ReadPreference.secondaryPreferred()}
708+
* @see ReadPreference#secondaryPreferred()
709709
*/
710710
@Deprecated
711711
public void slaveOk(){

src/main/com/mongodb/DBCursor.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -298,8 +298,8 @@ public void close() {
298298
*
299299
* @return a copy of the same cursor (for chaining)
300300
*
301-
* @deprecated Replaced with ReadPreference.SECONDARY
302-
* @see com.mongodb.ReadPreference#SECONDARY
301+
* @deprecated Replaced with {@code ReadPreference.secondaryPreferred()}
302+
* @see ReadPreference#secondaryPreferred()
303303
*/
304304
@Deprecated
305305
public DBCursor slaveOk(){

src/main/com/mongodb/DBTCPConnector.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -250,12 +250,12 @@ public Response call( DB db, DBCollection coll, OutMessage m, ServerAddress host
250250

251251
try {
252252
if (readPref == null)
253-
readPref = ReadPreference.PRIMARY;
253+
readPref = ReadPreference.primary();
254254

255-
if (readPref == ReadPreference.PRIMARY && m.hasOption( Bytes.QUERYOPTION_SLAVEOK ))
255+
if (readPref == ReadPreference.primary() && m.hasOption( Bytes.QUERYOPTION_SLAVEOK ))
256256
readPref = ReadPreference.secondaryPreferred();
257257

258-
boolean secondaryOk = !(readPref == ReadPreference.PRIMARY);
258+
boolean secondaryOk = !(readPref == ReadPreference.primary());
259259

260260
_checkClosed();
261261
checkMaster( false, !secondaryOk );

src/main/com/mongodb/Mongo.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -583,7 +583,7 @@ boolean isMongosConnection() {
583583
final DBTCPConnector _connector;
584584
final ConcurrentMap<String,DB> _dbs = new ConcurrentHashMap<String,DB>();
585585
private WriteConcern _concern = WriteConcern.NORMAL;
586-
private ReadPreference _readPref = ReadPreference.PRIMARY;
586+
private ReadPreference _readPref = ReadPreference.primary();
587587
final Bytes.OptionHolder _netOptions = new Bytes.OptionHolder( null );
588588
final DBCleanerThread _cleaner;
589589

src/main/com/mongodb/OutMessage.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,20 +18,20 @@
1818

1919
package com.mongodb;
2020

21-
import java.io.IOException;
22-
import java.io.OutputStream;
23-
import java.util.concurrent.atomic.AtomicInteger;
24-
2521
import org.bson.BSONObject;
2622
import org.bson.BasicBSONEncoder;
2723
import org.bson.io.PoolOutputBuffer;
2824

25+
import java.io.IOException;
26+
import java.io.OutputStream;
27+
import java.util.concurrent.atomic.AtomicInteger;
28+
2929
class OutMessage extends BasicBSONEncoder {
3030

3131
static AtomicInteger ID = new AtomicInteger(1);
3232

3333
static OutMessage query( Mongo m , int options , String ns , int numToSkip , int batchSize , DBObject query , DBObject fields ){
34-
return query( m, options, ns, numToSkip, batchSize, query, fields, ReadPreference.PRIMARY );
34+
return query( m, options, ns, numToSkip, batchSize, query, fields, ReadPreference.primary() );
3535
}
3636

3737
static OutMessage query( Mongo m , int options , String ns , int numToSkip , int batchSize , DBObject query , DBObject fields, ReadPreference readPref ){
@@ -161,7 +161,7 @@ public ReadPreference getReadPreference(){
161161
private PoolOutputBuffer _buffer;
162162
private int _id;
163163
private int _queryOptions = 0;
164-
private ReadPreference _readPref = ReadPreference.PRIMARY;
164+
private ReadPreference _readPref = ReadPreference.primary();
165165
private DBEncoder _encoder;
166166

167167
}

src/main/com/mongodb/ReadPreference.java

Lines changed: 52 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ public abstract class ReadPreference {
3232
* @return <code>true</code> if this preference allows reads or commands from secondary nodes
3333
*/
3434
public abstract boolean isSlaveOk();
35-
abstract ReplicaSetNode getNode(ReplicaSetStatus.ReplicaSet set);
3635

3736
/**
3837
* @return <code>DBObject</code> representation of this preference
@@ -46,6 +45,8 @@ public abstract class ReadPreference {
4645
*/
4746
public abstract String getName();
4847

48+
abstract ReplicaSetNode getNode(ReplicaSetStatus.ReplicaSet set);
49+
4950
/**
5051
* Preference to read from primary only.
5152
* Cannot be combined with tags.
@@ -172,14 +173,14 @@ private DBObject[] getRemainingMaps(final List<DBObject> maps) {
172173
* @return ReadPreference which reads from primary only
173174
*/
174175
public static ReadPreference primary() {
175-
return PRIMARY;
176+
return _PRIMARY;
176177
}
177178

178179
/**
179180
* @return ReadPreference which reads primary if available.
180181
*/
181182
public static ReadPreference primaryPreferred() {
182-
return PRIMARY_PREFERRED;
183+
return _PRIMARY_PREFERRED;
183184
}
184185

185186
/**
@@ -193,7 +194,7 @@ public static TaggableReadPreference primaryPreferred(DBObject firstTagSet, DBOb
193194
* @return ReadPreference which reads secondary.
194195
*/
195196
public static ReadPreference secondary() {
196-
return SECONDARY;
197+
return _SECONDARY;
197198
}
198199

199200
/**
@@ -207,7 +208,7 @@ public static TaggableReadPreference secondary(DBObject firstTagSet, DBObject...
207208
* @return ReadPreference which reads secondary if available, otherwise from primary.
208209
*/
209210
public static ReadPreference secondaryPreferred() {
210-
return SECONDARY_PREFERRED;
211+
return _SECONDARY_PREFERRED;
211212
}
212213

213214
/**
@@ -221,7 +222,7 @@ public static TaggableReadPreference secondaryPreferred(DBObject firstTagSet, DB
221222
* @return ReadPreference which reads nearest node.
222223
*/
223224
public static ReadPreference nearest() {
224-
return NEAREST;
225+
return _NEAREST;
225226
}
226227

227228
public static ReadPreference valueOf(String name) {
@@ -231,20 +232,20 @@ public static ReadPreference valueOf(String name) {
231232

232233
name = name.toLowerCase();
233234

234-
if (name.equals(PRIMARY.getName().toLowerCase())) {
235-
return PRIMARY;
235+
if (name.equals(_PRIMARY.getName().toLowerCase())) {
236+
return _PRIMARY;
236237
}
237-
if (name.equals(SECONDARY.getName().toLowerCase())) {
238-
return SECONDARY;
238+
if (name.equals(_SECONDARY.getName().toLowerCase())) {
239+
return _SECONDARY;
239240
}
240-
if (name.equals(SECONDARY_PREFERRED.getName().toLowerCase())) {
241-
return SECONDARY_PREFERRED;
241+
if (name.equals(_SECONDARY_PREFERRED.getName().toLowerCase())) {
242+
return _SECONDARY_PREFERRED;
242243
}
243-
if (name.equals(PRIMARY_PREFERRED.getName().toLowerCase())) {
244-
return PRIMARY_PREFERRED;
244+
if (name.equals(_PRIMARY_PREFERRED.getName().toLowerCase())) {
245+
return _PRIMARY_PREFERRED;
245246
}
246-
if (name.equals(NEAREST.getName().toLowerCase())) {
247-
return NEAREST;
247+
if (name.equals(_NEAREST.getName().toLowerCase())) {
248+
return _NEAREST;
248249
}
249250

250251
throw new IllegalArgumentException("No match for read preference of " + name);
@@ -257,54 +258,73 @@ public static TaggableReadPreference valueOf(String name, DBObject firstTagSet,
257258

258259
name = name.toLowerCase();
259260

260-
if (name.equals(SECONDARY.getName().toLowerCase())) {
261+
if (name.equals(_SECONDARY.getName().toLowerCase())) {
261262
return new TaggableReadPreference.SecondaryReadPreference(firstTagSet, remainingTagSets);
262263
}
263-
if (name.equals(SECONDARY_PREFERRED.getName().toLowerCase())) {
264+
if (name.equals(_SECONDARY_PREFERRED.getName().toLowerCase())) {
264265
return new TaggableReadPreference.SecondaryPreferredReadPreference(firstTagSet, remainingTagSets);
265266
}
266-
if (name.equals(PRIMARY_PREFERRED.getName().toLowerCase())) {
267+
if (name.equals(_PRIMARY_PREFERRED.getName().toLowerCase())) {
267268
return new TaggableReadPreference.PrimaryPreferredReadPreference(firstTagSet, remainingTagSets);
268269
}
269-
if (name.equals(NEAREST.getName().toLowerCase())) {
270+
if (name.equals(_NEAREST.getName().toLowerCase())) {
270271
return new TaggableReadPreference.NearestReadPreference(firstTagSet, remainingTagSets);
271272
}
272273

273274
throw new IllegalArgumentException("No match for read preference of " + name);
274275
}
275276

276-
277-
278-
279277
/**
280278
* @return ReadPreference which reads nearest node respective of tags.
281279
*/
282280
public static TaggableReadPreference nearest(DBObject firstTagSet, DBObject... remainingTagSets) {
283281
return new TaggableReadPreference.NearestReadPreference(firstTagSet, remainingTagSets);
284282
}
285283

286-
public static ReadPreference PRIMARY = new PrimaryReadPreference();
287-
public static ReadPreference SECONDARY = new TaggableReadPreference.SecondaryReadPreference();
284+
/**
285+
* A primary read preference. Equivalent to calling {@code ReadPreference.primary()}.
286+
*
287+
* @see com.mongodb.ReadPreference#primary()
288+
* @deprecated As of release 2.9.0, replaced by {@code ReadPreference.primary()}
289+
*/
290+
@Deprecated
291+
public static final ReadPreference PRIMARY = new PrimaryReadPreference();
288292

289293
/**
290-
* @deprecated As of release 2.9, replaced by
291-
* <code>ReadPreference.secondaryPreferred(DBObject firstTagSet, DBObject... remainingTagSets)</code>
294+
* A secondary-preferred read preference. Equivalent to calling
295+
* {@code ReadPreference.secondaryPreferred}. This reference should really have been called
296+
* {@code ReadPreference.SECONDARY_PREFERRED}, but the naming of it preceded the idea of distinguishing
297+
* between secondary and secondary-preferred, so for backwards compatibility, leaving the name as is with
298+
* the behavior as it was when it was created.
299+
*
300+
* @see com.mongodb.ReadPreference#secondary()
301+
* @see com.mongodb.ReadPreference#secondaryPreferred()
302+
* @deprecated As of release 2.9.0, replaced by {@code ReadPreference.secondaryPreferred()}
303+
*/
304+
@Deprecated
305+
public static final ReadPreference SECONDARY = new TaggableReadPreference.SecondaryPreferredReadPreference();
306+
307+
/**
308+
* @deprecated As of release 2.9.0, replaced by
309+
* {@code ReadPreference.secondaryPreferred(DBObject firstTagSet, DBObject... remainingTagSets)}
292310
*/
293311
@Deprecated
294312
public static ReadPreference withTags(Map<String, String> tags) {
295313
return new TaggedReadPreference( tags );
296314
}
297315

298316
/**
299-
* @deprecated As of release 2.9, replaced by
300-
* <code>ReadPreference.secondaryPreferred(DBObject firstTagSet, DBObject... remainingTagSets)</code>
317+
* @deprecated As of release 2.9.0, replaced by
318+
* {@code ReadPreference.secondaryPreferred(DBObject firstTagSet, DBObject... remainingTagSets)}
301319
*/
302320
@Deprecated
303321
public static ReadPreference withTags( final DBObject tags ) {
304322
return new TaggedReadPreference( tags );
305323
}
306324

307-
private static final ReadPreference SECONDARY_PREFERRED = new TaggableReadPreference.SecondaryPreferredReadPreference();
308-
private static final ReadPreference PRIMARY_PREFERRED = new TaggableReadPreference.PrimaryPreferredReadPreference();
309-
private static final ReadPreference NEAREST = new TaggableReadPreference.NearestReadPreference();
325+
private static final ReadPreference _PRIMARY = new PrimaryReadPreference();
326+
private static final ReadPreference _SECONDARY = new TaggableReadPreference.SecondaryReadPreference();
327+
private static final ReadPreference _SECONDARY_PREFERRED = new TaggableReadPreference.SecondaryPreferredReadPreference();
328+
private static final ReadPreference _PRIMARY_PREFERRED = new TaggableReadPreference.PrimaryPreferredReadPreference();
329+
private static final ReadPreference _NEAREST = new TaggableReadPreference.NearestReadPreference();
310330
}

src/test/com/mongodb/DBTCPConnectorTest.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import org.testng.annotations.BeforeMethod;
2424
import org.testng.annotations.Test;
2525

26-
import java.io.IOException;
2726
import java.net.UnknownHostException;
2827
import java.util.Arrays;
2928

@@ -81,7 +80,7 @@ public void testConnectionReservationForWriteThenRead() {
8180
_connector.say(_db, createOutMessageForInsert(), WriteConcern.SAFE);
8281
DBPort requestPort = _connector.getMyPort()._requestPort;
8382
_connector.call(_db, _collection,
84-
OutMessage.query(cleanupMongo, 0, _collection.getFullName(), 0, -1, new BasicDBObject(), new BasicDBObject(), ReadPreference.PRIMARY),
83+
OutMessage.query(cleanupMongo, 0, _collection.getFullName(), 0, -1, new BasicDBObject(), new BasicDBObject(), ReadPreference.primary()),
8584
null, 0);
8685
assertEquals(requestPort, _connector.getMyPort()._requestPort);
8786
}
@@ -97,8 +96,8 @@ public void testConnectionReservationForReadThenWrite() {
9796

9897
_connector.requestStart();
9998
_connector.call(_db, _collection,
100-
OutMessage.query(cleanupMongo, 0, _collection.getFullName(), 0, -1, new BasicDBObject(), new BasicDBObject(), ReadPreference.SECONDARY),
101-
null, 0, ReadPreference.SECONDARY, null);
99+
OutMessage.query(cleanupMongo, 0, _collection.getFullName(), 0, -1, new BasicDBObject(), new BasicDBObject(), ReadPreference.secondary()),
100+
null, 0, ReadPreference.secondary(), null);
102101
DBPort requestPort = _connector.getMyPort()._requestPort;
103102
_connector.say(_db, createOutMessageForInsert(), WriteConcern.SAFE);
104103
assertNotEquals(requestPort, _connector.getMyPort()._requestPort);
@@ -112,7 +111,7 @@ public void testConnectionReservationForReadThenWrite() {
112111
public void testConnectionReservationForReads() {
113112
_connector.requestStart();
114113
_connector.call(_db, _collection,
115-
OutMessage.query(cleanupMongo, 0, _collection.getFullName(), 0, -1, new BasicDBObject(), new BasicDBObject(), ReadPreference.PRIMARY),
114+
OutMessage.query(cleanupMongo, 0, _collection.getFullName(), 0, -1, new BasicDBObject(), new BasicDBObject(), ReadPreference.primary()),
116115
null, 0);
117116
assertNotNull(_connector.getMyPort()._requestPort);
118117
}

src/test/com/mongodb/DBTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ public void testGetCollectionNamesToSecondary() throws MongoException, UnknownHo
143143
mongo.close();
144144
mongo = new Mongo(secondary);
145145
DB db = mongo.getDB("secondaryTest");
146-
db.setReadPreference(ReadPreference.SECONDARY);
146+
db.setReadPreference(ReadPreference.secondary());
147147
db.getCollectionNames();
148148
} finally {
149149
mongo.close();

0 commit comments

Comments
 (0)