@@ -39,6 +39,9 @@ static constexpr ui64 MaxCollectGarbageFlagsPerMessage = 10000;
3939static constexpr TDuration VDiskCooldownTimeout = TDuration::Seconds(15 );
4040static constexpr TDuration VDiskCooldownTimeoutOnProxy = TDuration::Seconds(12 );
4141
42+ struct TMessageRelevanceTracker {};
43+ using TMessageRelevanceOwner = std::shared_ptr<TMessageRelevanceTracker>;
44+ using TMessageRelevanceWatcher = std::weak_ptr<TMessageRelevanceTracker>;
4245
4346struct TStorageStatusFlags {
4447 ui32 Raw = 0 ;
@@ -1071,6 +1074,7 @@ struct TEvBlobStorage {
10711074 const bool IgnoreBlock = false ;
10721075 mutable NLWTrace::TOrbit Orbit;
10731076 std::vector<std::pair<ui64, ui32>> ExtraBlockChecks; // (TabletId, Generation) pairs
1077+ std::optional<TMessageRelevanceWatcher> ExternalRelevanceWatcher;
10741078
10751079 TEvPut (TCloneEventPolicy, const TEvPut& origin)
10761080 : Id(origin.Id)
@@ -1081,18 +1085,21 @@ struct TEvBlobStorage {
10811085 , IssueKeepFlag(origin.IssueKeepFlag)
10821086 , IgnoreBlock(origin.IgnoreBlock)
10831087 , ExtraBlockChecks(origin.ExtraBlockChecks)
1088+ , ExternalRelevanceWatcher(origin.ExternalRelevanceWatcher)
10841089 {}
10851090
10861091 TEvPut (const TLogoBlobID &id, TRope &&buffer, TInstant deadline,
10871092 NKikimrBlobStorage::EPutHandleClass handleClass = NKikimrBlobStorage::TabletLog,
1088- ETactic tactic = TacticDefault, bool issueKeepFlag = false , bool ignoreBlock = false )
1093+ ETactic tactic = TacticDefault, bool issueKeepFlag = false , bool ignoreBlock = false ,
1094+ std::optional<TMessageRelevanceWatcher> externalRelevanceWatcher = std::nullopt )
10891095 : Id(id)
10901096 , Buffer(std::move(buffer))
10911097 , Deadline(deadline)
10921098 , HandleClass(handleClass)
10931099 , Tactic(tactic)
10941100 , IssueKeepFlag(issueKeepFlag)
10951101 , IgnoreBlock(ignoreBlock)
1102+ , ExternalRelevanceWatcher(externalRelevanceWatcher)
10961103 {
10971104 Y_ABORT_UNLESS (Id, " EvPut invalid: LogoBlobId must have non-zero tablet field, id# %s" , Id.ToString ().c_str ());
10981105 Y_ABORT_UNLESS (Buffer.size () < (40 * 1024 * 1024 ),
@@ -1110,21 +1117,27 @@ struct TEvBlobStorage {
11101117
11111118 TEvPut (const TLogoBlobID &id, TRcBuf &&buffer, TInstant deadline,
11121119 NKikimrBlobStorage::EPutHandleClass handleClass = NKikimrBlobStorage::TabletLog,
1113- ETactic tactic = TacticDefault, bool issueKeepFlag = false )
1114- : TEvPut(id, TRope(std::move(buffer)), deadline, handleClass, tactic, issueKeepFlag)
1120+ ETactic tactic = TacticDefault, bool issueKeepFlag = false ,
1121+ std::optional<TMessageRelevanceWatcher> externalRelevanceWatcher = std::nullopt )
1122+ : TEvPut(id, TRope(std::move(buffer)), deadline, handleClass, tactic, issueKeepFlag,
1123+ /* ignoreBlock=*/ false , std::move(externalRelevanceWatcher))
11151124 {}
11161125
11171126 TEvPut (const TLogoBlobID &id, const TString &buffer, TInstant deadline,
11181127 NKikimrBlobStorage::EPutHandleClass handleClass = NKikimrBlobStorage::TabletLog,
1119- ETactic tactic = TacticDefault, bool issueKeepFlag = false )
1120- : TEvPut(id, TRope(buffer), deadline, handleClass, tactic, issueKeepFlag)
1128+ ETactic tactic = TacticDefault, bool issueKeepFlag = false ,
1129+ std::optional<TMessageRelevanceWatcher> externalRelevanceWatcher = std::nullopt )
1130+ : TEvPut(id, TRope(buffer), deadline, handleClass, tactic, issueKeepFlag,
1131+ /* ignoreBlock=*/ false , std::move(externalRelevanceWatcher))
11211132 {}
11221133
11231134
11241135 TEvPut (const TLogoBlobID &id, const TSharedData &buffer, TInstant deadline,
11251136 NKikimrBlobStorage::EPutHandleClass handleClass = NKikimrBlobStorage::TabletLog,
1126- ETactic tactic = TacticDefault, bool issueKeepFlag = false )
1127- : TEvPut(id, TRope(buffer), deadline, handleClass, tactic, issueKeepFlag)
1137+ ETactic tactic = TacticDefault, bool issueKeepFlag = false ,
1138+ std::optional<TMessageRelevanceWatcher> externalRelevanceWatcher = std::nullopt )
1139+ : TEvPut(id, TRope(buffer), deadline, handleClass, tactic, issueKeepFlag,
1140+ /* ignoreBlock=*/ false , std::move(externalRelevanceWatcher))
11281141 {}
11291142
11301143 TString Print (bool isFull) const {
0 commit comments