1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
|
sh = function() { return "try sh.help();" }
sh._checkMongos = function() {
var x = db.runCommand( "ismaster" );
if ( x.msg != "isdbgrid" )
throw "not connected to a mongos"
}
sh._checkFullName = function( fullName ) {
assert( fullName , "neeed a full name" )
assert( fullName.indexOf( "." ) > 0 , "name needs to be fully qualified <db>.<collection>'" )
}
sh._adminCommand = function( cmd , skipCheck ) {
if ( ! skipCheck ) sh._checkMongos();
var res = db.getSisterDB( "admin" ).runCommand( cmd );
if ( res == null || ! res.ok ) {
print( "command failed: " + tojson( res ) )
}
return res;
}
sh._dataFormat = function( bytes ){
if( bytes < 1024 ) return Math.floor( bytes ) + "b"
if( bytes < 1024 * 1024 ) return Math.floor( bytes / 1024 ) + "kb"
if( bytes < 1024 * 1024 * 1024 ) return Math.floor( ( Math.floor( bytes / 1024 ) / 1024 ) * 100 ) / 100 + "Mb"
return Math.floor( ( Math.floor( bytes / ( 1024 * 1024 ) ) / 1024 ) * 100 ) / 100 + "Gb"
}
sh._collRE = function( coll ){
return RegExp( "^" + (coll + "").replace(/\./g, "\\.") + "-.*" )
}
sh._pchunk = function( chunk ){
return "[" + tojson( chunk.min ) + " -> " + tojson( chunk.max ) + "]"
}
sh.help = function() {
print( "\tsh.addShard( host ) server:port OR setname/server:port" )
print( "\tsh.enableSharding(dbname) enables sharding on the database dbname" )
print( "\tsh.shardCollection(fullName,key,unique) shards the collection" );
print( "\tsh.splitFind(fullName,find) splits the chunk that find is in at the median" );
print( "\tsh.splitAt(fullName,middle) splits the chunk that middle is in at middle" );
print( "\tsh.moveChunk(fullName,find,to) move the chunk where 'find' is to 'to' (name of shard)");
print( "\tsh.setBalancerState( <bool on or not> ) turns the balancer on or off true=on, false=off" );
print( "\tsh.getBalancerState() return true if on, off if not" );
print( "\tsh.isBalancerRunning() return true if the balancer is running on any mongos" );
print( "\tsh.status() prints a general overview of the cluster" )
}
sh.status = function( verbose , configDB ) {
// TODO: move the actual commadn here
printShardingStatus( configDB , verbose );
}
sh.addShard = function( url ){
sh._adminCommand( { addShard : url } , true )
}
sh.enableSharding = function( dbname ) {
assert( dbname , "need a valid dbname" )
sh._adminCommand( { enableSharding : dbname } )
}
sh.shardCollection = function( fullName , key , unique ) {
sh._checkFullName( fullName )
assert( key , "need a key" )
assert( typeof( key ) == "object" , "key needs to be an object" )
var cmd = { shardCollection : fullName , key : key }
if ( unique )
cmd.unique = true;
sh._adminCommand( cmd )
}
sh.splitFind = function( fullName , find ) {
sh._checkFullName( fullName )
sh._adminCommand( { split : fullName , find : find } )
}
sh.splitAt = function( fullName , middle ) {
sh._checkFullName( fullName )
sh._adminCommand( { split : fullName , middle : middle } )
}
sh.moveChunk = function( fullName , find , to ) {
sh._checkFullName( fullName );
sh._adminCommand( { moveChunk : fullName , find : find , to : to } )
}
sh.setBalancerState = function( onOrNot ) {
db.getSisterDB( "config" ).settings.update({ _id: "balancer" }, { $set : { stopped: onOrNot ? false : true } }, true );
}
sh.getBalancerState = function() {
var x = db.getSisterDB( "config" ).settings.findOne({ _id: "balancer" } )
if ( x == null )
return true;
return ! x.stopped;
}
sh.isBalancerRunning = function() {
var x = db.getSisterDB( "config" ).locks.findOne( { _id : "balancer" } );
return x.state > 0;
}
|