rabbitmq-server/pull-request-21.patch
Dirk Mueller ba4a22848a Accepting request 485761 from home:vuntz:branches:network:messaging:amqp
- Stop shipping rabbitmq-server OCF resource agent as source file
  while it's included in the upstream tarball. Add patches for code
  that was specific to our variant; they now got upstreamed, but
  are not in this version of rabbitmq yet: pull-request-20.patch
  and pull-request-21.patch.
- Also package the rabbitmq-server-ha OCF resource agent as it
  seems to be more appropriate for clustering. Add upstream fixes
  for making it more solid: pull-request-24.patch and
  pull-request-25.patch.
- Ship an example of /etc/rabbitmq/rabbitmq-env.conf, as this is
  useful indication. It only contains commented examples, based on
  what the Debian package is doing.

OBS-URL: https://build.opensuse.org/request/show/485761
OBS-URL: https://build.opensuse.org/package/show/network:messaging:amqp/rabbitmq-server?expand=0&rev=76
2017-04-05 11:33:01 +00:00

197 lines
6.9 KiB
Diff

From 0a93dca147a5efbe7e5d6c6925873d7c99cfc1a7 Mon Sep 17 00:00:00 2001
From: Alberto Planas <aplanas@gmail.com>
Date: Wed, 29 Mar 2017 22:10:53 +0200
Subject: [PATCH 1/3] OCF RA: Add new limit_nofile parameter to rabbitmq-server
OCF RA
This enables to change the limit of open files, as the default on
distributions is usually too low for rabbitmq. Default is 65535.
---
scripts/rabbitmq-server.ocf | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/scripts/rabbitmq-server.ocf b/scripts/rabbitmq-server.ocf
index 804e654..7190d65 100755
--- a/scripts/rabbitmq-server.ocf
+++ b/scripts/rabbitmq-server.ocf
@@ -30,6 +30,7 @@
## OCF_RESKEY_mnesia_base
## OCF_RESKEY_server_start_args
## OCF_RESKEY_pid_file
+## OCF_RESKEY_limit_nofile
#######################################################################
# Initialization:
@@ -44,11 +45,13 @@ OCF_RESKEY_ctl_default="/usr/sbin/rabbitmqctl"
OCF_RESKEY_nodename_default="rabbit@localhost"
OCF_RESKEY_log_base_default="/var/log/rabbitmq"
OCF_RESKEY_pid_file_default="/var/run/rabbitmq/pid"
+OCF_RESKEY_limit_nofile_default="65535"
: ${OCF_RESKEY_server=${OCF_RESKEY_server_default}}
: ${OCF_RESKEY_ctl=${OCF_RESKEY_ctl_default}}
: ${OCF_RESKEY_nodename=${OCF_RESKEY_nodename_default}}
: ${OCF_RESKEY_log_base=${OCF_RESKEY_log_base_default}}
: ${OCF_RESKEY_pid_file=${OCF_RESKEY_pid_file_default}}
+: ${OCF_RESKEY_limit_nofile=${OCF_RESKEY_limit_nofile_default}}
meta_data() {
cat <<END
@@ -144,6 +147,14 @@ Location of the file in which the pid will be stored
<content type="string" default="${OCF_RESKEY_pid_file_default}" />
</parameter>
+<parameter name="limit_nofile" unique="0" required="0">
+<longdesc lang="en">
+Soft and hard limit for NOFILE
+</longdesc>
+<shortdesc lang="en">NOFILE limit</shortdesc>
+<content type="string" default="${OCF_RESKEY_limit_nofile_default}" />
+</parameter>
+
</parameters>
<actions>
@@ -176,6 +187,7 @@ RABBITMQ_LOG_BASE=$OCF_RESKEY_log_base
RABBITMQ_MNESIA_BASE=$OCF_RESKEY_mnesia_base
RABBITMQ_SERVER_START_ARGS=$OCF_RESKEY_server_start_args
RABBITMQ_PID_FILE=$OCF_RESKEY_pid_file
+RABBITMQ_LIMIT_NOFILE=$OCF_RESKEY_limit_nofile
[ ! -z $RABBITMQ_NODENAME ] && NODENAME_ARG="-n $RABBITMQ_NODENAME"
[ ! -z $RABBITMQ_NODENAME ] && export RABBITMQ_NODENAME
@@ -204,6 +216,10 @@ export_vars() {
[ ! -z $RABBITMQ_PID_FILE ] && ensure_pid_dir && export RABBITMQ_PID_FILE
}
+set_limits() {
+ [ ! -z $RABBITMQ_LIMIT_NOFILE ] && ulimit -n $RABBITMQ_LIMIT_NOFILE
+}
+
rabbit_validate_partial() {
if [ ! -x $RABBITMQ_SERVER ]; then
ocf_log err "rabbitmq-server server $RABBITMQ_SERVER does not exist or is not executable";
@@ -276,6 +292,9 @@ rabbit_start() {
export_vars
+ # RabbitMQ requires high soft and hard limits for NOFILE
+ set_limits
+
setsid sh -c "$RABBITMQ_SERVER > ${RABBITMQ_LOG_BASE}/startup_log 2> ${RABBITMQ_LOG_BASE}/startup_err" &
# Wait for the server to come up.
From 89d65b51aa7232207c29dd3010d669d4b54901f4 Mon Sep 17 00:00:00 2001
From: Vincent Untz <vuntz@suse.com>
Date: Wed, 29 Mar 2017 22:20:25 +0200
Subject: [PATCH 2/3] OCF RA: Add new limit_nofile parameter to
rabbitmq-server-ha OCF RA
This enables to change the limit of open files, as the default on
distributions is usually too low for rabbitmq. Default is 65535.
---
scripts/rabbitmq-server-ha.ocf | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/scripts/rabbitmq-server-ha.ocf b/scripts/rabbitmq-server-ha.ocf
index 49f3af7..2d5d660 100755
--- a/scripts/rabbitmq-server-ha.ocf
+++ b/scripts/rabbitmq-server-ha.ocf
@@ -50,6 +50,7 @@ OCF_RESKEY_max_rabbitmqctl_timeouts_default=3
OCF_RESKEY_policy_file_default="/usr/local/sbin/set_rabbitmq_policy"
OCF_RESKEY_rmq_feature_health_check_default=true
OCF_RESKEY_rmq_feature_local_list_queues_default=true
+OCF_RESKEY_limit_nofile_default=65535
: ${HA_LOGTAG="lrmd"}
: ${HA_LOGFACILITY="daemon"}
@@ -74,6 +75,7 @@ OCF_RESKEY_rmq_feature_local_list_queues_default=true
: ${OCF_RESKEY_policy_file=${OCF_RESKEY_policy_file_default}}
: ${OCF_RESKEY_rmq_feature_health_check=${OCF_RESKEY_rmq_feature_health_check_default}}
: ${OCF_RESKEY_rmq_feature_local_list_queues=${OCF_RESKEY_rmq_feature_local_list_queues_default}}
+: ${OCF_RESKEY_limit_nofile=${OCF_RESKEY_limit_nofile_default}}
#######################################################################
@@ -332,6 +334,14 @@ stopped/demoted.
<content type="boolean" default="${OCF_RESKEY_rmq_feature_local_list_queues_default}" />
</parameter>
+<parameter name="limit_nofile" unique="0" required="0">
+<longdesc lang="en">
+Soft and hard limit for NOFILE
+</longdesc>
+<shortdesc lang="en">NOFILE limit</shortdesc>
+<content type="string" default="${OCF_RESKEY_limit_nofile_default}" />
+</parameter>
+
$EXTENDED_OCF_PARAMS
</parameters>
@@ -556,6 +566,10 @@ now() {
date -u +%s
}
+set_limits() {
+ [ ! -z $OCF_RESKEY_limit_nofile ] && ulimit -n $OCF_RESKEY_limit_nofile
+}
+
master_score() {
local LH="${LL} master_score():"
local score=$1
@@ -1166,6 +1180,9 @@ start_beam_process() {
[ -f /etc/default/rabbitmq-server ] && . /etc/default/rabbitmq-server
+ # RabbitMQ requires high soft and hard limits for NOFILE
+ set_limits
+
# run beam process
command="${OCF_RESKEY_binary} >> \"${OCF_RESKEY_log_dir}/startup_log\" 2>/dev/null"
RABBITMQ_NODE_ONLY=1 su rabbitmq -s /bin/sh -c "${command}"&
From 73080ac78348916635e45c2f62aa7d86c0765b42 Mon Sep 17 00:00:00 2001
From: Vincent Untz <vuntz@suse.com>
Date: Tue, 4 Apr 2017 15:13:52 +0200
Subject: [PATCH 3/3] OCF RA: Only set limit for open files when higher than
current value
This allows to set the limit via some other way.
---
scripts/rabbitmq-server-ha.ocf | 5 ++++-
scripts/rabbitmq-server.ocf | 5 ++++-
2 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/scripts/rabbitmq-server-ha.ocf b/scripts/rabbitmq-server-ha.ocf
index 2d5d660..ea07916 100755
--- a/scripts/rabbitmq-server-ha.ocf
+++ b/scripts/rabbitmq-server-ha.ocf
@@ -567,7 +567,10 @@ now() {
}
set_limits() {
- [ ! -z $OCF_RESKEY_limit_nofile ] && ulimit -n $OCF_RESKEY_limit_nofile
+ local current_limit=$(su $OCF_RESKEY_username -s /bin/sh -c "ulimit -n")
+ if [ ! -z $OCF_RESKEY_limit_nofile -a $OCF_RESKEY_limit_nofile -gt $current_limit ] ; then
+ ulimit -n $OCF_RESKEY_limit_nofile
+ fi
}
master_score() {
diff --git a/scripts/rabbitmq-server.ocf b/scripts/rabbitmq-server.ocf
index 7190d65..dbca06f 100755
--- a/scripts/rabbitmq-server.ocf
+++ b/scripts/rabbitmq-server.ocf
@@ -217,7 +217,10 @@ export_vars() {
}
set_limits() {
- [ ! -z $RABBITMQ_LIMIT_NOFILE ] && ulimit -n $RABBITMQ_LIMIT_NOFILE
+ local current_limit=$(su rabbitmq -s /bin/sh -c "ulimit -n")
+ if [ ! -z $RABBITMQ_LIMIT_NOFILE -a $RABBITMQ_LIMIT_NOFILE -gt $current_limit ] ; then
+ ulimit -n $RABBITMQ_LIMIT_NOFILE
+ fi
}
rabbit_validate_partial() {