aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksei Borzenkov <snaury@ydb.tech>2025-07-25 14:27:23 +0300
committerGitHub <noreply@github.com>2025-07-25 13:27:23 +0200
commit40cb2599e53d977786c1b54a35811997db5d6b47 (patch)
treed313f3dc5ca978f566e68e32c38dae1d8056bcca
parent5654d22f6dacf73a6068fff80a8ce2725f3ba0d7 (diff)
downloadydb-40cb2599e53d977786c1b54a35811997db5d6b47.tar.gz
Fix unnecessary tablet resolver negative caching on pipe disconnects (#21621)
-rw-r--r--ydb/core/tablet/tablet_pipe_ut.cpp10
-rw-r--r--ydb/core/tablet/tablet_resolver.cpp12
2 files changed, 18 insertions, 4 deletions
diff --git a/ydb/core/tablet/tablet_pipe_ut.cpp b/ydb/core/tablet/tablet_pipe_ut.cpp
index 5b05949a919..1ba60fad825 100644
--- a/ydb/core/tablet/tablet_pipe_ut.cpp
+++ b/ydb/core/tablet/tablet_pipe_ut.cpp
@@ -1366,6 +1366,11 @@ Y_UNIT_TEST_SUITE(TTabletPipeTest) {
}
auto sender2 = runtime.AllocateEdgeActor();
+ for (int i = 0; i < 30; ++i) {
+ // overload tablet resolver with unrelated queries
+ runtime.Send(new IEventHandle(MakeTabletResolverID(), TActorId(),
+ new TEvTabletResolver::TEvForward(TTestTxConfig::TxTablet0 + 1 + i, nullptr, {})));
+ }
auto client2 = runtime.Register(NTabletPipe::CreateClient(sender2, TTestTxConfig::TxTablet0, NTabletPipe::TClientConfig{
.ExpectShutdown = true,
.RetryPolicy = NTabletPipe::TClientRetryPolicy::WithoutRetries(),
@@ -1442,6 +1447,11 @@ Y_UNIT_TEST_SUITE(TTabletPipeTest) {
}
auto sender2 = runtime.AllocateEdgeActor();
+ for (int i = 0; i < 30; ++i) {
+ // overload tablet resolver with unrelated queries
+ runtime.Send(new IEventHandle(MakeTabletResolverID(), TActorId(),
+ new TEvTabletResolver::TEvForward(TTestTxConfig::TxTablet0 + 1 + i, nullptr, {})));
+ }
auto client2 = runtime.Register(NTabletPipe::CreateClient(sender2, TTestTxConfig::TxTablet0, NTabletPipe::TClientConfig{
.RetryPolicy = NTabletPipe::TClientRetryPolicy::WithoutRetries(),
}));
diff --git a/ydb/core/tablet/tablet_resolver.cpp b/ydb/core/tablet/tablet_resolver.cpp
index 15d0aa9c269..c534fb994bd 100644
--- a/ydb/core/tablet/tablet_resolver.cpp
+++ b/ydb/core/tablet/tablet_resolver.cpp
@@ -352,7 +352,7 @@ class TTabletResolver : public TActorBootstrapped<TTabletResolver> {
SendQueued(msg.TabletID, entry, ctx);
}
- void DropEntry(ui64 tabletId, TEntry& entry, const TActorContext &ctx) {
+ void DropEntry(ui64 tabletId, TEntry& entry, bool cacheNegative, const TActorContext &ctx) {
LOG_DEBUG(ctx, NKikimrServices::TABLET_RESOLVER,
"DropEntry tabletId: %" PRIu64 " followers: %" PRIu64,
tabletId, entry.KnownFollowers.size());
@@ -363,12 +363,16 @@ class TTabletResolver : public TActorBootstrapped<TTabletResolver> {
ResolvedTablets.Erase(tabletId);
UnresolvedTablets.Erase(tabletId);
- if (TabletResolverNegativeCacheTimeout) {
+ if (TabletResolverNegativeCacheTimeout && cacheNegative) {
if (TabletsOnStopList.emplace(tabletId).second)
Schedule(TabletResolverNegativeCacheTimeout, new TEvPrivate::TEvStopListRemoval(tabletId));
}
}
+ void DropEntry(ui64 tabletId, TEntry& entry, const TActorContext &ctx) {
+ DropEntry(tabletId, entry, true, ctx);
+ }
+
TAutoPtr<TEntry>& GetEntry(ui64 tabletId, const TActorContext &ctx) {
TAutoPtr<TEntry>* entryPtr;
if (!ResolvedTablets.Find(tabletId, entryPtr)) {
@@ -425,7 +429,7 @@ class TTabletResolver : public TActorBootstrapped<TTabletResolver> {
" leader: %s by NodeId", tabletId, entry.KnownLeader.ToString().c_str());
if (entry.KnownFollowers.empty()) {
// Avoid resolving preemptively until the next request
- DropEntry(tabletId, entry, ctx);
+ DropEntry(tabletId, entry, /* cacheNegative */ false, ctx);
return;
}
ResolveRequest(tabletId, ctx);
@@ -544,7 +548,7 @@ class TTabletResolver : public TActorBootstrapped<TTabletResolver> {
if (!msg->Actor || entry.KnownLeader == msg->Actor || entry.KnownLeaderTablet == msg->Actor) {
if (entry.KnownFollowers.empty()) {
// Avoid resolving preemptively until the next request
- DropEntry(tabletId, entry, ctx);
+ DropEntry(tabletId, entry, /* cacheNegative */ false, ctx);
return;
}
ResolveRequest(tabletId, ctx);