mariadb: Move generation of systemd drop-in to puppet-tripleo
authorDamien Ciabrini <dciabrin@redhat.com>
Wed, 7 Dec 2016 18:09:06 +0000 (19:09 +0100)
committerTim Rozet <trozet@redhat.com>
Fri, 3 Mar 2017 20:52:01 +0000 (20:52 +0000)
Systemd starts mariadb as user mysql, so in order to allow a large
number of connections (e.g. max_connections=4096) it is necessary to
raise the file descriptor limit via a system drop-in file.

When installing an undercloud, such drop-in file is currently
generated by instack-undercloud (in file puppet-stack-config.pp). But
non-HA overcloud also need such drop-in to be generated.

In order to avoid duplicating code, the drop-in creation code should
be provided by puppet-tripleo. By default, no drop-in is generated;
it has to be enabled by instack-undercloud or tripleo-heat-template
once they will use it (resp. to create undercloud or non-HA overcloud).

This patch does not aim at generating a dynamic file limit based on
the number of connections, this should land in another dedicated
patch.  Instead, it just reuses the limit currently set for undercloud
and HA-overclouds.

Also, the generation of the drop-in does not force a mysql restart
like it currently does in instack-undercloud, to avoid unexpected
service disruption on a non-HA overcloud after a minor update.

Co-Authored-By: Tim Rozet <trozet@redhat.com>
Depends-On: I7ca7b5f7614971455cae2bf7c4bf8264b642b0dc

Change-Id: Ia0907b2ab6062a93fb9363e39c86535a490fbaf6
Partial-Bug: #1648181
Related-Bug: #1524809
(cherry picked from commit 09665170f6d0f4536a48dd4d1444e07aa064bed7)

manifests/profile/base/database/mysql.pp

index d3c3f21..862c4bd 100644 (file)
 #   (Optional) Whether TLS in the internal network is enabled or not.
 #   Defaults to hiera('enable_internal_tls', false)
 #
+# [*generate_dropin_file_limit*]
+#   (Optional) Generate a systemd drop-in file to raise the file descriptor
+#   limit for the mysql service.
+#   Defaults to false
+#
 # [*generate_service_certificates*]
 #   (Optional) Whether or not certmonger will generate certificates for
 #   MySQL. This could be as many as specified by the $certificates_specs
@@ -72,6 +77,7 @@ class tripleo::profile::base::database::mysql (
   $bootstrap_node                = hiera('bootstrap_nodeid', undef),
   $certificate_specs             = {},
   $enable_internal_tls           = hiera('enable_internal_tls', false),
+  $generate_dropin_file_limit    = false,
   $generate_service_certificates = hiera('generate_service_certificates', false),
   $manage_resources              = true,
   $mysql_server_options          = {},
@@ -139,6 +145,15 @@ class tripleo::profile::base::database::mysql (
       service_enabled         => $manage_resources,
       remove_default_accounts => $remove_default_accounts,
     }
+
+    if $generate_dropin_file_limit {
+      # Raise the mysql file limit
+      ::systemd::service_limits { 'mariadb.service':
+        limits => {
+          LimitNOFILE => 16384
+        }
+      }
+    }
   }
 
   if $step >= 2 and $sync_db {