diff --git a/ydb/core/viewer/vdisk_evict.h b/ydb/core/viewer/vdisk_evict.h index 624762654ad1..3a56f0f8d1e8 100644 --- a/ydb/core/viewer/vdisk_evict.h +++ b/ydb/core/viewer/vdisk_evict.h @@ -24,9 +24,6 @@ class TJsonVDiskEvict : public TViewerPipeClient { protected: using TThis = TJsonVDiskEvict; using TBase = TViewerPipeClient; - IViewer* Viewer; - NMon::TEvHttpInfo::TPtr Event; - ui32 Timeout = 0; ui32 ActualRetries = 0; ui32 Retries = 0; TDuration RetryPeriod = TDuration::MilliSeconds(500); @@ -42,23 +39,19 @@ class TJsonVDiskEvict : public TViewerPipeClient { public: TJsonVDiskEvict(IViewer* viewer, NMon::TEvHttpInfo::TPtr& ev) - : Viewer(viewer) - , Event(ev) + : TViewerPipeClient(viewer, ev) {} inline ui32 GetRequiredParam(const TCgiParameters& params, const std::string& name, ui32& obj) { if (!TryFromString(params.Get(name), obj)) { - TBase::Send(Event->Sender, new NMon::TEvHttpInfoRes( - Viewer->GetHTTPBADREQUEST(Event->Get(), "text/plain", TStringBuilder() << "field '" << name << "' or 'vdisk_id' are required"), - 0, NMon::IEvHttpInfoRes::EContentType::Custom)); + TBase::ReplyAndPassAway(GetHTTPBADREQUEST("text/plain", TStringBuilder() << "field '" << name << "' is required")); return false; } return true; } void Bootstrap() override { - const auto& params(Event->Get()->Request.GetParams()); - TString vdisk_id = params.Get("vdisk_id"); + TString vdisk_id = Params.Get("vdisk_id"); if (vdisk_id) { TVector parts = StringSplitter(vdisk_id).Split('-').SkipEmpty(); if (parts.size() == 5) { @@ -71,40 +64,33 @@ class TJsonVDiskEvict : public TViewerPipeClient { if (parts.size() != 5 || GroupId == Max() || GroupGeneration == Max() || FailRealmIdx == Max() || FailDomainIdx == Max() || VdiskIdx == Max()) { - TBase::Send(Event->Sender, new NMon::TEvHttpInfoRes( - Viewer->GetHTTPBADREQUEST(Event->Get(), "text/plain", TStringBuilder() << "Unable to parse the 'vdisk_id' parameter"), - 0, NMon::IEvHttpInfoRes::EContentType::Custom)); - return PassAway(); + return TBase::ReplyAndPassAway(GetHTTPBADREQUEST("text/plain", "Unable to parse the 'vdisk_id' parameter"), "BadRequest"); } - } else if (!GetRequiredParam(params, "group_id", GroupId) - || !GetRequiredParam(params, "group_generation_id", GroupGeneration) - || !GetRequiredParam(params, "fail_realm_idx", FailRealmIdx) - || !GetRequiredParam(params, "fail_domain_idx", FailDomainIdx) - || !GetRequiredParam(params, "vdisk_idx", VdiskIdx)) { - return PassAway(); + } else if (!GetRequiredParam(Params, "group_id", GroupId) + || !GetRequiredParam(Params, "group_generation_id", GroupGeneration) + || !GetRequiredParam(Params, "fail_realm_idx", FailRealmIdx) + || !GetRequiredParam(Params, "fail_domain_idx", FailDomainIdx) + || !GetRequiredParam(Params, "vdisk_idx", VdiskIdx)) { + return; + //return TBase::ReplyAndPassAway(GetHTTPBADREQUEST("text/plain", "Parameter 'vdisk_id' is required"), "BadRequest"); } if (Event->Get()->Request.GetMethod() != HTTP_METHOD_POST) { - TBase::Send(Event->Sender, new NMon::TEvHttpInfoRes( - Viewer->GetHTTPBADREQUEST(Event->Get(), "text/plain", "Only POST method is allowed"), - 0, NMon::IEvHttpInfoRes::EContentType::Custom)); - return PassAway(); + return TBase::ReplyAndPassAway(GetHTTPBADREQUEST("text/plain", "Only POST method is allowed"), "BadRequest"); } - TBase::InitConfig(params); - Force = FromStringWithDefault(params.Get("force"), false); - Timeout = FromStringWithDefault(params.Get("timeout"), 10000); - Retries = FromStringWithDefault(params.Get("retries"), 0); - RetryPeriod = TDuration::MilliSeconds(FromStringWithDefault(params.Get("retry_period"), RetryPeriod.MilliSeconds())); + Force = FromStringWithDefault(Params.Get("force"), false); + Retries = FromStringWithDefault(Params.Get("retries"), 0); + RetryPeriod = TDuration::MilliSeconds(FromStringWithDefault(Params.Get("retry_period"), RetryPeriod.MilliSeconds())); if (Force && !Viewer->CheckAccessAdministration(Event->Get())) { - TBase::Send(Event->Sender, new NMon::TEvHttpInfoRes(Viewer->GetHTTPFORBIDDEN(Event->Get()), 0, NMon::IEvHttpInfoRes::EContentType::Custom)); + return TBase::ReplyAndPassAway(GetHTTPFORBIDDEN(), "BadRequest"); return PassAway(); } SendRequest(); - TBase::Become(&TThis::StateWork, TDuration::MilliSeconds(Timeout), new TEvents::TEvWakeup()); + TBase::Become(&TThis::StateWork, Timeout, new TEvents::TEvWakeup()); } STATEFN(StateWork) { @@ -145,12 +131,6 @@ class TJsonVDiskEvict : public TViewerPipeClient { SendRequest(); } - void HandleTimeout() { - Send(Event->Sender, new NMon::TEvHttpInfoRes( - Viewer->GetHTTPGATEWAYTIMEOUT(Event->Get(), "text/plain", "Timeout receiving response from BSC"), - 0, NMon::IEvHttpInfoRes::EContentType::Custom)); - } - void PassAway() override { TBase::PassAway(); } @@ -175,8 +155,7 @@ class TJsonVDiskEvict : public TViewerPipeClient { json["result"] = false; json["error"] = "No response was received from BSC"; } - TBase::Send(Event->Sender, new NMon::TEvHttpInfoRes(Viewer->GetHTTPOKJSON(Event->Get(), NJson::WriteJson(json)), 0, NMon::IEvHttpInfoRes::EContentType::Custom)); - PassAway(); + TBase::ReplyAndPassAway(GetHTTPOKJSON(json)); } static YAML::Node GetSwagger() { @@ -190,43 +169,18 @@ class TJsonVDiskEvict : public TViewerPipeClient { - name: vdisk_id in: query description: vdisk identifier - required: false + required: true type: string - - name: group_id - in: query - description: group identifier - required: false - type: integer - - name: group_generation_id - in: query - description: group generation identifier - required: false - type: integer - - name: fail_realm_idx - in: query - description: fail realm identifier - required: false - type: integer - - name: fail_domain_ids - in: query - description: fail domain identifier - required: false - type: integer - - name: vdisk_idx + - name: force in: query - description: vdisk idx identifier + description: attempt forced operation, ignore warnings required: false - type: integer + type: boolean - name: timeout in: query description: timeout in ms required: false type: integer - - name: force - in: query - description: attempt forced operation, ignore warnings - required: false - type: boolean responses: 200: description: OK