progress_merger.h 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #include <yql/essentials/core/yql_execution.h>
  2. #include <util/generic/hash.h>
  3. #include <util/system/spinlock.h>
  4. namespace NYql::NProgressMerger {
  5. //////////////////////////////////////////////////////////////////////////////
  6. // TNodeProgressBase
  7. //////////////////////////////////////////////////////////////////////////////
  8. class TNodeProgressBase {
  9. public:
  10. using EState = TOperationProgress::EState;
  11. TNodeProgressBase(const TOperationProgress& p);
  12. TNodeProgressBase(
  13. const TOperationProgress& p,
  14. TInstant startedAt,
  15. TInstant finishedAt,
  16. const TVector<TOperationProgress::TStage>& stages);
  17. bool MergeWith(const TOperationProgress& p);
  18. void Abort();
  19. bool IsUnfinished() const;
  20. bool IsDirty() const;
  21. void SetDirty(bool dirty);
  22. protected:
  23. TOperationProgress Progress_;
  24. TInstant StartedAt_;
  25. TInstant FinishedAt_;
  26. TVector<TOperationProgress::TStage> Stages_;
  27. private:
  28. bool Dirty_;
  29. };
  30. //////////////////////////////////////////////////////////////////////////////
  31. // ITaskProgressMerger
  32. //////////////////////////////////////////////////////////////////////////////
  33. struct ITaskProgressMerger {
  34. virtual ~ITaskProgressMerger() = default;
  35. virtual void MergeWith(const TOperationProgress& progress) = 0;
  36. virtual void AbortAllUnfinishedNodes() = 0;
  37. };
  38. } // namespace NProgressMerger