List:Commits« Previous MessageNext Message »
From:msvensson Date:March 10 2006 3:38pm
Subject:bk commit into 5.0 tree (msvensson:1.2064)
View as plain text  
Below is the list of changes that have just been committed into a local
5.0 repository of msvensson. When msvensson does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet
  1.2064 06/03/10 16:37:53 msvensson@shellback.(none) +1 -0
  Make mysql-test-run.pl restore the db(s) to a known state before continuing after test case failure

  mysql-test/mysql-test-run.pl
    1.75 06/03/10 16:37:44 msvensson@shellback.(none) +96 -22
    Take a snapshot of the data dirs just after all db's have been installed and usedthat snasphot to restore the db(s) to a known state after a test case has failed.
    Thus avoiding subsequent test cases to fail because of previous test failures.

# This is a BitKeeper patch.  What follows are the unified diffs for the
# set of deltas contained in the patch.  The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User:	msvensson
# Host:	shellback.(none)
# Root:	/home/msvensson/mysql/init_rm/my50-init_rm

--- 1.74/mysql-test/mysql-test-run.pl	2006-03-07 19:44:53 +01:00
+++ 1.75/mysql-test/mysql-test-run.pl	2006-03-10 16:37:44 +01:00
@@ -154,6 +154,7 @@
 our $path_client_bindir;
 our $path_language;
 our $path_timefile;
+our $path_snapshot;
 our $path_manager_log;           # Used by mysqldadmin
 our $path_slave_load_tmpdir;     # What is this?!
 our $path_mysqltest_log;
@@ -308,10 +309,12 @@
 
 our $exe_ndb_mgm;
 our $path_ndb_tools_dir;
-our $path_ndb_backup_dir;
+our $path_ndb_data_dir;
 our $file_ndb_testrun_log;
 our $flag_ndb_status_ok= 1;
 
+our @snapshot_dir_lst;
+
 ######################################################################
 #
 #  Function declarations
@@ -388,9 +391,10 @@
     {
       kill_and_cleanup();
       mysql_install_db();
-
-#    mysql_loadstd();  FIXME copying from "std_data" .frm and
-#                      .MGR but there are none?!
+      if ( $opt_force )
+      {
+	save_installed_db();
+      }
     }
   }
 
@@ -949,6 +953,9 @@
 
   $path_timefile=  "$opt_vardir/log/mysqltest-time";
   $path_mysqltest_log=  "$opt_vardir/log/mysqltest.log";
+
+  $path_snapshot= "$opt_tmpdir/snapshot_$opt_master_myport/";
+
 }
 
 
@@ -1086,8 +1093,7 @@
   $exe_master_mysqld= $exe_master_mysqld || $exe_mysqld;
   $exe_slave_mysqld=  $exe_slave_mysqld  || $exe_mysqld;
 
-  $path_ndb_backup_dir=
-    "$opt_vardir/ndbcluster-$opt_ndbcluster_port";
+  $path_ndb_data_dir= "$opt_vardir/ndbcluster-$opt_ndbcluster_port";
   $file_ndb_testrun_log= "$opt_vardir/log/ndb_testrun.log";
 }
 
@@ -1280,6 +1286,8 @@
     push(@data_dir_lst, $instance->{'path_datadir'});
   }
 
+  push(@snapshot_dir_lst, @data_dir_lst);
+
   foreach my $data_dir (@data_dir_lst)
   {
     rmtree("$data_dir");
@@ -2024,10 +2032,9 @@
       report_failure_and_restart($tinfo);
     }
     # Save info from this testcase run to mysqltest.log
+    my $testcase_log= mtr_fromfile($path_timefile) if -f $path_timefile;
     mtr_tofile($path_mysqltest_log,"CURRENT TEST $tname\n");
-    my $testcase_log= mtr_fromfile($path_timefile);
-    mtr_tofile($path_mysqltest_log,
-	       $testcase_log);
+    mtr_tofile($path_mysqltest_log, $testcase_log);
   }
 
   # ----------------------------------------------------------------------
@@ -2041,6 +2048,74 @@
   }
 }
 
+sub copy_dir($$) {
+  my $from_dir= shift;
+  my $to_dir= shift;
+
+  mkpath("$to_dir");
+  opendir(DIR, "$from_dir")
+    or mtr_error("Can't find $from_dir$!");
+  for(readdir(DIR)) {
+    next if "$_" eq "." or "$_" eq "..";
+    if ( -d "$from_dir/$_" )
+    {
+      copy_dir("$from_dir/$_", "$to_dir/$_");
+      next;
+    }
+    copy("$from_dir/$_", "$to_dir/$_");
+  }
+  closedir(DIR);
+
+}
+
+#
+# Save a snapshot of the installed test db(s)
+# I.e take a snapshot of the var/ dir
+#
+sub save_installed_db () {
+
+  mtr_report("Saving snapshot of installed databases");
+  rmtree($path_snapshot);
+
+  foreach my $data_dir (@snapshot_dir_lst)
+  {
+    my $name= basename($data_dir);
+    copy_dir("$data_dir", "$path_snapshot/$name");
+  }
+}
+
+#
+# Restore snapshot of the installed test db(s)
+# if the snapshot exists
+#
+sub restore_installed_db () {
+
+  if ( -d $path_snapshot)
+  {
+    kill_running_server ();
+
+    mtr_report("Restoring snapshot of databases");
+
+    foreach my $data_dir (@snapshot_dir_lst)
+    {
+      my $name= basename($data_dir);
+      rmtree("$data_dir");
+      copy_dir("$path_snapshot/$name", "$data_dir");
+    }
+    if ($opt_with_ndbcluster)
+    {
+      # Remove the ndb_*_fs dirs, forcing a clean start of ndb
+      rmtree("$path_ndb_data_dir/ndb_1_fs");
+      rmtree("$path_ndb_data_dir/ndb_2_fs");
+    }
+  }
+  else
+  {
+    # No snapshot existed, just stop all processes
+    stop_masters_slaves();
+  }
+}
+
 
 sub report_failure_and_restart ($) {
   my $tinfo= shift;
@@ -2048,26 +2123,24 @@
   mtr_report_test_failed($tinfo);
   mtr_show_failed_diff($tinfo->{'name'});
   print "\n";
-  if ( ! $opt_force )
+  if ( $opt_force )
   {
-    my $test_mode= join(" ", @::glob_test_mode) || "default";
-    print "Aborting: $tinfo->{'name'} failed in $test_mode mode. ";
-    print "To continue, re-run with '--force'.\n";
-    if ( ! $opt_gdb and ! $glob_use_running_server and
-         ! $opt_ddd and ! $glob_use_embedded_server )
-    {
-      stop_masters_slaves();
-    }
-    mtr_exit(1);
+    # Restore the snapshot of the installed test db
+    restore_installed_db();
+    print "Resuming Tests\n\n";
+    return;
   }
 
-  # FIXME always terminate on failure?!
+  my $test_mode= join(" ", @::glob_test_mode) || "default";
+  print "Aborting: $tinfo->{'name'} failed in $test_mode mode. ";
+  print "To continue, re-run with '--force'.\n";
   if ( ! $opt_gdb and ! $glob_use_running_server and
        ! $opt_ddd and ! $glob_use_embedded_server )
   {
     stop_masters_slaves();
   }
-  print "Resuming Tests\n\n";
+  mtr_exit(1);
+
 }
 
 
@@ -2758,7 +2831,8 @@
 
   $ENV{'NDB_STATUS_OK'}=            $flag_ndb_status_ok;
   $ENV{'NDB_MGM'}=                  $exe_ndb_mgm;
-  $ENV{'NDB_BACKUP_DIR'}=           $path_ndb_backup_dir;
+  $ENV{'NDB_BACKUP_DIR'}=           $path_ndb_data_dir;
+  $ENV{'NDB_DATA_DIR'}=             $path_ndb_data_dir;
   $ENV{'NDB_TOOLS_DIR'}=            $path_ndb_tools_dir;
   $ENV{'NDB_TOOLS_OUTPUT'}=         $file_ndb_testrun_log;
   $ENV{'NDB_CONNECTSTRING'}=        $opt_ndbconnectstring;
Thread
bk commit into 5.0 tree (msvensson:1.2064)msvensson10 Mar