diff options
author | Aleksei Borzenkov <snaury@ydb.tech> | 2025-07-25 14:27:23 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-07-25 13:27:23 +0200 |
commit | 40cb2599e53d977786c1b54a35811997db5d6b47 (patch) | |
tree | d313f3dc5ca978f566e68e32c38dae1d8056bcca | |
parent | 5654d22f6dacf73a6068fff80a8ce2725f3ba0d7 (diff) | |
download | ydb-40cb2599e53d977786c1b54a35811997db5d6b47.tar.gz |
Fix unnecessary tablet resolver negative caching on pipe disconnects (#21621)
-rw-r--r-- | ydb/core/tablet/tablet_pipe_ut.cpp | 10 | ||||
-rw-r--r-- | ydb/core/tablet/tablet_resolver.cpp | 12 |
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); |