diff --git a/ydb/core/tablet/tablet_impl.h b/ydb/core/tablet/tablet_impl.h index c1a102b376d7..84d8350ebdae 100644 --- a/ydb/core/tablet/tablet_impl.h +++ b/ydb/core/tablet/tablet_impl.h @@ -15,7 +15,7 @@ namespace NKikimr { IActor* CreateTabletReqRebuildHistoryGraph(const TActorId &owner, TTabletStorageInfo *info, ui32 blockedGen, NTracing::ITrace *trace, ui64 followerCookie); IActor* CreateTabletFindLastEntry(const TActorId &owner, bool readBody, TTabletStorageInfo *info, ui32 blockedGen, bool leader); -IActor* CreateTabletReqWriteLog(const TActorId &owner, const TLogoBlobID &entryId, NKikimrTabletBase::TTabletLogEntry *entry, TVector &refs, TEvBlobStorage::TEvPut::ETactic commitTactic, TTabletStorageInfo *info, NWilson::TTraceId traceId = {}); +IActor* CreateTabletReqWriteLog(const TActorId &owner, const TLogoBlobID &entryId, NKikimrTabletBase::TTabletLogEntry *entry, TVector &refs, TEvBlobStorage::TEvPut::ETactic commitTactic, TTabletStorageInfo *info, TMessageRelevanceWatcher relevance, NWilson::TTraceId traceId = {}); IActor* CreateTabletReqBlockBlobStorage(const TActorId &owner, TTabletStorageInfo *info, ui32 generation, bool blockPrevEntry); IActor* CreateTabletReqDelete(const TActorId &owner, const TIntrusivePtr &tabletStorageInfo, ui32 generation = std::numeric_limits::max()); diff --git a/ydb/core/tablet/tablet_req_reset.cpp b/ydb/core/tablet/tablet_req_reset.cpp index c1188a8abead..965e7ab7fdb4 100644 --- a/ydb/core/tablet/tablet_req_reset.cpp +++ b/ydb/core/tablet/tablet_req_reset.cpp @@ -11,6 +11,7 @@ class TTabletReqReset : public TActorBootstrapped { const TIntrusivePtr TabletStorageInfo; ui32 Generation = 0; TActorId CurrentLeader; + TMessageRelevanceOwner Relevance = std::make_shared(); void ReplyAndDie(NKikimrProto::EReplyStatus status, const TActorContext& ctx) { ctx.Send(Owner, new TEvTablet::TEvResetTabletResult(status, TabletStorageInfo->TabletID)); @@ -62,7 +63,7 @@ class TTabletReqReset : public TActorBootstrapped { return ReplyAndDie(ev->Get()->Status, ctx); } - TTablet::ExternalWriteZeroEntry(TabletStorageInfo.Get(), Generation + 1, SelfId()); + TTablet::ExternalWriteZeroEntry(TabletStorageInfo.Get(), Generation + 1, SelfId(), Relevance); Become(&TTabletReqReset::StateWriteZeroEntry); } diff --git a/ydb/core/tablet/tablet_req_writelog.cpp b/ydb/core/tablet/tablet_req_writelog.cpp index 7f08d4cc16f8..27d73fcfa8f0 100644 --- a/ydb/core/tablet/tablet_req_writelog.cpp +++ b/ydb/core/tablet/tablet_req_writelog.cpp @@ -29,6 +29,8 @@ class TTabletReqWriteLog : public TActorBootstrapped { TVector YellowStopChannels; THashMap ApproximateFreeSpaceShareByChannel; + TMessageRelevanceWatcher Relevance; + NWilson::TSpan RequestSpan; TMap BlobSpans; @@ -143,7 +145,7 @@ class TTabletReqWriteLog : public TActorBootstrapped { ui64 cookie = RandomNumber(); RequestCookies ^= cookie; - SendPutToGroup(ctx, x->GroupID, Info.Get(), MakeHolder(id, buffer, TInstant::Max(), handleClass, tactic), cookie, std::move(traceId)); + SendPutToGroup(ctx, x->GroupID, Info.Get(), MakeHolder(id, buffer, TInstant::Max(), handleClass, tactic, false, Relevance), cookie, std::move(traceId)); } public: @@ -152,13 +154,14 @@ class TTabletReqWriteLog : public TActorBootstrapped { } TTabletReqWriteLog(const TActorId &owner, const TLogoBlobID &logid, NKikimrTabletBase::TTabletLogEntry *entry, TVector &refs, - TEvBlobStorage::TEvPut::ETactic commitTactic, TTabletStorageInfo *info, NWilson::TTraceId traceId) + TEvBlobStorage::TEvPut::ETactic commitTactic, TTabletStorageInfo *info, TMessageRelevanceWatcher relevance, NWilson::TTraceId traceId) : Owner(owner) , LogEntryID(logid) , LogEntry(entry) , CommitTactic(commitTactic) , Info(info) , RepliesToWait(Max()) + , Relevance(std::move(relevance)) , RequestSpan(TWilsonTablet::TabletDetailed, std::move(traceId), "Tablet.WriteLog") { References.swap(refs); @@ -215,8 +218,8 @@ class TTabletReqWriteLog : public TActorBootstrapped { } }; -IActor* CreateTabletReqWriteLog(const TActorId &owner, const TLogoBlobID &entryId, NKikimrTabletBase::TTabletLogEntry *entry, TVector &refs, TEvBlobStorage::TEvPut::ETactic commitTactic, TTabletStorageInfo *info, NWilson::TTraceId traceId) { - return new TTabletReqWriteLog(owner, entryId, entry, refs, commitTactic, info, std::move(traceId)); +IActor* CreateTabletReqWriteLog(const TActorId &owner, const TLogoBlobID &entryId, NKikimrTabletBase::TTabletLogEntry *entry, TVector &refs, TEvBlobStorage::TEvPut::ETactic commitTactic, TTabletStorageInfo *info, TMessageRelevanceWatcher relevance, NWilson::TTraceId traceId) { + return new TTabletReqWriteLog(owner, entryId, entry, refs, commitTactic, info, std::move(relevance), std::move(traceId)); } } diff --git a/ydb/core/tablet/tablet_sys.cpp b/ydb/core/tablet/tablet_sys.cpp index 14dbcc8b8c52..a2561fb32970 100644 --- a/ydb/core/tablet/tablet_sys.cpp +++ b/ydb/core/tablet/tablet_sys.cpp @@ -228,7 +228,7 @@ void TTablet::WriteZeroEntry(TEvTablet::TDependencyGraph *graph) { const TLogoBlobID logid(TabletID(), StateStorageInfo.KnownGeneration, 0, 0, 0, 0); TVector refs; - Register(CreateTabletReqWriteLog(SelfId(), logid, entry.Release(), refs, TEvBlobStorage::TEvPut::TacticMinLatency, Info.Get())); + Register(CreateTabletReqWriteLog(SelfId(), logid, entry.Release(), refs, TEvBlobStorage::TEvPut::TacticMinLatency, Info.Get(), Relevance)); BLOG_D(" TTablet::WriteZeroEntry. logid# " << logid.ToString(), "TSYS01"); @@ -1318,7 +1318,7 @@ bool TTablet::HandleNext(TEvTablet::TEvCommit::TPtr &ev) { entry->StateStorageConfirmed = true; // todo: do real query against state-storage (optionally?) entry->Task = Register( - CreateTabletReqWriteLog(SelfId(), logid, x.release(), msg->References, msg->CommitTactic, Info.Get(), std::move(ev->TraceId)) + CreateTabletReqWriteLog(SelfId(), logid, x.release(), msg->References, msg->CommitTactic, Info.Get(), Relevance, std::move(ev->TraceId)) ); Graph.StepsInFlight += 1; @@ -1666,7 +1666,7 @@ void TTablet::ProgressFollowerQueue() { TVector refs; Register( - CreateTabletReqWriteLog(SelfId(), entryId, entry.Release(), refs, TEvBlobStorage::TEvPut::ETactic::TacticMinLatency, Info.Get()) + CreateTabletReqWriteLog(SelfId(), entryId, entry.Release(), refs, TEvBlobStorage::TEvPut::ETactic::TacticMinLatency, Info.Get(), Relevance) ); } } @@ -2190,7 +2190,7 @@ void TTablet::Handle(TEvTablet::TEvCompleteRecoveryBoot::TPtr& ev) { const TLogoBlobID logid(TabletID(), StateStorageInfo.KnownGeneration, 0, 0, 0, 0); TVector refs; - Register(CreateTabletReqWriteLog(SelfId(), logid, entry.Release(), refs, TEvBlobStorage::TEvPut::TacticMinLatency, Info.Get())); + Register(CreateTabletReqWriteLog(SelfId(), logid, entry.Release(), refs, TEvBlobStorage::TEvPut::TacticMinLatency, Info.Get(), Relevance)); ReportTabletStateChange(TTabletStateInfo::WriteZeroEntry); @@ -2334,14 +2334,14 @@ void TTablet::Bootstrap() { ReportTabletStateChange(TTabletStateInfo::ResolveStateStorage); } -void TTablet::ExternalWriteZeroEntry(TTabletStorageInfo *info, ui32 gen, TActorIdentity owner) { +void TTablet::ExternalWriteZeroEntry(TTabletStorageInfo *info, ui32 gen, TActorIdentity owner, TMessageRelevanceWatcher relevance) { THolder entry = MakeHolder(); entry->SetSnapshot(MakeGenStepPair(0, 0)); entry->SetZeroConfirmed(MakeGenStepPair(0, 0)); entry->SetZeroTailSz(0); TLogoBlobID logid(info->TabletID, gen, 0, 0, 0, 0); TVector refs; - TActivationContext::Register(CreateTabletReqWriteLog(owner, logid, entry.Release(), refs, TEvBlobStorage::TEvPut::TacticDefault, info)); + TActivationContext::Register(CreateTabletReqWriteLog(owner, logid, entry.Release(), refs, TEvBlobStorage::TEvPut::TacticDefault, info, std::move(relevance))); } TActorId TTabletSetupInfo::Apply(TTabletStorageInfo *info, TActorIdentity owner) { diff --git a/ydb/core/tablet/tablet_sys.h b/ydb/core/tablet/tablet_sys.h index 5f94bf777c97..6eae04d9ac4c 100644 --- a/ydb/core/tablet/tablet_sys.h +++ b/ydb/core/tablet/tablet_sys.h @@ -295,6 +295,8 @@ class TTablet : public TActor { THashMap InterconnectPending; ui64 LastInterconnectSubscribeCookie = 0; + TMessageRelevanceOwner Relevance = std::make_shared(); + ui64 TabletID() const; void ReportTabletStateChange(ETabletState state); @@ -742,7 +744,7 @@ class TTablet : public TActor { ); TAutoPtr AfterRegister(const TActorId &self, const TActorId &parentId) override; - static void ExternalWriteZeroEntry(TTabletStorageInfo *info, ui32 gen, TActorIdentity owner); + static void ExternalWriteZeroEntry(TTabletStorageInfo *info, ui32 gen, TActorIdentity owner, TMessageRelevanceWatcher relevance); }; } diff --git a/ydb/core/tablet_flat/flat_ops_compact.h b/ydb/core/tablet_flat/flat_ops_compact.h index 4fa57d23413b..279fd4dd0f74 100644 --- a/ydb/core/tablet_flat/flat_ops_compact.h +++ b/ydb/core/tablet_flat/flat_ops_compact.h @@ -598,7 +598,8 @@ namespace NTabletFlatExecutor { auto flag = NKikimrBlobStorage::AsyncBlob; auto *ev = new TEvPut(id.Logo, std::exchange(glob.Data, TString{ }), TInstant::Max(), flag, - TEvBlobStorage::TEvPut::ETactic::TacticMaxThroughput); + TEvBlobStorage::TEvPut::ETactic::TacticMaxThroughput, /* issueKeepFlag */ false, + /* relevance */ RelevanceTracker); auto ctx = ActorContext(); SendToBSProxy(ctx, id.Group, ev); @@ -607,6 +608,7 @@ namespace NTabletFlatExecutor { private: const TLogoBlobID Mask; const TActorId Owner; + TMessageRelevanceOwner RelevanceTracker = std::make_shared(); TAutoPtr Logger; IDriver * Driver = nullptr; THolder Conf;