Skip to content

Commit ed9a656

Browse files
authored
Merge pull request #196 from infosiftr/total_memory_available_override_value
Utilize total_memory_available_override_value and duplicate less internal RabbitMQ math
2 parents cd7faaa + 653f40c commit ed9a656

File tree

2 files changed

+64
-82
lines changed

2 files changed

+64
-82
lines changed

3.6/alpine/docker-entrypoint.sh

Lines changed: 32 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -269,55 +269,46 @@ if [ "$1" = 'rabbitmq-server' ] && [ "$shouldWriteConfig" ]; then
269269
}
270270
}' /sys/fs/cgroup/memory/memory.limit_in_bytes)"
271271
fi
272-
if [ -n "$memTotalKb" ] || [ -n "$memLimitB" ]; then
272+
if [ -n "$memLimitB" ]; then
273+
# if we have a cgroup memory limit, let's inform RabbitMQ of what it is (so it can calculate vm_memory_high_watermark properly)
274+
# https://github.com/rabbitmq/rabbitmq-server/pull/1234
275+
rabbitConfig+=( "{ total_memory_available_override_value, $memLimitB }" )
276+
fi
277+
if [ "${RABBITMQ_VM_MEMORY_HIGH_WATERMARK:-}" ]; then
273278
# https://github.com/docker-library/rabbitmq/pull/105#issuecomment-242165822
274-
vmMemoryHighWatermark=
275-
if [ "${RABBITMQ_VM_MEMORY_HIGH_WATERMARK:-}" ]; then
276-
vmMemoryHighWatermark="$(
277-
awk -v lim="$memLimitB" '
278-
/^[0-9]*[.][0-9]+$|^[0-9]+([.][0-9]+)?%$/ {
279-
perc = $0;
280-
if (perc ~ /%$/) {
281-
gsub(/%$/, "", perc);
282-
perc = perc / 100;
283-
}
284-
if (perc > 1.0 || perc <= 0.0) {
285-
printf "error: invalid percentage for vm_memory_high_watermark: %s (must be > 0%%, <= 100%%)\n", $0 > "/dev/stderr";
286-
exit 1;
287-
}
288-
if (lim) {
289-
printf "{ absolute, %d }\n", lim * perc;
290-
} else {
291-
printf "%0.03f\n", perc;
292-
}
293-
next;
294-
}
295-
/^[0-9]+$/ {
296-
printf "{ absolute, %s }\n", $0;
297-
next;
279+
vmMemoryHighWatermark="$(
280+
awk '
281+
/^[0-9]*[.][0-9]+$|^[0-9]+([.][0-9]+)?%$/ {
282+
perc = $0;
283+
if (perc ~ /%$/) {
284+
gsub(/%$/, "", perc);
285+
perc = perc / 100;
298286
}
299-
/^[0-9]+([.][0-9]+)?[a-zA-Z]+$/ {
300-
printf "{ absolute, \"%s\" }\n", $0;
301-
next;
302-
}
303-
{
304-
printf "error: unexpected input for vm_memory_high_watermark: %s\n", $0;
287+
if (perc > 1.0 || perc <= 0.0) {
288+
printf "error: invalid percentage for vm_memory_high_watermark: %s (must be > 0%%, <= 100%%)\n", $0 > "/dev/stderr";
305289
exit 1;
306290
}
307-
' <(echo "$RABBITMQ_VM_MEMORY_HIGH_WATERMARK")
308-
)"
309-
elif [ -n "$memLimitB" ]; then
310-
# if there is a cgroup limit, default to 40% of _that_ (as recommended by upstream)
311-
vmMemoryHighWatermark="{ absolute, $(awk -v lim="$memLimitB" 'BEGIN { printf "%.0f\n", lim * 0.4; exit }') }"
312-
# otherwise let the default behavior win (40% of the total available)
313-
fi
291+
printf "%0.03f\n", perc;
292+
next;
293+
}
294+
/^[0-9]+$/ {
295+
printf "{ absolute, %s }\n", $0;
296+
next;
297+
}
298+
/^[0-9]+([.][0-9]+)?[a-zA-Z]+$/ {
299+
printf "{ absolute, \"%s\" }\n", $0;
300+
next;
301+
}
302+
{
303+
printf "error: unexpected input for vm_memory_high_watermark: %s\n", $0;
304+
exit 1;
305+
}
306+
' <(echo "$RABBITMQ_VM_MEMORY_HIGH_WATERMARK")
307+
)"
314308
if [ "$vmMemoryHighWatermark" ]; then
315309
# https://www.rabbitmq.com/memory.html#memsup-usage
316310
rabbitConfig+=( "{ vm_memory_high_watermark, $vmMemoryHighWatermark }" )
317311
fi
318-
elif [ "${RABBITMQ_VM_MEMORY_HIGH_WATERMARK:-}" ]; then
319-
echo >&2 'warning: RABBITMQ_VM_MEMORY_HIGH_WATERMARK was specified, but current system memory or cgroup memory limit cannot be determined'
320-
echo >&2 ' (so "vm_memory_high_watermark" will not be set)'
321312
fi
322313

323314
if [ "$haveSslConfig" ]; then

3.6/debian/docker-entrypoint.sh

Lines changed: 32 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -269,55 +269,46 @@ if [ "$1" = 'rabbitmq-server' ] && [ "$shouldWriteConfig" ]; then
269269
}
270270
}' /sys/fs/cgroup/memory/memory.limit_in_bytes)"
271271
fi
272-
if [ -n "$memTotalKb" ] || [ -n "$memLimitB" ]; then
272+
if [ -n "$memLimitB" ]; then
273+
# if we have a cgroup memory limit, let's inform RabbitMQ of what it is (so it can calculate vm_memory_high_watermark properly)
274+
# https://github.com/rabbitmq/rabbitmq-server/pull/1234
275+
rabbitConfig+=( "{ total_memory_available_override_value, $memLimitB }" )
276+
fi
277+
if [ "${RABBITMQ_VM_MEMORY_HIGH_WATERMARK:-}" ]; then
273278
# https://github.com/docker-library/rabbitmq/pull/105#issuecomment-242165822
274-
vmMemoryHighWatermark=
275-
if [ "${RABBITMQ_VM_MEMORY_HIGH_WATERMARK:-}" ]; then
276-
vmMemoryHighWatermark="$(
277-
awk -v lim="$memLimitB" '
278-
/^[0-9]*[.][0-9]+$|^[0-9]+([.][0-9]+)?%$/ {
279-
perc = $0;
280-
if (perc ~ /%$/) {
281-
gsub(/%$/, "", perc);
282-
perc = perc / 100;
283-
}
284-
if (perc > 1.0 || perc <= 0.0) {
285-
printf "error: invalid percentage for vm_memory_high_watermark: %s (must be > 0%%, <= 100%%)\n", $0 > "/dev/stderr";
286-
exit 1;
287-
}
288-
if (lim) {
289-
printf "{ absolute, %d }\n", lim * perc;
290-
} else {
291-
printf "%0.03f\n", perc;
292-
}
293-
next;
294-
}
295-
/^[0-9]+$/ {
296-
printf "{ absolute, %s }\n", $0;
297-
next;
279+
vmMemoryHighWatermark="$(
280+
awk '
281+
/^[0-9]*[.][0-9]+$|^[0-9]+([.][0-9]+)?%$/ {
282+
perc = $0;
283+
if (perc ~ /%$/) {
284+
gsub(/%$/, "", perc);
285+
perc = perc / 100;
298286
}
299-
/^[0-9]+([.][0-9]+)?[a-zA-Z]+$/ {
300-
printf "{ absolute, \"%s\" }\n", $0;
301-
next;
302-
}
303-
{
304-
printf "error: unexpected input for vm_memory_high_watermark: %s\n", $0;
287+
if (perc > 1.0 || perc <= 0.0) {
288+
printf "error: invalid percentage for vm_memory_high_watermark: %s (must be > 0%%, <= 100%%)\n", $0 > "/dev/stderr";
305289
exit 1;
306290
}
307-
' <(echo "$RABBITMQ_VM_MEMORY_HIGH_WATERMARK")
308-
)"
309-
elif [ -n "$memLimitB" ]; then
310-
# if there is a cgroup limit, default to 40% of _that_ (as recommended by upstream)
311-
vmMemoryHighWatermark="{ absolute, $(awk -v lim="$memLimitB" 'BEGIN { printf "%.0f\n", lim * 0.4; exit }') }"
312-
# otherwise let the default behavior win (40% of the total available)
313-
fi
291+
printf "%0.03f\n", perc;
292+
next;
293+
}
294+
/^[0-9]+$/ {
295+
printf "{ absolute, %s }\n", $0;
296+
next;
297+
}
298+
/^[0-9]+([.][0-9]+)?[a-zA-Z]+$/ {
299+
printf "{ absolute, \"%s\" }\n", $0;
300+
next;
301+
}
302+
{
303+
printf "error: unexpected input for vm_memory_high_watermark: %s\n", $0;
304+
exit 1;
305+
}
306+
' <(echo "$RABBITMQ_VM_MEMORY_HIGH_WATERMARK")
307+
)"
314308
if [ "$vmMemoryHighWatermark" ]; then
315309
# https://www.rabbitmq.com/memory.html#memsup-usage
316310
rabbitConfig+=( "{ vm_memory_high_watermark, $vmMemoryHighWatermark }" )
317311
fi
318-
elif [ "${RABBITMQ_VM_MEMORY_HIGH_WATERMARK:-}" ]; then
319-
echo >&2 'warning: RABBITMQ_VM_MEMORY_HIGH_WATERMARK was specified, but current system memory or cgroup memory limit cannot be determined'
320-
echo >&2 ' (so "vm_memory_high_watermark" will not be set)'
321312
fi
322313

323314
if [ "$haveSslConfig" ]; then

0 commit comments

Comments
 (0)