abortable_registry.h 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. #pragma once
  2. #include <yt/cpp/mapreduce/common/fwd.h>
  3. #include <yt/cpp/mapreduce/http/context.h>
  4. #include <yt/cpp/mapreduce/interface/common.h>
  5. #include <util/str_stl.h>
  6. #include <util/system/mutex.h>
  7. #include <util/generic/hash.h>
  8. namespace NYT {
  9. namespace NDetail {
  10. ////////////////////////////////////////////////////////////////////////////////
  11. class IAbortable
  12. : public TThrRefBase
  13. {
  14. public:
  15. virtual void Abort() = 0;
  16. virtual TString GetType() const = 0;
  17. };
  18. using IAbortablePtr = ::TIntrusivePtr<IAbortable>;
  19. ////////////////////////////////////////////////////////////////////////////////
  20. class TTransactionAbortable
  21. : public IAbortable
  22. {
  23. public:
  24. TTransactionAbortable(
  25. const IRawClientPtr& rawClient,
  26. const TClientContext& context,
  27. const TTransactionId& transactionId);
  28. void Abort() override;
  29. TString GetType() const override;
  30. private:
  31. const IRawClientPtr RawClient_;
  32. const TClientContext Context_;
  33. const TTransactionId TransactionId_;
  34. };
  35. ////////////////////////////////////////////////////////////////////////////////
  36. class TOperationAbortable
  37. : public IAbortable
  38. {
  39. public:
  40. TOperationAbortable(
  41. IRawClientPtr rawClient,
  42. IClientRetryPolicyPtr clientRetryPolicy,
  43. const TOperationId& operationId);
  44. void Abort() override;
  45. TString GetType() const override;
  46. private:
  47. const IRawClientPtr RawClient_;
  48. const IClientRetryPolicyPtr ClientRetryPolicy_;
  49. const TOperationId OperationId_;
  50. };
  51. ////////////////////////////////////////////////////////////////////////////////
  52. class TAbortableRegistry
  53. : public TThrRefBase
  54. {
  55. public:
  56. TAbortableRegistry() = default;
  57. static ::TIntrusivePtr<TAbortableRegistry> Get();
  58. void AbortAllAndBlockForever();
  59. void Add(const TGUID& id, IAbortablePtr abortable);
  60. void Remove(const TGUID& id);
  61. private:
  62. THashMap<TGUID, IAbortablePtr> ActiveAbortables_;
  63. TMutex Lock_;
  64. bool Running_ = true;
  65. };
  66. ////////////////////////////////////////////////////////////////////////////////
  67. } // namespace NDetail
  68. } // namespace NYT