From 3967d795ae9e2ae30d49ebe3fb1b25cf6809e6db Mon Sep 17 00:00:00 2001 From: Andriy Zavada Date: Thu, 21 Aug 2025 21:15:05 +0300 Subject: [PATCH 1/4] riak-deadmanshand, to facilitate full riak restart from wm_cluster code This standalone script is intended to be started separately, possibly from a systemd unit-file. It will check, every 3 sec, for presence of a file named RESTART_RIAK in /run/riak, and execute `riak stop; riak start` if that file exists. The idea is to enable a full restart of riak initiated by an operator action taken remotely in riak_control (i.e., over http), in a situation when `riak restart` is insufficient (importantly, restarting riak this way will not cause cuttlefish to read and process riak.conf and advanced.config). This idea becomes especially useful in combination with remote editing and pushing advanced.config and riak.conf, implemented in riak_control, allowing operators entirely remotely to configure riak nodes and do a rolling restart subsequently, all without a need to have ssh and root access to riak boxes. --- rebar.config | 1 + rel/files/riak-deadmanshand | 29 +++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100755 rel/files/riak-deadmanshand diff --git a/rebar.config b/rebar.config index 3bd14c1e..7c114cf0 100644 --- a/rebar.config +++ b/rebar.config @@ -77,6 +77,7 @@ {template, "rel/files/riak-chkconfig", "bin/riak-chkconfig"}, {template, "rel/files/riak-repl", "bin/riak-repl"}, {template, "rel/files/riak", "usr/bin/riak"}, + {template, "rel/files/riak-deadmanshand", "bin/riak-deadmanshand"}, {copy, "rel/files/hooks/check_ulimit", "bin/hooks/check_ulimit"}, {copy, "rel/files/hooks/erl_codeloadingmode","bin/hooks/erl_codeloadingmode"}, diff --git a/rel/files/riak-deadmanshand b/rel/files/riak-deadmanshand new file mode 100755 index 00000000..01066d3e --- /dev/null +++ b/rel/files/riak-deadmanshand @@ -0,0 +1,29 @@ +#!/bin/sh + +p=$(pwd) + +if [ -z "{{pid_dir}}" ]; then + ## this is locally built rel or devrel + b=$(cd $(dirname "$0")/.. && pwd -P) + d=$b + cd $b +else + ## packaged + d={{pid_dir}} + ## no cd: platform_bin_dir is absolute +fi + +while true; do + sleep 3 + if [ -r $d/RESTART_RIAK ]; then + {{platform_bin_dir}}/riak stop + {{platform_bin_dir}}/riak start + rm -f $d/RESTART_RIAK + fi + if [ -r $d/STOP_SELF ]; then + rm -f $d/STOP_SELF + break + fi +done + +cd $p From 63a6203a85d146fbc00acc7dcc585aefc7d00158 Mon Sep 17 00:00:00 2001 From: Andriy Zavada Date: Sun, 29 Mar 2026 02:16:04 +0200 Subject: [PATCH 2/4] welcome new app riak_admin_api --- apps/riak/src/riak.app.src | 1 + rebar.config | 7 +- rebar.lock | 145 ---------------------------------- rel/files/riak-admin | 10 +++ rel/gen_dev | 2 + rel/vars.config | 2 + rel/vars/dev_vars.config.src | 2 + rel/vars/perf_vars.config.src | 2 + 8 files changed, 24 insertions(+), 147 deletions(-) delete mode 100644 rebar.lock diff --git a/apps/riak/src/riak.app.src b/apps/riak/src/riak.app.src index 093911f8..8d915f56 100644 --- a/apps/riak/src/riak.app.src +++ b/apps/riak/src/riak.app.src @@ -15,6 +15,7 @@ runtime_tools, cluster_info, riak_kv, + riak_admin_api, riak_auth_mods ]}, {env, []} diff --git a/rebar.config b/rebar.config index 7c114cf0..ee2e4ffd 100644 --- a/rebar.config +++ b/rebar.config @@ -9,7 +9,8 @@ {deps, [ {riak_logger, {git, "https://github.com/OpenRiak/riak_logger", {branch, "openriak-3.4"}}}, {riak_kv, {git, "https://github.com/OpenRiak/riak_kv", {branch, "openriak-4.0"}}}, - {riak_auth_mods, {git, "https://github.com/OpenRiak/riak_auth_mods", {branch, "openriak-3.4"}}} + {riak_auth_mods, {git, "https://github.com/OpenRiak/riak_auth_mods", {branch, "openriak-3.4"}}}, + {riak_admin_api, {git, "https://github.com/TI-Tokyo/riak_admin_api", {branch, "openriak-4.0"}}} ]}. {project_plugins, [ @@ -33,7 +34,8 @@ eleveldb_multi, leveled, leveled_multi, - multi_backend + multi_backend, + riak_admin_api ]} ]}. @@ -57,6 +59,7 @@ riak_core, riak_kv, riak_api, + riak_admin_api, cluster_info, riak_auth_mods, riak_logger]}, diff --git a/rebar.lock b/rebar.lock deleted file mode 100644 index e1b0012d..00000000 --- a/rebar.lock +++ /dev/null @@ -1,145 +0,0 @@ -[{<<"basho_stats">>, - {git,"https://github.com/OpenRiak/basho_stats.git", - {ref,"189e194515f50dc00989d1cc8fe7ae440ffc0f03"}}, - 2}, - {<<"bitcask">>, - {git,"https://github.com/OpenRiak/bitcask.git", - {ref,"8c12bc5e920846ff01f72cb2d115483b8825181d"}}, - 1}, - {<<"canola">>, - {git,"https://github.com/OpenRiak/canola", - {ref,"5603a336cc5b2736730ae84946fa9170ce05ca4c"}}, - 1}, - {<<"clique">>, - {git,"https://github.com/OpenRiak/clique.git", - {ref,"90d72664ea7e7550403d44f3f03204839194eb93"}}, - 2}, - {<<"cluster_info">>, - {git,"https://github.com/OpenRiak/cluster_info.git", - {ref,"605991c54396de8d79db2dce3dd5bcb99a941a4b"}}, - 2}, - {<<"cuttlefish">>, - {git,"https://github.com/OpenRiak/cuttlefish.git", - {ref,"3d66fbdc6f1fe4fa551a86b25d28e8eb31e34122"}}, - 3}, - {<<"eleveldb">>, - {git,"https://github.com/OpenRiak/eleveldb.git", - {ref,"cd6b813950e6c635daee51f397b88411dbbd8608"}}, - 2}, - {<<"eqwalizer_support">>, - {git_subdir,"https://github.com/OpenRiak/eqwalizer.git", - {ref,"759af3c1ab1062bcafbc4a528634f958d85a69f0"}, - "eqwalizer_support"}, - 2}, - {<<"exometer_core">>, - {git,"https://github.com/OpenRiak/exometer_core.git", - {ref,"85db7687a3e43e6a451bf0778860a547caa2faa0"}}, - 2}, - {<<"ezstd">>, - {git,"https://github.com/OpenRiak/zstd-erlang", - {ref,"c55be8e288949ab19067c0aa9f7d098fd4119468"}}, - 3}, - {<<"getopt">>, - {git,"https://github.com/OpenRiak/getopt.git", - {ref,"7beaebb83f0118284e32177b734d72a7a6ce4ed1"}}, - 4}, - {<<"hut">>, - {git,"https://github.com/OpenRiak/hut.git", - {ref,"d1e1b4851f4efd1e7b45fdfe4b9a7d089c032442"}}, - 3}, - {<<"ibrowse">>, - {git,"https://github.com/OpenRiak/ibrowse.git", - {ref,"3fd17dd33c474800a4d02ad4e5ae9d4db45e0335"}}, - 2}, - {<<"kv_index_tictactree">>, - {git,"https://github.com/OpenRiak/kv_index_tictactree.git", - {ref,"c534c9f915edda6d8d1d35d9f965b18aab18ed15"}}, - 1}, - {<<"leveled">>, - {git,"https://github.com/OpenRiak/leveled.git", - {ref,"c5122b9b0be9edd32acd4a1f8c3ac12a8aabeb59"}}, - 2}, - {<<"lz4">>, - {git,"https://github.com/OpenRiak/erlang-lz4", - {ref,"29d286efa361b3338846aa2113d142d993cc6138"}}, - 3}, - {<<"mochiweb">>, - {git,"https://github.com/OpenRiak/mochiweb.git", - {ref,"b5ffed149b27174bb9b28644ae2cf2892837341e"}}, - 2}, - {<<"parse_trans">>, - {git,"https://github.com/OpenRiak/parse_trans.git", - {ref,"160498e19878fd383fac25e72b8565dee3aeffa7"}}, - 3}, - {<<"pbkdf2">>, - {git,"https://github.com/OpenRiak/erlang-pbkdf2.git", - {ref,"901468ec21f8f256c7cdf78a2de41d76b26753b2"}}, - 2}, - {<<"poolboy">>, - {git,"https://github.com/OpenRiak/poolboy.git", - {ref,"05648efcb96a58cafdeadeb4072cb6c3ada0ac66"}}, - 2}, - {<<"recon">>, - {git,"https://github.com/OpenRiak/recon", - {ref,"36590aa24784d13f4ae967e5715249c82956e95a"}}, - 1}, - {<<"redbug">>, - {git,"https://github.com/OpenRiak/redbug", - {ref,"838ff3bdfa05cb2974b512a5cffc8d730b45cc44"}}, - 1}, - {<<"rhc">>, - {git,"https://github.com/OpenRiak/riak-erlang-http-client", - {ref,"4123962bea52240afed6a8f48cf87a3ada30363c"}}, - 1}, - {<<"riak_api">>, - {git,"https://github.com/OpenRiak/riak_api.git", - {ref,"87e8b88248b2e7e586b1f5bc003f51080b8c6a69"}}, - 1}, - {<<"riak_auth_mods">>, - {git,"https://github.com/OpenRiak/riak_auth_mods", - {ref,"bd867256b10dca3831241b2b46a54a6627b52b51"}}, - 0}, - {<<"riak_core">>, - {git,"https://github.com/OpenRiak/riak_core.git", - {ref,"35958f66579e4611a3817ab009adeb707cc12e4f"}}, - 1}, - {<<"riak_dt">>, - {git,"https://github.com/OpenRiak/riak_dt.git", - {ref,"72b9bce98623a15a4d5dec73fd5be17de73a55b7"}}, - 1}, - {<<"riak_kv">>, - {git,"https://github.com/OpenRiak/riak_kv", - {ref,"222cdb88bc3dcd8f4ef08f93b0a7bc56e84d923f"}}, - 0}, - {<<"riak_logger">>, - {git,"https://github.com/OpenRiak/riak_logger", - {ref,"7e48e4f693b49495f47016a7756c9b132869b082"}}, - 0}, - {<<"riak_pb">>, - {git,"https://github.com/OpenRiak/riak_pb.git", - {ref,"5f6e994cd45db5bdb254a515babb48d38ead485a"}}, - 1}, - {<<"riak_sysmon">>, - {git,"https://github.com/OpenRiak/riak_sysmon.git", - {ref,"5b8b5469781de784b82a471f27dbfc6296b89ca8"}}, - 2}, - {<<"riakc">>, - {git,"https://github.com/OpenRiak/riak-erlang-client", - {ref,"69c8d51857cc5705f594143912264d32fe2b9a8a"}}, - 2}, - {<<"setup">>, - {git,"https://github.com/OpenRiak/setup.git", - {ref,"76133196bfe9903f8b7914ce3a85d9cffff5dfc1"}}, - 3}, - {<<"sext">>, - {git,"https://github.com/OpenRiak/sext.git", - {ref,"ab06f84bdd97eb9354553ab64270988b60e09ad6"}}, - 1}, - {<<"sidejob">>, - {git,"https://github.com/OpenRiak/sidejob.git", - {ref,"3b247f5f8fb67d6b27bd0abed00a1135b416aaca"}}, - 1}, - {<<"webmachine">>, - {git,"https://github.com/OpenRiak/webmachine.git", - {ref,"1a0c47adacc84fe1e3b28afb991b60832afae343"}}, - 2}]. diff --git a/rel/files/riak-admin b/rel/files/riak-admin index 8b67e82a..cd3f1089 100755 --- a/rel/files/riak-admin +++ b/rel/files/riak-admin @@ -51,6 +51,7 @@ usage() { echo " reip | reip_manual | erl-reload | wait-for-service | " echo " ringready | transfers | force-remove | down |" echo " cluster-info | member-status | ring-status | vnode-status |" + echo " admin-api |" echo " tictacaae |" echo " aae-status | diag | stat | status | transfer-limit | reformat-indexes |" echo " top [-interval N] [-sort reductions|memory|msg_q] [-lines N] |" @@ -623,6 +624,11 @@ tictacaae_admin() rpc riak_kv_console command $SCRIPT tictacaae "$@" } +admin_api_admin() +{ + rpc riak_admin_api_console command $SCRIPT "admin-api" "$@" +} + # Check the first argument for instructions @@ -1039,6 +1045,10 @@ case "$1" in shift tictacaae_admin "$@" ;; + admin-api) + shift + admin_api_admin "$@" + ;; *) usage exit 1 diff --git a/rel/gen_dev b/rel/gen_dev index b48c621f..6c8e1996 100755 --- a/rel/gen_dev +++ b/rel/gen_dev @@ -20,6 +20,7 @@ CM_PORT=$(($BASE + 6)) PBPORT=$(($BASE + 7)) WEBPORT=$(($BASE + 8)) HANDOFFPORT=$(($BASE + 9)) +ADMINAPIPORT=$((BASE + 4)) PLATFORM_BASE_DIR="$BUILD_ROOT/dev/$NAME/riak" echo "Generating $NAME - node='$NODE' pbc=$PBPORT http=$WEBPORT handoff=$HANDOFFPORT" @@ -27,5 +28,6 @@ sed -e "s|@PLATFORM_BASE_DIR@|$PLATFORM_BASE_DIR|" \ -e "s/@NODE@/$NODE/" \ -e "s/@PBPORT@/$PBPORT/" \ -e "s/@WEBPORT@/$WEBPORT/" \ + -e "s/@ADMINAPIPORT@/$ADMINAPIPORT/" \ -e "s/@CM_PORT@/$CM_PORT/" \ -e "s/@HANDOFFPORT@/$HANDOFFPORT/" < $TEMPLATE > $VARFILE diff --git a/rel/vars.config b/rel/vars.config index d6a4e81b..ccfa97a4 100644 --- a/rel/vars.config +++ b/rel/vars.config @@ -24,6 +24,8 @@ {handoff_ip, "0.0.0.0"}. {pb_ip, "127.0.0.1"}. {pb_port, 8087}. +{admin_api_ip, "0.0.0.0"}. +{admin_api_port, 8084}. {storage_backend, "bitcask"}. {sasl_error_log, "{{platform_log_dir}}/sasl-error.log"}. {sasl_log_dir, "{{platform_log_dir}}/sasl"}. diff --git a/rel/vars/dev_vars.config.src b/rel/vars/dev_vars.config.src index 1446d56b..9157f3cd 100644 --- a/rel/vars/dev_vars.config.src +++ b/rel/vars/dev_vars.config.src @@ -26,6 +26,8 @@ {handoff_port, @HANDOFFPORT@}. {pb_ip, "127.0.0.1"}. {pb_port, @PBPORT@}. +{admin_api_ip, "0.0.0.0"}. +{admin_api_port, @ADMINAPIPORT@}. {storage_backend, "bitcask"}. {sasl_error_log, "{{platform_log_dir}}/sasl-error.log"}. {sasl_log_dir, "{{platform_log_dir}}/sasl"}. diff --git a/rel/vars/perf_vars.config.src b/rel/vars/perf_vars.config.src index 01c8c7b0..d12783f4 100644 --- a/rel/vars/perf_vars.config.src +++ b/rel/vars/perf_vars.config.src @@ -19,6 +19,8 @@ {handoff_port, 8090}. {pb_ip, "127.0.0.1"}. {pb_port, 8081}. +{admin_api_ip, "0.0.0.0"}. +{admin_api_port, 8084}. {storage_backend, "yessir"}. {ring_state_dir, "{{platform_data_dir}}/ring"}. {bitcask_data_root, "{{platform_data_dir}}/bitcask"}. From ec59aee20f7aeaf910dfa48a4f24e3e835dcf50e Mon Sep 17 00:00:00 2001 From: Andriy Zavada Date: Fri, 15 May 2026 17:09:23 +0100 Subject: [PATCH 3/4] drop mochiweb, webmachine from relx release applist, too --- rebar.config | 2 -- 1 file changed, 2 deletions(-) diff --git a/rebar.config b/rebar.config index ee2e4ffd..ab5d0d36 100644 --- a/rebar.config +++ b/rebar.config @@ -51,8 +51,6 @@ observer, runtime_tools, xmerl, - mochiweb, - webmachine, basho_stats, bitcask, clique, From 7f0a9cc2a6ec4063dc544a2829e1fcbed17a4a25 Mon Sep 17 00:00:00 2001 From: Andriy Zavada Date: Mon, 8 Jun 2026 18:42:01 +0300 Subject: [PATCH 4/4] admin-api schema defaults in pkg/vars.config --- rel/pkg/alpine/vars.config | 2 ++ rel/pkg/deb/vars.config | 2 ++ rel/pkg/rpm/vars.config.part | 2 ++ 3 files changed, 6 insertions(+) diff --git a/rel/pkg/alpine/vars.config b/rel/pkg/alpine/vars.config index 50852e43..22c20ee8 100644 --- a/rel/pkg/alpine/vars.config +++ b/rel/pkg/alpine/vars.config @@ -24,6 +24,8 @@ {handoff_port, 8099}. {pb_ip, "127.0.0.1"}. {pb_port, 8087}. +{admin_api_ip, "0.0.0.0"}. +{admin_api_port, 8084}. {storage_backend, "bitcask"}. diff --git a/rel/pkg/deb/vars.config b/rel/pkg/deb/vars.config index 0e928fc7..e0b428a1 100644 --- a/rel/pkg/deb/vars.config +++ b/rel/pkg/deb/vars.config @@ -24,6 +24,8 @@ {handoff_port, 8099}. {pb_ip, "127.0.0.1"}. {pb_port, 8087}. +{admin_api_ip, "0.0.0.0"}. +{admin_api_port, 8084}. {storage_backend, "bitcask"}. diff --git a/rel/pkg/rpm/vars.config.part b/rel/pkg/rpm/vars.config.part index ffe8b577..3c6f06e3 100644 --- a/rel/pkg/rpm/vars.config.part +++ b/rel/pkg/rpm/vars.config.part @@ -16,6 +16,8 @@ {handoff_port, 8099}. {pb_ip, "127.0.0.1"}. {pb_port, 8087}. +{admin_api_ip, "0.0.0.0"}. +{admin_api_port, 8084}. {storage_backend, "bitcask"}.