Rework logic for setting threads in my.cnf

This patch updates logic for setting the following parameters
  * innodb_read_io_threads
  * innodb_write_io_threads
  * wsrep_slave_threads

When they are set to 0 (default value) number of threads will be
calcullated dynamically based on number of CPU cores but not higher
than 12.

Default number for paralell percona backups is decreased to 1.

Change-Id: I8510a2dc90f6bcce8e2f7e7ff2fd93853fdf665c
Related-Prod: PROD-24979
diff --git a/README.rst b/README.rst
index db30e37..e678e66 100644
--- a/README.rst
+++ b/README.rst
@@ -169,6 +169,14 @@
 - ``galera_error_log_path``
    Default is ``/var/log/mysql/error.log``
 
+When the following parameters are set to 0, theirs
+defaults will be calclulated automatically based on number
+of cpu cores:
+
+ - galera_innodb_read_io_threads
+ - galera_innodb_write_io_threads
+ - galera_wsrep_slave_threads
+
 Usage:
 
 .. code-block:: yaml
diff --git a/galera/files/my.cnf b/galera/files/my.cnf
index 16af533..65d67f7 100644
--- a/galera/files/my.cnf
+++ b/galera/files/my.cnf
@@ -53,8 +53,9 @@
 innodb_file_per_table=1
 innodb_buffer_pool_size={{ service.innodb_buffer_pool_size }}
 innodb_log_file_size=627M
-innodb_read_io_threads={{ service.get('innodb_read_io_threads', 8) }}
-innodb_write_io_threads={{ service.get('innodb_write_io_threads', 8) }}
+{% set threads_default = [grains.num_cpus * 2, 12] | sort | first %}
+innodb_read_io_threads={{ service.innodb_read_io_threads if service.innodb_read_io_threads != 0 else threads_default }}
+innodb_write_io_threads={{ service.innodb_write_io_threads if service.innodb_write_io_threads != 0 else threads_default }}
 innodb_io_capacity=500
 innodb_flush_log_at_trx_commit=2
 innodb_flush_method=O_DIRECT
@@ -69,7 +70,7 @@
 wsrep_provider={{ service.wsrep_provider }}
 wsrep_cluster_name="openstack"
 
-wsrep_slave_threads={{ service.get('wsrep_slave_threads', 8) }}
+wsrep_slave_threads={{ service.wsrep_slave_threads if service.wsrep_slave_threads != 0 else threads_default }}
 wsrep_sst_method=xtrabackup-v2
 wsrep_sst_auth={{ service.admin.user }}:{{ service.admin.password }}
 wsrep_node_address={{ service.bind.address }}
diff --git a/galera/map.jinja b/galera/map.jinja
index 0894eb2..599669b 100644
--- a/galera/map.jinja
+++ b/galera/map.jinja
@@ -1,16 +1,14 @@
 {% set mysql_version  = pillar.galera.get('version', {}).get('mysql', '5.6') %}
 {% set galera_version = pillar.galera.get('version', {}).get('galera', '3')  %}
 
-{% set threads_default = [grains.num_cpus * 2, 12] | sort | first %}
-
 {%- load_yaml as master %}
   default:
     max_connections: 20000
     innodb_buffer_pool_size: '3138M'
-    innodb_read_io_threads: {{ threads_default }}
-    innodb_write_io_threads: {{ threads_default }}
-    wsrep_slave_threads: {{ threads_default }}
-    xtrabackup_parallel: {{ threads_default }}
+    innodb_read_io_threads: 0
+    innodb_write_io_threads: 0
+    wsrep_slave_threads: 0
+    xtrabackup_parallel: 1
   Debian:
     pkgs:
     - mysql-wsrep-{{ mysql_version }}
@@ -57,10 +55,10 @@
   default:
     max_connections: 20000
     innodb_buffer_pool_size: '3138M'
-    innodb_read_io_threads: {{ threads_default }}
-    innodb_write_io_threads: {{ threads_default }}
-    wsrep_slave_threads: {{ threads_default }}
-    xtrabackup_parallel: {{ threads_default }}
+    innodb_read_io_threads: 0
+    innodb_write_io_threads: 0
+    wsrep_slave_threads: 0
+    xtrabackup_parallel: 1
   Debian:
     pkgs:
     - mysql-wsrep-{{ mysql_version }}
diff --git a/metadata/service/master/cluster.yml b/metadata/service/master/cluster.yml
index 2cb4f36..38c23c4 100644
--- a/metadata/service/master/cluster.yml
+++ b/metadata/service/master/cluster.yml
@@ -10,6 +10,10 @@
     galera_server_admin_user: root
     galera_max_connections: 20000
     galera_innodb_buffer_pool_size: 3138M
+    galera_innodb_read_io_threads: 0
+    galera_innodb_write_io_threads: 0
+    galera_wsrep_slave_threads: 0
+    galera_xtrabackup_parallel: 0
     galera_error_log_enabled: true
     galera_error_log_path: /var/log/mysql/error.log
   galera:
@@ -32,6 +36,10 @@
         port: 4567
       max_connections: ${_param:galera_max_connections}
       innodb_buffer_pool_size: ${_param:galera_innodb_buffer_pool_size}
+      innodb_read_io_threads: ${_param:galera_innodb_read_io_threads}
+      innodb_write_io_threads: ${_param:galera_innodb_write_io_threads}
+      wsrep_slave_threads: ${_param:galera_wsrep_slave_threads}
+      xtrabackup_parallel: ${_param:galera_xtrabackup_parallel}
       error_log_enabled: ${_param:galera_error_log_enabled}
       error_log_path: ${_param:galera_error_log_path}
   mysql:
diff --git a/metadata/service/master/single.yml b/metadata/service/master/single.yml
index f71fc6e..7ac04d9 100644
--- a/metadata/service/master/single.yml
+++ b/metadata/service/master/single.yml
@@ -11,6 +11,10 @@
     galera_max_connections: 20000
     galera_innodb_buffer_pool_size: 3138M
     galera_error_log_enabled: true
+    galera_innodb_read_io_threads: 0
+    galera_innodb_write_io_threads: 0
+    galera_wsrep_slave_threads: 0
+    galera_xtrabackup_parallel: 0
     galera_error_log_path: /var/log/mysql/error.log
   galera:
     master:
@@ -28,6 +32,10 @@
         port: 4567
       max_connections: ${_param:galera_max_connections}
       innodb_buffer_pool_size: ${_param:galera_innodb_buffer_pool_size}
+      innodb_read_io_threads: ${_param:galera_innodb_read_io_threads}
+      innodb_write_io_threads: ${_param:galera_innodb_write_io_threads}
+      wsrep_slave_threads: ${_param:galera_wsrep_slave_threads}
+      xtrabackup_parallel: ${_param:galera_xtrabackup_parallel}
       error_log_enabled: ${_param:galera_error_log_enabled}
       error_log_path: ${_param:galera_error_log_path}
   mysql:
diff --git a/metadata/service/slave/cluster.yml b/metadata/service/slave/cluster.yml
index e2140d8..92ee133 100644
--- a/metadata/service/slave/cluster.yml
+++ b/metadata/service/slave/cluster.yml
@@ -10,6 +10,10 @@
     galera_server_admin_user: root
     galera_max_connections: 20000
     galera_innodb_buffer_pool_size: 3138M
+    galera_innodb_read_io_threads: 0
+    galera_innodb_write_io_threads: 0
+    galera_wsrep_slave_threads: 0
+    galera_xtrabackup_parallel: 0
     galera_error_log_enabled: true
     galera_error_log_path: /var/log/mysql/error.log
   galera:
@@ -32,6 +36,10 @@
         port: 4567
       max_connections: ${_param:galera_max_connections}
       innodb_buffer_pool_size: ${_param:galera_innodb_buffer_pool_size}
+      innodb_read_io_threads: ${_param:galera_innodb_read_io_threads}
+      innodb_write_io_threads: ${_param:galera_innodb_write_io_threads}
+      wsrep_slave_threads: ${_param:galera_wsrep_slave_threads}
+      xtrabackup_parallel: ${_param:galera_xtrabackup_parallel}
       error_log_enabled: ${_param:galera_error_log_enabled}
       error_log_path: ${_param:galera_error_log_path}
   mysql: