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
|
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.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.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 } )
}
|