Ottomata has uploaded a new change for review.
https://gerrit.wikimedia.org/r/288099
Change subject: [WIP] Druid module
......................................................................
[WIP] Druid module
Bug: T131974
Change-Id: I65cb169ac2701e754cd6a68e31903bcb25644290
---
A modules/druid/manifests/broker.pp
A modules/druid/manifests/coordinator.pp
A modules/druid/manifests/historical.pp
A modules/druid/manifests/init.pp
A modules/druid/manifests/middlemanager.pp
A modules/druid/manifests/overlord.pp
A modules/druid/templates/env.sh.erb
A modules/druid/templates/log4j2.xml.erb
A modules/druid/templates/runtime.properties.erb
9 files changed, 378 insertions(+), 0 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/operations/puppet
refs/changes/99/288099/1
diff --git a/modules/druid/manifests/broker.pp
b/modules/druid/manifests/broker.pp
new file mode 100644
index 0000000..4e79040
--- /dev/null
+++ b/modules/druid/manifests/broker.pp
@@ -0,0 +1,72 @@
+# == Class druid::broker
+#
+
+# [*druid.service*]
+
+# Default: druid/broker
+# [*druid.port*]
+
+# Default: 8082
+
+# HTTP server threads
+# [*druid.broker.http.numConnections*]
+
+# Default: 4
+# [*druid.server.http.numThreads*]
+
+# Default: 4
+
+# Processing threads and buffers
+# [*druid.processing.buffer.sizeBytes*]
+
+# Default: 134217728
+# [*druid.processing.numThreads*]
+
+# Default: 1
+
+# Query cache (we use a small local cache)
+# [*druid.broker.cache.useCache*]
+
+# Default: true
+# [*druid.broker.cache.populateCache*]
+
+# Default: true
+# [*druid.cache.type*]
+
+# Default: local
+# [*druid.cache.sizeInBytes*]
+
+# Default: 10000000
+class druid::broker(
+ $properties = {},
+ $env = {},
+)
+{
+ require druid
+
+ $default_properties = {
+ 'druid.port' => 8082,
+ # HTTP server threads,
+ 'druid.broker.http.numConnections' => '4',
+ 'druid.server.http.numThreads' => '4',
+ # Processing threads and buffers,
+ 'druid.processing.buffer.sizeBytes' => '134217728',
+ 'druid.processing.numThreads' => '1',
+ # Query cache (we use a small local cache),
+ 'druid.broker.cache.useCache' => 'true',
+ 'druid.broker.cache.populateCache' => 'true',
+ 'druid.cache.type' => 'local',
+ 'druid.cache.sizeInBytes' => '10000000'
+ }
+
+ $default_env = {
+ 'JMX_PORT' => 9661,
+ 'DRUID_HEAP_OPTS' => '-Xmx256m -Xms256m',
+ 'DRUID_EXTRA_JVM_OPTS' => '-XX:MaxDirectMemorySize=256m',
+ }
+
+ druid::service { 'broker':
+ runtime_properties => merge($default_properties, $properties),
+ env => merge($default_env, $env),
+ }
+}
diff --git a/modules/druid/manifests/coordinator.pp
b/modules/druid/manifests/coordinator.pp
new file mode 100644
index 0000000..888c372
--- /dev/null
+++ b/modules/druid/manifests/coordinator.pp
@@ -0,0 +1,26 @@
+# == Class druid::coordinator
+#
+class druid::coordinator(
+ $properties = {},
+ $env = {},
+)
+{
+ require druid
+
+ $default_properties = {
+ 'druid.port' => 8081,
+ 'druid.coordinator.startDelay' => 'PT30S',
+ 'druid.coordinator.period' => 'PT30S',
+ }
+
+ $default_env = {
+ 'JMX_PORT' => 9662,
+ 'DRUID_HEAP_OPTS' => '-Xmx128m -Xms128m',
+ 'DRUID_EXTRA_JVM_OPTS' =>
'-Dderby.stream.error.file=/var/log/druid/coordinator-derby.log',
+ }
+
+ druid::service { 'coordinator':
+ runtime_properties => merge($default_properties, $properties),
+ env => merge($default_env, $env),
+ }
+}
diff --git a/modules/druid/manifests/historical.pp
b/modules/druid/manifests/historical.pp
new file mode 100644
index 0000000..26cdfd7
--- /dev/null
+++ b/modules/druid/manifests/historical.pp
@@ -0,0 +1,34 @@
+# == Class druid::historical
+#
+class druid::historical(
+ $properties = {},
+ $env = {},
+)
+{
+ require druid
+
+ $default_properties = {
+ 'druid.port' => 8083,
+ # HTTP server threads
+ 'druid.server.http.numThreads' => 4,
+
+ # Processing threads and buffers
+ 'druid.processing.buffer.sizeBytes' => 134217728,
+ 'druid.processing.numThreads' => 1,
+
+ # Segment storage
+ 'druid.segmentCache.locations' =>
'[{"path":"var/lib/druid/segment-cache","maxSize"\:2147483648}]',
+ 'druid.server.maxSize' => 2147483648,
+ }
+
+ $default_env = {
+ 'JMX_PORT' => 9663,
+ 'DRUID_HEAP_OPTS' => '-Xmx256m -Xms256m',
+ 'DRUID_EXTRA_JVM_OPTS' => '-XX:MaxDirectMemorySize=256m',
+ }
+
+ druid::service { 'historical':
+ runtime_properties => merge($default_properties, $properties),
+ env => merge($default_env, $env),
+ }
+}
diff --git a/modules/druid/manifests/init.pp b/modules/druid/manifests/init.pp
new file mode 100644
index 0000000..5d85243
--- /dev/null
+++ b/modules/druid/manifests/init.pp
@@ -0,0 +1,150 @@
+# == Class druid
+#
+# Installs druid-common and configures common runtime properties.
+#
+# == Properties
+# Note that the properties listed here are only the defaults.
+# See http://druid.io/docs/latest/configuration/ for a
+# list of available properties.
+#
+#
+# [*druid.extensions.directory*]
+# Druid extensions are installed here. Only extensions listed in
+# druid.extensions.loadList will be automatically loaded into the classpath.
+# Default: /usr/share/druid/extensions
+#
+# [*druid.extensions.loadList*]
+# List extensions to load. Directories matching these names must exist
+# in druid.extensions.directory.
+# Default: ["druid-histogram", "druid-datasketches",
"druid-namespace-lookup"]
+#
+# [*druid.extensions.hadoopDependenciesDir*]
+# If you have a different version of Hadoop, place your Hadoop client jar
+# files in your hadoop-dependencies directory and uncomment the line below to
+# point to your directory. Or you may manually include them in
+# DRUID_CLASSPATH.
+# Default: /usr/share/druid/hadoop-dependencies
+#
+# [*druid.startup.logging.logProperties*]
+# Log all runtime properties on startup. Disable to avoid logging properties
+# on startup. Default: true
+#
+# [*druid.zk.service.host*]
+# Zookeeper hostnames. Default: localhost:2181
+#
+# [*druid.zk.paths.base*]
+# Chroot to druid in zookeeper. Default: /druid
+#
+# [*druid.metadata.storage.type*]
+# For Derby server on your Druid Coordinator (only viable in a cluster with
+# single Coordinator, no fail-over). Default: derby
+#
+# [*druid.metadata.storage.connector.connectURI*]
+# Default: jdbc:derby://localhost:1527/var/lib/druid/metadata.db;create=true
+#
+# [*druid.metadata.storage.connector.host*]
+# Default: localhost
+#
+# [*druid.metadata.storage.connector.port*]
+# Default: 1527
+#
+# [*druid.storage.type*]
+# Default: noop
+#
+# [*druid.indexer.logs.type*]
+# This property must be set for both overlord and middlemanager, hence
+# it is present in common.runtime.properties.
+# Default: file
+#
+# [*druid.indexer.logs.directory*]
+# This property must be set for both overlord and middlemanager, hence
+# it is present in common.runtime.properties.
+# Default: /var/lib/druid/indexing-logs
+#
+# [*druid.monitoring.monitors*]
+# Default: ["com.metamx.metrics.JvmMonitor"]
+#
+# [*druid.emitter*]
+# Default: logging
+#
+# [*druid.emitter.logging.logLevel*]
+# Default: info
+#
+class druid(
+ $properties = {},
+)
+{
+ $default_properties = {
+ 'druid.extensions.directory' =>
'/usr/share/druid/extensions',
+ 'druid.extensions.loadList' => [
+ 'druid-histogram',
+ 'druid-datasketches',
+ 'druid-namespace-lookup'
+ ],
+ 'druid.extensions.hadoopDependenciesDir' =>
'/usr/share/druid/hadoop-dependencies',
+ 'druid.startup.logging.logProperties' => true,
+ 'druid.zk.service.host' =>
'localhost:2181',
+ 'druid.zk.paths.base' => '/druid',
+ 'druid.metadata.storage.type' => 'derby',
+ 'druid.metadata.storage.connector.connectURI' =>
'jdbc:derby://localhost:1527/var/lib/druid/metadata.db;create=true',
+ 'druid.metadata.storage.connector.host' => 'localhost',
+ 'druid.metadata.storage.connector.port' => 1527,
+ 'druid.storage.type' => 'noop',
+ 'druid.monitoring.monitors' =>
['com.metamx.metrics.JvmMonitor'],
+ 'druid.emitter' => 'logging',
+ 'druid.emitter.logging.logLevel' => 'info'
+ }
+ $runtime_properties = merge($default_properties, $properties)
+
+ require_package('druid-common')
+
+ file { '/etc/druid/common.runtime.properties':
+ content => template('druid/runtime.properties.erb')
+ }
+}
+
+# # TODO: This won't work from manifests/service.pp on mediawiki vagrant, hmmm.
+# # == Define druid::service
+# # == Parameters
+# # arguments
+# #
+# define druid::service(
+# $runtime_properties,
+# $service = $title,
+# $env = undef,
+# $enable = true,
+# )
+# {
+# file { "/etc/druid/${service}/runtime.properties":
+# content => template('druid/runtime.properties.erb'),
+# }
+#
+# $env_ensure = $env ? {
+# undef => 'absent',
+# default => 'present',
+# }
+#
+# file { "/etc/druid/${service}/env.sh":
+# ensure => $env_ensure,
+# content => template('druid/env.sh.erb'),
+# }
+#
+# file { "/etc/druid/${service}/log4j2.xml":
+# content => template('druid/log4j2.xml.erb'),
+# }
+#
+# $service_ensure = $enabled ? {
+# false => 'stopped',
+# default => 'running',
+# }
+# service { "druid-${service}":
+# ensure => $service_ensure,
+# enable => $enabled,
+# hasrestart => true,
+# require => [
+# File["/etc/druid/${service}/runtime.properties"],
+# File["/etc/druid/${service}/env.sh"],
+# File["/etc/druid/${service}/log4j2.xml"],
+# ]
+# }
+# }
\ No newline at end of file
diff --git a/modules/druid/manifests/middlemanager.pp
b/modules/druid/manifests/middlemanager.pp
new file mode 100644
index 0000000..a8716e0
--- /dev/null
+++ b/modules/druid/manifests/middlemanager.pp
@@ -0,0 +1,36 @@
+# == Class druid::middlemanager
+#
+class druid::middlemanager(
+ $properties = {},
+ $env = {},
+)
+{
+ require druid
+
+ $default_properties = {
+ 'druid.port' => 8091,
+ # Number of tasks per middleManager
+ 'druid.worker.capacity' => 3,
+
+ # Task launch parameters
+ 'druid.indexer.runner.javaOpts' => '-server -Xmx128m
-Duser.timezone=UTC -Dfile.encoding=UTF-8
-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager',
+ 'druid.indexer.task.baseTaskDir' => '/var/lib/druid/task',
+
+ # HTTP server threads
+ 'druid.server.http.numThreads' => 4,
+
+ # Processing threads and buffers
+ 'druid.processing.buffer.sizeBytes' => 134217728,
+ 'druid.processing.numThreads' => 1,
+ }
+
+ $default_env = {
+ 'JMX_PORT' => 9664,
+ 'DRUID_HEAP_OPTS' => '-Xmx64m -Xms64m',
+ }
+
+ druid::service { 'middlemanager':
+ runtime_properties => merge($default_properties, $properties),
+ env => merge($default_env, $env),
+ }
+}
diff --git a/modules/druid/manifests/overlord.pp
b/modules/druid/manifests/overlord.pp
new file mode 100644
index 0000000..cee5387
--- /dev/null
+++ b/modules/druid/manifests/overlord.pp
@@ -0,0 +1,27 @@
+# == Class druid::overlord
+#
+class druid::overlord(
+ $properties = {},
+ $env = {},
+)
+{
+ require druid
+
+ $default_properties = {
+ 'druid.port' => 8090,
+ 'druid.indexer.queue.startDelay' => 'PT5S',
+
+ 'druid.indexer.runner.type' => 'remote',
+ 'druid.indexer.storage.type' => 'metadata',
+ }
+
+ $default_env = {
+ 'JMX_PORT' => 9665,
+ 'DRUID_HEAP_OPTS' => '-Xmx128m -Xms128m',
+ }
+
+ druid::service { 'overlord':
+ runtime_properties => merge($default_properties, $properties),
+ env => merge($default_env, $env),
+ }
+}
diff --git a/modules/druid/templates/env.sh.erb
b/modules/druid/templates/env.sh.erb
new file mode 100644
index 0000000..0f34a7c
--- /dev/null
+++ b/modules/druid/templates/env.sh.erb
@@ -0,0 +1,5 @@
+# NOTE: This file is managed by Puppet.
+
+<% @env.keys.sort.each do |key| -%>
+<%= key %>="<%= @env[key] %>"
+<% end -%>
diff --git a/modules/druid/templates/log4j2.xml.erb
b/modules/druid/templates/log4j2.xml.erb
new file mode 100644
index 0000000..165c456
--- /dev/null
+++ b/modules/druid/templates/log4j2.xml.erb
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<Configuration status="warn">
+ <Appenders>
+ <RollingFile name="RollingFile"
+ fileName="/var/log/druid/<%= @service %>.log"
+ filePattern="/var/log/druid/<%= @service %>.%i.log">
+ <PatternLayout>
+ <Pattern>%d{ISO8601} %p %c: %m%n</Pattern>
+ </PatternLayout>
+ <Policies>
+ <SizeBasedTriggeringPolicy size="128 MB"/>
+ </Policies>
+ <DefaultRolloverStrategy max="4"/>
+ </RollingFile>
+ </Appenders>
+
+ <Loggers>
+ <Root level="info">
+ <AppenderRef ref="RollingFile"/>
+ </Root>
+ </Loggers>
+</Configuration>
diff --git a/modules/druid/templates/runtime.properties.erb
b/modules/druid/templates/runtime.properties.erb
new file mode 100644
index 0000000..09c80b3
--- /dev/null
+++ b/modules/druid/templates/runtime.properties.erb
@@ -0,0 +1,5 @@
+# NOTE: This file is managed by Puppet.
+
+<% @runtime_properties.keys.sort.each do |key| -%>
+<%= key %>=<%= @runtime_properties[key] %>
+<% end -%>
--
To view, visit https://gerrit.wikimedia.org/r/288099
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I65cb169ac2701e754cd6a68e31903bcb25644290
Gerrit-PatchSet: 1
Gerrit-Project: operations/puppet
Gerrit-Branch: production
Gerrit-Owner: Ottomata <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits