@Test public void testSecondaryPreferredWithNoSecondary() { for (int i = 0; i < 1000; i++) { nodeSet.add(ReadPreference.secondaryPreferred().getNode(_setNoSecondary)); } expectedNodeSet.addAll(Arrays.asList(_primary)); assertEquals(expectedNodeSet, nodeSet); }
@Test public void testTaggedSecondaryPreferredWithNoSecondary() { final TaggableReadPreference readPreference = ReadPreference.secondaryPreferred(new BasicDBObject("dc", "ny")); for (int i = 0; i < 1000; i++) { nodeSet.add(readPreference.getNode(_setNoSecondary)); } expectedNodeSet.addAll(Arrays.asList(_primary)); assertEquals(expectedNodeSet, nodeSet); }
// Only append $readPreference meta-operator if connected to a mongos, read preference is not // primary // or secondary preferred, // and command is an instance of BasicDBObject. The last condition is unfortunate, but necessary // in case // the encoder is not capable of encoding a BasicDBObject // Due to issues with compatibility between different versions of mongos, also wrap the command in // a // $query field, so that the $readPreference is not rejected private DBObject wrapCommand(DBObject cmd, final ReadPreference readPrefs) { if (getMongo().isMongosConnection() && !(ReadPreference.primary().equals(readPrefs) || ReadPreference.secondaryPreferred().equals(readPrefs)) && cmd instanceof BasicDBObject) { cmd = new BasicDBObject("$query", cmd) .append(QueryOpBuilder.READ_PREFERENCE_META_OPERATOR, readPrefs.toDBObject()); } return cmd; }
@Override protected MongoClient createInstance() throws Exception { MongoClient mongo = initMongo(); // 设定主从分离 if (readSecondary) { mongo.setReadPreference(ReadPreference.secondaryPreferred()); } // 设定写策略 mongo.setWriteConcern(writeConcern); return mongo; }
private ReadPreference buildReadPreference( final String readPreferenceType, final DBObject firstTagSet, final List<DBObject> remainingTagSets, final Boolean slaveOk) { if (readPreferenceType != null) { if (firstTagSet == null) { return ReadPreference.valueOf(readPreferenceType); } else { return ReadPreference.valueOf( readPreferenceType, firstTagSet, remainingTagSets.toArray(new DBObject[remainingTagSets.size()])); } } else if (slaveOk != null) { if (slaveOk.equals(Boolean.TRUE)) { return ReadPreference.secondaryPreferred(); } } return null; }
@Test public void testTaggedSecondaryPreferredWithNoPrimaryOrSecondary() { final TaggableReadPreference readPreference = ReadPreference.secondaryPreferred(new BasicDBObject("dc", "ny")); assertNull(readPreference.getNode(_emptySet)); }
@Test public void testSecondaryPreferredWithNoPrimaryOrSecondary() { assertNull(ReadPreference.secondaryPreferred().getNode(_emptySet)); }