@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);
  }
Пример #3
0
 // 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;
 }
Пример #4
0
  @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));
 }