Uploaded image for project: 'MariaDB Server'
  1. MariaDB Server
  2. MDEV-34248

Trying to run MariaDB 10.11.8 with Galera 26.4.18 resulting in parameter 'evs.inactive_check_period' value PT0.5S is out of range [P,PT0.25S):

Details

    • Bug
    • Status: Confirmed (View Workflow)
    • Major
    • Resolution: Unresolved
    • 10.11.8
    • 10.11
    • Galera
    • Alpine 3.19, 3.20 & edge

    Description

      Hi there MariaDB community,

      I'm wondering if someone could perhaps guide me here.

      I'm trying to build 10.11.8 with Galera 26.4.18 from this repository https://github.com/MariaDB/galera/tree/mariadb-4.x-26.4.18.

      I'm however running into a problem when testing a basic 3 node cluster where I get the below error message...

      node2-1  | 2024-05-26 23:57:27 0 [Note] WSREP: Passing config to GCS: base_dir = /var/lib/mysql/; base_host = 172.31.0.36; base_port = 4567; cert.log_conflicts = no; cert.optimistic_pa = yes; debug = no; evs.auto_evict = 0; evs.delay_margin = PT1S; evs.delayed_keep_period = PT30S; evs.inactive_check_period = PT0.5S; evs.inactive_timeout = PT15S; evs.join_retrans_period = PT1S; evs.max_install_timeouts = 3; evs.send_window = 4; evs.stats_report_period = PT1M; evs.suspect_timeout = PT5S; evs.user_send_window = 2; evs.view_forget_timeout = PT24H; gcache.dir = /var/lib/mysql/; gcache.keep_pages_size = 0; gcache.keep_plaintext_size = 128M; gcache.mem_size = 0; gcache.name = galera.cache; gcache.page_size = 128M; gcache.recover = yes; gcache.size = 128M; gcomm.thread_prio = ; gcs.fc_debug = 0; gcs.fc_factor = 1.0; gcs.fc_limit = 16; gcs.fc_master_slave = no; gcs.fc_single_primary = no; gcs.max_packet_size = 64500; gcs.max_throttle = 0.25; gcs.recv_q_hard_limit = 9223372036854775807; gcs.recv_q_soft_limit = 0.25; gcs.sync_donor = no; gmcast.listen_addr =
      node2-1  | 2024-05-26 23:57:27 0 [Note] WSREP: Start replication
      node2-1  | 2024-05-26 23:57:27 0 [Note] WSREP: Connecting with bootstrap option: 0
      node2-1  | 2024-05-26 23:57:27 0 [Note] WSREP: Setting GCS initial position to 00000000-0000-0000-0000-000000000000:-1
      node2-1  | 2024-05-26 23:57:27 0 [Note] WSREP: protonet asio version 0
      node2-1  | 2024-05-26 23:57:27 0 [Note] WSREP: Using CRC-32C for message checksums.
      node2-1  | 2024-05-26 23:57:27 0 [Note] WSREP: backend: asio
      node2-1  | 2024-05-26 23:57:27 0 [Note] WSREP: gcomm thread scheduling priority set to other:0 
      node2-1  | 2024-05-26 23:57:27 0 [Note] WSREP: access file(/var/lib/mysql//gvwstate.dat) failed(No such file or directory)
      node2-1  | 2024-05-26 23:57:27 0 [Note] WSREP: restore pc from disk failed
      node2-1  | 2024-05-26 23:57:27 0 [Note] WSREP: GMCast version 0
      node2-1  | 2024-05-26 23:57:27 0 [Note] WSREP: (b4ea0439-b37f, 'tcp://[::]:4567') listening at tcp://[::]:4567
      node2-1  | 2024-05-26 23:57:27 0 [Note] WSREP: (b4ea0439-b37f, 'tcp://[::]:4567') multicast: , ttl: 1
      node2-1  | 2024-05-26 23:57:27 0 [ERROR] WSREP: failed to open gcomm backend connection: 34: parameter 'evs.inactive_check_period' value PT0.5S is out of range [P,PT0.25S): 34 (Result not representable)

      I'm wondering if I'm doing something wrong as I'm not setting any variables apart from the following..

      wsrep_cluster_name
      wsrep_node_name
      wsrep_node_address
      wsrep_cluster_address
      wsrep_debug
      wsrep_provider_options = gmcast.listen_addr=tcp://[::]:4567

      Any assistance or guidance would be greatly appreciated.

      Attachments

        Activity

          danblack Daniel Black added a comment -

          The first line of your log has evs.inactive_check_period = PT0.5S, which would be a wsrep_provider_option. It looks like its being picked up by some config file. Check with sudo mysql my_print_defaults --mariadbd

          danblack Daniel Black added a comment - The first line of your log has evs.inactive_check_period = PT0.5S, which would be a wsrep_provider_option. It looks like its being picked up by some config file. Check with sudo mysql my_print_defaults --mariadbd
          nkukard Nigel Kukard added a comment - - edited

          Hi there Daniel,

          Thank you kindly for your response.

          I want to note a few findings ... (with the only thing changing being the versions being used)

          • using 10.11.7 with Galera 26.4.13 works 100%
          • using 10.11.8 with Galera 26.4.13 breaks my unit tests and never syncs between node members
          • using 10.11.8 with Gelera 26.4.18 results in the reported issue above

          In terms of your reply, this is the weird thing .... (I had to run mysql as the mysql user to prevent the root warning)

          Here is the output from the abovementioned command...

          04231fc1b4d2:~# su -l -s /bin/sh mysql -c "my_print_defaults --mariadb"
          Info: Using unique option prefix 'mariadb' is error-prone and can break in the future. Please use the full name 'mariadbd' instead.
          --bind_address=::
          --symbolic-links=0
          --tmpdir=/var/tmp/mysqld
          --innodb-file-per-table
          --innodb-buffer-pool-size=64M
          --innodb_flush_method=O_DIRECT
          --net-write-timeout=6000
          --net-read-timeout=6000
          --max-allowed-packet=128M
          --sql-mode=STRICT_ALL_TABLES
          --bind-address=*
          --wsrep_provider=/usr/lib/galera/libgalera_smm.so
          --wsrep_sst_method=mariabackup
          04231fc1b4d2:~# 
          

          Here are my two config files...

          04231fc1b4d2:~# find /etc -type f -wholename "*my.cnf*"
          /etc/my.cnf
          /etc/my.cnf.d/10_fdc_defaults.cnf
          

          The first one contains this...

          04231fc1b4d2:~# grep -Ev "^(;.*|)$" /etc/my.cnf
          [client-server]
          [mysqld]
          bind_address = ::
          symbolic-links = 0
          tmpdir = /var/tmp/mysqld
          

          The second, this ....

          04231fc1b4d2:~# grep -Ev "^(;.*|)$" /etc/my.cnf.d/10_fdc_defaults.cnf 
          [mariadbd]
          innodb-file-per-table
          innodb-buffer-pool-size=64M
          innodb_flush_method=O_DIRECT
          net-write-timeout=6000
          net-read-timeout=6000
          max-allowed-packet=128M
          sql-mode=STRICT_ALL_TABLES
          bind-address = *
          wsrep_provider = /usr/lib/galera/libgalera_smm.so
          wsrep_sst_method = mariabackup
          [mariadb-dump]
          max-allowed-packet=1G
          

          On a side note, I'm using roughtly the same build options as the Alpine package...

          cmake -B build -G Ninja -Wno-dev \
          		-DCMAKE_BUILD_TYPE=RelWithDebInfo \
          		-DCMAKE_INSTALL_PREFIX=/usr \
          		-DCOMPILATION_COMMENT="Conarx Containers" \
          		-DSYSCONFDIR=/etc \
          		-DSYSCONF2DIR=/etc/my.cnf.d \
          		-DMYSQL_DATADIR=/var/lib/mysql \
          		-DINSTALL_UNIX_ADDRDIR=/run/mysqld/mysqld.sock \
          		-DDEFAULT_CHARSET=utf8mb4 \
          		-DDEFAULT_COLLATION=utf8mb4_general_ci \
          		-DENABLED_LOCAL_INFILE=ON \
          		-DINSTALL_INFODIR=share/info \
          		-DINSTALL_MANDIR=share/man \
          		-DINSTALL_PAMDIR=/lib/security \
          		-DINSTALL_PLUGINDIR=lib/$pkgname/plugin \
          		-DINSTALL_SCRIPTDIR=bin \
          		-DINSTALL_INCLUDEDIR=include/mysql \
          		-DINSTALL_DOCREADMEDIR=share/doc/$pkgname \
          		-DINSTALL_SUPPORTFILESDIR=share/$pkgname \
          		-DINSTALL_MYSQLSHAREDIR=share/$pkgname \
          		-DINSTALL_DOCDIR=share/doc/$pkgname \
          		-DTMPDIR=/var/tmp \
          		-DCONNECT_WITH_MYSQL=ON \
          		-DCONNECT_WITH_LIBXML2=system \
          		-DCONNECT_WITH_ODBC=NO \
          		-DCONNECT_WITH_JDBC=NO \
          		-DPLUGIN_ARCHIVE=YES \
          		-DPLUGIN_ARIA=YES \
          		-DPLUGIN_BLACKHOLE=YES \
          		-DPLUGIN_CASSANDRA=NO \
          		-DPLUGIN_CSV=YES \
          		-DPLUGIN_MYISAM=YES \
          		-DPLUGIN_MROONGA=NO \
          		-DPLUGIN_OQGRAPH=NO \
          		-DPLUGIN_PARTITION=NO \
          		-DPLUGIN_ROCKSDB=YES \
          		-DPLUGIN_SPHINX=NO \
          		-DPLUGIN_TOKUDB=NO \
          		-DPLUGIN_AUTH_GSSAPI=NO \
          		-DPLUGIN_AUTH_GSSAPI_CLIENT=OFF \
          		-DPLUGIN_CRACKLIB_PASSWORD_CHECK=NO \
          		-DWITH_ASAN=OFF \
          		-DWITH_EMBEDDED_SERVER=OFF \
          		-DWITH_EXTRA_CHARSETS=complex \
          		-DWITH_INNODB_BZIP2=ON \
          		-DWITH_INNODB_LZ4=ON \
          		-DWITH_INNODB_LZMA=ON \
          		-DWITH_INNODB_LZO=ON \
          		-DWITH_INNODB_SNAPPY=ON \
          		-DWITH_ROCKSDB_BZIP2=ON \
          		-DWITH_ROCKSDB_JEMALLOC=ON \
          		-DWITH_ROCKSDB_LZ4=ON \
          		-DWITH_ROCKSDB_ZSTD=ON \
          		-DWITH_ROCKSDB_SNAPPY=ON \
          		-DWITH_JEMALLOC=ON \
          		-DWITH_LIBARCHIVE=system \
          		-DWITH_LIBFMT=system \
          		-DWITH_LIBNUMA=NO \
          		-DWITH_LIBWRAP=OFF \
          		-DWITH_LIBWSEP=OFF \
          		-DWITH_MARIABACKUP=ON \
          		-DWITH_PCRE=system \
          		-DWITH_READLINE=ON \
          		-DWITH_SYSTEMD=no \
          		-DWITH_SSL=system \
          		-DWITH_VALGRIND=OFF \
          		-DWITH_ZLIB=system \
          		-DSKIP_TESTS=ON
          

          And for Galera...

          ln -s "../../wsrep-API-${WSREP_COMMIT}" wsrep/src; \
          	cmake -B build -G Ninja -Wno-dev \
          		-DCMAKE_BUILD_TYPE=RelWithDebInfo
          

          nkukard Nigel Kukard added a comment - - edited Hi there Daniel, Thank you kindly for your response. I want to note a few findings ... (with the only thing changing being the versions being used) using 10.11.7 with Galera 26.4.13 works 100% using 10.11.8 with Galera 26.4.13 breaks my unit tests and never syncs between node members using 10.11.8 with Gelera 26.4.18 results in the reported issue above In terms of your reply, this is the weird thing .... (I had to run mysql as the mysql user to prevent the root warning) Here is the output from the abovementioned command... 04231fc1b4d2:~# su -l -s /bin/sh mysql -c "my_print_defaults --mariadb" Info: Using unique option prefix 'mariadb' is error-prone and can break in the future. Please use the full name 'mariadbd' instead. --bind_address=:: --symbolic-links=0 --tmpdir=/var/tmp/mysqld --innodb-file-per-table --innodb-buffer-pool-size=64M --innodb_flush_method=O_DIRECT --net-write-timeout=6000 --net-read-timeout=6000 --max-allowed-packet=128M --sql-mode=STRICT_ALL_TABLES --bind-address=* --wsrep_provider=/usr/lib/galera/libgalera_smm.so --wsrep_sst_method=mariabackup 04231fc1b4d2:~# Here are my two config files... 04231fc1b4d2:~# find /etc -type f -wholename "*my.cnf*" /etc/my.cnf /etc/my.cnf.d/10_fdc_defaults.cnf The first one contains this... 04231fc1b4d2:~# grep -Ev "^(;.*|)$" /etc/my.cnf [client-server] [mysqld] bind_address = :: symbolic-links = 0 tmpdir = /var/tmp/mysqld The second, this .... 04231fc1b4d2:~# grep -Ev "^(;.*|)$" /etc/my.cnf.d/10_fdc_defaults.cnf [mariadbd] innodb-file-per-table innodb-buffer-pool-size=64M innodb_flush_method=O_DIRECT net-write-timeout=6000 net-read-timeout=6000 max-allowed-packet=128M sql-mode=STRICT_ALL_TABLES bind-address = * wsrep_provider = /usr/lib/galera/libgalera_smm.so wsrep_sst_method = mariabackup [mariadb-dump] max-allowed-packet=1G On a side note, I'm using roughtly the same build options as the Alpine package... cmake -B build -G Ninja -Wno-dev \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DCMAKE_INSTALL_PREFIX=/usr \ -DCOMPILATION_COMMENT="Conarx Containers" \ -DSYSCONFDIR=/etc \ -DSYSCONF2DIR=/etc/my.cnf.d \ -DMYSQL_DATADIR=/var/lib/mysql \ -DINSTALL_UNIX_ADDRDIR=/run/mysqld/mysqld.sock \ -DDEFAULT_CHARSET=utf8mb4 \ -DDEFAULT_COLLATION=utf8mb4_general_ci \ -DENABLED_LOCAL_INFILE=ON \ -DINSTALL_INFODIR=share/info \ -DINSTALL_MANDIR=share/man \ -DINSTALL_PAMDIR=/lib/security \ -DINSTALL_PLUGINDIR=lib/$pkgname/plugin \ -DINSTALL_SCRIPTDIR=bin \ -DINSTALL_INCLUDEDIR=include/mysql \ -DINSTALL_DOCREADMEDIR=share/doc/$pkgname \ -DINSTALL_SUPPORTFILESDIR=share/$pkgname \ -DINSTALL_MYSQLSHAREDIR=share/$pkgname \ -DINSTALL_DOCDIR=share/doc/$pkgname \ -DTMPDIR=/var/tmp \ -DCONNECT_WITH_MYSQL=ON \ -DCONNECT_WITH_LIBXML2=system \ -DCONNECT_WITH_ODBC=NO \ -DCONNECT_WITH_JDBC=NO \ -DPLUGIN_ARCHIVE=YES \ -DPLUGIN_ARIA=YES \ -DPLUGIN_BLACKHOLE=YES \ -DPLUGIN_CASSANDRA=NO \ -DPLUGIN_CSV=YES \ -DPLUGIN_MYISAM=YES \ -DPLUGIN_MROONGA=NO \ -DPLUGIN_OQGRAPH=NO \ -DPLUGIN_PARTITION=NO \ -DPLUGIN_ROCKSDB=YES \ -DPLUGIN_SPHINX=NO \ -DPLUGIN_TOKUDB=NO \ -DPLUGIN_AUTH_GSSAPI=NO \ -DPLUGIN_AUTH_GSSAPI_CLIENT=OFF \ -DPLUGIN_CRACKLIB_PASSWORD_CHECK=NO \ -DWITH_ASAN=OFF \ -DWITH_EMBEDDED_SERVER=OFF \ -DWITH_EXTRA_CHARSETS=complex \ -DWITH_INNODB_BZIP2=ON \ -DWITH_INNODB_LZ4=ON \ -DWITH_INNODB_LZMA=ON \ -DWITH_INNODB_LZO=ON \ -DWITH_INNODB_SNAPPY=ON \ -DWITH_ROCKSDB_BZIP2=ON \ -DWITH_ROCKSDB_JEMALLOC=ON \ -DWITH_ROCKSDB_LZ4=ON \ -DWITH_ROCKSDB_ZSTD=ON \ -DWITH_ROCKSDB_SNAPPY=ON \ -DWITH_JEMALLOC=ON \ -DWITH_LIBARCHIVE=system \ -DWITH_LIBFMT=system \ -DWITH_LIBNUMA=NO \ -DWITH_LIBWRAP=OFF \ -DWITH_LIBWSEP=OFF \ -DWITH_MARIABACKUP=ON \ -DWITH_PCRE=system \ -DWITH_READLINE=ON \ -DWITH_SYSTEMD=no \ -DWITH_SSL=system \ -DWITH_VALGRIND=OFF \ -DWITH_ZLIB=system \ -DSKIP_TESTS=ON And for Galera... ln -s "../../wsrep-API-${WSREP_COMMIT}" wsrep/src; \ cmake -B build -G Ninja -Wno-dev \ -DCMAKE_BUILD_TYPE=RelWithDebInfo
          nkukard Nigel Kukard added a comment - - edited

          Woops, I see now, I missed the "sudo mysql", give me a few minutes.

          Updated the above with code tags and output of the command.

          nkukard Nigel Kukard added a comment - - edited Woops, I see now, I missed the "sudo mysql", give me a few minutes. Updated the above with code tags and output of the command.
          nkukard Nigel Kukard added a comment -

          The issue is due to this issue. An idea may be to use boost regex which is consistent on both.

          Musl output (Alpine 3.20), musl-1.2.5-r1...

          The input '37' matches the pattern '^([0-9]*)?\.?([0-9]*)?$'
          Match 0: 37
          Match 1:
          Match 2: 37
          

          Glibc output (ArchLinux), glibc 2.39+r52+gf8e4623421-1...

          The input '37' matches the pattern '^([0-9]*)?\.?([0-9]*)?$'
          Match 0: 37
          Match 1: 37
          Match 2:
          

          Test code...

          /*--------------------*/
          #include <stdio.h>
          #include <regex.h>
           
          int main() {
              const char *pattern = "^([0-9]*)?\\.?([0-9]*)?$";
              const char *input = "37";
              regex_t regex;
              regmatch_t matches[3];
              int ret;
           
              ret = regcomp(&regex, pattern, REG_EXTENDED);
              if (ret) {
                  fprintf(stderr, "Could not compile regex\n");
                  return 1;
              }
           
              ret = regexec(&regex, input, 3, matches, 0);
              if (!ret) {
                  printf("The input '%s' matches the pattern '%s'\n", input, pattern);
                  for (int i = 0; i < 3; i++) {
                      if (matches[i].rm_so != -1) {
                          printf("Match %d: %.*s\n", i, matches[i].rm_eo - matches[i].rm_so, input + matches[i].rm_so);
                      }
                  }
              } else if (ret == REG_NOMATCH) {
                  printf("The input '%s' does not match the pattern '%s'\n", input, pattern);
              } else {
                  char msgbuf[100];
                  regerror(ret, &regex, msgbuf, sizeof(msgbuf));
                  fprintf(stderr, "Regex match failed: %s\n", msgbuf);
                  return 1;
              }
           
              regfree(&regex);
           
              return 0;
          }
          

          nkukard Nigel Kukard added a comment - The issue is due to this issue. An idea may be to use boost regex which is consistent on both. Musl output (Alpine 3.20), musl-1.2.5-r1... The input '37' matches the pattern '^([0-9]*)?\.?([0-9]*)?$' Match 0: 37 Match 1: Match 2: 37 Glibc output (ArchLinux), glibc 2.39+r52+gf8e4623421-1... The input '37' matches the pattern '^([0-9]*)?\.?([0-9]*)?$' Match 0: 37 Match 1: 37 Match 2: Test code... /*--------------------*/ #include <stdio.h> #include <regex.h>   int main() { const char *pattern = "^([0-9]*)?\\.?([0-9]*)?$" ; const char *input = "37" ; regex_t regex; regmatch_t matches[3]; int ret;   ret = regcomp(&regex, pattern, REG_EXTENDED); if (ret) { fprintf (stderr, "Could not compile regex\n" ); return 1; }   ret = regexec(&regex, input, 3, matches, 0); if (!ret) { printf ( "The input '%s' matches the pattern '%s'\n" , input, pattern); for ( int i = 0; i < 3; i++) { if (matches[i].rm_so != -1) { printf ( "Match %d: %.*s\n" , i, matches[i].rm_eo - matches[i].rm_so, input + matches[i].rm_so); } } } else if (ret == REG_NOMATCH) { printf ( "The input '%s' does not match the pattern '%s'\n" , input, pattern); } else { char msgbuf[100]; regerror(ret, &regex, msgbuf, sizeof (msgbuf)); fprintf (stderr, "Regex match failed: %s\n" , msgbuf); return 1; }   regfree(&regex);   return 0; }
          nkukard Nigel Kukard added a comment -

          I've worked on a draft patch which fixes this in Galera, should I submit this to the Codership repo or the MariaDB repo? galera-nk-use-std-regex-musl-bug.patch

          Using C++ regex we can work around this issue until the musl bug is fixed, ref https://www.openwall.com/lists/musl/2024/06/10/4

          Tested against 10.11.8 and 11.4.2, both Galera and MariaDB tests passing.

          The only thing I was not sure about is the treatment of ist_str, it seems to be picking up a null character, which using regex.h is treated as end of the string, with C++ its not and fails conversion later on. That in itself may be a bug and off-by-one issue, but not to disturb anything else I'm just removing the C terminating character from the C++ string.

          nkukard Nigel Kukard added a comment - I've worked on a draft patch which fixes this in Galera, should I submit this to the Codership repo or the MariaDB repo? galera-nk-use-std-regex-musl-bug.patch Using C++ regex we can work around this issue until the musl bug is fixed, ref https://www.openwall.com/lists/musl/2024/06/10/4 Tested against 10.11.8 and 11.4.2, both Galera and MariaDB tests passing. The only thing I was not sure about is the treatment of ist_str, it seems to be picking up a null character, which using regex.h is treated as end of the string, with C++ its not and fails conversion later on. That in itself may be a bug and off-by-one issue, but not to disturb anything else I'm just removing the C terminating character from the C++ string.
          danblack Daniel Black added a comment -

          Thanks for the patch and taking it upstream to the musl community. janlindstrom will make sure it ends up in the right place.

          danblack Daniel Black added a comment - Thanks for the patch and taking it upstream to the musl community. janlindstrom will make sure it ends up in the right place.

          People

            teemu.ollakka Teemu Ollakka
            nkukard Nigel Kukard
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:

              Git Integration

                Error rendering 'com.xiplink.jira.git.jira_git_plugin:git-issue-webpanel'. Please contact your Jira administrators.