public static void main()

in src/main/java/com/aliyun/openservices/log/sample/ShardBalanceTool.java [46:99]


    public static void main(String[] args) throws LogException, InterruptedException {
        int count = 24;
        ArrayList<String> res = Split(count);
        System.out.println(res);
        Client client = new Client(endpoint, accesskeyId, accesskey);
        while (res.size() > 0) {
            ArrayList<Shard> shards = client.ListShard(project, logstore).GetShards();
            System.out.println("list shards: " + shards);
            HashSet<String> eraseHash = new HashSet<String>();
            for (Shard shard : shards) {
                if (shard.getStatus().compareToIgnoreCase("readwrite") == 0) {
                    for (String hash : res) {
                        if (shard.getInclusiveBeginKey().compareToIgnoreCase(hash) != 0 && Contain(shard.getInclusiveBeginKey(), shard.getExclusiveEndKey(), hash)) {
                            System.out.println("split shard: " + shard.toString());
                            client.SplitShard(project, logstore, shard.GetShardId(), hash);
                            eraseHash.add(hash);
                            break;
                        } else if (shard.getInclusiveBeginKey().compareToIgnoreCase(hash) == 0) {
                            eraseHash.add(hash);
                            break;
                        }
                    }
                }
            }
            ArrayList<String> newRes = new ArrayList<String>();
            for (String hash : res) {
                if (!eraseHash.contains(hash)) newRes.add(hash);
            }
            res = newRes;
            if (res.size() > 0) Thread.sleep(60 * 1000);
        }
        Thread.sleep(60 * 1000);
        res = SplitWithBound(count);
        boolean mloop = true;
        while (mloop) {
            mloop = false;
            ArrayList<Shard> shards = client.ListShard(project, logstore).GetShards();
            for (int i = 1; i < res.size(); ++i) {
                String bh = res.get(i - 1), eh = res.get(i);
                ArrayList<Shard> rangeShards = new ArrayList<Shard>();
                for (Shard s : shards) {
                    if (s.getStatus().compareToIgnoreCase("readwrite") == 0 && Contain(bh, eh, s.getInclusiveBeginKey())) {
                        rangeShards.add(s);
                    }
                }
                if (rangeShards.size() > 1) {
                    System.out.println("merge shard: " + rangeShards.get(0).toString());
                    client.MergeShards(project, logstore, rangeShards.get(0).GetShardId());
                    mloop = true;
                }
            }
            Thread.sleep(60 * 1000);
        }
    }