List of usage examples for com.mongodb DBCursor hasNext
@Override public boolean hasNext()
From source file:com.edgytech.umongo.CollectionPanel.java
License:Apache License
public void fixCollection(ButtonBase button) { final MongoClient m = getCollectionNode().getDbNode().getMongoNode().getMongoClient(); ArrayList<MongoNode> mongoNodes = UMongo.instance.getMongos(); String[] mongonames = new String[mongoNodes.size() - 1]; MongoClient[] mongos = new MongoClient[mongonames.length]; int i = 0;/* w ww . j av a2 s .c om*/ for (MongoNode node : mongoNodes) { MongoClient m2 = node.getMongoClient(); if (m == m2) { continue; } mongonames[i] = m2.toString(); mongos[i] = m2; ++i; } ComboBox src = (ComboBox) getBoundUnit(Item.fcSrcMongo); src.items = mongonames; src.structureComponent(); FormDialog dialog = (FormDialog) getBoundUnit(Item.fcDialog); if (!dialog.show()) { return; } final DBCollection dstCol = getCollectionNode().getCollection(); final MongoClient srcMongo = mongos[src.getIntValue()]; final boolean upsert = getBooleanFieldValue(Item.fcUpsert); final String dbname = dstCol.getDB().getName(); final String colname = dstCol.getName(); final DBCollection srcCol = srcMongo.getDB(dbname).getCollection(colname); String txt = "About to copy from "; txt += srcMongo.getConnectPoint() + "(" + srcCol.count() + ")"; txt += " to "; txt += m.getConnectPoint() + "(" + dstCol.count() + ")"; if (!new ConfirmDialog(null, "Confirm Fix Collection", null, txt).show()) { return; } new DbJob() { @Override public Object doRun() { DBCursor cur = srcCol.find(); int count = 0; int dup = 0; while (cur.hasNext()) { DBObject obj = cur.next(); if (upsert) { BasicDBObject id = new BasicDBObject("_id", obj.get("_id")); dstCol.update(id, obj, true, false); } else { try { dstCol.insert(obj); } catch (DuplicateKey e) { // dup keys are expected here ++dup; } } ++count; } DBObject res = new BasicDBObject("count", count); res.put("dups", dup); return res; } @Override public String getNS() { return "*"; } @Override public String getShortName() { return "Fix Collection"; } }.addJob(); }
From source file:com.edgytech.umongo.CollectionPanel.java
License:Apache License
void refreshTagRangeList() { String ns = getCollectionNode().getCollection().getFullName(); ListArea list = (ListArea) getBoundUnit(Item.tagRangeList); final DB config = getCollectionNode().getCollection().getDB().getSisterDB("config"); final DBCollection col = config.getCollection("tags"); DBCursor cur = col.find(new BasicDBObject("ns", ns)); ArrayList<String> ranges = new ArrayList<String>(); while (cur.hasNext()) { BasicDBObject range = (BasicDBObject) cur.next(); ranges.add(MongoUtils.getJSON(range)); }//from w ww.j av a 2 s . c om list.items = ranges.toArray(new String[ranges.size()]); list.structureComponent(); }
From source file:com.edgytech.umongo.DbPanel.java
License:Apache License
void refreshUserList() { ListArea list = (ListArea) getBoundUnit(Item.userList); final DB db = getDbNode().getDb(); DBCursor cur = db.getCollection("system.users").find().sort(new BasicDBObject("user", 1)); ArrayList users = new ArrayList(); while (cur.hasNext()) { BasicDBObject user = (BasicDBObject) cur.next(); users.add(user.getString("user")); }/* w w w. j a v a 2 s . co m*/ list.items = (String[]) users.toArray(new String[users.size()]); list.structureComponent(); }
From source file:com.edgytech.umongo.MongoUtils.java
License:Apache License
public static DBObject getReplicaSetInfo(MongoClient mongo) { DB db = mongo.getDB("local"); DBObject result = new BasicDBObject(); DBCollection namespaces = db.getCollection("system.namespaces"); String oplogName;//from w w w. ja v a2 s. c o m if (namespaces.findOne(new BasicDBObject("name", "local.oplog.rs")) != null) { oplogName = "oplog.rs"; } else if (namespaces.findOne(new BasicDBObject("name", "local.oplog.$main")) != null) { oplogName = "oplog.$main"; } else { return null; } DBObject olEntry = namespaces.findOne(new BasicDBObject("name", "local." + oplogName)); if (olEntry != null && olEntry.containsField("options")) { BasicDBObject options = (BasicDBObject) olEntry.get("options"); long size = options.getLong("size"); result.put("logSizeMB", Float.valueOf(String.format("%.2f", size / 1048576f))); } else { return null; } DBCollection oplog = db.getCollection(oplogName); int size = oplog.getStats().getInt("size"); result.put("usedMB", Float.valueOf(String.format("%.2f", size / 1048576f))); DBCursor firstc = oplog.find().sort(new BasicDBObject("$natural", 1)).limit(1); DBCursor lastc = oplog.find().sort(new BasicDBObject("$natural", -1)).limit(1); if (!firstc.hasNext() || !lastc.hasNext()) { return null; } BasicDBObject first = (BasicDBObject) firstc.next(); BasicDBObject last = (BasicDBObject) lastc.next(); BSONTimestamp tsfirst = (BSONTimestamp) first.get("ts"); BSONTimestamp tslast = (BSONTimestamp) last.get("ts"); if (tsfirst == null || tslast == null) { return null; } int ftime = tsfirst.getTime(); int ltime = tslast.getTime(); int timeDiffSec = ltime - ftime; result.put("timeDiff", timeDiffSec); result.put("timeDiffHours", Float.valueOf(String.format("%.2f", timeDiffSec / 3600f))); result.put("tFirst", new Date(ftime * 1000l)); result.put("tLast", new Date(ltime * 1000l)); result.put("now", new Date()); return result; }
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 w ww . j a v a 2 s .c o m*/ 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:com.edgytech.umongo.TagRangeDialog.java
License:Apache License
static String[] getExistingTags(DB config) { DBCursor cur = config.getCollection("shards").find(); HashSet<String> tags = new HashSet<String>(); while (cur.hasNext()) { DBObject shard = cur.next();/*w w w .j ava2 s . c om*/ if (shard.containsField("tags")) { BasicDBList list = (BasicDBList) shard.get("tags"); for (Object tag : list) { tags.add((String) tag); } } } return tags.toArray(new String[tags.size()]); }
From source file:com.effektif.mongo.MongoJobStore.java
License:Apache License
public Iterator<String> getWorkflowInstanceIdsToLockForJobs() { DBObject query = buildLockNextJobQuery().push(WORKFLOW_INSTANCE_ID).append("$exists", true).pop().get(); // TODO use MongoQuery filterOrganization(query, JobFields.organizationId); DBObject retrieveFields = new BasicDBObject(WORKFLOW_INSTANCE_ID, true); DBCursor jobsDueHavingProcessInstance = jobsCollection.find("jobs-having-process-instance", query, retrieveFields);/*from w ww . ja v a2 s . c o m*/ List<String> processInstanceIds = new ArrayList<>(); while (jobsDueHavingProcessInstance.hasNext()) { DBObject partialJob = jobsDueHavingProcessInstance.next(); Object processInstanceId = partialJob.get(WORKFLOW_INSTANCE_ID); processInstanceIds.add(processInstanceId.toString()); } return processInstanceIds.iterator(); }
From source file:com.effektif.mongo.MongoJobStore.java
License:Apache License
protected List<Job> findJobs(MongoCollection collection, JobQuery jobQuery) { List<Job> jobs = new ArrayList<Job>(); BasicDBObject query = createDbQuery(jobQuery); DBCursor jobCursor = collection.find("find-jobs", query); while (jobCursor.hasNext()) { BasicDBObject dbJob = (BasicDBObject) jobCursor.next(); Job job = readJob(dbJob);/* w ww .j ava2s . c o m*/ jobs.add(job); } return jobs; }
From source file:com.effektif.mongo.MongoWorkflowInstanceStore.java
License:Apache License
public List<WorkflowInstanceImpl> findWorkflowInstances(BasicDBObject dbQuery) { DBCursor workflowInstanceCursor = workflowInstancesCollection.find("find-workflow-instance-impls", dbQuery); List<WorkflowInstanceImpl> workflowInstances = new ArrayList<>(); while (workflowInstanceCursor.hasNext()) { BasicDBObject dbWorkflowInstance = (BasicDBObject) workflowInstanceCursor.next(); WorkflowInstanceImpl workflowInstance = readWorkflowInstanceImpl(dbWorkflowInstance); workflowInstances.add(workflowInstance); }/*from ww w . j a v a2s. c o m*/ return workflowInstances; }
From source file:com.effektif.mongo.MongoWorkflowInstanceStore.java
License:Apache License
public LinkedHashMap<WorkflowInstanceId, WorkflowInstanceImpl> findWorkflowInstanceMap( Collection<ObjectId> workflowInstanceIds) { LinkedHashMap<WorkflowInstanceId, WorkflowInstanceImpl> workflowInstanceMap = new LinkedHashMap<>(); if (workflowInstanceIds != null && !workflowInstanceIds.isEmpty()) { Query query = new Query()._ids(workflowInstanceIds); DBCursor workflowInstanceCursor = workflowInstancesCollection.find("find-workflow-instance", query.get());/*from w w w . j a va 2s.c o m*/ while (workflowInstanceCursor.hasNext()) { BasicDBObject dbWorkflowInstance = (BasicDBObject) workflowInstanceCursor.next(); WorkflowInstanceImpl workflowInstance = readWorkflowInstanceImpl(dbWorkflowInstance); workflowInstanceMap.put(workflowInstance.getId(), workflowInstance); } } return workflowInstanceMap; }