diff options
Diffstat (limited to 'storage/ndb/test/ndbnet/testNR1.run')
-rw-r--r-- | storage/ndb/test/ndbnet/testNR1.run | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/storage/ndb/test/ndbnet/testNR1.run b/storage/ndb/test/ndbnet/testNR1.run new file mode 100644 index 00000000000..8819a92c8ca --- /dev/null +++ b/storage/ndb/test/ndbnet/testNR1.run @@ -0,0 +1,61 @@ +# Node recovery killing 1 node out of 4 at the time and waiting for recover + +use strict; +use NDB::Run; + +my $env = NDB::Run->getenv; +my $log = $env->getlog; +$log->setpart(time => 1, line => 0); +$log->setprio("info"); + +my $database = $ENV{NDB_DATABASE}; +$log->put("start test database=$database"); +$env->init or $log->push("init failed")->fatal; + +my $db = $env->getdb($database) or $log->push->fatal; +my $mgm = $db->getnode(1) or $log->push->fatal; +my $db1 = $db->getnode(2) or $log->push->fatal; +my $api = $db->getnode(6) or $log->push->fatal; + +$db->kill; +$db->start({init_rm=>1}) or $log->push->fatal; +sleep 10; + +# should be option (or default) in $db->start +sub wait_until_started { + my $local_cnt = 100; + while (--$local_cnt > 0) { + sleep 2; + my $ret = $mgm->write("all status", { wait => 2 }); + $ret or $log->fatal; + my $output = $ret->{output}; + if ($output =~ /((.|\n)*\bstarted\b(.|\n)*){1}/i) { +# if all 4 nodes started + $log->put("*** db is started ***")->info; + return; + } + if ($output =~ /((.|\n)*\bno.contact\b(.|\n)*){1}/i) { +#if all 4 nodes no contact + print "NDBT_ProgramExit: 1 - test error\n"; + $log->put("*** db is dead ***")->fatal; + } + } + print "NDBT_ProgramExit: 1 - test error\n"; + $log->put("*** node recovery failed ***")->fatal; +} + +my $cnt = 0; +wait_until_started(); +$api->start({run=>"flexBench -t 32 -l 800"}); +while (1) { + wait_until_started(); + sleep 10; + $db1->kill or $log->fatal; + sleep 10; + $db1->start; # start the node + sleep 10; +} + +$db->kill; + +# vim: set sw=4: |