diff options
| author | nadya02 <[email protected]> | 2025-06-11 17:56:39 +0300 |
|---|---|---|
| committer | nadya02 <[email protected]> | 2025-06-11 18:25:18 +0300 |
| commit | b82002b0fabe461ff9aee40ca37a129c5e7cb263 (patch) | |
| tree | d8460ee0dcb6aeac494b92f19f2b6e12f175fa5b /library/cpp/yt/memory/memory_usage_tracker.cpp | |
| parent | f4b58920234346ad15c0ba9de5b9ab66d90c425c (diff) | |
Restore measuring the memory usage of write-table queries.
commit_hash:1d28ad476551aee1d5ab64c72205347128c27c68
Diffstat (limited to 'library/cpp/yt/memory/memory_usage_tracker.cpp')
| -rw-r--r-- | library/cpp/yt/memory/memory_usage_tracker.cpp | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/library/cpp/yt/memory/memory_usage_tracker.cpp b/library/cpp/yt/memory/memory_usage_tracker.cpp index 6f0c90a9d1a..4055bf62c5e 100644 --- a/library/cpp/yt/memory/memory_usage_tracker.cpp +++ b/library/cpp/yt/memory/memory_usage_tracker.cpp @@ -17,15 +17,101 @@ public: void Release(i64 /*size*/) override { } + + TSharedRef Track(TSharedRef reference, bool /*keepExistingTracking*/) override + { + return reference; + } }; //////////////////////////////////////////////////////////////////////////////// +TSimpleMemoryUsageTrackerGuard::TSimpleMemoryUsageTrackerGuard(TSimpleMemoryUsageTrackerGuard&& other) +{ + MoveFrom(std::move(other)); +} + +TSimpleMemoryUsageTrackerGuard::~TSimpleMemoryUsageTrackerGuard() +{ + Release(); +} + +TSimpleMemoryUsageTrackerGuard& TSimpleMemoryUsageTrackerGuard::operator=(TSimpleMemoryUsageTrackerGuard&& other) +{ + if (this != &other) { + Release(); + MoveFrom(std::move(other)); + } + return *this; +} + +void TSimpleMemoryUsageTrackerGuard::MoveFrom(TSimpleMemoryUsageTrackerGuard&& other) +{ + Tracker_ = other.Tracker_; + AcquiredSize_ = other.AcquiredSize_; + + other.Tracker_ = nullptr; + other.AcquiredSize_ = 0; +} + +TSimpleMemoryUsageTrackerGuard TSimpleMemoryUsageTrackerGuard::Build(ISimpleMemoryUsageTrackerPtr tracker) +{ + if (!tracker) { + return {}; + } + + TSimpleMemoryUsageTrackerGuard guard; + guard.Tracker_ = tracker; + return guard; +} + +void TSimpleMemoryUsageTrackerGuard::Release() +{ + if (Tracker_) { + if (AcquiredSize_) { + Tracker_->Release(AcquiredSize_); + } + + Tracker_.Reset(); + AcquiredSize_ = 0; + } +} + +void TSimpleMemoryUsageTrackerGuard::SetSize(i64 size) +{ + if (!Tracker_) { + return; + } + + YT_VERIFY(size >= 0); + + if (size > AcquiredSize_) { + Tracker_->Acquire(size - AcquiredSize_); + } else if (size < AcquiredSize_) { + Tracker_->Release(AcquiredSize_ - size); + } + + AcquiredSize_ = size; +} + +//////////////////////////////////////////////////////////////////////////////// + ISimpleMemoryUsageTrackerPtr GetNullSimpleMemoryUsageTracker() { return LeakyRefCountedSingleton<TNulSimplelMemoryUsageTracker>(); } +TSharedRef TrackMemory( + const ISimpleMemoryUsageTrackerPtr& tracker, + TSharedRef reference, + bool keepExistingTracking) +{ + if (!tracker || !reference) { + return reference; + } + return tracker->Track(std::move(reference), keepExistingTracking); +} + //////////////////////////////////////////////////////////////////////////////// } // namespace NYT |
