Blame SOURCES/mysql-mtr.patch

19e808
Avoid errors like:
19e808
19e808
|  Path length (109) is longer than maximum supported length (108) and will be truncated at /usr/lib64/perl5/vendor_perl/Socket.pm line 880, <GEN16094> line 1.
19e808
|  worker[2] mysql-test-run: *** ERROR: Socket path '/builddir/build/BUILDROOT/community-mysql-8.0.24-1.fc35.s390x/usr/share/mysql-test/var/tmp/2' too long,
19e808
|  it would be  truncated and thus not possible to use for connection to  MySQL Server. Set a shorter with --tmpdir=<path> option
19e808
19e808
===
19e808
19e808
On Fedora 32:
19e808
19e808
|  $ grep -e "PATH" /usr/include/linux/limits.h
19e808
|  #define PATH_MAX        4096	/* # chars in a path name including nul */
19e808
19e808
===
19e808
19e808
Thus setting the maximum path length on Fedora to 108 characters is just too short.
19e808
19e808
BTW on the modern filesystems you can easily create path longer than PATH_MAX.
19e808
The PATH_MAX constant is unsafe.
19e808
Interesting article: https://insanecoding.blogspot.com/2007/11/pathmax-simply-isnt.html
19e808
19e808
===
19e808
19e808
The question is why haven't I encountered this issue until recently ?
19e808
19e808
After the recent tweaks to the testsuite (between 8.0.24 and 8.0.25 release), the generated --tmpdir path changed from
19e808
|  --tmpdir=/builddir/build/BUILD/mysql-8.0.24/x86_64-redhat-linux-gnu/mysql-test/var/tmp/
19e808
to
19e808
|  --tmpdir=/builddir/build/BUILDROOT/community-mysql-8.0.24-1.fc35.x86_64/usr/share/mysql-test/var/tmp/
19e808
19e808
===
19e808
19e808
The whole setup changed as follows:
19e808
BEFORE:
19e808
19e808
|  Installing system database
19e808
|  ### safe_path: /builddir/build/BUILD/mysql-8.0.24/x86_64-redhat-linux-gnu/runtime_output_directory///mysqltest_safe_process --verbose -- /builddir/build/BUILD/mysql-8.0.24/x86_64-redhat-linux-gnu/runtime_output_directory/mysqld --no-defaults --initialize-insecure --loose-skip-ndbcluster --tmpdir=/builddir/build/BUILD/mysql-8.0.24/x86_64-redhat-linux-gnu/mysql-test/var/tmp/ --core-file --datadir=/builddir/build/BUILD/mysql-8.0.24/x86_64-redhat-linux-gnu/mysql-test/var/data/ --secure-file-priv=/builddir/build/BUILD/mysql-8.0.24/x86_64-redhat-linux-gnu/mysql-test/var --innodb_buffer_pool_size=24M --innodb-log-file-size=5M --innodb_autoextend_increment=8 --character-sets-dir=/builddir/build/BUILD/mysql-8.0.24/share/charsets --loose-auto_generate_certs=OFF --loose-sha256_password_auto_generate_rsa_keys=OFF --loose-caching_sha2_password_auto_generate_rsa_keys=OFF --init-file=/builddir/build/BUILD/mysql-8.0.24/x86_64-redhat-linux-gnu/mysql-test/var/tmp/bootstrap.sql
19e808
19e808
AFTER:
19e808
19e808
|  Installing system database
19e808
|  ### safe_path: /builddir/build/BUILDROOT/community-mysql-8.0.24-1.fc35.x86_64/usr/bin//mysqltest_safe_process --verbose -- /builddir/build/BUILDROOT/community-mysql-8.0.24-1.fc35.x86_64/usr/libexec/mysqld --no-defaults --initialize-insecure --loose-skip-ndbcluster --tmpdir=/builddir/build/BUILDROOT/community-mysql-8.0.24-1.fc35.x86_64/usr/share/mysql-test/var/tmp/ --core-file --datadir=/builddir/build/BUILDROOT/community-mysql-8.0.24-1.fc35.x86_64/usr/share/mysql-test/var/data/ --secure-file-priv=/builddir/build/BUILDROOT/community-mysql-8.0.24-1.fc35.x86_64/usr/share/mysql-test/var --innodb_buffer_pool_size=24M --innodb-log-file-size=5M --innodb_autoextend_increment=8 --character-sets-dir=/builddir/build/BUILDROOT/community-mysql-8.0.24-1.fc35.x86_64/usr/share/community-mysql/charsets --loose-auto_generate_certs=OFF --loose-sha256_password_auto_generate_rsa_keys=OFF --loose-caching_sha2_password_auto_generate_rsa_keys=OFF --init-file=/builddir/build/BUILDROOT/community-mysql-8.0.24-1.fc35.x86_64/usr/share/mysql-test/var/tmp/bootstrap.sql
19e808
19e808
===
19e808
19e808
The likely cause is the added
19e808
19e808
|  cd %{buildroot}%{_datadir}/mysql-test
19e808
19e808
which was not originally present in the SPECfile.
19e808
19e808
However the MariaDB implementation does not have this issue, even though it has the same SPECfile %check phase code.
19e808
19e808
19e808
===
19e808
19e808
In the extended log, you can see '/tmp/XfTFAis2Jl' being created and deleted short after.
19e808
Even though the script warns about the path length, tries to workaround it; it destroyes that workaround short after and use the too-long path instead.
19e808
19e808
I'm not sure whether the output is synchronous, but even if it wasn'tit still looks weird.
19e808
19e808
| + cd /builddir/build/BUILDROOT/community-mysql-8.0.24-1.fc35.x86_64/usr/share/mysql-test
19e808
| Logging: ./mysql-test-run.pl  --verbose --parallel=auto --force --retry=2 --suite-timeout=900 --testcase-timeout=30 --mysqld=--binlog-format=mixed --max-test-fail=5 --report-unstable-tests --clean-vardir --suite=main --mem --skip-test-list=platform-specific-tests.list
19e808
| Path length (109) is longer than maximum supported length (108) and will be truncated at /usr/lib64/perl5/vendor_perl/Socket.pm line 880.
19e808
| Too long tmpdir path '/builddir/build/BUILDROOT/community-mysql-8.0.24-1.fc35.x86_64/usr/share/mysql-test/var/tmp'  creating a shorter one
19e808
|  - Using tmpdir: '/tmp/XfTFAis2Jl'
19e808
| > Collecting: main
19e808
| > testdir: /builddir/build/BUILDROOT/community-mysql-8.0.24-1.fc35.x86_64/usr/share/mysql-test/t
19e808
| > resdir: /builddir/build/BUILDROOT/community-mysql-8.0.24-1.fc35.x86_64/usr/share/mysql-test/r
19e808
| > Collecting: i_main
19e808
| Removing old var directory
19e808
| > opt_vardir: /builddir/build/BUILDROOT/community-mysql-8.0.24-1.fc35.x86_64/usr/share/mysql-test/var
19e808
| > Removing /builddir/build/BUILDROOT/community-mysql-8.0.24-1.fc35.x86_64/usr/share/mysql-test/var/
19e808
| > Removing /dev/shm/var_933_jfTb
19e808
| > Removing /tmp/XfTFAis2Jl/
19e808
| Creating var directory '/builddir/build/BUILDROOT/community-mysql-8.0.24-1.fc35.x86_64/usr/share/mysql-test/var'
19e808
| > Creating /dev/shm/var_933_jfTb
19e808
|  - symlinking 'var' to '/dev/shm/var_933_jfTb'
19e808
19e808
19e808
19e808
19e808
--- mysql-8.0.24/mysql-test/mysql-test-run.pl	2021-05-10 04:29:44.391897891 +0200
19e808
+++ mysql-8.0.24/mysql-test/mysql-test-run.pl_patched	2021-05-10 04:38:51.031702753 +0200
19e808
@@ -3374,17 +3374,6 @@ sub setup_vardir() {
19e808
   mkpath("$opt_vardir/tmp");
19e808
   mkpath($opt_tmpdir) if ($opt_tmpdir ne "$opt_vardir/tmp");
19e808
 
19e808
-  # On some operating systems, there is a limit to the length of a
19e808
-  # UNIX domain socket's path far below PATH_MAX. Don't allow that
19e808
-  # to happen.
19e808
-  my $res =
19e808
-    check_socket_path_length("$opt_tmpdir/mysqld.NN.sock", $opt_parallel);
19e808
-  if ($res) {
19e808
-    mtr_error("Socket path '$opt_tmpdir' too long, it would be ",
19e808
-              "truncated and thus not possible to use for connection to ",
19e808
-              "MySQL Server. Set a shorter with --tmpdir=<path> option");
19e808
-  }
19e808
-
19e808
   # Copy all files from std_data into var/std_data
19e808
   # and make them world readable
19e808
   copytree("$glob_mysql_test_dir/std_data", "$opt_vardir/std_data", "0022");