summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsnaury <[email protected]>2023-09-12 13:35:50 +0300
committersnaury <[email protected]>2023-09-12 13:59:09 +0300
commit87993d634e37f557701366dac12344eedc608a38 (patch)
treebe594c2fcad76823c5fd2dd568ae9db87a6c6192
parent663db88bc369c49904c3d9b543a22f2ed54a9e66 (diff)
Don't leak read iterator session subscriptions on datashard reboot KIKIMR-19283
-rw-r--r--ydb/core/tx/datashard/datashard__read_iterator.cpp10
-rw-r--r--ydb/core/tx/datashard/datashard_impl.h2
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());