List:Commits« Previous MessageNext Message »
From:Magnus Svensson Date:October 8 2008 8:56pm
Subject:bzr push into mysql-5.1 branch (msvensson:2671 to 2673)
View as plain text  
 2673 Magnus Svensson	2008-10-08
      Merge
modified:
  mysql-test/lib/My/Platform.pm

 2672 Magnus Svensson	2008-10-08 [merge]
      Merge
added:
  mysql-test/lib/My/Handles.pm
modified:
  Makefile.am
  mysql-test/lib/My/CoreDump.pm
  mysql-test/lib/My/File/Path.pm
  mysql-test/lib/My/Platform.pm
  mysql-test/lib/My/SafeProcess.pm
  mysql-test/lib/My/SafeProcess/Base.pm
  mysql-test/lib/My/SafeProcess/safe_kill_win.cc
  mysql-test/mysql-test-run.pl

 2671 Magnus Svensson	2008-10-08 [merge]
      Merge
modified:
  mysql-test/extra/rpl_tests/rpl_log.test
  mysql-test/suite/rpl/r/rpl_misc_functions.result
  mysql-test/suite/rpl/r/rpl_row_log.result
  mysql-test/suite/rpl/r/rpl_row_log_innodb.result
  mysql-test/suite/rpl/r/rpl_stm_log.result
  mysql-test/suite/rpl/t/rpl_binlog_query_filter_rules.test
  mysql-test/suite/rpl/t/rpl_misc_functions.test
  mysql-test/suite/rpl/t/rpl_ps.test

=== modified file 'Makefile.am'
--- a/Makefile.am	2008-09-04 11:53:16 +0000
+++ b/Makefile.am	2008-10-08 20:30:56 +0000
@@ -121,6 +121,10 @@ test-reprepare:
 
 test:	test-unit test-ns test-pr
 
+smoke:
+	cd mysql-test ; \
+	    @PERL@ ./mysql-test-run.pl --do-test=s
+
 test-full:	test test-nr test-ps
 
 test-force:

=== modified file 'mysql-test/lib/My/CoreDump.pm'
--- a/mysql-test/lib/My/CoreDump.pm	2008-09-20 14:10:22 +0000
+++ b/mysql-test/lib/My/CoreDump.pm	2008-10-08 20:30:56 +0000
@@ -25,6 +25,8 @@ use File::Temp qw/ tempfile tempdir /;
 sub _gdb {
   my ($core_name)= @_;
 
+  print "\nTrying 'gdb' to get a backtrace\n";
+
   return unless -f $core_name;
 
   my $dir = tempdir( CLEANUP => 1 );
@@ -35,7 +37,7 @@ sub _gdb {
     "quit\n";
 
   # Find out name of binary that generated core
-  my $list= `gdb -c $core_name -x $tmp_name -q --batch 2>&1`
+  my $list= `gdb -c $core_name -x $tmp_name -batch 2>&1`
     or return;
 
   my $binary;
@@ -47,9 +49,9 @@ sub _gdb {
 
   return unless $binary;
 
-  print "Generated by '$binary'\n";
+  print " - core generated by '$binary'\n";
 
-  my $list= `gdb $binary -c $core_name -x $tmp_name -q --batch 2>&1`
+  my $list= `gdb $binary -c $core_name -x $tmp_name -batch 2>&1`
     or return;
 
   print $list, "\n";

=== modified file 'mysql-test/lib/My/File/Path.pm'
--- a/mysql-test/lib/My/File/Path.pm	2007-12-12 17:19:24 +0000
+++ b/mysql-test/lib/My/File/Path.pm	2008-10-06 17:51:33 +0000
@@ -20,33 +20,40 @@ use Exporter;
 use base "Exporter";
 our @EXPORT= qw / rmtree mkpath copytree /;
 
-
 use File::Find;
-use File::Path;
 use File::Copy;
 use Carp;
-
-no warnings 'redefine';
+use My::Handles;
 
 sub rmtree {
   my ($dir)= @_;
-
-  #
-  # chmod all files to 0777 before calling rmtree
-  #
   find( {
-	 no_chdir => 1,
+	 bydepth 		=> 1,
+	 no_chdir 		=> 1,
 	 wanted => sub {
-	   chmod(0777, $_)
-	     or warn("couldn't chmod(0777, $_): $!");
-	 }
-	},
-	$dir
-      );
+	   my $name= $_;
+	   if (!-l $name && -d _){
+	     return if (rmdir($name) == 1);
+
+	     chmod(0777, $name) or carp("couldn't chmod(0777, $name): $!");
 
+	     return if (rmdir($name) == 1);
 
-  # Call rmtree from File::Path
-  goto &File::Path::rmtree;
+	     # Failed to remove the directory, analyze
+	     carp("Couldn't remove directory '$name': $!");
+	     My::Handles::show_handles($name);
+	   } else {
+	     return if (unlink($name) == 1);
+
+	     chmod(0777, $name) or carp("couldn't chmod(0777, $name): $!");
+
+	     return if (unlink($name) == 1);
+
+	     carp("Couldn't delete file '$name': $!");
+	     My::Handles::show_handles($name);
+	   }
+	 }
+	}, $dir );
 };
 
 

=== added file 'mysql-test/lib/My/Handles.pm'
--- a/mysql-test/lib/My/Handles.pm	1970-01-01 00:00:00 +0000
+++ b/mysql-test/lib/My/Handles.pm	2008-10-06 17:51:33 +0000
@@ -0,0 +1,69 @@
+# -*- cperl -*-
+# Copyright (C) 2008 MySQL AB
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 2 of the License.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+
+package My::Handles;
+
+
+use strict;
+use Carp;
+
+use My::Platform;
+
+my $handle_exe;
+
+
+if (IS_WINDOWS){
+  # Check if handle.exe is available
+  # Pass switch to accept the EULA to avoid hanging
+  # if the program hasn't been run before.
+  my $list= `handle.exe -? -accepteula 2>&1`;
+  foreach my $line (split('\n', $list))
+  {
+    $handle_exe= "$1.$2"
+      if ($line =~ /Handle v([0-9]*)\.([0-9]*)/);
+  }
+  if ($handle_exe){
+    print "Found handle.exe version $handle_exe\n";
+  }
+}
+
+
+sub show_handles
+{
+  my ($dir)= @_;
+  return unless $handle_exe;
+  return unless $dir;
+
+  $dir= native_path($dir);
+
+  # Get a list of open handles in a particular directory
+  my $list= `handle.exe "$dir" 2>&1` or return;
+
+  foreach my $line (split('\n', $list))
+  {
+    return if ($line =~ /No matching handles found/);
+  }
+
+  print "\n";
+  print "=" x 50, "\n";
+  print "Open handles in '$dir':\n";
+  print "$list\n";
+  print "=" x 50, "\n\n";
+
+  return;
+}
+
+1;

=== modified file 'mysql-test/lib/My/Platform.pm'
--- a/mysql-test/lib/My/Platform.pm	2008-09-22 16:15:55 +0000
+++ b/mysql-test/lib/My/Platform.pm	2008-10-08 20:43:37 +0000
@@ -18,7 +18,7 @@ package My::Platform;
 
 use strict;
 use File::Basename;
-use My::File::Path; # Patched version of File::Path
+use File::Path;
 
 use base qw(Exporter);
 our @EXPORT= qw(IS_CYGWIN IS_WINDOWS IS_WIN32PERL
@@ -65,9 +65,11 @@ BEGIN {
 #
 
 use Memoize;
-memoize('mixed_path');
-memoize('native_path');
-memoize('posix_path');
+if (!IS_WIN32PERL){
+  memoize('mixed_path');
+  memoize('native_path');
+  memoize('posix_path');
+}
 
 sub mixed_path {
   my ($path)= @_;

=== modified file 'mysql-test/lib/My/SafeProcess.pm'
--- a/mysql-test/lib/My/SafeProcess.pm	2008-08-10 17:46:43 +0000
+++ b/mysql-test/lib/My/SafeProcess.pm	2008-10-08 20:30:56 +0000
@@ -66,7 +66,9 @@ END {
   for my $proc (values %running){
     if ( $proc->is_child($$) ){
       #print "Killing: $proc\n";
-      $proc->kill();
+      if ($proc->wait_one(0)){
+	$proc->kill();
+      }
     }
   }
 }
@@ -146,7 +148,7 @@ sub new {
   print "### safe_path: ", $safe_path, " ", join(" ", @safe_args), "\n"
     if $verbose > 1;
 
-  my ($pid, $winpid)= create_process(
+  my $pid= create_process(
 			  path      => $safe_path,
 			  input     => $input,
 			  output    => $output,
@@ -159,7 +161,7 @@ sub new {
   my $proc= bless
     ({
       SAFE_PID  => $pid,
-      SAFE_WINPID  => $winpid,
+      SAFE_WINPID  => $pid, # Inidicates this is always a real process
       SAFE_NAME => $name,
       SAFE_SHUTDOWN => $shutdown,
       PARENT => $$,
@@ -212,6 +214,14 @@ sub timer {
   };
 
   $0= "safe_timer($duration)";
+
+  if (IS_WIN32PERL){
+    # Just a thread in same process
+    sleep($duration);
+    print STDERR "timer $$: expired after $duration seconds\n";
+    exit(0);
+  }
+
   my $count_down= $duration;
   while($count_down--){
 
@@ -294,6 +304,18 @@ sub shutdown {
 }
 
 
+sub _winpid ($) {
+  my ($pid)= @_;
+
+  # In win32 perl, the pid is already the winpid
+  return $pid unless IS_CYGWIN;
+
+  # In cygwin, the pid is the pseudo process ->
+  # get the real winpid of my_safe_process
+  return Cygwin::pid_to_winpid($pid);
+}
+
+
 #
 # Tell the process to die as fast as possible
 #
@@ -303,22 +325,24 @@ sub start_kill {
   _verbose("start_kill: $self");
   my $ret= 1;
 
-  my $pid;
+  my $pid= $self->{SAFE_PID};
+  die "INTERNAL ERROR: no pid" unless defined $pid;
+
   if (IS_WINDOWS and defined $self->{SAFE_WINPID})
   {
     die "INTERNAL ERROR: no safe_kill" unless defined $safe_kill;
-    die "INTERNAL ERROR: no winpid" unless defined $self->{SAFE_WINPID};
 
-    # Use my_safe_kill to tell my_safe_process
-    # it's time to kill it's child and return
-    $pid= $self->{SAFE_WINPID};
-    $ret= system($safe_kill, $pid) >> 8;
-    if (IS_CYGWIN and $ret == 3)
-    {
-      print "safe_process is gone, kickstart the fake process\n";
-      if (kill(15, $self->{SAFE_PID}) != 1){
-	print STDERR "Failed to kickstart the fake process\n";
-      }
+    my $winpid= _winpid($pid);
+    $ret= system($safe_kill, $winpid) >> 8;
+
+    if ($ret == 3){
+      print "Couldn't open the winpid: $winpid ",
+	"for pid: $pid, try one more time\n";
+      sleep(1);
+      $winpid= _winpid($pid);
+      $ret= system($safe_kill, $winpid) >> 8;
+      print "Couldn't open the winpid: $winpid ",
+	"for pid: $pid, continue and see what happens...\n";
     }
   }
   else

=== modified file 'mysql-test/lib/My/SafeProcess/Base.pm'
--- a/mysql-test/lib/My/SafeProcess/Base.pm	2007-12-12 17:19:24 +0000
+++ b/mysql-test/lib/My/SafeProcess/Base.pm	2008-10-08 20:06:10 +0000
@@ -33,30 +33,6 @@ use base qw(Exporter);
 our @EXPORT= qw(create_process);
 
 
-sub winpid {
-  my ($pid)= @_;
-
-  return undef unless $^O eq "cygwin";
-
-  # The child get a new winpid when the exec takes
-  # place, wait for that to happen
-  my $winpid;
-  my $delay= 0;
-  do
-  {
-    # Yield to the child
-    select(undef, undef, undef, $delay);
-    # Increase the delay slightly for each loop
-    $delay += 0.000001;
-
-    $winpid= Cygwin::pid_to_winpid($pid);
-
-  } until ($winpid != $pid);
-
-  return $winpid;
-}
-
-
 
 #
 # safe_fork
@@ -179,7 +155,7 @@ sub create_process {
       or croak("unable to reestablish STDIN");
     #printf STDERR "stdin %d, stdout %d, stderr %d\n",
     #    fileno STDIN, fileno STDOUT, fileno STDERR;
-    return wantarray ? ($pid, $pid) : $pid;
+    return $pid;
 
   }
 
@@ -190,7 +166,7 @@ sub create_process {
     # Parent
     $pipe->reader();
     my $line= <$pipe>; # Wait for child to say it's ready
-    return wantarray ? ($pid, winpid($pid)) : $pid;
+    return $pid;
   }
 
   $SIG{INT}= 'DEFAULT';

=== modified file 'mysql-test/lib/My/SafeProcess/safe_kill_win.cc'
--- a/mysql-test/lib/My/SafeProcess/safe_kill_win.cc	2008-03-13 16:16:42 +0000
+++ b/mysql-test/lib/My/SafeProcess/safe_kill_win.cc	2008-10-08 20:02:32 +0000
@@ -49,12 +49,25 @@ int main(int argc, const char** argv )
   while ((shutdown_event=
           OpenEvent(EVENT_MODIFY_STATE, FALSE, safe_process_name)) == NULL)
   {
+     /*
+      Check if the process is alive, otherwise there is really
+      no idea to retry the open of the event
+     */
+    HANDLE process;
+    if ((process= OpenProcess(SYNCHRONIZE, FALSE, pid)) == NULL)
+    {
+      fprintf(stderr, "Could not open event or process %d, error: %d\n",
+            pid, GetLastError());
+      exit(3);
+    }
+    CloseHandle(process);
+
     if (retry_open_event--)
       Sleep(100);
     else
     {
       fprintf(stderr, "Failed to open shutdown_event '%s', error: %d\n",
-            safe_process_name, GetLastError());
+              safe_process_name, GetLastError());
       exit(3);
     }
   }

=== modified file 'mysql-test/lib/My/SysInfo.pm'
--- a/mysql-test/lib/My/SysInfo.pm	2008-07-24 20:22:47 +0000
+++ b/mysql-test/lib/My/SysInfo.pm	2008-10-08 18:25:28 +0000
@@ -76,7 +76,7 @@ sub _kstat {
   my ($self)= @_;
   while (1){
     my $instance_num= $self->{cpus} ? @{$self->{cpus}} : 0;
-    my $list= `kstat -p -m cpu_info -i $instance_num`;
+    my $list= `kstat -p -m cpu_info -i $instance_num 2> /dev/null`;
     my @lines= split('\n', $list) or last; # Break loop
 
     my $cpuinfo= {};

=== modified file 'mysql-test/mysql-test-run.pl'
--- a/mysql-test/mysql-test-run.pl	2008-09-22 15:52:19 +0000
+++ b/mysql-test/mysql-test-run.pl	2008-10-08 20:30:56 +0000
@@ -4244,6 +4244,7 @@ sub start_check_testcase ($$$) {
      error         => $errfile,
      args          => \$args,
      user_data     => $errfile,
+     verbose       => $opt_verbose,
     );
 
   mtr_report("Started $proc");

Thread
bzr push into mysql-5.1 branch (msvensson:2671 to 2673) Magnus Svensson8 Oct