Ori.livneh has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/149800

Change subject: Nutcracker: move declaration to role::mediawiki; parametrize
......................................................................

Nutcracker: move declaration to role::mediawiki; parametrize

* Set owner / group / mode for config files.
* Only override nutcracker's default mbuf-size if caller requests it.
* Don't declare defaults. Especially if they conflict with nutcracker's!
* Don't assume a single server pool. Nutcracker supports arbitrarily many.
  We'll probably want to exploit this to ease the migration to a UNIX domain
  socket (if we choose to do that).
* Move declaration to role::mediawiki / role::beta.
* Fix Icinga alert to expect a single process.

Change-Id: Ifb4d25506ad5dddf046c3e6ba03f30541850d2be
---
M manifests/role/beta.pp
M manifests/role/mediawiki.pp
M modules/mediawiki/manifests/init.pp
M modules/nutcracker/manifests/init.pp
M modules/nutcracker/manifests/monitoring.pp
M modules/nutcracker/templates/config.yml.erb
A modules/nutcracker/templates/default.erb
7 files changed, 107 insertions(+), 80 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/operations/puppet 
refs/changes/00/149800/1

diff --git a/manifests/role/beta.pp b/manifests/role/beta.pp
index 86ea004..ae0ab1f 100644
--- a/manifests/role/beta.pp
+++ b/manifests/role/beta.pp
@@ -110,6 +110,26 @@
         check_command => 
'check_http_url!commons.wikimedia.beta.wmflabs.org|http://commons.wikimedia.beta.wmflabs.org/wiki/Main_Page',
     }
 
+    class { '::nutcracker':
+        mbuf_size => '64k',
+        pools     => {
+            'memcached' => {
+                auto_eject_hosts     => true,
+                distribution         => 'ketama',
+                hash                 => 'md5',
+                listen               => '127.0.0.1:11212',
+                preconnect           => true,
+                server_connections   => 2,
+                server_failure_limit => 3,
+                timeout              => 250,
+                servers              => [
+                    '10.68.16.14:11211',
+                    '10.68.16.15:11211',
+                ],
+            },
+        },
+    }
+
     # Beta application servers have some ferm DNAT rewriting rules (bug
     # 45868) so we have to explicitly allow http (port 80)
     ferm::service { 'http':
diff --git a/manifests/role/mediawiki.pp b/manifests/role/mediawiki.pp
index 0543ced..724306d 100644
--- a/manifests/role/mediawiki.pp
+++ b/manifests/role/mediawiki.pp
@@ -10,6 +10,40 @@
     include ::mediawiki
     include ::nutcracker::monitoring
 
+    class { '::nutcracker':
+        mbuf_size => '64k',
+        pools     => {
+            'memcached' => {
+                auto_eject_hosts     => true,
+                distribution         => 'ketama',
+                hash                 => 'md5',
+                listen               => '127.0.0.1:11212',
+                preconnect           => true,
+                server_connections   => 2,
+                server_failure_limit => 3,
+                timeout              => 250,
+                servers              => [
+                    '10.64.0.180:11211:1',
+                    '10.64.0.181:11211:1',
+                    '10.64.0.182:11211:1',
+                    '10.64.0.183:11211:1',
+                    '10.64.0.184:11211:1',
+                    '10.64.0.185:11211:1',
+                    '10.64.0.186:11211:1',
+                    '10.64.0.187:11211:1',
+                    '10.64.0.188:11211:1',
+                    '10.64.0.189:11211:1',
+                    '10.64.0.190:11211:1',
+                    '10.64.0.191:11211:1',
+                    '10.64.0.192:11211:1',
+                    '10.64.0.193:11211:1',
+                    '10.64.0.194:11211:1',
+                    '10.64.0.195:11211:1',
+                ],
+            },
+        },
+    }
+
     $log_aggregator = 'fluorine.eqiad.wmnet:8420'
     class { '::mediawiki::php': fatal_log_file => "udp://${log_aggregator}" }
     class { '::mediawiki::syslog': apache_log_aggregator => $log_aggregator }
diff --git a/modules/mediawiki/manifests/init.pp 
b/modules/mediawiki/manifests/init.pp
index 9482091..49db762 100644
--- a/modules/mediawiki/manifests/init.pp
+++ b/modules/mediawiki/manifests/init.pp
@@ -13,36 +13,6 @@
         mode    => '0444',
     }
 
-    if $::realm == 'labs' {
-        $mw_mc_server_list = [
-            '10.68.16.14:11211', # deployment-memc02.eqiad.wmflabs
-            '10.68.16.15:11211', # deployment-memc03.eqiad.wmflabs
-        ]
-    } else {
-        $mw_mc_server_list = [
-            '10.64.0.180:11211', # mc1001
-            '10.64.0.181:11211', # mc1002
-            '10.64.0.182:11211', # mc1003
-            '10.64.0.183:11211', # mc1004
-            '10.64.0.184:11211', # mc1005
-            '10.64.0.185:11211', # mc1006
-            '10.64.0.186:11211', # mc1007
-            '10.64.0.187:11211', # mc1008
-            '10.64.0.188:11211', # mc1009
-            '10.64.0.189:11211', # mc1010
-            '10.64.0.190:11211', # mc1011
-            '10.64.0.191:11211', # mc1012
-            '10.64.0.192:11211', # mc1013
-            '10.64.0.193:11211', # mc1014
-            '10.64.0.194:11211', # mc1015
-            '10.64.0.195:11211', # mc1016
-        ]
-    }
-
-    class { '::nutcracker':
-        server_list => $mw_mc_server_list,
-    }
-
     # Increase scheduling priority of SSHD
     file { '/etc/init/ssh.override':
         content => "nice -10\n",
diff --git a/modules/nutcracker/manifests/init.pp 
b/modules/nutcracker/manifests/init.pp
index c64700d..179cb93 100644
--- a/modules/nutcracker/manifests/init.pp
+++ b/modules/nutcracker/manifests/init.pp
@@ -6,61 +6,68 @@
 #
 # === Parameters
 #
-# [*config_parameters*]
-#   Non-standard config parameters for the memcached section of
-#   the configuration.
+# [*mbuf_size*]
+#   When set, will determine the size of nutcracker's mbufs.
+#   The default is 16384. See <https://github.com/twitter/twemproxy
+#   /blob/b2cd3ad/notes/recommendation.md> for a discussion of this
+#   option.
 #
-# [*server_list*]
-#   List of the servers (in IP:PORT format) that will be used as
-#   backends for memcached.
+# [*pools*]
+#   A hash defining a nutcracker server pool.
+#   See <https://github.com/twitter/twemproxy#configuration>.
 #
 # === Examples
 #
-#  class { 'nutcracker':
-#    server_list => ['192.168.0.1:11211', '192.168.0.2:11211'],
+#  class { '::nutcracker':
+#    pools => {
+#      'parser' => {
+#        listen       => '127.0.0.1:11211',
+#        distribution => 'ketama',
+#        hash         => 'md5',
+#        timeout      => 250,
+#        servers      => ['10.64.0.180:11211:1', '10.64.0.181:11211:1'],
+#      },
+#    },
 #  }
 #
-class nutcracker( $server_list, $config_parameters = {} ) {
-    tag 'nutcracker'
+class nutcracker(
+    $pools,
+    $mbuf_size = undef,
+    $ensure    = present,
+) {
+    validate_hash($pools)
 
-    $default_config = {
-        'listen'               => '127.0.0.1:11212',
-        'hash'                 => 'md5',
-        'distribution'         => 'ketama',
-        'timeout'              => 250,
-        'preconnect'           => 'true', # this is quoted on purpose
-        'redis'                => 'false',# same here
-        'auto_eject_hosts'     => 'true', # same here
-        'server_retry_timeout' => 30000,
-        'server_failure_limit' => 3,
-        'server_connections'   => 2,
-    }
-
-    $config = merge($default_config, $config_parameters)
-
-    package { 'nutcracker': }
-
-    file { '/etc/default/nutcracker':
-        ensure  => present,
-        content => 'DAEMON_OPTS="--mbuf-size=65536 --stats-port=22223"',
-        require => Package['nutcracker'],
+    package { 'nutcracker':
+        ensure => $ensure,
     }
 
     file { '/etc/nutcracker/nutcracker.yml':
-        ensure  => present,
-        mode    => '0444',
+        ensure  => $ensure,
         content => template('nutcracker/config.yml.erb'),
-        require => File['/etc/default/nutcracker'],
-#        notify  => Service['nutcracker'],
+        owner   => 'root',
+        group   => 'root',
+        mode    => '0444',
+        require => Package['nutcracker'],
+        # notify  => Service['nutcracker'],
+    }
+
+    if $ensure == 'present' and versioncmp($::puppetversion, '3.5') >= 0 {
+        File['/etc/nutcracker/nutcracker.yml'] {
+          validate_cmd => '/usr/sbin/nutcracker --test-conf %',
+        }
+    }
+
+    file { '/etc/default/nutcracker':
+        ensure  => $ensure,
+        content => template('nutcracker/default.erb'),
+        owner   => 'root',
+        group   => 'root',
+        mode    => '0444',
+        # notify  => Service['nutcracker'],
     }
 
     service { 'nutcracker':
-        ensure   => running,
+        ensure   => ensure_service($ensure),
         provider => 'upstart',
-        require  => [
-            File['/etc/default/nutcracker'],
-            File['/etc/nutcracker/nutcracker.yml'],
-            Package['nutcracker'],
-        ],
     }
 }
diff --git a/modules/nutcracker/manifests/monitoring.pp 
b/modules/nutcracker/manifests/monitoring.pp
index 499bf22..94b5252 100644
--- a/modules/nutcracker/manifests/monitoring.pp
+++ b/modules/nutcracker/manifests/monitoring.pp
@@ -5,7 +5,7 @@
 class nutcracker::monitoring {
     nrpe::monitor_service { 'nutcracker':
         description  => 'nutcracker process',
-        nrpe_command => '/usr/lib/nagios/plugins/check_procs -c 1:2 -u 
nutcracker -C nutcracker',
+        nrpe_command => '/usr/lib/nagios/plugins/check_procs -c 1:1 -u 
nutcracker -C nutcracker',
     }
 
     nrpe::monitor_service { 'nutcracker_port':
diff --git a/modules/nutcracker/templates/config.yml.erb 
b/modules/nutcracker/templates/config.yml.erb
index 3ffcaca..988404d 100644
--- a/modules/nutcracker/templates/config.yml.erb
+++ b/modules/nutcracker/templates/config.yml.erb
@@ -1,8 +1 @@
-memcached:
-<% @config.sort.each do |k,v| -%>
-   <%= k %>: <%= v %>
-<%- end -%>
-   servers:
-   <%- @server_list.each do |server| -%>
-   - <%= server %>:1
-   <%- end -%>
+<%= scope.function_ordered_yaml([@pools]).gsub(/^---/, '') %>
diff --git a/modules/nutcracker/templates/default.erb 
b/modules/nutcracker/templates/default.erb
new file mode 100644
index 0000000..417b7b8
--- /dev/null
+++ b/modules/nutcracker/templates/default.erb
@@ -0,0 +1,3 @@
+# Default settings for nutcracker.
+# This file is managed by Puppet.
+<%- if @mbuf_size -%>DAEMON_OPTS="--mbuf-size=<%= scope.function_to_bytes 
[@mbuf_size] %>"<%- end %>

-- 
To view, visit https://gerrit.wikimedia.org/r/149800
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ifb4d25506ad5dddf046c3e6ba03f30541850d2be
Gerrit-PatchSet: 1
Gerrit-Project: operations/puppet
Gerrit-Branch: production
Gerrit-Owner: Ori.livneh <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to