@@ -45,29 +45,64 @@ class TUploadCounters: public NColumnShard::TCommonCountersOwner {
4545 NMonitoring::TDynamicCounters::TCounterPtr RowsCount;
4646 NMonitoring::THistogramPtr PackageSize;
4747
48- NMonitoring::THistogramPtr DurationToStartCommit ;
49- NMonitoring::THistogramPtr DurationToFinishCommit ;
50- NMonitoring::THistogramPtr DurationToStartWriting ;
51- NMonitoring::THistogramPtr DurationToTxStarted ;
48+ NMonitoring::THistogramPtr PreparingDuration ;
49+ NMonitoring::THistogramPtr WritingDuration ;
50+ NMonitoring::THistogramPtr CommitDuration ;
51+ NMonitoring::THistogramPtr PrepareReplyDuration ;
5252
5353 THashMap<TString, NMonitoring::TDynamicCounters::TCounterPtr> CodesCount;
5454public:
5555 TUploadCounters ();
5656
57- void OnTxStarted (const TDuration d) const {
58- DurationToTxStarted->Collect (d.MilliSeconds ());
59- }
57+ class TGuard : TMoveOnly {
58+ private:
59+ TMonotonic Start = TMonotonic::Now();
60+ std::optional<TMonotonic> WritingStarted;
61+ std::optional<TMonotonic> CommitStarted;
62+ std::optional<TMonotonic> CommitFinished;
63+ std::optional<TMonotonic> ReplyFinished;
64+ TUploadCounters& Owner;
65+ public:
66+ TGuard (const TMonotonic start, TUploadCounters& owner)
67+ : Start(start)
68+ , Owner(owner)
69+ {
6070
61- void OnWritingStarted (const TDuration d) const {
62- DurationToStartWriting->Collect (d.MilliSeconds ());
63- }
71+ }
6472
65- void OnStartCommit (const TDuration d) const {
66- DurationToStartCommit->Collect (d.MilliSeconds ());
67- }
73+ void OnWritingStarted () {
74+ WritingStarted = TMonotonic::Now ();
75+ Owner.PreparingDuration ->Collect ((*WritingStarted - Start).MilliSeconds ());
76+ }
77+
78+ void OnCommitStarted () {
79+ CommitStarted = TMonotonic::Now ();
80+ AFL_VERIFY (WritingStarted);
81+ Owner.WritingDuration ->Collect ((*CommitStarted - *WritingStarted).MilliSeconds ());
82+ }
6883
69- void OnFinishCommit (const TDuration d) const {
70- DurationToFinishCommit->Collect (d.MilliSeconds ());
84+ void OnCommitFinished () {
85+ CommitFinished = TMonotonic::Now ();
86+ AFL_VERIFY (CommitStarted);
87+ Owner.CommitDuration ->Collect ((*CommitFinished - *CommitStarted).MilliSeconds ());
88+ }
89+
90+ void OnReply (const ::Ydb::StatusIds::StatusCode code) {
91+ ReplyFinished = TMonotonic::Now ();
92+ if (CommitFinished) {
93+ Owner.PrepareReplyDuration ->Collect ((*ReplyFinished - *CommitFinished).MilliSeconds ());
94+ }
95+ Owner.ReplyDuration ->Collect ((*ReplyFinished - Start).MilliSeconds ());
96+
97+ const TString name = ::Ydb::StatusIds::StatusCode_Name (code);
98+ auto it = Owner.CodesCount .find (name);
99+ Y_ABORT_UNLESS (it != Owner.CodesCount .end ());
100+ it->second ->Add (1 );
101+ }
102+ };
103+
104+ TGuard BuildGuard (const TMonotonic start) {
105+ return TGuard (start, *this );
71106 }
72107
73108 void OnRequest (const ui64 rowsCount) const {
@@ -76,7 +111,7 @@ class TUploadCounters: public NColumnShard::TCommonCountersOwner {
76111 PackageSize->Collect (rowsCount);
77112 }
78113
79- void OnReply (const TDuration d , const ::Ydb::StatusIds::StatusCode code) const ;
114+ void OnReply (const TDuration dFull, const TDuration dDelta , const ::Ydb::StatusIds::StatusCode code) const ;
80115};
81116
82117
@@ -169,6 +204,7 @@ class TUploadRowsBase : public TActorBootstrapped<TUploadRowsBase<DerivedActivit
169204 TActorId LeaderPipeCache;
170205 TDuration Timeout;
171206 TInstant StartTime;
207+ std::optional<TInstant> StartCommitTime;
172208 TActorId TimeoutTimerActorId;
173209
174210 TAutoPtr<NSchemeCache::TSchemeCacheRequest> ResolvePartitionsResult;
@@ -185,7 +221,7 @@ class TUploadRowsBase : public TActorBootstrapped<TUploadRowsBase<DerivedActivit
185221 std::shared_ptr<NYql::TIssues> Issues = std::make_shared<NYql::TIssues>();
186222 NLongTxService::TLongTxId LongTxId;
187223 TUploadCounters UploadCounters;
188-
224+ TUploadCounters::TGuard UploadCountersGuard;
189225protected:
190226 enum class EUploadSource {
191227 ProtoValues = 0 ,
@@ -237,6 +273,7 @@ class TUploadRowsBase : public TActorBootstrapped<TUploadRowsBase<DerivedActivit
237273 , LeaderPipeCache(MakePipePerNodeCacheID(false ))
238274 , Timeout((timeout && timeout <= DEFAULT_TIMEOUT) ? timeout : DEFAULT_TIMEOUT)
239275 , Status(Ydb::StatusIds::SUCCESS)
276+ , UploadCountersGuard(UploadCounters.BuildGuard(TMonotonic::Now()))
240277 , DiskQuotaExceeded(diskQuotaExceeded)
241278 , Span(std::move(span))
242279 {}
@@ -762,7 +799,7 @@ class TUploadRowsBase : public TActorBootstrapped<TUploadRowsBase<DerivedActivit
762799 }
763800
764801 void WriteToColumnTable (const NActors::TActorContext& ctx) {
765- UploadCounters .OnWritingStarted (TAppData::TimeProvider-> Now () - StartTime );
802+ UploadCountersGuard .OnWritingStarted ();
766803 TString accessCheckError;
767804 if (!CheckAccess (accessCheckError)) {
768805 return ReplyWithError (Ydb::StatusIds::UNAUTHORIZED, LogPrefix () << accessCheckError, ctx);
@@ -787,7 +824,6 @@ class TUploadRowsBase : public TActorBootstrapped<TUploadRowsBase<DerivedActivit
787824
788825 void Handle (NLongTxService::TEvLongTxService::TEvBeginTxResult::TPtr& ev, const TActorContext& ctx) {
789826 const auto * msg = ev->Get ();
790- UploadCounters.OnTxStarted (TAppData::TimeProvider->Now () - StartTime);
791827
792828 if (msg->Record .GetStatus () != Ydb::StatusIds::SUCCESS) {
793829 NYql::TIssues issues;
@@ -917,7 +953,7 @@ class TUploadRowsBase : public TActorBootstrapped<TUploadRowsBase<DerivedActivit
917953 }
918954
919955 void CommitLongTx (const TActorContext& ctx) {
920- UploadCounters. OnStartCommit (TAppData::TimeProvider-> Now () - StartTime );
956+ UploadCountersGuard. OnCommitStarted ( );
921957 TActorId longTxServiceId = NLongTxService::MakeLongTxServiceID (ctx.SelfID .NodeId ());
922958 ctx.Send (longTxServiceId, new NLongTxService::TEvLongTxService::TEvCommitTx (LongTxId), 0 , 0 , Span.GetTraceId ());
923959 TBase::Become (&TThis::StateWaitCommitLongTx);
@@ -932,7 +968,7 @@ class TUploadRowsBase : public TActorBootstrapped<TUploadRowsBase<DerivedActivit
932968 }
933969
934970 void Handle (NLongTxService::TEvLongTxService::TEvCommitTxResult::TPtr& ev, const NActors::TActorContext& ctx) {
935- UploadCounters. OnFinishCommit (TAppData::TimeProvider-> Now () - StartTime );
971+ UploadCountersGuard. OnCommitFinished ( );
936972 const auto * msg = ev->Get ();
937973
938974 if (msg->Record .GetStatus () == Ydb::StatusIds::SUCCESS) {
@@ -1288,7 +1324,7 @@ class TUploadRowsBase : public TActorBootstrapped<TUploadRowsBase<DerivedActivit
12881324 }
12891325
12901326 void ReplyWithResult (::Ydb::StatusIds::StatusCode status, const TActorContext& ctx) {
1291- UploadCounters .OnReply (TAppData::TimeProvider-> Now () - StartTime, status);
1327+ UploadCountersGuard .OnReply (status);
12921328 SendResult (ctx, status);
12931329
12941330 LOG_DEBUG_S (ctx, NKikimrServices::RPC_REQUEST, LogPrefix () << " completed with status " << status);
0 commit comments