if (hostname == undefined)
{
println ("hostname is undefined") ;
throw 1 ;
}
if (svcname == undefined)
{
println ("svcname is undefined") ;
throw 2 ;
}
if (usrname == undefined)
{
println ("usrname is undefined") ;
throw 3 ;
}
if (passwd == undefined)
{
println ("passwd is undefined") ;
throw 4 ;
}
if (sdb_csName == undefined)
{
println ("sdb_csName is undefined") ;
throw 5 ;
}
if (sdb_main_clName == undefined)
{
println ("sdb_main_clName is undefined");
throw 6 ;
}
if (sdb_sub_clNames == undefined)
{
println ("sdb_sub_clName is undefined") ;
throw 7 ;
}
if (split_bound == undefined)
{
prinln ("split_bound is undefined") ;
throw 8 ;
}
if (mainShardingKeyName == undefined)
{
println ("mainShardingKeyName is undefined") ;
throw 9 ;
}
if (shardingKeyName == undefined)
{
println ("shardingKeyName is undefined") ;
throw 10 ;
}
if (replSize == undefined)
{
println ("replSize is undefined") ;
throw 11 ;
}
if (isCompressed == undefined)
{
println ("isCompressed is undefined" ) ;
throw 12 ;
}
if (isRebuildCS == undefined)
{
println ("isRebuildCS is undefined") ;
throw 13 ;
}
/*
if (domainName == undefined)
{
println ("domainName is undefined") ;
throw 14 ;
}
*/
////////////////////////////////////////////////////////////////////////////////////////////////
//var hostname = "localhost" ;
//var svcname = 11810 ;
//var usrname = "" ;
//var passwd = "" ;
//var sdb_csName = "chen_test" ;
//var sdb_main_clName = "sdb_main_cl" ;
//var sdb_sub_clNames = new Array("sdb_sub_cl17","sdb_sub_cl18", "sdb_sub_cl19", "sdb_sub_cl20") ;
//var split_bound = new Array("17:00:00", "18:00:00","19:00:00","20:00:00","21:00:00" ) ;
//var mainShardingKeyName = "gentime" ;
//var shardingKeyName = "id" ;
//var replSize = 1 ;
//var isCompressed = true ;
//var isRebuildCS = true ;
//var domainName = "testdomain" ;
////////////////////////////////////////////////////////////////////////////////////////////////
var db = new Sdb(hostname, svcname, usrname, passwd) ;
var domainName = "maindomain" ;
//var begin_num=0;
grouplist = Array()
try{
var cur = db.listReplicaGroups();
}
catch (e)
{
if (e == -159)
{
println ("This env is standalone, can't do domain ") ;
throw e ;
}
}
while(cur.next()){
if( cur.current().toObj()["GroupName"] != "SYSCatalogGroup" && cur.current().toObj()["GroupName"] != "SYSCoord"){
grouplist.push(cur.current().toObj()["GroupName"])
}
}
/////////////////////////////////////////////////////////////////////////
function createSdbDomain (db)
{
println ("create domain, domain name = " + domainName) ;
try
{
db.createDomain( domainName, grouplist, { AutoSplit: true } ) ;
}
catch( e )
{
println( "failed to create create domain, rc = " + e ) ;
throw e ;
}
println( "create successful" ) ;
}
function alterSdbDomain (db, grouplist)
{
var domain = db.getDomain (domainName) ;
println ("domain have to changed") ;
try{
domain.alter ({"Groups":grouplist}) ;
}
catch (e)
{
println ("domain.alter fail, error number = " + e) ;
throw e ;
}
}
//////////////////////////////
var findDomain = false ;
var cursor = db.listDomains() ;
while (cursor.next ())
{
var oneDomainName = cursor.current ().toObj ()["Name"] ;
if (oneDomainName == domainName)
{
findDomain = true ;
break ;
}
}
if ( ! findDomain )
{
// create domain
/*
var group_num = grouplist.length;
if(group_num == 1)
{
println("Data group only one, can't execute data split") ;
}
*/
println ("Do not find domain = " + domainName) ;
createSdbDomain (db) ;
}
else // find domain
{
println ("domain is exits, check grouplist ") ;
// get damain's datagroup name
var doMainGroupList = Array () ;
var cursor = db.listDomains () ;
while (cursor.next ())
{
var _domName = cursor.current ().toObj ()["Name"] ;
if (_domName == domainName)
{
var findDomainGroupList = cursor.current ().toObj ()["Groups"] ;
for(var i = 0 ; i < findDomainGroupList.length; i++)
{
doMainGroupList.push (findDomainGroupList[i]["GroupName"]) ;
}
}
}
// check domain is it add all datagroups
if (grouplist.length != doMainGroupList.length)
{
alterSdbDomain (db, grouplist) ;
}
else
{
var findGroupNameNum = 0 ;
for (var i = 0; i < doMainGroupList.length; i++)
{
var domaingroupname = doMainGroupList[i] ;
for (var j = 0; j < grouplist.length; j++)
{
if (domaingroupname == grouplist[j])
{
++findGroupNameNum ;
break ;
}
}
}
// grouplist is not equal domaingrouplist
if (findGroupNameNum != doMainGroupList.length)
{
alterSdbDomain (db, grouplist) ;
}
println ("grouplist does not have changed") ;
}
}
//var split_num=Math.round((4096/group_num));
//var i=1;
if (isRebuildCS) {
try{
println("drop cs " + sdb_csName);
db.dropCS(sdb_csName);
}catch(e){
if( -34 != e ){
println("e is "+e)
println("ignore")
throw e;
}
}
println("create cs " + sdb_csName );
//db.createCS(sdb_csName,65536)
// create CS attach domain
db.createCS( sdb_csName, { PageSize: 65536, Domain: domainName } ) ;
}
var cs = db.getCS(sdb_csName);
println("cs.createCL('"+sdb_main_clName+"', {ShardingKey:{"+mainShardingKeyName+":1},IsMainCL:true})")
eval("cs.createCL('"+sdb_main_clName+"', {ShardingKey:{"+mainShardingKeyName+":1},IsMainCL:true})")
var main_cl = cs.getCL(sdb_main_clName);
for (var j = 0; j < sdb_sub_clNames.length; j++) {
sdb_clName = sdb_sub_clNames[j];
println("create sub cl " + sdb_clName);
eval("cl = cs.createCL(\""+sdb_clName+"\", {ShardingType:\"hash\",ShardingKey:{"+shardingKeyName+":1}, ReplSize:"+replSize+", Compressed:"+isCompressed+"})");
println("cl = cs.createCL(\""+sdb_clName+"\", {ShardingType:\"hash\",ShardingKey:{"+shardingKeyName+":1}, ReplSize:"+replSize+", Compressed:"+isCompressed+"})");
println("sleep 1");
sleep(1000) ;
/*
var snap=db.snapshot(4)
while( snap.next() ){
var obj = snap.current().toObj()
cs_cl_name= obj["Name"];
if( cs_cl_name == sdb_csName+"."+sdb_clName ){
group_name=obj["Details"][0]["GroupName"];
break;
}
}
println("data source group name is " + group_name);
for(var i = 0 ; i < grouplist.length ; i++ ){
var realGroupName = grouplist[i];
if( group_name != realGroupName ){
var group_tmp_name = realGroupName;
var end_num = begin_num + split_num;
println(group_name+"~~~~~~~~~~~"+group_tmp_name+"~~~~~~~~~~~~~~"+begin_num+"~~~~~~~~~"+(end_num))
cl.split(group_name, group_tmp_name , {Partition:begin_num},{Partition:end_num});
begin_num=end_num;
}
}
*/
//attache sub collection to main collection
println(sdb_csName+"."+sdb_clName);
eval("main_cl.attachCL(\""+sdb_csName+"."+sdb_clName+"\", {LowBound:{"+mainShardingKeyName+":'"+split_bound[j]+"'},UpBound:{"+mainShardingKeyName+":'"+split_bound[j + 1]+"'}})");
println("main_cl.attachCL(\""+sdb_csName+"."+sdb_clName+"\", {LowBound:{"+mainShardingKeyName+":'"+split_bound[j]+"'},UpBound:{"+mainShardingKeyName+":'"+split_bound[j + 1]+"'}})");
begin_num = 0;
}
println("sleep 15");
sleep(15000);
println("split is OK") ;