[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