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 Svensson | 8 Oct |