diff options
Diffstat (limited to 'ndb/test/ndbnet/testNR.run')
-rw-r--r-- | ndb/test/ndbnet/testNR.run | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/ndb/test/ndbnet/testNR.run b/ndb/test/ndbnet/testNR.run new file mode 100644 index 00000000000..01a3d76266d --- /dev/null +++ b/ndb/test/ndbnet/testNR.run @@ -0,0 +1,60 @@ +# + +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 $db2 = $db->getnode(3) or $log->push->fatal; +my $api = $db->getnode(4) or $log->push->fatal; + +$db->kill; +$db->start({init_rm=>1}) or $db->kill, $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 $db->kill, $log->fatal; + my $output = $ret->{output}; + if ($output =~ /\bstarted\b(.|\n)*started\b/i) { + $log->put("*** db is started ***")->info; + return; + } + if ($output =~ /\bno.contact\b(.|\n)*no.contact\b/i) { + print "NDBT_ProgramExit: 1 - test error\n"; + $db->kill, $log->put("*** db is dead ***")->fatal; + } + } + print "NDBT_ProgramExit: 1 - test error\n"; + $db->kill, $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 2; + my $dbx = (++$cnt % 2 == 1 ? $db1 : $db2); + $dbx->kill or $db->kill, $log->fatal; + sleep 2; + $dbx->start; # start the node +} + +$db->kill; + +# vim: set sw=4: |