Example usage for com.mongodb ReplicaSetStatus getName

List of usage examples for com.mongodb ReplicaSetStatus getName

Introduction

In this page you can find the example usage for com.mongodb ReplicaSetStatus getName.

Prototype

@SuppressWarnings("deprecation")
@Nullable
public String getName() 

Source Link

Document

Get the name of the replica set.

Usage

From source file:io.debezium.connector.mongodb.ReplicaSetDiscovery.java

License:Apache License

/**
 * Connect to the shard cluster or replica set defined by the seed addresses, and obtain the specifications for each of the
 * replica sets./*from  ww w  . j  a va2  s. c  o m*/
 * 
 * @return the information about the replica sets; never null but possibly empty
 */
public ReplicaSets getReplicaSets() {
    MongoClient client = context.clientFor(seedAddresses);
    Set<ReplicaSet> replicaSetSpecs = new HashSet<>();

    // First see if the addresses are for a config server replica set ...
    String shardsCollection = "shards";
    try {
        MongoUtil.onCollectionDocuments(client, CONFIG_DATABASE_NAME, shardsCollection, doc -> {
            logger.info("Checking shard details from configuration replica set {}", seedAddresses);
            String shardName = doc.getString("_id");
            String hostStr = doc.getString("host");
            String replicaSetName = MongoUtil.replicaSetUsedIn(hostStr);
            replicaSetSpecs.add(new ReplicaSet(hostStr, replicaSetName, shardName));
        });
    } catch (MongoException e) {
        logger.error("Error while reading the '{}' collection in the '{}' database: {}", shardsCollection,
                CONFIG_DATABASE_NAME, e.getMessage(), e);
    }
    if (replicaSetSpecs.isEmpty()) {
        // The addresses may be a replica set ...
        ReplicaSetStatus rsStatus = client.getReplicaSetStatus();
        logger.info("Checking current members of replica set at {}", seedAddresses);
        if (rsStatus != null) {
            // This is a replica set ...
            String addressStr = Strings.join(",", client.getServerAddressList());
            String replicaSetName = rsStatus.getName();
            replicaSetSpecs.add(new ReplicaSet(addressStr, replicaSetName, null));
        } else {
            logger.debug("Found standalone MongoDB replica set at {}", seedAddresses);
            // We aren't connecting to it as a replica set (likely not using auto-discovery of members),
            // but we can't monitor standalone servers unless they really are replica sets. We already know
            // that we're not connected to a config server replica set, so any replica set name from the seed addresses
            // is almost certainly our replica set name ...
            String replicaSetName = MongoUtil.replicaSetUsedIn(seedAddresses);
            if (replicaSetName != null) {
                for (String address : seedAddresses.split(",")) {
                    replicaSetSpecs.add(new ReplicaSet(address, replicaSetName, null));
                }
            }
        }
    }
    if (replicaSetSpecs.isEmpty()) {
        // Without a replica set name, we can't do anything ...
        logger.error(
                "Found no replica sets at {}, so there is nothing to monitor and no connector tasks will be started. Check seed addresses in connector configuration.",
                seedAddresses);
    }
    return new ReplicaSets(replicaSetSpecs);
}