#pragma once #include #include #include #include #include #include #include #include #include #include namespace NYT::NDetail { struct TResponseInfo; } namespace NYT::NDetail::NRawClient { //////////////////////////////////////////////////////////////////////////////// class TRawBatchRequest : public TThrRefBase { public: struct IResponseItemParser : public TThrRefBase { ~IResponseItemParser() = default; virtual void SetResponse(TMaybe node) = 0; virtual void SetException(std::exception_ptr e) = 0; }; public: TRawBatchRequest(const TConfigPtr& config); ~TRawBatchRequest(); bool IsExecuted() const; void MarkExecuted(); void FillParameterList(size_t maxSize, TNode* result, TInstant* nextTry) const; size_t BatchSize() const; void ParseResponse( const TResponseInfo& requestResult, const IRequestRetryPolicyPtr& retryPolicy, TRawBatchRequest* retryBatch, TInstant now = TInstant::Now()); void ParseResponse( TNode response, const TString& requestId, const IRequestRetryPolicyPtr& retryPolicy, TRawBatchRequest* retryBatch, TInstant now = TInstant::Now()); void SetErrorResult(std::exception_ptr e) const; ::NThreading::TFuture Create( const TTransactionId& transaction, const TYPath& path, ENodeType type, const TCreateOptions& options); ::NThreading::TFuture Remove( const TTransactionId& transaction, const TYPath& path, const TRemoveOptions& options); ::NThreading::TFuture Exists( const TTransactionId& transaction, const TYPath& path, const TExistsOptions& options); ::NThreading::TFuture Get( const TTransactionId& transaction, const TYPath& path, const TGetOptions& options); ::NThreading::TFuture Set( const TTransactionId& transaction, const TYPath& path, const TNode& value, const TSetOptions& options); ::NThreading::TFuture List( const TTransactionId& transaction, const TYPath& path, const TListOptions& options); ::NThreading::TFuture Copy( const TTransactionId& transaction, const TYPath& sourcePath, const TYPath& destinationPath, const TCopyOptions& options); ::NThreading::TFuture Move( const TTransactionId& transaction, const TYPath& sourcePath, const TYPath& destinationPath, const TMoveOptions& options); ::NThreading::TFuture Link( const TTransactionId& transaction, const TYPath& targetPath, const TYPath& linkPath, const TLinkOptions& options); ::NThreading::TFuture Lock( const TTransactionId& transaction, const TYPath& path, ELockMode mode, const TLockOptions& options); ::NThreading::TFuture Unlock( const TTransactionId& transaction, const TYPath& path, const TUnlockOptions& options); ::NThreading::TFuture> GetFileFromCache( const TTransactionId& transactionId, const TString& md5Signature, const TYPath& cachePath, const TGetFileFromCacheOptions& options); ::NThreading::TFuture PutFileToCache( const TTransactionId& transactionId, const TYPath& filePath, const TString& md5Signature, const TYPath& cachePath, const TPutFileToCacheOptions& options); ::NThreading::TFuture CheckPermission( const TString& user, EPermission permission, const TYPath& path, const TCheckPermissionOptions& options); ::NThreading::TFuture GetOperation( const TOperationId& operationId, const TGetOperationOptions& options); ::NThreading::TFuture AbortOperation(const TOperationId& operationId); ::NThreading::TFuture CompleteOperation(const TOperationId& operationId); ::NThreading::TFuture SuspendOperation( const TOperationId& operationId, const TSuspendOperationOptions& options); ::NThreading::TFuture ResumeOperation( const TOperationId& operationId, const TResumeOperationOptions& options); ::NThreading::TFuture UpdateOperationParameters( const TOperationId& operationId, const TUpdateOperationParametersOptions& options); ::NThreading::TFuture CanonizeYPath(const TRichYPath& path); ::NThreading::TFuture> GetTableColumnarStatistics( const TTransactionId& transaction, const TVector& paths, const TGetTableColumnarStatisticsOptions& options); ::NThreading::TFuture GetTablePartitions( const TTransactionId& transaction, const TVector& paths, const TGetTablePartitionsOptions& options); private: struct TBatchItem { TNode Parameters; ::TIntrusivePtr ResponseParser; TInstant NextTry; TBatchItem(TNode parameters, ::TIntrusivePtr responseParser); TBatchItem(const TBatchItem& batchItem, TInstant nextTry); }; private: template typename TResponseParser::TFutureResult AddRequest( const TString& command, TNode parameters, TMaybe input); template typename TResponseParser::TFutureResult AddRequest( const TString& command, TNode parameters, TMaybe input, ::TIntrusivePtr parser); void AddRequest(TBatchItem batchItem); private: TConfigPtr Config_; TDeque BatchItemList_; bool Executed_ = false; }; //////////////////////////////////////////////////////////////////////////////// } // namespace NYT::NDetail::NRawClient