[PATCH conductor] RM 3181 - delayed_job support - revised

Richard Su rwsu at redhat.com
Sat May 5 00:22:25 UTC 2012


rev2 - Rebased. Incorporated Jay's feedback; to leave db migration
the same as there are no changes and to update Gemfile.lock.

Add delayed_job version 2.1.4 back into our environment: db migration,
initializer, and script.

Created systemd configuration file. Spec file installs config file into
/lib/systemd/system.

The service is named conductor-delayed_job and can be controlled through
either of these two commands:
"systemctl start/stop/status conductor-delayed_job.service"
"service conductor-delayed_job start/stop/status"

Service brings up 2 workers to process the queue.
---
 aeolus-conductor.spec.in               |   28 ++++++++++++++++++++++++++++
 conf/conductor-delayed_job.systemd     |   16 ++++++++++++++++
 src/Gemfile                            |    2 ++
 src/Gemfile.lock                       |    2 ++
 src/config/initializers/delayed_job.rb |    9 +++++++++
 src/script/delayed_job                 |    5 +++++
 6 files changed, 62 insertions(+), 0 deletions(-)
 create mode 100644 conf/conductor-delayed_job.systemd
 create mode 100644 src/config/initializers/delayed_job.rb
 create mode 100755 src/script/delayed_job

diff --git a/aeolus-conductor.spec.in b/aeolus-conductor.spec.in
index f0cc305..123040a 100644
--- a/aeolus-conductor.spec.in
+++ b/aeolus-conductor.spec.in
@@ -45,6 +45,7 @@ Requires: rubygem(pg)
 Requires: rubygem(ruby-net-ldap)
 Requires: rubygem(oauth)
 Requires: rubygem(rake)
+Requires: rubygem(delayed_job) >= 2.1.4
 Requires: postgresql
 Requires: postgresql-server
 Requires: system-logos
@@ -77,6 +78,10 @@ Requires: rubygem(thin) >= 1.2.5
 Requires(post): chkconfig
 Requires(preun): chkconfig
 Requires(preun): initscripts
+Requires(post): systemd-units
+Requires(preun): systemd-units
+Requires(postun): systemd-units
+
 
 %description daemons
 The configuration and daemons necessary to run and proxy the Aeolus Conductor.
@@ -151,6 +156,7 @@ getent passwd aeolus >/dev/null || \
 %{__mkdir} -p %{buildroot}%{app_root}
 %{__mkdir} -p %{buildroot}%{doc_root}
 %{__mkdir} -p %{buildroot}%{_initrddir}
+%{__mkdir} -p %{buildroot}%{_unitdir}/systemd/system
 %{__mkdir} -p %{buildroot}%{_sysconfdir}/sysconfig
 %{__mkdir} -p %{buildroot}%{_sysconfdir}/httpd/conf.d
 %{__mkdir} -p %{buildroot}%{_sysconfdir}/logrotate.d
@@ -261,6 +267,7 @@ done
 # copy over init scripts and various config
 %{__cp} conf/aeolus-conductor %{buildroot}%{_initrddir}
 %{__cp} conf/conductor-dbomatic %{buildroot}%{_initrddir}
+%{__cp} conf/conductor-delayed_job.systemd %{buildroot}%{_unitdir}/conductor-delayed_job.service
 %{__cp} conf/aeolus-conductor-httpd.conf %{buildroot}%{_sysconfdir}/httpd/conf.d/aeolus-conductor.conf
 %{__cp} conf/aeolus-conductor.logrotate %{buildroot}%{_sysconfdir}/logrotate.d/aeolus-conductor
 %{__cp} conf/aeolus-conductor.sysconf %{buildroot}%{_sysconfdir}/sysconfig/aeolus-conductor
@@ -279,6 +286,10 @@ touch %{buildroot}%{_localstatedir}/log/%{name}/rails.log
 touch %{buildroot}%{_localstatedir}/log/%{name}/dbomatic.log
 
 %{__mkdir} -p %{buildroot}%{app_root}/log
+# delayed_job version 2.1.4 forces the log to be in this location
+# we should be able to change this to /var/log/aeolus-conductor/delayed_job.log
+# with version 3.0
+touch %{buildroot}%{app_root}/log/delayed_job.log
 
 # copy script files over
 %{__cp} -r src/script %{buildroot}%{app_root}
@@ -318,18 +329,33 @@ if [ ! -d %{app_root}/app ]; then
 fi
 
 %post daemons
+if [ $1 -eq 1 ] ; then
+    # Initial installation
+    /bin/systemctl daemon-reload >/dev/null 2>&1
+fi
 # Register the services
 /sbin/chkconfig --add aeolus-conductor
 /sbin/chkconfig --add conductor-dbomatic
 
 %preun daemons
 if [ $1 = 0 ]; then
+   # Package removal, not upgrade
+   /bin/systemctl --no-reload disable conductor-delayed_job.service > /dev/null 2>&1
+   /bin/systemctl stop conductor-delayed_job.service > /dev/null 2>&1
    /sbin/service aeolus-conductor stop > /dev/null 2>&1
    /sbin/chkconfig --del aeolus-conductor
    /sbin/service conductor-dbomatic stop > /dev/null 2>&1
    /sbin/chkconfig --del conductor-dbomatic
 fi
 
+%postun daemons
+/bin/systemctl daemon-reload >/dev/null 2>&1 || :
+if [ $1 -ge 1 ] ; then
+    # Package upgrade, not uninstall
+    /bin/systemctl try-restart conductor-delayed_job.service >/dev/null 2>&1
+fi
+
+
 %files
 %dir %{app_root}
 %{app_root}/app
@@ -358,6 +384,7 @@ fi
 %files daemons
 %{_initrddir}/aeolus-conductor
 %{_initrddir}/conductor-dbomatic
+%{_unitdir}/conductor-delayed_job.service
 %config(noreplace) %{_sysconfdir}/logrotate.d/%{name}
 %config(noreplace) %{_sysconfdir}/sysconfig/aeolus-conductor
 %config(noreplace) %{_sysconfdir}/sysconfig/conductor-rails
@@ -365,6 +392,7 @@ fi
 %attr(-, aeolus, aeolus) %{_localstatedir}/lib/%{name}
 %attr(-, aeolus, aeolus) %{_localstatedir}/run/%{name}
 %attr(-, aeolus, aeolus) %{_localstatedir}/log/%{name}
+%attr(-, aeolus, aeolus) %{app_root}/log/delayed_job.log
 %doc AUTHORS COPYING
 %{_libdir}/../lib/tmpfiles.d/aeolus.conf
 
diff --git a/conf/conductor-delayed_job.systemd b/conf/conductor-delayed_job.systemd
new file mode 100644
index 0000000..6c1fc55
--- /dev/null
+++ b/conf/conductor-delayed_job.systemd
@@ -0,0 +1,16 @@
+[Unit]
+Description=aeolus delayed_job
+After=syslog.target
+After=postgresql.service
+
+[Service]
+Type=forking
+User=aeolus
+Environment=RAILS_ENV=production
+WorkingDirectory=/usr/share/aeolus-conductor/
+ExecStart=/usr/share/aeolus-conductor/script/delayed_job start -n 2 --pid-dir=/var/run/aeolus-conductor
+ExecStop=/usr/share/aeolus-conductor/script/delayed_job stop --pid-dir=/var/run/aeolus-conductor
+TimeoutSec=120
+
+[Install]
+WantedBy=multi-user.target
\ No newline at end of file
diff --git a/src/Gemfile b/src/Gemfile
index e17014d..387c13b 100644
--- a/src/Gemfile
+++ b/src/Gemfile
@@ -22,9 +22,11 @@ gem 'rails_warden'
 gem 'ruby-net-ldap'
 gem 'aeolus-image'
 gem 'oauth'
+gem 'delayed_job'
 platforms :ruby_18 do
   gem 'fastercsv'
 end
+
 group :development, :test do
   gem 'rspec-rails'
   gem 'rspec-core'
diff --git a/src/Gemfile.lock b/src/Gemfile.lock
index ef7ac01..496e210 100644
--- a/src/Gemfile.lock
+++ b/src/Gemfile.lock
@@ -55,6 +55,7 @@ GEM
       nokogiri (>= 1.4.6)
     daemons (1.0.10)
     database_cleaner (0.6.6)
+    delayed_job (2.1.4)
     deltacloud-client (0.4.0)
       nokogiri (>= 1.4.3)
       rest-client (>= 1.6.1)
@@ -167,6 +168,7 @@ DEPENDENCIES
   cucumber
   cucumber-rails
   database_cleaner
+  delayed_job
   deltacloud-client
   factory_girl_rails
   fastercsv
diff --git a/src/config/initializers/delayed_job.rb b/src/config/initializers/delayed_job.rb
new file mode 100644
index 0000000..6e0d177
--- /dev/null
+++ b/src/config/initializers/delayed_job.rb
@@ -0,0 +1,9 @@
+require 'delayed_job'
+
+Delayed::Worker.backend = :active_record
+Delayed::Worker.destroy_failed_jobs = false
+#Delayed::Worker.sleep_delay = 60
+Delayed::Worker.max_attempts = 2
+#Delayed::Worker.max_run_time = 5.minutes
+#Delayed::Worker.read_ahead = 10
+#Delayed::Worker.delay_jobs = !Rails.env.test?
diff --git a/src/script/delayed_job b/src/script/delayed_job
new file mode 100755
index 0000000..edf1959
--- /dev/null
+++ b/src/script/delayed_job
@@ -0,0 +1,5 @@
+#!/usr/bin/env ruby
+
+require File.expand_path(File.join(File.dirname(__FILE__), '..', 'config', 'environment'))
+require 'delayed/command'
+Delayed::Command.new(ARGV).daemonize
-- 
1.7.7.6




More information about the aeolus-devel mailing list