Hi all,

Whoever feels being in charge for the main tree, please consider including the following patch or any modifications of it.

Story:

Modern versions have a "normal-style" basedirs, while findMySQLD in Reporter.pm favors the old MTRv1 style. In some circumstances, depending on the directory structure and system caches, it can cause major slow down and/or wrong search results.

E.g. if you have something like

/data/5.1
/data/5.1.70
/data/5.5
/data/5.5.30
/data/5.5.35
/data/5.6
/data/5.6.10
/data/5.6.15
/data/5.7

and you are running tests on /data/5.6, findMySQLD will go through /data/5.6 and /data/ to search for mysqld, so it can take minutes to initialize the reporter, see the timestamps:

# 2014-03-24T04:03:01 Creating MySQL table DD, size 100 rows, engine  .
# 2014-03-24T04:03:02 Reporters: ErrorLog, Backtrace
# 2014-03-24T04:08:03 Validators: ErrorMessageCorruption
# 2014-03-24T04:08:03 Caching schema metadata for ...


It can be changed fairly easily, with something like

####################################

=== modified file 'lib/GenTest/Reporter.pm'
--- lib/GenTest/Reporter.pm     2012-11-06 11:50:40 +0000
+++ lib/GenTest/Reporter.pm     2014-03-23 23:34:26 +0000
@@ -244,8 +244,11 @@
 sub findMySQLD {
     my ($reporter,$binname)=@_;
     my $bindir;
+    my @basedirs=($reporter->serverVariable('basedir'));
     # Handling general basedirs and MTRv1 style basedir.
- my @basedirs=($reporter->serverVariable('basedir'),File::Spec->catfile($reporter->serverVariable('basedir'),'..'));
+    if ($reporter->serverVariable('basedir') =~ m{mysql-test[\/\\]?}) {
+ push @basedirs, File::Spec->catfile($reporter->serverVariable('basedir'),'..');
+    }
     find(sub {
             $bindir=$File::Find::dir if $_ eq $binname;
     }, @basedirs);

####################################

or, trying to be a bit more smart and/or cautious,

####################################

=== modified file 'lib/GenTest/Reporter.pm'
--- lib/GenTest/Reporter.pm     2012-11-06 11:50:40 +0000
+++ lib/GenTest/Reporter.pm     2013-12-30 14:36:35 +0000
@@ -244,8 +244,13 @@
 sub findMySQLD {
     my ($reporter,$binname)=@_;
     my $bindir;
-    # Handling general basedirs and MTRv1 style basedir.
- my @basedirs=($reporter->serverVariable('basedir'),File::Spec->catfile($reporter->serverVariable('basedir'),'..'));
+    # Handling general basedirs and MTRv1 style basedir,
+    # but trying not to search the entire universe just for the sake of it
+    my @basedirs = ($reporter->serverVariable('basedir'));
+ if (! -e File::Spec->catfile($reporter->serverVariable('basedir'),'mysql-test') and -e File::Spec->catfile($reporter->serverVariable('basedir'),'t')) {
+        # Assuming it's the MTRv1 style basedir
+ @basedirs=(File::Spec->catfile($reporter->serverVariable('basedir'),'..'));
+    }
     find(sub {
             $bindir=$File::Find::dir if $_ eq $binname;
     }, @basedirs);

####################################

Or in any other similar way.


I've had the latter in my branch for some time now, but I don't want to force everyone who I work with to switch to it, so it would be nice to have it fixed in the trunk as well.


Regards,
Elena

_______________________________________________
Mailing list: https://launchpad.net/~randgen
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~randgen
More help   : https://help.launchpad.net/ListHelp

Reply via email to