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
This commit is contained in:
Michael Krotscheck 2014-08-13 08:42:10 -07:00
parent 8c4feb93f8
commit 59a1fb57da
5 changed files with 161 additions and 0 deletions

View File

@ -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 <code>storyboard::rabbit</code>.
node default {
class { '::storyboard::workers':
worker_count => 5
}
}
## ::storyboard::load_projects
A module that seeds the database with a predefined list of projects.

View File

@ -70,4 +70,8 @@ class storyboard (
rabbitmq_user => $rabbitmq_user,
rabbitmq_user_password => $rabbitmq_user_password
}
class { '::storyboard::workers':
worker_count => 5,
}
}

67
manifests/workers.pp Normal file
View File

@ -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']
]
}
}

View File

@ -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

View File

@ -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