@@ -45,29 +45,64 @@ class TUploadCounters: public NColumnShard::TCommonCountersOwner {
45
45
NMonitoring::TDynamicCounters::TCounterPtr RowsCount;
46
46
NMonitoring::THistogramPtr PackageSize;
47
47
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 ;
52
52
53
53
THashMap<TString, NMonitoring::TDynamicCounters::TCounterPtr> CodesCount;
54
54
public:
55
55
TUploadCounters ();
56
56
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
+ {
60
70
61
- void OnWritingStarted (const TDuration d) const {
62
- DurationToStartWriting->Collect (d.MilliSeconds ());
63
- }
71
+ }
64
72
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
+ }
68
83
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 );
71
106
}
72
107
73
108
void OnRequest (const ui64 rowsCount) const {
@@ -76,7 +111,7 @@ class TUploadCounters: public NColumnShard::TCommonCountersOwner {
76
111
PackageSize->Collect (rowsCount);
77
112
}
78
113
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 ;
80
115
};
81
116
82
117
@@ -169,6 +204,7 @@ class TUploadRowsBase : public TActorBootstrapped<TUploadRowsBase<DerivedActivit
169
204
TActorId LeaderPipeCache;
170
205
TDuration Timeout;
171
206
TInstant StartTime;
207
+ std::optional<TInstant> StartCommitTime;
172
208
TActorId TimeoutTimerActorId;
173
209
174
210
TAutoPtr<NSchemeCache::TSchemeCacheRequest> ResolvePartitionsResult;
@@ -185,7 +221,7 @@ class TUploadRowsBase : public TActorBootstrapped<TUploadRowsBase<DerivedActivit
185
221
std::shared_ptr<NYql::TIssues> Issues = std::make_shared<NYql::TIssues>();
186
222
NLongTxService::TLongTxId LongTxId;
187
223
TUploadCounters UploadCounters;
188
-
224
+ TUploadCounters::TGuard UploadCountersGuard;
189
225
protected:
190
226
enum class EUploadSource {
191
227
ProtoValues = 0 ,
@@ -237,6 +273,7 @@ class TUploadRowsBase : public TActorBootstrapped<TUploadRowsBase<DerivedActivit
237
273
, LeaderPipeCache(MakePipePerNodeCacheID(false ))
238
274
, Timeout((timeout && timeout <= DEFAULT_TIMEOUT) ? timeout : DEFAULT_TIMEOUT)
239
275
, Status(Ydb::StatusIds::SUCCESS)
276
+ , UploadCountersGuard(UploadCounters.BuildGuard(TMonotonic::Now()))
240
277
, DiskQuotaExceeded(diskQuotaExceeded)
241
278
, Span(std::move(span))
242
279
{}
@@ -762,7 +799,7 @@ class TUploadRowsBase : public TActorBootstrapped<TUploadRowsBase<DerivedActivit
762
799
}
763
800
764
801
void WriteToColumnTable (const NActors::TActorContext& ctx) {
765
- UploadCounters .OnWritingStarted (TAppData::TimeProvider-> Now () - StartTime );
802
+ UploadCountersGuard .OnWritingStarted ();
766
803
TString accessCheckError;
767
804
if (!CheckAccess (accessCheckError)) {
768
805
return ReplyWithError (Ydb::StatusIds::UNAUTHORIZED, LogPrefix () << accessCheckError, ctx);
@@ -787,7 +824,6 @@ class TUploadRowsBase : public TActorBootstrapped<TUploadRowsBase<DerivedActivit
787
824
788
825
void Handle (NLongTxService::TEvLongTxService::TEvBeginTxResult::TPtr& ev, const TActorContext& ctx) {
789
826
const auto * msg = ev->Get ();
790
- UploadCounters.OnTxStarted (TAppData::TimeProvider->Now () - StartTime);
791
827
792
828
if (msg->Record .GetStatus () != Ydb::StatusIds::SUCCESS) {
793
829
NYql::TIssues issues;
@@ -917,7 +953,7 @@ class TUploadRowsBase : public TActorBootstrapped<TUploadRowsBase<DerivedActivit
917
953
}
918
954
919
955
void CommitLongTx (const TActorContext& ctx) {
920
- UploadCounters. OnStartCommit (TAppData::TimeProvider-> Now () - StartTime );
956
+ UploadCountersGuard. OnCommitStarted ( );
921
957
TActorId longTxServiceId = NLongTxService::MakeLongTxServiceID (ctx.SelfID .NodeId ());
922
958
ctx.Send (longTxServiceId, new NLongTxService::TEvLongTxService::TEvCommitTx (LongTxId), 0 , 0 , Span.GetTraceId ());
923
959
TBase::Become (&TThis::StateWaitCommitLongTx);
@@ -932,7 +968,7 @@ class TUploadRowsBase : public TActorBootstrapped<TUploadRowsBase<DerivedActivit
932
968
}
933
969
934
970
void Handle (NLongTxService::TEvLongTxService::TEvCommitTxResult::TPtr& ev, const NActors::TActorContext& ctx) {
935
- UploadCounters. OnFinishCommit (TAppData::TimeProvider-> Now () - StartTime );
971
+ UploadCountersGuard. OnCommitFinished ( );
936
972
const auto * msg = ev->Get ();
937
973
938
974
if (msg->Record .GetStatus () == Ydb::StatusIds::SUCCESS) {
@@ -1288,7 +1324,7 @@ class TUploadRowsBase : public TActorBootstrapped<TUploadRowsBase<DerivedActivit
1288
1324
}
1289
1325
1290
1326
void ReplyWithResult (::Ydb::StatusIds::StatusCode status, const TActorContext& ctx) {
1291
- UploadCounters .OnReply (TAppData::TimeProvider-> Now () - StartTime, status);
1327
+ UploadCountersGuard .OnReply (status);
1292
1328
SendResult (ctx, status);
1293
1329
1294
1330
LOG_DEBUG_S (ctx, NKikimrServices::RPC_REQUEST, LogPrefix () << " completed with status " << status);
0 commit comments