List of usage examples for com.mongodb MongoClient getServerAddressList
@Deprecated
public List<ServerAddress> getServerAddressList()
From source file:brooklyn.entity.nosql.mongodb.MongoDBClientSupport.java
License:Apache License
private ServerAddress getServerAddress() { MongoClient client = client(); try {// w ww . j a v a2 s. c o m return client.getServerAddressList().get(0); } finally { client.close(); } }
From source file:com.edgytech.umongo.MongoPanel.java
License:Apache License
@Override protected void updateComponentCustom(JPanel old) { try {//from w w w .j a v a2 s . com MongoClient mongo = getMongoNode().getMongoClient(); setStringFieldValue(Item.version, mongo.getVersion()); ServerAddress master = mongo.getAddress(); if (master != null) { setStringFieldValue(Item.masterServer, getServerAddressString(master)); } List<ServerAddress> addrs = mongo.getAllAddress(); String html = "<html>"; for (ServerAddress addr : addrs) { html += getServerAddressString(addr) + "<br/>"; } html += "</html>"; setStringFieldValue(Item.seedServers, html); addrs = mongo.getServerAddressList(); html = "<html>"; for (ServerAddress addr : addrs) { // String ports = MongoUtils.makeInfoString("used", mongo.getConnector().getDBPortPool(addr).inUse(), // "available", mongo.getConnector().getDBPortPool(addr).available(), // "created", mongo.getConnector().getDBPortPool(addr).everCreated()); String txt = getServerAddressString(addr); html += txt + "<br/>"; } setStringFieldValue(Item.activeServers, html); setStringFieldValue(Item.queryOptions, MongoUtils.queryOptionsToString(mongo.getOptions())); ((DocField) getBoundUnit(Item.writeConcern)).setDoc(mongo.getWriteConcern().getCommand()); ((DocField) getBoundUnit(Item.readPreference)).setDoc(mongo.getReadPreference().toDBObject()); setStringFieldValue(Item.maxObjectSize, String.valueOf(mongo.getMaxBsonObjectSize())); } catch (Exception e) { UMongo.instance.showError(this.getClass().getSimpleName() + " update", e); } }
From source file:com.edgytech.umongo.RouterPanel.java
License:Apache License
public void regenConfigDB(ButtonBase button) throws UnknownHostException { MongoClient cmongo = getRouterNode().getMongoClient(); String servers = getStringFieldValue(Item.regenServers); final String db = getStringFieldValue(Item.regenDB); final String col = getStringFieldValue(Item.regenCollection); final String ns = db + "." + col; final DBObject shardKey = ((DocBuilderField) getBoundUnit(Item.regenShardKey)).getDBObject(); final boolean unique = getBooleanFieldValue(Item.regenKeyUnique); final BasicDBObject result = new BasicDBObject(); result.put("ns", ns); result.put("shardKey", shardKey); result.put("unique", unique); // create direct mongo for each replica set String[] serverList = servers.split("\n"); List<ServerAddress> list = new ArrayList<ServerAddress>(); String txt = ""; String primaryShard = null;/*from ww w. j a va2 s . com*/ final BasicDBObject shardList = new BasicDBObject(); HashMap<MongoClient, String> mongoToShard = new HashMap<MongoClient, String>(); sLoop: for (String server : serverList) { server = server.trim(); String[] tokens = server.split("/"); if (tokens.length != 2) { new InfoDialog(null, "Error", null, "Server format must be like 'hostname:port/shard', one by line") .show(); return; } server = tokens[0]; String shard = tokens[1]; if (primaryShard == null) { primaryShard = shard; } ServerAddress addr = new ServerAddress(server); // filter out if replset already exists for (MongoClient replset : mongoToShard.keySet()) { if (replset.getServerAddressList().contains(addr)) { continue sLoop; } } list.clear(); list.add(addr); MongoClient mongo = new MongoClient(list); // UMongo.instance.addMongoClient(mongo, null); // make request to force server detection mongo.getDatabaseNames(); mongoToShard.put(mongo, shard); String desc = null; if (!mongo.getDatabaseNames().contains(db) || !mongo.getDB(db).getCollectionNames().contains(col)) { desc = "Collection not present!"; } else { // try to see if shard key has index DBObject index = mongo.getDB(db).getCollection("system.indexes") .findOne(new BasicDBObject("key", shardKey)); if (index != null) { desc = "shard key found"; } else { desc = "shard key NOT found!"; } } txt += mongo.toString() + " shard=" + shard + " - " + desc + "\n"; BasicDBObject shardObj = new BasicDBObject("servers", mongo.toString()); shardObj.put("status", desc); if (shardList.containsField(shard)) { new InfoDialog(null, "Error", null, "Duplicate Shard name " + shard).show(); return; } shardList.put(shard, shardObj); } result.put("shards", shardList); FormDialog dia = (FormDialog) getBoundUnit(Item.regenRSList); dia.setStringFieldValue(Item.regenRSListArea, txt); if (!dia.show()) { return; } DB config = cmongo.getDB("config"); // add database record BasicDBObject doc = new BasicDBObject("_id", db); doc.put("partitioned", true); doc.put("primary", primaryShard); config.getCollection("databases").save(doc); // add collection record doc = new BasicDBObject("_id", ns); doc.put("lastmod", new Date()); doc.put("dropped", false); doc.put("key", shardKey); doc.put("unique", unique); config.getCollection("collections").save(doc); final DBCollection chunks = config.getCollection("chunks"); long count = chunks.count(new BasicDBObject("ns", ns)); if (count > 0) { dia = (FormDialog) getBoundUnit(Item.regenDeleteChunks); if (dia.show()) { chunks.remove(new BasicDBObject("ns", ns)); } else { return; } } // add temp collection to sort chunks with shard key final DBCollection tmpchunks = config.getCollection("_tmpchunks_" + col); tmpchunks.drop(); // should be safe environment, and dup keys should be ignored tmpchunks.setWriteConcern(WriteConcern.NORMAL); // can use shardKey as unique _id // tmpchunks.ensureIndex(shardKey, "shardKey", true); // create filter for shard fields final DBObject shardKeyFilter = new BasicDBObject(); // final DBObject shardKeyDescend = new BasicDBObject(); boolean hasId = false; for (String key : shardKey.keySet()) { shardKeyFilter.put(key, 1); if (key.equals("_id")) { hasId = true; } } if (!hasId) { shardKeyFilter.put("_id", 0); } dia = (FormDialog) getBoundUnit(Item.regenConfirm); if (!dia.show()) { return; } // now fetch all records from each shard final AtomicInteger todo = new AtomicInteger(mongoToShard.size()); for (Map.Entry<MongoClient, String> entry : mongoToShard.entrySet()) { final MongoClient mongo = entry.getKey(); final String shard = entry.getValue(); new DbJob() { @Override public Object doRun() throws Exception { BasicDBObject shardObj = (BasicDBObject) shardList.get(shard); long count = mongo.getDB(db).getCollection(col).count(); shardObj.put("count", count); DBCursor cur = mongo.getDB(db).getCollection(col).find(new BasicDBObject(), shardKeyFilter); long i = 0; int inserted = 0; long start = System.currentTimeMillis(); while (cur.hasNext() && !isCancelled()) { BasicDBObject key = (BasicDBObject) cur.next(); setProgress((int) ((++i * 100.0f) / count)); try { BasicDBObject entry = new BasicDBObject("_id", key); entry.put("_shard", shard); tmpchunks.insert(entry); ++inserted; } catch (Exception e) { getLogger().log(Level.WARNING, e.getMessage(), e); } } if (isCancelled()) { shardObj.put("cancelled", true); } shardObj.put("inserted", inserted); shardObj.put("scanTime", System.currentTimeMillis() - start); todo.decrementAndGet(); return null; } @Override public String getNS() { return tmpchunks.getFullName(); } @Override public String getShortName() { return "Scanning " + shard; } @Override public boolean isDeterminate() { return true; } }.addJob(); } new DbJob() { @Override public Object doRun() throws Exception { // wait for all shards to be done long start = System.currentTimeMillis(); while (todo.get() > 0 && !isCancelled()) { Thread.sleep(2000); } if (isCancelled()) { result.put("cancelled", true); return result; } // find highest current timestamp DBCursor cur = chunks.find().sort(new BasicDBObject("lastmod", -1)).batchSize(-1); BasicDBObject chunk = (BasicDBObject) (cur.hasNext() ? cur.next() : null); BSONTimestamp ts = (BSONTimestamp) (chunk != null ? chunk.get("lastmod") : null); // now infer chunk ranges long count = tmpchunks.count(); result.put("uniqueKeys", count); int numChunks = 0; cur = tmpchunks.find().sort(new BasicDBObject("_id", 1)); BasicDBObject prev = (BasicDBObject) cur.next(); BasicDBObject next = null; // snap prev to minkey BasicDBObject theid = (BasicDBObject) prev.get("_id"); for (String key : shardKey.keySet()) { theid.put(key, new MinKey()); } String currentShard = prev.getString("_shard"); int i = 1; while (cur.hasNext()) { next = (BasicDBObject) cur.next(); setProgress((int) ((++i * 100.0f) / count)); String newShard = next.getString("_shard"); if (newShard.equals(currentShard)) continue; // add chunk ts = getNextTimestamp(ts); chunk = getChunk(ns, shardKey, prev, next, ts); chunks.insert(chunk); prev = next; currentShard = prev.getString("_shard"); ++numChunks; } // build max next = new BasicDBObject(); for (String key : shardKey.keySet()) { next.put(key, new MaxKey()); } next = new BasicDBObject("_id", next); ts = getNextTimestamp(ts); chunk = getChunk(ns, shardKey, prev, next, ts); chunks.insert(chunk); ++numChunks; result.put("numChunks", numChunks); result.put("totalTime", System.currentTimeMillis() - start); return result; } @Override public String getNS() { return chunks.getFullName(); } @Override public String getShortName() { return "Creating Chunks"; } @Override public boolean isDeterminate() { return true; } }.addJob(); }
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); }