batch_request_impl.cpp 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. #include "batch_request_impl.h"
  2. #include "lock.h"
  3. #include <yt/cpp/mapreduce/common/helpers.h>
  4. #include <yt/cpp/mapreduce/common/retry_lib.h>
  5. #include <yt/cpp/mapreduce/http/retry_request.h>
  6. #include <yt/cpp/mapreduce/interface/raw_batch_request.h>
  7. #include <yt/cpp/mapreduce/interface/config.h>
  8. #include <yt/cpp/mapreduce/interface/logging/yt_log.h>
  9. #include <library/cpp/yson/node/node.h>
  10. #include <library/cpp/yson/node/serialize.h>
  11. #include <util/generic/guid.h>
  12. #include <util/string/builder.h>
  13. namespace NYT {
  14. namespace NDetail {
  15. using ::NThreading::TFuture;
  16. using ::NThreading::TPromise;
  17. using ::NThreading::NewPromise;
  18. ////////////////////////////////////////////////////////////////////////////////
  19. TBatchRequest::TBatchRequest(const TTransactionId& defaultTransaction, ::TIntrusivePtr<TClient> client)
  20. : DefaultTransaction_(defaultTransaction)
  21. , Impl_(client->GetRawClient()->CreateRawBatchRequest())
  22. , Client_(client)
  23. { }
  24. TBatchRequest::TBatchRequest(IRawBatchRequest* impl, ::TIntrusivePtr<TClient> client)
  25. : Impl_(impl)
  26. , Client_(std::move(client))
  27. { }
  28. TBatchRequest::~TBatchRequest() = default;
  29. IBatchRequestBase& TBatchRequest::WithTransaction(const TTransactionId& transactionId)
  30. {
  31. if (!TmpWithTransaction_) {
  32. TmpWithTransaction_.reset(new TBatchRequest(Impl_.Get(), Client_));
  33. }
  34. TmpWithTransaction_->DefaultTransaction_ = transactionId;
  35. return *TmpWithTransaction_;
  36. }
  37. TFuture<TNode> TBatchRequest::Get(
  38. const TYPath& path,
  39. const TGetOptions& options)
  40. {
  41. return Impl_->Get(DefaultTransaction_, path, options);
  42. }
  43. TFuture<void> TBatchRequest::Set(const TYPath& path, const TNode& node, const TSetOptions& options)
  44. {
  45. return Impl_->Set(DefaultTransaction_, path, node, options);
  46. }
  47. TFuture<TNode::TListType> TBatchRequest::List(const TYPath& path, const TListOptions& options)
  48. {
  49. return Impl_->List(DefaultTransaction_, path, options);
  50. }
  51. TFuture<bool> TBatchRequest::Exists(const TYPath& path, const TExistsOptions& options)
  52. {
  53. return Impl_->Exists(DefaultTransaction_, path, options);
  54. }
  55. TFuture<ILockPtr> TBatchRequest::Lock(
  56. const TYPath& path,
  57. ELockMode mode,
  58. const TLockOptions& options)
  59. {
  60. auto convert = [waitable=options.Waitable_, client=Client_] (TFuture<TNodeId> nodeIdFuture) -> ILockPtr {
  61. return ::MakeIntrusive<TLock>(nodeIdFuture.GetValue(), client, waitable);
  62. };
  63. return Impl_->Lock(DefaultTransaction_, path, mode, options).Apply(convert);
  64. }
  65. ::NThreading::TFuture<void> TBatchRequest::Unlock(
  66. const TYPath& path,
  67. const TUnlockOptions& options = TUnlockOptions())
  68. {
  69. return Impl_->Unlock(DefaultTransaction_, path, options);
  70. }
  71. TFuture<TLockId> TBatchRequest::Create(
  72. const TYPath& path,
  73. ENodeType type,
  74. const TCreateOptions& options)
  75. {
  76. return Impl_->Create(DefaultTransaction_, path, type, options);
  77. }
  78. TFuture<void> TBatchRequest::Remove(
  79. const TYPath& path,
  80. const TRemoveOptions& options)
  81. {
  82. return Impl_->Remove(DefaultTransaction_, path, options);
  83. }
  84. TFuture<TNodeId> TBatchRequest::Move(
  85. const TYPath& sourcePath,
  86. const TYPath& destinationPath,
  87. const TMoveOptions& options)
  88. {
  89. return Impl_->Move(DefaultTransaction_, sourcePath, destinationPath, options);
  90. }
  91. TFuture<TNodeId> TBatchRequest::Copy(
  92. const TYPath& sourcePath,
  93. const TYPath& destinationPath,
  94. const TCopyOptions& options)
  95. {
  96. return Impl_->Copy(DefaultTransaction_, sourcePath, destinationPath, options);
  97. }
  98. TFuture<TNodeId> TBatchRequest::Link(
  99. const TYPath& targetPath,
  100. const TYPath& linkPath,
  101. const TLinkOptions& options)
  102. {
  103. return Impl_->Link(DefaultTransaction_, targetPath, linkPath, options);
  104. }
  105. TFuture<void> TBatchRequest::AbortOperation(const NYT::TOperationId& operationId)
  106. {
  107. return Impl_->AbortOperation(operationId);
  108. }
  109. TFuture<void> TBatchRequest::CompleteOperation(const NYT::TOperationId& operationId)
  110. {
  111. return Impl_->CompleteOperation(operationId);
  112. }
  113. TFuture<void> TBatchRequest::SuspendOperation(
  114. const TOperationId& operationId,
  115. const TSuspendOperationOptions& options)
  116. {
  117. return Impl_->SuspendOperation(operationId, options);
  118. }
  119. TFuture<void> TBatchRequest::ResumeOperation(
  120. const TOperationId& operationId,
  121. const TResumeOperationOptions& options)
  122. {
  123. return Impl_->ResumeOperation(operationId, options);
  124. }
  125. TFuture<void> TBatchRequest::UpdateOperationParameters(
  126. const NYT::TOperationId& operationId,
  127. const NYT::TUpdateOperationParametersOptions& options)
  128. {
  129. return Impl_->UpdateOperationParameters(operationId, options);
  130. }
  131. TFuture<TRichYPath> TBatchRequest::CanonizeYPath(const TRichYPath& path)
  132. {
  133. return Impl_->CanonizeYPath(path);
  134. }
  135. TFuture<TVector<TTableColumnarStatistics>> TBatchRequest::GetTableColumnarStatistics(
  136. const TVector<TRichYPath>& paths,
  137. const NYT::TGetTableColumnarStatisticsOptions& options)
  138. {
  139. return Impl_->GetTableColumnarStatistics(DefaultTransaction_, paths, options);
  140. }
  141. TFuture<TCheckPermissionResponse> TBatchRequest::CheckPermission(
  142. const TString& user,
  143. EPermission permission,
  144. const TYPath& path,
  145. const TCheckPermissionOptions& options)
  146. {
  147. return Impl_->CheckPermission(user, permission, path, options);
  148. }
  149. void TBatchRequest::ExecuteBatch(const TExecuteBatchOptions& options)
  150. {
  151. Impl_->ExecuteBatch(options);
  152. }
  153. ////////////////////////////////////////////////////////////////////////////////
  154. } // namespace NDetail
  155. } // namespace NYT