/**
  * @param tags tags map
  * @return a good secondary by tag value or null if can't find one
  */
 ServerAddress getASecondary(DBObject tags) {
   // store the reference in local, so that it doesn't change out from under us while looping
   List<Tag> tagList = new ArrayList<Tag>();
   for (String key : tags.keySet()) {
     tagList.add(new Tag(key, tags.get(key).toString()));
   }
   Node node = _replicaSetHolder.get().getASecondary(tagList);
   if (node != null) {
     return node.getServerAddress();
   }
   return null;
 }
 List<ServerAddress> getServerAddressList() {
   List<ServerAddress> addrs = new ArrayList<ServerAddress>();
   for (Node node : _replicaSetHolder.get().getAll()) addrs.add(node.getServerAddress());
   return addrs;
 }
 /** @return master or null if don't have one */
 public ServerAddress getMaster() {
   Node n = getMasterNode();
   if (n == null) return null;
   return n.getServerAddress();
 }