diff options
| author | Dan Engelbrecht <[email protected]> | 2023-11-27 05:20:24 -0500 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-11-27 11:20:24 +0100 |
| commit | 6171e981b445b1850ed7c5ba7a2a5901f2227fba (patch) | |
| tree | c037df9b2cb89d1777b92d656d5f66e621af4012 /src/zen/cmds/admin_cmd.cpp | |
| parent | Add GC Cancel/Stop (#568) (diff) | |
| download | archived-zen-6171e981b445b1850ed7c5ba7a2a5901f2227fba.tar.xz archived-zen-6171e981b445b1850ed7c5ba7a2a5901f2227fba.zip | |
gc stop command (#569)v0.2.36-pre2
- Feature: New endpoint `/admin/gc-stop` to cancel a running garbage collect operation
- Feature: Added `zen gc-stop` command to cancel a running garbage collect operation
- Bugfix: GCv2 - make sure to discover all projects and oplogs before checking for expired data
Diffstat (limited to 'src/zen/cmds/admin_cmd.cpp')
| -rw-r--r-- | src/zen/cmds/admin_cmd.cpp | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/src/zen/cmds/admin_cmd.cpp b/src/zen/cmds/admin_cmd.cpp index 5786ae6c5..3422c6880 100644 --- a/src/zen/cmds/admin_cmd.cpp +++ b/src/zen/cmds/admin_cmd.cpp @@ -254,6 +254,60 @@ GcStatusCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) return 1; } +GcStopCommand::GcStopCommand() +{ + m_Options.add_options()("h,help", "Print help"); + m_Options.add_option("", "u", "hosturl", "Host URL", cxxopts::value(m_HostName)->default_value(""), "<hosturl>"); +} + +GcStopCommand::~GcStopCommand() +{ +} + +int +GcStopCommand::Run(const ZenCliOptions& GlobalOptions, int argc, char** argv) +{ + ZEN_UNUSED(GlobalOptions); + + if (!ParseOptions(argc, argv)) + { + return 0; + } + + m_HostName = ResolveTargetHostSpec(m_HostName); + + if (m_HostName.empty()) + { + throw OptionParseException("unable to resolve server specification"); + } + + cpr::Session Session; + Session.SetUrl({fmt::format("{}/admin/gc-stop", m_HostName)}); + cpr::Response Result = Session.Post(); + + if (static_cast<HttpResponseCode>(Result.status_code) == HttpResponseCode::Accepted) + { + ZEN_CONSOLE("OK: {}", "Cancel request accepted"); + return 0; + } + else if (zen::IsHttpSuccessCode(Result.status_code)) + { + ZEN_CONSOLE("OK: {}", "No GC running"); + return 0; + } + + if (Result.status_code) + { + ZEN_ERROR("GC status failed: {}: {} ({})", Result.status_code, Result.reason, Result.text); + } + else + { + ZEN_ERROR("GC status failed: {}", Result.error.message); + } + + return 1; +} + //////////////////////////////////////////// JobCommand::JobCommand() |