From 59a1fb57da58feda4604448e721bb2acb5a482d4 Mon Sep 17 00:00:00 2001 From: Michael Krotscheck Date: Wed, 13 Aug 2014 08:42:10 -0700 Subject: [PATCH] StoryBoard Deferred Processors This patch adds a puppet module that will start up N worker threads to handle messages sent to the deferred processing queue. It does so by making use of the new storyboard-worker-daemon command created in the below patch. Both upstart and sysvinit scripts are provided, with sysvinit being the default. https://review.openstack.org/#/c/122890/ Change-Id: I5565cbf8062457d343d3e02dbfaae2852a359d91 Story: 96 --- README.md | 13 ++++++ manifests/init.pp | 4 ++ manifests/workers.pp | 67 +++++++++++++++++++++++++++ templates/storyboard-workers.conf.erb | 11 +++++ templates/storyboard-workers.sh.erb | 66 ++++++++++++++++++++++++++ 5 files changed, 161 insertions(+) create mode 100644 manifests/workers.pp create mode 100644 templates/storyboard-workers.conf.erb create mode 100644 templates/storyboard-workers.sh.erb diff --git a/README.md b/README.md index a0e1f07..616f756 100644 --- a/README.md +++ b/README.md @@ -146,6 +146,19 @@ instance of rabbit. } } +## ::storyboard::workers +This module installs StoryBoard's deferred processing threads. + +In order to process deferred requests within StoryBoard, you may run a +configurable number of threads that process tasks from the deferred +worker queue configured in storyboard::rabbit. + + node default { + class { '::storyboard::workers': + worker_count => 5 + } + } + ## ::storyboard::load_projects A module that seeds the database with a predefined list of projects. diff --git a/manifests/init.pp b/manifests/init.pp index 8e51432..80b92df 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -70,4 +70,8 @@ class storyboard ( rabbitmq_user => $rabbitmq_user, rabbitmq_user_password => $rabbitmq_user_password } + + class { '::storyboard::workers': + worker_count => 5, + } } diff --git a/manifests/workers.pp b/manifests/workers.pp new file mode 100644 index 0000000..394b1a7 --- /dev/null +++ b/manifests/workers.pp @@ -0,0 +1,67 @@ +# Copyright (c) 2014 Hewlett-Packard Development Company, L.P. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +# == Class: storyboard::workers +# +# This module installs the storyboard deferred processing workers. +# +class storyboard::workers ( + $worker_count = 5, + $use_upstart = false, +) { + + include storyboard::params + + $upstart_path = '/etc/init/storyboard-workers.conf' + $sysvinit_path = '/etc/init.d/storyboard-workers' + + if $use_upstart { + file { $upstart_path: + ensure => file, + owner => root, + group => root, + mode => '0644', + content => template('storyboard/storyboard-workers.conf.erb'), + notify => Service['storyboard-workers'], + before => Service['storyboard-workers'], + } + file { $sysvinit_path: + ensure => absent + } + } else { + file { $upstart_path: + ensure => absent + } + file { $sysvinit_path: + ensure => file, + owner => root, + group => root, + mode => '0755', + content => template('storyboard/storyboard-workers.sh.erb'), + notify => Service['storyboard-workers'], + before => Service['storyboard-workers'], + } + } + + service { 'storyboard-workers': + ensure => running, + hasrestart => true, + subscribe => [ + Class['::storyboard::application'] + ], + require => [ + Class['::storyboard::application'] + ] + } +} \ No newline at end of file diff --git a/templates/storyboard-workers.conf.erb b/templates/storyboard-workers.conf.erb new file mode 100644 index 0000000..e436947 --- /dev/null +++ b/templates/storyboard-workers.conf.erb @@ -0,0 +1,11 @@ +description "StoryBoard Deferred Workers" + +start on started network-services +stop on stopping network-services + +setuid <%= scope.lookupvar("storyboard::params::user") %> +setgid <%= scope.lookupvar("storyboard::params::group") %> + +script + storyboard-worker-daemon --worker-count <%= @worker_count %> +end script \ No newline at end of file diff --git a/templates/storyboard-workers.sh.erb b/templates/storyboard-workers.sh.erb new file mode 100644 index 0000000..a713276 --- /dev/null +++ b/templates/storyboard-workers.sh.erb @@ -0,0 +1,66 @@ +#!/bin/sh +### BEGIN INIT INFO +# Provides: storyboard-workers +# Required-Start: $network $local_fs +# Required-Stop: +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: StoryBoard Deferred Processors +#### END INIT INFO + +NAME=storyboard-workers +USER=<%= scope.lookupvar("storyboard::params::user") %> +GROUP=<%= scope.lookupvar("storyboard::params::group") %> +CMD="storyboard-worker-daemon" +CMD_ARGS="--worker-count <%= @worker_count %>" + +########## Common +PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:$PATH +SSD=start-stop-daemon +PID=/var/run/${NAME}.pid + +start () { + echo -n "Start $NAME" + $SSD --start --pidfile $PID --make-pidfile -u $USER -g $GROUP --background --exec $CMD -- $CMD_ARGS + RETVAL=$? + echo + return $RETVAL +} + +stop () { + echo -n "Stop $NAME" + $SSD --stop --oknodo --pidfile $PID --signal INT + RETVAL=$? + echo + return $RETVAL +} + +restart () { + stop + sleep 1 + start +} + +case "$1" in + start) + start + ;; + + stop) + stop + ;; + + status) + echo "not supported" + ;; + + restart) + restart + ;; + + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 +esac + +exit $RETVAL \ No newline at end of file