Blame SOURCES/mysql-mtr.patch

aa5ec1
Avoid errors like:
aa5ec1
aa5ec1
|  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.
aa5ec1
|  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,
aa5ec1
|  it would be  truncated and thus not possible to use for connection to  MySQL Server. Set a shorter with --tmpdir=<path> option
aa5ec1
aa5ec1
===
aa5ec1
aa5ec1
On Fedora 32:
aa5ec1
aa5ec1
|  $ grep -e "PATH" /usr/include/linux/limits.h
aa5ec1
|  #define PATH_MAX        4096	/* # chars in a path name including nul */
aa5ec1
aa5ec1
===
aa5ec1
aa5ec1
Thus setting the maximum path length on Fedora to 108 characters is just too short.
aa5ec1
aa5ec1
BTW on the modern filesystems you can easily create path longer than PATH_MAX.
aa5ec1
The PATH_MAX constant is unsafe.
aa5ec1
Interesting article: https://insanecoding.blogspot.com/2007/11/pathmax-simply-isnt.html
aa5ec1
aa5ec1
===
aa5ec1
aa5ec1
The question is why haven't I encountered this issue until recently ?
aa5ec1
aa5ec1
After the recent tweaks to the testsuite (between 8.0.24 and 8.0.25 release), the generated --tmpdir path changed from
aa5ec1
|  --tmpdir=/builddir/build/BUILD/mysql-8.0.24/x86_64-redhat-linux-gnu/mysql-test/var/tmp/
aa5ec1
to
aa5ec1
|  --tmpdir=/builddir/build/BUILDROOT/community-mysql-8.0.24-1.fc35.x86_64/usr/share/mysql-test/var/tmp/
aa5ec1
aa5ec1
===
aa5ec1
aa5ec1
The whole setup changed as follows:
aa5ec1
BEFORE:
aa5ec1
aa5ec1
|  Installing system database
aa5ec1
|  ### 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
aa5ec1
aa5ec1
AFTER:
aa5ec1
aa5ec1
|  Installing system database
aa5ec1
|  ### 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
aa5ec1
aa5ec1
===
aa5ec1
aa5ec1
The likely cause is the added
aa5ec1
aa5ec1
|  cd %{buildroot}%{_datadir}/mysql-test
aa5ec1
aa5ec1
which was not originally present in the SPECfile.
aa5ec1
aa5ec1
However the MariaDB implementation does not have this issue, even though it has the same SPECfile %check phase code.
aa5ec1
aa5ec1
aa5ec1
===
aa5ec1
aa5ec1
In the extended log, you can see '/tmp/XfTFAis2Jl' being created and deleted short after.
aa5ec1
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.
aa5ec1
aa5ec1
I'm not sure whether the output is synchronous, but even if it wasn'tit still looks weird.
aa5ec1
aa5ec1
| + cd /builddir/build/BUILDROOT/community-mysql-8.0.24-1.fc35.x86_64/usr/share/mysql-test
aa5ec1
| 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
aa5ec1
| Path length (109) is longer than maximum supported length (108) and will be truncated at /usr/lib64/perl5/vendor_perl/Socket.pm line 880.
aa5ec1
| 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
aa5ec1
|  - Using tmpdir: '/tmp/XfTFAis2Jl'
aa5ec1
| > Collecting: main
aa5ec1
| > testdir: /builddir/build/BUILDROOT/community-mysql-8.0.24-1.fc35.x86_64/usr/share/mysql-test/t
aa5ec1
| > resdir: /builddir/build/BUILDROOT/community-mysql-8.0.24-1.fc35.x86_64/usr/share/mysql-test/r
aa5ec1
| > Collecting: i_main
aa5ec1
| Removing old var directory
aa5ec1
| > opt_vardir: /builddir/build/BUILDROOT/community-mysql-8.0.24-1.fc35.x86_64/usr/share/mysql-test/var
aa5ec1
| > Removing /builddir/build/BUILDROOT/community-mysql-8.0.24-1.fc35.x86_64/usr/share/mysql-test/var/
aa5ec1
| > Removing /dev/shm/var_933_jfTb
aa5ec1
| > Removing /tmp/XfTFAis2Jl/
aa5ec1
| Creating var directory '/builddir/build/BUILDROOT/community-mysql-8.0.24-1.fc35.x86_64/usr/share/mysql-test/var'
aa5ec1
| > Creating /dev/shm/var_933_jfTb
aa5ec1
|  - symlinking 'var' to '/dev/shm/var_933_jfTb'
aa5ec1
aa5ec1
aa5ec1
aa5ec1
aa5ec1
--- mysql-8.0.24/mysql-test/mysql-test-run.pl	2021-05-10 04:29:44.391897891 +0200
aa5ec1
+++ mysql-8.0.24/mysql-test/mysql-test-run.pl_patched	2021-05-10 04:38:51.031702753 +0200
aa5ec1
@@ -3374,17 +3374,6 @@ sub setup_vardir() {
aa5ec1
   mkpath("$opt_vardir/tmp");
aa5ec1
   mkpath($opt_tmpdir) if ($opt_tmpdir ne "$opt_vardir/tmp");
aa5ec1
 
aa5ec1
-  # On some operating systems, there is a limit to the length of a
aa5ec1
-  # UNIX domain socket's path far below PATH_MAX. Don't allow that
aa5ec1
-  # to happen.
aa5ec1
-  my $res =
aa5ec1
-    check_socket_path_length("$opt_tmpdir/mysqld.NN.sock", $opt_parallel);
aa5ec1
-  if ($res) {
aa5ec1
-    mtr_error("Socket path '$opt_tmpdir' too long, it would be ",
aa5ec1
-              "truncated and thus not possible to use for connection to ",
aa5ec1
-              "MySQL Server. Set a shorter with --tmpdir=<path> option");
aa5ec1
-  }
aa5ec1
-
aa5ec1
   # Copy all files from std_data into var/std_data
aa5ec1
   # and make them world readable
aa5ec1
   copytree("$glob_mysql_test_dir/std_data", "$opt_vardir/std_data", "0022");