blob: be3a0c634c1189a3e1f8de1a74da92fa7ea70b2d [file]
#! /usr/bin/env perl
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
use POSIX qw(strftime);
if(scalar(@ARGV) != 4 && scalar(@ARGV) != 2){
print "Usage : agitator.pl <sleep before kill in minutes> <sleep before tup in minutes> [<min kill> <max kill>]\n";
exit(1);
}
$ACCUMULO_HOME="../../..";
$sleep1 = $ARGV[0];
$sleep2 = $ARGV[1];
if(scalar(@ARGV) == 4){
$minKill = $ARGV[2];
$maxKill = $ARGV[3];
}else{
$minKill = 1;
$maxKill = 1;
}
if($minKill > $maxKill){
die("minKill > maxKill $minKill > $maxKill");
}
@slavesRaw = `cat $ACCUMULO_HOME/conf/slaves`;
chomp(@slavesRaw);
for $slave (@slavesRaw){
if($slave eq "" || substr($slave,0,1) eq "#"){
next;
}
push(@slaves, $slave);
}
if(scalar(@slaves) < $maxKill){
print STDERR "WARN setting maxKill to ".scalar(@slaves)."\n";
$maxKill = scalar(@slaves);
}
if ($minKill > $maxKill){
print STDERR "WARN setting minKill to equal maxKill\n";
$minKill = $maxKill;
}
while(1){
$numToKill = int(rand($maxKill - $minKill + 1)) + $minKill;
%killed = {};
for($i = 0; $i < $numToKill; $i++){
$server = "";
while($server eq "" || $killed{$server} != undef){
$index = int(rand(scalar(@slaves)));
$server = $slaves[$index];
}
$killed{$server} = 1;
$t = strftime "%Y%m%d %H:%M:%S", localtime;
$rn = rand(1);
$kill_tserver = 0;
$kill_logger = 0;
if($rn <.33){
$kill_tserver = 1;
$kill_logger = 1;
}elsif($rn < .66){
$kill_tserver = 1;
$kill_logger = 0;
}else{
$kill_tserver = 0;
$kill_logger = 1;
}
print STDERR "$t Killing $server $kill_tserver $kill_logger\n";
if($kill_tserver) {
system("$ACCUMULO_HOME/bin/stop-server.sh $server \"accumulo-start.*.jar\" tserver KILL");
}
if($kill_logger) {
system("$ACCUMULO_HOME/bin/stop-server.sh $server \"accumulo-start.*.jar\" logger KILL");
}
}
sleep($sleep2 * 60);
$t = strftime "%Y%m%d %H:%M:%S", localtime;
print STDERR "$t Running tup\n";
system("$ACCUMULO_HOME/bin/tup.sh");
sleep($sleep1 * 60);
}