/
githubmirror
/
nbs
Обзор
Документация
Войти
/
githubmirror
/
nbs
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
cloud/filestore/apps/client/lib/set_node_attr.cpp
144 строки
4 KB
Maxim Deb Natkh
issue-6608: add ability to set QuotaId for node using filestore-client (#6721)
10 авг 2026, 09:50
Не верифицирован
10 авг 2026, 09:50
4813c2e
Код
Авторство
О чём код?
#include "command.h" #include <optional> #include <cloud/filestore/public/api/protos/fs.pb.h> #include <util/datetime/base.h> #include <util/stream/file.h> #include <util/system/sysstat.h> namespace NCloud::NFileStore::NClient { namespace { //////////////////////////////////////////////////////////////////////////////// class TSetNodeAttrCommand final: public TFileStoreCommand { private: ui64 NodeId = 0; std::optional<ui32> ModeAttr; std::optional<ui32> UidAttr; std::optional<ui32> GidAttr; std::optional<ui64> SizeAttr; std::optional<ui64> ATimeAttr; std::optional<ui64> MTimeAttr; std::optional<ui64> CTimeAttr; std::optional<ui32> QuotaIdAttr; public: TSetNodeAttrCommand() { Opts.AddLongOption("node-id") .Required() .StoreResult(&NodeId); Opts.AddLongOption("mode") .Optional() .StoreResult(&ModeAttr); Opts.AddLongOption("uid") .Optional() .StoreResult(&UidAttr); Opts.AddLongOption("gid") .Optional() .StoreResult(&GidAttr); Opts.AddLongOption("size") .Optional() .StoreResult(&SizeAttr); Opts.AddLongOption("atime") .Optional() .StoreResult(&ATimeAttr); Opts.AddLongOption("mtime") .Optional() .StoreResult(&MTimeAttr); Opts.AddLongOption("ctime") .Optional() .StoreResult(&CTimeAttr); Opts.AddLongOption("quota-id") .Optional() .Help("attach the node (must be an empty directory) to the " "quota with this id") .StoreResult(&QuotaIdAttr); } bool Execute() override { auto sessionGuard = CreateSession(); auto& session = sessionGuard.AccessSession(); auto request = CreateRequest<NProto::TSetNodeAttrRequest>(); request->SetNodeId(NodeId); auto addFlag = [&request](NProto::TSetNodeAttrRequest::EFlags flag) { request->SetFlags( request->GetFlags() | NCloud::NFileStore::ProtoFlag(flag)); }; if (ModeAttr) { addFlag(NProto::TSetNodeAttrRequest::F_SET_ATTR_MODE); request->MutableUpdate()->SetMode(*ModeAttr); } if (UidAttr) { addFlag(NProto::TSetNodeAttrRequest::F_SET_ATTR_UID); request->MutableUpdate()->SetUid(*UidAttr); } if (GidAttr) { addFlag(NProto::TSetNodeAttrRequest::F_SET_ATTR_GID); request->MutableUpdate()->SetGid(*GidAttr); } if (SizeAttr) { addFlag(NProto::TSetNodeAttrRequest::F_SET_ATTR_SIZE); request->MutableUpdate()->SetSize(*SizeAttr); } if (ATimeAttr) { addFlag(NProto::TSetNodeAttrRequest::F_SET_ATTR_ATIME); request->MutableUpdate()->SetATime(*ATimeAttr); } if (MTimeAttr) { addFlag(NProto::TSetNodeAttrRequest::F_SET_ATTR_MTIME); request->MutableUpdate()->SetMTime(*MTimeAttr); } if (CTimeAttr) { addFlag(NProto::TSetNodeAttrRequest::F_SET_ATTR_CTIME); request->MutableUpdate()->SetCTime(*CTimeAttr); } if (QuotaIdAttr) { addFlag(NProto::TSetNodeAttrRequest::F_SET_ATTR_QUOTA_ID); request->MutableUpdate()->SetQuotaId(*QuotaIdAttr); } auto response = WaitFor( session.SetNodeAttr(PrepareCallContext(), std::move(request))); CheckResponse(response); return true; } }; } // namespace //////////////////////////////////////////////////////////////////////////////// TCommandPtr NewSetNodeAttrCommand() { return std::make_shared<TSetNodeAttrCommand>(); } } // namespace NCloud::NFileStore::NClient