diff options
author | snaury <[email protected]> | 2023-09-12 13:35:50 +0300 |
---|---|---|
committer | snaury <[email protected]> | 2023-09-12 13:59:09 +0300 |
commit | 87993d634e37f557701366dac12344eedc608a38 (patch) | |
tree | be594c2fcad76823c5fd2dd568ae9db87a6c6192 | |
parent | 663db88bc369c49904c3d9b543a22f2ed54a9e66 (diff) |
Don't leak read iterator session subscriptions on datashard reboot KIKIMR-19283
-rw-r--r-- | ydb/core/tx/datashard/datashard__read_iterator.cpp | 10 | ||||
-rw-r--r-- | ydb/core/tx/datashard/datashard_impl.h | 2 |
2 files changed, 11 insertions, 1 deletions
diff --git a/ydb/core/tx/datashard/datashard__read_iterator.cpp b/ydb/core/tx/datashard/datashard__read_iterator.cpp index 81e84575e24..990aa260e16 100644 --- a/ydb/core/tx/datashard/datashard__read_iterator.cpp +++ b/ydb/core/tx/datashard/datashard__read_iterator.cpp @@ -2696,7 +2696,7 @@ void TDataShard::CancelReadIterators(Ydb::StatusIds::StatusCode code, const TStr } ReadIterators.clear(); - ReadIteratorSessions.clear(); + UnsubscribeReadIteratorSessions(ctx); SetCounter(COUNTER_READ_ITERATORS_COUNT, 0); SetCounter(COUNTER_READ_ITERATORS_EXHAUSTED_COUNT, 0); @@ -2754,6 +2754,14 @@ void TDataShard::ReadIteratorsOnNodeDisconnected(const TActorId& sessionId, cons DecCounter(COUNTER_READ_ITERATORS_EXHAUSTED_COUNT, exhaustedCount); } +void TDataShard::UnsubscribeReadIteratorSessions(const TActorContext& ctx) { + Y_UNUSED(ctx); + for (const auto& pr : ReadIteratorSessions) { + Send(pr.first, new TEvents::TEvUnsubscribe); + } + ReadIteratorSessions.clear(); +} + } // NKikimr::NDataShard template<> diff --git a/ydb/core/tx/datashard/datashard_impl.h b/ydb/core/tx/datashard/datashard_impl.h index a1647a03af5..95bb9e1a98c 100644 --- a/ydb/core/tx/datashard/datashard_impl.h +++ b/ydb/core/tx/datashard/datashard_impl.h @@ -1936,6 +1936,7 @@ public: void DeleteReadIterator(TReadIteratorsMap::iterator it); void CancelReadIterators(Ydb::StatusIds::StatusCode code, const TString& issue, const TActorContext& ctx); void ReadIteratorsOnNodeDisconnected(const TActorId& sessionId, const TActorContext &ctx); + void UnsubscribeReadIteratorSessions(const TActorContext& ctx); void SubscribeNewLocks(const TActorContext &ctx); void SubscribeNewLocks(); @@ -2975,6 +2976,7 @@ protected: StopFindSubDomainPathId(); StopWatchingSubDomainPathId(); + UnsubscribeReadIteratorSessions(ctx); LoanReturnTracker.Shutdown(ctx); Y_VERIFY(LoanReturnTracker.Empty()); |