diff options
author | ermolovd <ermolovd@yandex-team.com> | 2023-10-16 16:11:56 +0300 |
---|---|---|
committer | ermolovd <ermolovd@yandex-team.com> | 2023-10-16 16:38:55 +0300 |
commit | 2d212baccf6419e96202b6032de33a2ab775c137 (patch) | |
tree | bfb768032710e37ee2d0e2917c2af543dd60ad36 | |
parent | d4f3485ebf6530953946184c62b06e3d92b8a5c8 (diff) | |
download | ydb-2d212baccf6419e96202b6032de33a2ab775c137.tar.gz |
Possibility to get operation by its alias
-rw-r--r-- | yt/cpp/mapreduce/client/client.cpp | 8 | ||||
-rw-r--r-- | yt/cpp/mapreduce/client/client.h | 4 | ||||
-rw-r--r-- | yt/cpp/mapreduce/interface/client.h | 8 | ||||
-rw-r--r-- | yt/cpp/mapreduce/interface/operation.h | 2 | ||||
-rw-r--r-- | yt/cpp/mapreduce/raw_client/raw_batch_request.cpp | 34 | ||||
-rw-r--r-- | yt/cpp/mapreduce/raw_client/raw_requests.cpp | 12 | ||||
-rw-r--r-- | yt/cpp/mapreduce/raw_client/raw_requests.h | 6 | ||||
-rw-r--r-- | yt/cpp/mapreduce/raw_client/rpc_parameters_serialization.cpp | 29 | ||||
-rw-r--r-- | yt/cpp/mapreduce/raw_client/rpc_parameters_serialization.h | 4 |
9 files changed, 83 insertions, 24 deletions
diff --git a/yt/cpp/mapreduce/client/client.cpp b/yt/cpp/mapreduce/client/client.cpp index 42c96fcde2a..8279c1a38b6 100644 --- a/yt/cpp/mapreduce/client/client.cpp +++ b/yt/cpp/mapreduce/client/client.cpp @@ -1116,6 +1116,14 @@ TOperationAttributes TClient::GetOperation( return NRawClient::GetOperation(ClientRetryPolicy_->CreatePolicyForGenericRequest(), Context_, operationId, options); } +TOperationAttributes TClient::GetOperation( + const TString& alias, + const TGetOperationOptions& options) +{ + CheckShutdown(); + return NRawClient::GetOperation(ClientRetryPolicy_->CreatePolicyForGenericRequest(), Context_, alias, options); +} + TListOperationsResult TClient::ListOperations( const TListOperationsOptions& options) { diff --git a/yt/cpp/mapreduce/client/client.h b/yt/cpp/mapreduce/client/client.h index 453b79f2a7c..9bed0d7287f 100644 --- a/yt/cpp/mapreduce/client/client.h +++ b/yt/cpp/mapreduce/client/client.h @@ -415,6 +415,10 @@ public: const TOperationId& operationId, const TGetOperationOptions& options) override; + TOperationAttributes GetOperation( + const TString& alias, + const TGetOperationOptions& options) override; + TListOperationsResult ListOperations( const TListOperationsOptions& options) override; diff --git a/yt/cpp/mapreduce/interface/client.h b/yt/cpp/mapreduce/interface/client.h index 369f9e8710d..2b118214d33 100644 --- a/yt/cpp/mapreduce/interface/client.h +++ b/yt/cpp/mapreduce/interface/client.h @@ -415,6 +415,14 @@ public: const TGetOperationOptions& options = TGetOperationOptions()) = 0; /// + /// @brief Get operation attributes. + /// + /// @see [YT doc](https://ytsaurus.tech/docs/en/api/commands.html#get_operation) + virtual TOperationAttributes GetOperation( + const TString& alias, + const TGetOperationOptions& options = TGetOperationOptions()) = 0; + + /// /// @brief List operations satisfying given filters. /// /// @see [YT doc](https://ytsaurus.tech/docs/en/api/commands.html#list_operations) diff --git a/yt/cpp/mapreduce/interface/operation.h b/yt/cpp/mapreduce/interface/operation.h index 6841bf9ee7f..97d036180bb 100644 --- a/yt/cpp/mapreduce/interface/operation.h +++ b/yt/cpp/mapreduce/interface/operation.h @@ -2349,6 +2349,8 @@ struct TGetOperationOptions /// /// @brief What attributes to request (if omitted, the default set of attributes will be requested). FLUENT_FIELD_OPTION(TOperationAttributeFilter, AttributeFilter); + + FLUENT_FIELD_OPTION(bool, IncludeRuntime); }; /// diff --git a/yt/cpp/mapreduce/raw_client/raw_batch_request.cpp b/yt/cpp/mapreduce/raw_client/raw_batch_request.cpp index 1568c3d85e0..2d97da2ad3c 100644 --- a/yt/cpp/mapreduce/raw_client/raw_batch_request.cpp +++ b/yt/cpp/mapreduce/raw_client/raw_batch_request.cpp @@ -69,21 +69,21 @@ public: public: TResponseParserBase() - : Result(NewPromise<TReturnType>()) + : Result_(NewPromise<TReturnType>()) { } void SetException(std::exception_ptr e) override { - Result.SetException(std::move(e)); + Result_.SetException(std::move(e)); } TFuture<TReturnType> GetFuture() { - return Result.GetFuture(); + return Result_.GetFuture(); } protected: - TPromise<TReturnType> Result; + TPromise<TReturnType> Result_; }; //////////////////////////////////////////////////////////////////// @@ -96,7 +96,7 @@ public: void SetResponse(TMaybe<TNode> node) override { EnsureSomething(node); - Result.SetValue(std::move(*node)); + Result_.SetValue(std::move(*node)); } }; @@ -109,7 +109,7 @@ public: void SetResponse(TMaybe<TNode> node) override { EnsureNothing(node); - Result.SetValue(); + Result_.SetValue(); } }; @@ -122,7 +122,7 @@ public: void SetResponse(TMaybe<TNode> node) override { EnsureType(node, TNode::List); - Result.SetValue(std::move(node->AsList())); + Result_.SetValue(std::move(node->AsList())); } }; @@ -135,7 +135,7 @@ public: void SetResponse(TMaybe<TNode> node) override { EnsureType(node, TNode::Bool); - Result.SetValue(std::move(node->AsBool())); + Result_.SetValue(std::move(node->AsBool())); } }; @@ -148,7 +148,7 @@ public: void SetResponse(TMaybe<TNode> node) override { EnsureType(node, TNode::String); - Result.SetValue(GetGuid(node->AsString())); + Result_.SetValue(GetGuid(node->AsString())); } }; @@ -173,7 +173,7 @@ public: TRichYPath result; Deserialize(result, *node); result.Path_ = AddPathPrefix(result.Path_, PathPrefix_); - Result.SetValue(result); + Result_.SetValue(result); } private: @@ -190,7 +190,7 @@ public: void SetResponse(TMaybe<TNode> node) override { EnsureType(node, TNode::Map); - Result.SetValue(ParseOperationAttributes(*node)); + Result_.SetValue(ParseOperationAttributes(*node)); } }; @@ -205,7 +205,7 @@ public: EnsureType(node, TNode::Map); TVector<TTableColumnarStatistics> statistics; Deserialize(statistics, *node); - Result.SetValue(std::move(statistics)); + Result_.SetValue(std::move(statistics)); } }; @@ -220,7 +220,7 @@ public: EnsureType(node, TNode::Map); TMultiTablePartitions partitions; Deserialize(partitions, *node); - Result.SetValue(std::move(partitions)); + Result_.SetValue(std::move(partitions)); } }; @@ -234,9 +234,9 @@ public: { EnsureType(node, TNode::String); if (node->AsString().empty()) { - Result.SetValue(Nothing()); + Result_.SetValue(Nothing()); } else { - Result.SetValue(node->AsString()); + Result_.SetValue(node->AsString()); } } }; @@ -250,7 +250,7 @@ public: void SetResponse(TMaybe<TNode> node) override { EnsureType(node, TNode::String); - Result.SetValue(node->AsString()); + Result_.SetValue(node->AsString()); } }; @@ -263,7 +263,7 @@ public: void SetResponse(TMaybe<TNode> node) override { EnsureType(node, TNode::Map); - Result.SetValue(ParseCheckPermissionResponse(*node)); + Result_.SetValue(ParseCheckPermissionResponse(*node)); } }; diff --git a/yt/cpp/mapreduce/raw_client/raw_requests.cpp b/yt/cpp/mapreduce/raw_client/raw_requests.cpp index bb1a09121d0..bba605ae4c4 100644 --- a/yt/cpp/mapreduce/raw_client/raw_requests.cpp +++ b/yt/cpp/mapreduce/raw_client/raw_requests.cpp @@ -422,6 +422,18 @@ TOperationAttributes GetOperation( return ParseOperationAttributes(NodeFromYsonString(result.Response)); } +TOperationAttributes GetOperation( + const IRequestRetryPolicyPtr& retryPolicy, + const TClientContext& context, + const TString& alias, + const TGetOperationOptions& options) +{ + THttpHeader header("GET", "get_operation"); + header.MergeParameters(SerializeParamsForGetOperation(alias, options)); + auto result = RetryRequestWithPolicy(retryPolicy, context, header); + return ParseOperationAttributes(NodeFromYsonString(result.Response)); +} + void AbortOperation( const IRequestRetryPolicyPtr& retryPolicy, const TClientContext& context, diff --git a/yt/cpp/mapreduce/raw_client/raw_requests.h b/yt/cpp/mapreduce/raw_client/raw_requests.h index 05fcbade764..e872431088e 100644 --- a/yt/cpp/mapreduce/raw_client/raw_requests.h +++ b/yt/cpp/mapreduce/raw_client/raw_requests.h @@ -163,6 +163,12 @@ TOperationAttributes GetOperation( const TOperationId& operationId, const TGetOperationOptions& options = TGetOperationOptions()); +TOperationAttributes GetOperation( + const IRequestRetryPolicyPtr& retryPolicy, + const TClientContext& context, + const TString& operationId, + const TGetOperationOptions& options = TGetOperationOptions()); + void AbortOperation( const IRequestRetryPolicyPtr& retryPolicy, const TClientContext& context, diff --git a/yt/cpp/mapreduce/raw_client/rpc_parameters_serialization.cpp b/yt/cpp/mapreduce/raw_client/rpc_parameters_serialization.cpp index 7a3c3548c79..aa28382326a 100644 --- a/yt/cpp/mapreduce/raw_client/rpc_parameters_serialization.cpp +++ b/yt/cpp/mapreduce/raw_client/rpc_parameters_serialization.cpp @@ -32,6 +32,11 @@ static void SetOperationIdParam(TNode* node, const TOperationId& operationId) (*node)["operation_id"] = GetGuidAsString(operationId); } +static void SetAliasParam(TNode* node, const TString& alias) +{ + (*node)["operation_alias"] = alias; +} + static void SetPathParam(TNode* node, const TString& pathPrefix, const TYPath& path) { TYPath updatedPath = AddPathPrefix(path, pathPrefix); @@ -392,15 +397,31 @@ TNode SerializeParamsForListOperations( return result; } -TNode SerializeParamsForGetOperation( - const TOperationId& operationId, - const TGetOperationOptions& options) +TNode SerializeParamsForGetOperation(const std::variant<TString, TOperationId>& aliasOrOperationId, const TGetOperationOptions& options) { + auto includeRuntime = options.IncludeRuntime_; TNode result; - SetOperationIdParam(&result, operationId); + std::visit([&] (const auto& value) { + using TValue = std::decay_t<decltype(value)>; + if constexpr (std::is_same_v<TValue, TString>) { + SetAliasParam(&result, value); + if (includeRuntime.Empty()) { + // Getting operation by operation alias requires enabling this option. + // So enable it unless user explicitly set it. + includeRuntime = true; + } + } else if constexpr (std::is_same_v<TValue, TOperationId>) { + SetOperationIdParam(&result, value); + } else { + static_assert(std::is_same_v<TValue, void>, "unreachable"); + } + }, aliasOrOperationId); if (options.AttributeFilter_) { result["attributes"] = SerializeAttributeFilter(*options.AttributeFilter_); } + if (includeRuntime.Defined()) { + result["include_runtime"] = *includeRuntime; + } return result; } diff --git a/yt/cpp/mapreduce/raw_client/rpc_parameters_serialization.h b/yt/cpp/mapreduce/raw_client/rpc_parameters_serialization.h index a60e3ea3696..dfe70bbcc55 100644 --- a/yt/cpp/mapreduce/raw_client/rpc_parameters_serialization.h +++ b/yt/cpp/mapreduce/raw_client/rpc_parameters_serialization.h @@ -94,9 +94,7 @@ TNode SerializeParamsForConcatenate( TNode SerializeParamsForPingTx( const TTransactionId& transactionId); -TNode SerializeParamsForGetOperation( - const TOperationId& operationId, - const TGetOperationOptions& options); +TNode SerializeParamsForGetOperation(const std::variant<TString, TOperationId>& aliasOrOperationId, const TGetOperationOptions& options); TNode SerializeParamsForAbortOperation( const TOperationId& operationId); |