Unverified Commit 32cc0423 authored by Simon Hauser's avatar Simon Hauser Committed by GitHub
Browse files

mariadb: 10.5.26, 10.6.19, 10.11.9, 11.4.3 (#334878)

* mariadb: 10.5.26, 10.6.19, 10.11.9, 11.4.3

* nixos/tests/automysqlbackup: nixfmt

* nixos/automysqlbackup: fix tests

* nixos/tests/mariadb-galera: nixfmt

* nixos/tests/mariadb-galera: fix test failing with new default IPv6 configuration
parent 848b7926
Loading
Loading
Loading
Loading
+0 −9
Original line number Diff line number Diff line
@@ -118,15 +118,6 @@ in
      name = user;
      ensurePermissions = {
        "*.*" = "SELECT, SHOW VIEW, TRIGGER, LOCK TABLES, EVENT";

        # https://forums.mysql.com/read.php?10,668311,668315#msg-668315
        "function sys.extract_table_from_file_name" = "execute";
        "function sys.format_path" = "execute";
        "function sys.format_statement" = "execute";
        "function sys.extract_schema_from_file_name" = "execute";
        "function sys.ps_thread_account" = "execute";
        "function sys.format_time" = "execute";
        "function sys.format_bytes" = "execute";
      };
    };

+249 −226
Original line number Diff line number Diff line
@@ -2,7 +2,7 @@
  system ? builtins.currentSystem,
  config ? { },
  pkgs ? import ../../.. { inherit system config; },
  lib ? pkgs.lib
  lib ? pkgs.lib,
}:

let
@@ -11,11 +11,13 @@ let
  makeTest = import ./../make-test-python.nix;

  # Common user configuration
  makeGaleraTest = {
  makeGaleraTest =
    {
      mariadbPackage,
      name ? mkTestName mariadbPackage,
    galeraPackage ? pkgs.mariadb-galera
  }: makeTest {
      galeraPackage ? pkgs.mariadb-galera,
    }:
    makeTest {
      name = "${name}-galera-mariabackup";
      meta = {
        maintainers = with lib.maintainers; [ izorkin ] ++ lib.teams.helsinki-systems.members;
@@ -23,14 +25,18 @@ let

      # The test creates a Galera cluster with 3 nodes and is checking if mariabackup-based SST works. The cluster is tested by creating a DB and an empty table on one node,
      # and checking the table's presence on the other node.
    nodes = let
      mkGaleraNode = {
      nodes =
        let
          mkGaleraNode =
            {
              id,
        method
      }: let
              method,
            }:
            let
              address = "192.168.1.${toString id}";
              isFirstClusterNode = id == 1 || id == 4;
      in {
            in
            {
              users = {
                users.testuser = {
                  isSystemUser = true;
@@ -42,11 +48,22 @@ let
              networking = {
                interfaces.eth1 = {
                  ipv4.addresses = [
              { inherit address; prefixLength = 24; }
                    {
                      inherit address;
                      prefixLength = 24;
                    }
                  ];
                  ipv6.addresses = lib.mkForce [ ];
                };
          extraHosts = lib.concatMapStringsSep "\n" (i: "192.168.1.${toString i} galera_0${toString i}") (lib.range 1 6);
          firewall.allowedTCPPorts = [ 3306 4444 4567 4568 ];
                extraHosts = lib.concatMapStringsSep "\n" (i: "192.168.1.${toString i} galera_0${toString i}") (
                  lib.range 1 6
                );
                firewall.allowedTCPPorts = [
                  3306
                  4444
                  4567
                  4568
                ];
                firewall.allowedUDPPorts = [ 4567 ];
              };
              systemd.services.mysql = with pkgs; {
@@ -70,16 +87,20 @@ let
                enable = true;
                package = mariadbPackage;
                ensureDatabases = lib.mkIf isFirstClusterNode [ "testdb" ];
          ensureUsers = lib.mkIf isFirstClusterNode [{
                ensureUsers = lib.mkIf isFirstClusterNode [
                  {
                    name = "testuser";
                    ensurePermissions = {
                      "testdb.*" = "ALL PRIVILEGES";
                    };
          }];
          initialScript = lib.mkIf isFirstClusterNode (pkgs.writeText "mariadb-init.sql" ''
                  }
                ];
                initialScript = lib.mkIf isFirstClusterNode (
                  pkgs.writeText "mariadb-init.sql" ''
                    GRANT ALL PRIVILEGES ON *.* TO 'check_repl'@'localhost' IDENTIFIED BY 'check_pass' WITH GRANT OPTION;
                    FLUSH PRIVILEGES;
          '');
                  ''
                );
                settings = {
                  mysqld = {
                    bind_address = "0.0.0.0";
@@ -89,7 +110,8 @@ let
                    wsrep_debug = "NONE";
                    wsrep_retry_autocommit = "3";
                    wsrep_provider = "${galeraPackage}/lib/galera/libgalera_smm.so";
              wsrep_cluster_address = "gcomm://"
                    wsrep_cluster_address =
                      "gcomm://"
                      + lib.optionalString (id == 2 || id == 3) "galera_01,galera_02,galera_03"
                      + lib.optionalString (id == 5 || id == 6) "galera_04,galera_05,galera_06";
                    wsrep_cluster_name = "galera";
@@ -104,7 +126,8 @@ let
                };
              };
            };
    in {
        in
        {
          galera_01 = mkGaleraNode {
            id = 1;
            method = "mariabackup";
+43 −35
Original line number Diff line number Diff line
@@ -2,7 +2,7 @@
  system ? builtins.currentSystem,
  config ? { },
  pkgs ? import ../../.. { inherit system config; },
  lib ? pkgs.lib
  lib ? pkgs.lib,
}:

let
@@ -10,10 +10,12 @@ let

  makeTest = import ./../make-test-python.nix;

  makeAutobackupTest = {
  makeAutobackupTest =
    {
      package,
      name ? mkTestName package,
  }: makeTest {
    }:
    makeTest {
      name = "${name}-automysqlbackup";
      meta.maintainers = [ lib.maintainers.aanderse ];

@@ -21,10 +23,16 @@ let
        services.mysql = {
          inherit package;
          enable = true;
        initialDatabases = [ { name = "testdb"; schema = ./testdb.sql; } ];
          initialDatabases = [
            {
              name = "testdb";
              schema = ./testdb.sql;
            }
          ];
        };

        services.automysqlbackup.enable = true;
        automysqlbackup.settings.mysql_dump_port = "";
      };

      testScript = ''
+10 −12
Original line number Diff line number Diff line
@@ -244,28 +244,26 @@ in
    # see https://mariadb.org/about/#maintenance-policy for EOLs
    mariadb_105 = self.callPackage generic {
      # Supported until 2025-06-24
      # TODO should be removed
      version = "10.5.25";
      hash = "sha256-lhnQ9R6GQ1dGayxjMBo0pT99/ZnxjE/UUvqyK/Obpk4=";
      version = "10.5.26";
      hash = "sha256-3V+ZodMK5HNl/Bix3u/23AqzishOfZ/ZyMBP9rAZYfE=";
      inherit (self.darwin.apple_sdk.frameworks) CoreServices;
    };
    mariadb_106 = self.callPackage generic {
      # Supported until 2026-07-06
      version = "10.6.18";
      hash = "sha256-aJihER9HEwcJ4ouix70aV+S7VxAfbhCeWX1R5tOFzxg=";
      version = "10.6.19";
      hash = "sha256-vOyw/3t5pBNEc2+plHEHh8FVFtUet3FfJ4w/D8t+hwM=";
      inherit (self.darwin.apple_sdk.frameworks) CoreServices;
    };
    mariadb_1011 = self.callPackage generic {
      # Supported until 2028-02-16
      version = "10.11.8";
      hash = "sha256-XwTz4z2fHL7/BeecVNQdMCYwUAyZWu5ysGOOL5383w8=";
      version = "10.11.9";
      hash = "sha256-CgAYCGTNAWGHyYb6q4AQ3iOhF7mnX5HWRWQh+JTkjSA=";
      inherit (self.darwin.apple_sdk.frameworks) CoreServices;
    };
    mariadb_110 = self.callPackage generic {
      # Supported until 2024-06-07
      # TODO should be removed
      version = "11.0.6";
      hash = "sha256-AYnWKUbDfG20a/GkaLqVgLy6joDwWVjsSDwzh+zPmgA=";
    mariadb_114 = self.callPackage generic {
      # Supported until 2029-05-29
      version = "11.4.3";
      hash = "sha256-bwAXuZAbsYl94O7SHK75/6nWbvVZNFoNim8BEwhBPs4=";
      inherit (self.darwin.apple_sdk.frameworks) CoreServices;
    };
  }
+0 −167
Original line number Diff line number Diff line
From 1f1ee5d3776af7ef56ffa3f4dcd22532c2c86c74 Mon Sep 17 00:00:00 2001
From: Jan Tojnar <jtojnar@gmail.com>
Date: Sun, 7 Jan 2024 10:19:54 +0100
Subject: [PATCH] Fix build with libxml2 2.12
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

libxml2 2.12.0 made `xmlGetLastError()` return `const` pointer:

https://gitlab.gnome.org/GNOME/libxml2/-/commit/61034116d0a3c8b295c6137956adc3ae55720711

Clang 16 does not like this:

    error: assigning to 'xmlErrorPtr' (aka '_xmlError *') from 'const xmlError *' (aka 'const _xmlError *') discards qualifiers
    error: cannot initialize a variable of type 'xmlErrorPtr' (aka '_xmlError *') with an rvalue of type 'const xmlError *' (aka 'const _xmlError *')

Let’s update the variables to `const`.
For older versions, it will be automatically converted.

But then `xmlResetError(xmlError*)` will not like the `const` pointer:

    error: no matching function for call to 'xmlResetError'
    note: candidate function not viable: 1st argument ('const xmlError *' (aka 'const _xmlError *')) would lose const qualifier

Let’s replace it with `xmlResetLastError()`.

ALso remove `LIBXMLDOC::Xerr` protected member property.
It was introduced in 65b0e5455b547a3d574fa77b34cce23ae3bea0a0
along with the `xmlResetError` calls.
It does not appear to be used for anything.
---
 storage/connect/libdoc.cpp | 39 +++++++++++++++++++-------------------
 1 file changed, 19 insertions(+), 20 deletions(-)

diff --git a/storage/connect/libdoc.cpp b/storage/connect/libdoc.cpp
index e414aa88355..10edcbc3ffa 100644
--- a/storage/connect/libdoc.cpp
+++ b/storage/connect/libdoc.cpp
@@ -93,7 +93,6 @@ class LIBXMLDOC : public XMLDOCUMENT {
   xmlXPathContextPtr Ctxp;
   xmlXPathObjectPtr  Xop;
   xmlXPathObjectPtr  NlXop;
-  xmlErrorPtr        Xerr;
   char              *Buf;                  // Temporary
   bool               Nofreelist;
 }; // end of class LIBXMLDOC
@@ -327,7 +326,6 @@ LIBXMLDOC::LIBXMLDOC(char *nsl, char *nsdf, char *enc, PFBLOCK fp)
   Ctxp = NULL;
   Xop = NULL;
   NlXop = NULL;
-  Xerr = NULL;
   Buf = NULL;
   Nofreelist = false;
   } // end of LIBXMLDOC constructor
@@ -365,8 +363,8 @@ bool LIBXMLDOC::ParseFile(PGLOBAL g, char *fn)
       Encoding = (char*)Docp->encoding;
 
     return false;
-  } else if ((Xerr = xmlGetLastError()))
-    xmlResetError(Xerr);
+  } else if (xmlGetLastError())
+    xmlResetLastError();
 
   return true;
   } // end of ParseFile
@@ -505,9 +503,9 @@ int LIBXMLDOC::DumpDoc(PGLOBAL g, char *ofn)
 #if 1
   // This function does not crash (
   if (xmlSaveFormatFileEnc((const char *)ofn, Docp, Encoding, 0) < 0) {
-    xmlErrorPtr err = xmlGetLastError();
+    const xmlError *err = xmlGetLastError();
     strcpy(g->Message, (err) ? err->message : "Error saving XML doc");
-    xmlResetError(Xerr);
+    xmlResetLastError();
     rc = -1;
     } // endif Save
 //  rc = xmlDocDump(of, Docp);
@@ -546,8 +544,8 @@ void LIBXMLDOC::CloseDoc(PGLOBAL g, PFBLOCK xp)
     if (Nlist) {
       xmlXPathFreeNodeSet(Nlist);
 
-      if ((Xerr = xmlGetLastError()))
-        xmlResetError(Xerr);
+      if (xmlGetLastError())
+        xmlResetLastError();
 
       Nlist = NULL;
       } // endif Nlist
@@ -555,8 +553,8 @@ void LIBXMLDOC::CloseDoc(PGLOBAL g, PFBLOCK xp)
     if (Xop) {
       xmlXPathFreeObject(Xop);
 
-      if ((Xerr = xmlGetLastError()))
-        xmlResetError(Xerr);
+      if (xmlGetLastError())
+        xmlResetLastError();
 
       Xop = NULL;
       } // endif Xop
@@ -564,8 +562,8 @@ void LIBXMLDOC::CloseDoc(PGLOBAL g, PFBLOCK xp)
     if (NlXop) {
       xmlXPathFreeObject(NlXop);
 
-      if ((Xerr = xmlGetLastError()))
-        xmlResetError(Xerr);
+      if (xmlGetLastError())
+        xmlResetLastError();
 
       NlXop = NULL;
       } // endif NlXop
@@ -573,8 +571,8 @@ void LIBXMLDOC::CloseDoc(PGLOBAL g, PFBLOCK xp)
     if (Ctxp) {
       xmlXPathFreeContext(Ctxp);
 
-      if ((Xerr = xmlGetLastError()))
-        xmlResetError(Xerr);
+      if (xmlGetLastError())
+        xmlResetLastError();
 
       Ctxp = NULL;
       } // endif Ctxp
@@ -590,6 +588,7 @@ void LIBXMLDOC::CloseDoc(PGLOBAL g, PFBLOCK xp)
 /******************************************************************/
 xmlNodeSetPtr LIBXMLDOC::GetNodeList(PGLOBAL g, xmlNodePtr np, char *xp)
   {
+  const xmlError *xerr;
   xmlNodeSetPtr nl;
 
   if (trace(1))
@@ -649,11 +648,11 @@ xmlNodeSetPtr LIBXMLDOC::GetNodeList(PGLOBAL g, xmlNodePtr np, char *xp)
     } else
       xmlXPathFreeObject(Xop);            // Caused node not found
 
-    if ((Xerr = xmlGetLastError())) {
-      strcpy(g->Message, Xerr->message);
-      xmlResetError(Xerr);
+    if ((xerr = xmlGetLastError())) {
+      strcpy(g->Message, xerr->message);
+      xmlResetLastError();
       return NULL;
-      } // endif Xerr
+      } // endif xerr
 
     } // endif Xop
 
@@ -1079,7 +1078,7 @@ void XML2NODE::AddText(PGLOBAL g, PCSZ txtp)
 /******************************************************************/
 void XML2NODE::DeleteChild(PGLOBAL g, PXNODE dnp)
   {
-  xmlErrorPtr xerr;
+  const xmlError *xerr;
 
   if (trace(1))
     htrc("DeleteChild: node=%p\n", dnp);
@@ -1122,7 +1121,7 @@ void XML2NODE::DeleteChild(PGLOBAL g, PXNODE dnp)
   if (trace(1))
     htrc("DeleteChild: errmsg=%-.256s\n", xerr->message);
 
-  xmlResetError(xerr);
+  xmlResetLastError();
   } // end of DeleteChild
 
 /* -------------------- class XML2NODELIST ---------------------- */
-- 
2.42.0
Loading