List of usage examples for com.mongodb CommandResult getErrorMessage
@Nullable
public String getErrorMessage()
From source file:org.slc.sli.ingestion.util.MongoCommander.java
License:Apache License
/** * Move chunks of a collection to different shards * @param collection : the collection to be split * @param shards : list of all shards/* www. j a va 2 s.c o m*/ * @param dbConn * @return Error description, or null if no errors */ private static String moveChunks(String collection, List<String> shards, DB dbConn) { int numShards = shards.size(); if (numShards == 0) { return null; } // // Fraction of 256 that each block will occupy // int charOffset = 256 / numShards; // // Keep list of the start point for each chunk, so we can move the chunk after creating them // List<String> moveStrings = new ArrayList<String>(); moveStrings.add("$minkey"); // // We want one chunk per shard, so we need to do numShards-1 splits // Calculate where to split and do it // for (int shard = 1; shard <= numShards - 1; shard++) { // // Split points based on the fraction of 256 that each chunk should occupy // String splitString = Integer.toHexString(charOffset * shard); moveStrings.add(splitString); CommandResult result = dbConn.command(buildSplitCommand(collection, splitString)); if (!result.ok()) { LOG.error("Error splitting chunk in {}: {}", collection, result.getErrorMessage()); return result.getErrorMessage(); } } // // Move each chunk to the correct shard // One of these moves will get a "that chunk is already on that shard" error // which is ok // for (int index = 0; index < numShards; index++) { DBObject moveCommand = new BasicDBObject(); moveCommand.put("moveChunk", collection); moveCommand.put("find", new BasicDBObject(ID, moveStrings.get(index))); moveCommand.put("to", shards.get(index)); CommandResult result = dbConn.command(moveCommand); if (!result.ok()) { if (!result.getErrorMessage().equals("that chunk is already on that shard")) { LOG.error("Error moving chunk in {}: {}", collection, result.getErrorMessage()); return result.getErrorMessage(); } } } return null; }
From source file:org.slc.sli.ingestion.util.MongoCommander.java
License:Apache License
/** * set the state of balancer./* w w w . j av a 2 s .c o m*/ * * @param dbConn * @param state * @return Error description, or null if no errors */ private static String setBalancerState(DB dbConn, boolean state) { DBObject balancer = new BasicDBObject(ID, "balancer"); DBObject updateObj = new BasicDBObject(); String stopped = state ? "false" : "true"; updateObj.put("$set", new BasicDBObject("stopped", stopped)); WriteResult wresult = dbConn.getSisterDB("config").getCollection("settings").update(balancer, updateObj, true, false); if (wresult != null) { CommandResult result = wresult.getLastError(); if (!result.ok()) { LOG.error("Error setting balancer state to {}: {}", state, result.getErrorMessage()); return result.getErrorMessage(); } } return null; }
From source file:org.slc.sli.ingestion.util.MongoCommander.java
License:Apache License
/** * Pre-split database//from w w w . j a va2 s. c om * @param shardCollections: the set of collections to be split * @param dbName * @param mongoTemplate * @return Error description, or null if no errors */ public static String preSplit(Set<String> shardCollections, String dbName, MongoTemplate mongoTemplate) { DB dbConn = mongoTemplate.getDb().getSisterDB("admin"); //Don't do anything if it is non-sharded List<String> shards = getShards(dbConn); if (shards.size() == 0) { return null; } //set balancer off String sresult = setBalancerState(dbConn, false); if (sresult != null) { return sresult; } // Enable sharding for this database DBObject enableShard = new BasicDBObject("enableSharding", dbName); CommandResult result = dbConn.command(enableShard); if (!result.ok()) { LOG.error("Error enabling sharding on {}: {}", dbConn, result.getErrorMessage()); return result.getErrorMessage(); } for (String coll : shardCollections) { String collection = dbName + "." + coll; // Enable sharding for this collection, sharding on _id DBObject shardColl = new BasicDBObject(); shardColl.put("shardCollection", collection); shardColl.put("key", new BasicDBObject(ID, 1)); result = dbConn.command(shardColl); if (!result.ok()) { LOG.error("Error enabling shard'ing on {}: {}", collection, result.getErrorMessage()); return result.getErrorMessage(); } sresult = moveChunks(collection, shards, dbConn); if (sresult != null) { return sresult; } } return preSplitBinCollections(dbName, mongoTemplate); }
From source file:org.slc.sli.ingestion.util.MongoCommander.java
License:Apache License
private static String preSplitBinCollections(String dbName, MongoTemplate mongoTemplate) { DB dbConn = mongoTemplate.getDb().getSisterDB("admin"); List<String> shards = getShards(dbConn); if (shards != null && shards.size() > 0) { int numShards = shards.size(); List<String> collections = Arrays.asList("recordHash", "deltas"); for (String collectionName : collections) { LOG.info("Shard count = {}. Setting up sharding config for {}!", numShards, collectionName); String collection = dbName + "." + collectionName; DBObject shardColl = new BasicDBObject(); shardColl.put("shardCollection", collection); shardColl.put("key", new BasicDBObject(ID, 1)); CommandResult result = dbConn.command(shardColl); if (!result.ok()) { LOG.error("Error enabling shard'ing on recordHash: {}", result.getErrorMessage()); return result.getErrorMessage(); }/*from w ww. j av a 2 s . c om*/ int charOffset = 256 / numShards; List<byte[]> shardPoints = new ArrayList<byte[]>(); shardPoints.add(null); for (int shard = 1; shard < numShards; shard++) { String splitString = Integer.toHexString(charOffset * shard); if (splitString.length() < 2) { splitString = "0" + splitString; } splitString = splitString + STR_0X38; byte[] splitPoint = RecordHash.hex2Binary(splitString); shardPoints.add(splitPoint); LOG.info("Adding recordHash splitPoint [" + RecordHash.binary2Hex(splitPoint) + "]"); DBObject splitCmd = new BasicDBObject(); splitCmd.put("split", collection); splitCmd.put("middle", new BasicDBObject(ID, splitPoint)); result = dbConn.command(splitCmd); if (!result.ok()) { LOG.error("Error splitting chunk in recordHash: {}", result.getErrorMessage()); return result.getErrorMessage(); } } for (int index = 0; index < numShards; index++) { DBObject moveCommand = new BasicDBObject(); moveCommand.put("moveChunk", collection); moveCommand.put("find", new BasicDBObject(ID, index == 0 ? "$minkey" : shardPoints.get(index))); moveCommand.put("to", shards.get(index)); result = dbConn.command(moveCommand); if (!result.ok()) { if (!result.getErrorMessage().equals("that chunk is already on that shard")) { LOG.error("Error moving chunk in recordHash: {}", result.getErrorMessage()); return result.getErrorMessage(); } } } } } else { LOG.info("No shards or shard count < 0. Not setting sharding config for recordHash!"); } return null; }
From source file:org.springframework.data.document.mongodb.MongoTemplate.java
License:Apache License
public CommandResult executeCommand(final DBObject command) { CommandResult result = execute(new DbCallback<CommandResult>() { public CommandResult doInDB(DB db) throws MongoException, DataAccessException { return db.command(command); }/* w w w . ja v a 2 s .c om*/ }); String error = result.getErrorMessage(); if (error != null) { // TODO: allow configuration of logging level / throw // throw new InvalidDataAccessApiUsageException("Command execution of " + // command.toString() + " failed: " + error); LOGGER.warn("Command execution of " + command.toString() + " failed: " + error); } return result; }
From source file:org.springframework.data.mongodb.core.MongoTemplate.java
License:Apache License
protected void logCommandExecutionError(final DBObject command, CommandResult result) { String error = result.getErrorMessage(); if (error != null) { LOGGER.warn("Command execution of {} failed: {}", command.toString(), error); }/*from w w w . ja v a 2s .c o m*/ }