From 53a5cc057be8a5461b8d9b9deba2d9e40fc79987 Mon Sep 17 00:00:00 2001 From: Roy Keene Date: Mon, 9 Apr 2018 19:55:31 -0500 Subject: [PATCH 1/4] Added start of auto-vacuuming Docker container --- docker/node/entry.sh | 46 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/docker/node/entry.sh b/docker/node/entry.sh index 02d38d098f..0df933b0f0 100644 --- a/docker/node/entry.sh +++ b/docker/node/entry.sh @@ -1,5 +1,8 @@ #!/bin/bash +PATH="${PATH:-/bin}:/usr/bin" +export PATH + set -euo pipefail IFS=$'\n\t' @@ -18,10 +21,51 @@ case "${network}" in esac nanodir="${HOME}/RaiBlocks${dirSuffix}" +dbFile="${nanodir}/data.ldb" mkdir -p "${nanodir}" if [ ! -f "${nanodir}/config.json" ]; then echo "Config File not found, adding default." cp "/usr/share/raiblocks/config/${network}.json" "${nanodir}/config.json" fi -/usr/bin/rai_node --daemon +pid='' +firstTimeComplete='' +while true; do + if [ -n "${firstTimeComplete}" ]; then + sleep 10 + fi + firstTimeComplete='true' + + if [ -n "${pid}" ]; then + if ! kill -0 "${pid}" >/dev/null 2>/dev/null; then + pid='' + fi + fi + + if [ -z "${pid}" ]; then + /usr/bin/rai_node --daemon & + pid="$!" + fi + + if [ -z "${pid}" ]; then + continue + fi + + if [ ! -f "${dbFile}" ]; then + continue + fi + + dbFileSize="$(stat -c %s "${dbFile}" 2>/dev/null)" + if [ "${dbFileSize}" -gt $[1024 * 1024 * 1024 * 20] ]; then + echo "ERROR: Database size grew above 20GB (size = ${dbFileSize})" >&2 + + while [ -n "${pid}" ]; do + kill "${pid}" >/dev/null 2>/dev/null + if ! kill -0 "${pid}" >/dev/null 2>/dev/null; then + pid='' + fi + done + + /usr/bin/rai_node --vacuum + fi +done From 8fbb7409e76460c6b99c510e960168ec7b70468a Mon Sep 17 00:00:00 2001 From: Roy Keene Date: Mon, 9 Apr 2018 19:58:09 -0500 Subject: [PATCH 2/4] Remove redundant path --- docker/node/entry.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/node/entry.sh b/docker/node/entry.sh index 0df933b0f0..63bf83e943 100644 --- a/docker/node/entry.sh +++ b/docker/node/entry.sh @@ -43,7 +43,7 @@ while true; do fi if [ -z "${pid}" ]; then - /usr/bin/rai_node --daemon & + rai_node --daemon & pid="$!" fi @@ -66,6 +66,6 @@ while true; do fi done - /usr/bin/rai_node --vacuum + rai_node --vacuum fi done From 5b92ced4dd055605d24aecb9f873e8a3c432ede8 Mon Sep 17 00:00:00 2001 From: Roy Keene Date: Tue, 10 Apr 2018 21:22:09 -0500 Subject: [PATCH 3/4] Fix issue where "kill" returns non-zero causing the init process to exit --- docker/node/entry.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/node/entry.sh b/docker/node/entry.sh index 63bf83e943..c6bc32b265 100644 --- a/docker/node/entry.sh +++ b/docker/node/entry.sh @@ -60,7 +60,7 @@ while true; do echo "ERROR: Database size grew above 20GB (size = ${dbFileSize})" >&2 while [ -n "${pid}" ]; do - kill "${pid}" >/dev/null 2>/dev/null + kill "${pid}" >/dev/null 2>/dev/null || : if ! kill -0 "${pid}" >/dev/null 2>/dev/null; then pid='' fi From e4e42e7421487683e66a10e0ff15749eea70444c Mon Sep 17 00:00:00 2001 From: Roy Keene Date: Tue, 10 Apr 2018 22:24:51 -0500 Subject: [PATCH 4/4] Vacuum the DB before starting the node --- docker/node/entry.sh | 38 ++++++++++++++++---------------------- 1 file changed, 16 insertions(+), 22 deletions(-) diff --git a/docker/node/entry.sh b/docker/node/entry.sh index c6bc32b265..1db90e298f 100644 --- a/docker/node/entry.sh +++ b/docker/node/entry.sh @@ -36,6 +36,22 @@ while true; do fi firstTimeComplete='true' + if [ -f "${dbFile}" ]; then + dbFileSize="$(stat -c %s "${dbFile}" 2>/dev/null)" + if [ "${dbFileSize}" -gt $[1024 * 1024 * 1024 * 20] ]; then + echo "ERROR: Database size grew above 20GB (size = ${dbFileSize})" >&2 + + while [ -n "${pid}" ]; do + kill "${pid}" >/dev/null 2>/dev/null || : + if ! kill -0 "${pid}" >/dev/null 2>/dev/null; then + pid='' + fi + done + + rai_node --vacuum + fi + fi + if [ -n "${pid}" ]; then if ! kill -0 "${pid}" >/dev/null 2>/dev/null; then pid='' @@ -46,26 +62,4 @@ while true; do rai_node --daemon & pid="$!" fi - - if [ -z "${pid}" ]; then - continue - fi - - if [ ! -f "${dbFile}" ]; then - continue - fi - - dbFileSize="$(stat -c %s "${dbFile}" 2>/dev/null)" - if [ "${dbFileSize}" -gt $[1024 * 1024 * 1024 * 20] ]; then - echo "ERROR: Database size grew above 20GB (size = ${dbFileSize})" >&2 - - while [ -n "${pid}" ]; do - kill "${pid}" >/dev/null 2>/dev/null || : - if ! kill -0 "${pid}" >/dev/null 2>/dev/null; then - pid='' - fi - done - - rai_node --vacuum - fi done