77namespace NKikimr {
88
99template <class TRecord >
10- void ReportResponse (const TRecord& record, const TIntrusivePtr<TVDiskContext>& vCtx);
10+ void ReportResponse (const TRecord& record, const TCommonHandleClass& handleClass, const TIntrusivePtr<TVDiskContext>& vCtx);
1111void LogOOSStatus (ui32 flags, const TLogoBlobID& blobId, const TString& vDiskLogPrefix, std::atomic<ui32>& curFlags);
1212void UpdateMonOOSStatus (ui32 flags, const std::shared_ptr<NMonGroup::TOutOfSpaceGroup>& monGroup);
13- void UpdateMonResponseStatus (NKikimrProto::EReplyStatus status, HandleClassType handleClass, const std::shared_ptr<NMonGroup::TResponseStatusGroup>& monGroup);
13+ void UpdateMonResponseStatus (NKikimrProto::EReplyStatus status, const TCommonHandleClass& handleClass, const std::shared_ptr<NMonGroup::TResponseStatusGroup>& monGroup);
1414
15- void SendVDiskResponse (const TActorContext &ctx, const TActorId &recipient, IEventBase *ev, ui64 cookie, const TIntrusivePtr<TVDiskContext>& vCtx) {
15+ void SendVDiskResponse (const TActorContext &ctx, const TActorId &recipient, IEventBase *ev, ui64 cookie, const TIntrusivePtr<TVDiskContext>& vCtx, const TCommonHandleClass& handleClass ) {
1616 ui32 channel = TInterconnectChannels::IC_BLOBSTORAGE;
1717 if (TEvVResultBase *base = dynamic_cast <TEvVResultBase *>(ev)) {
1818 channel = base->GetChannelToSend ();
1919 }
20- SendVDiskResponse (ctx, recipient, ev, cookie, channel, vCtx);
20+ SendVDiskResponse (ctx, recipient, ev, cookie, channel, vCtx, handleClass );
2121}
2222
23- void SendVDiskResponse (const TActorContext &ctx, const TActorId &recipient, IEventBase *ev, ui64 cookie, ui32 channel, const TIntrusivePtr<TVDiskContext>& vCtx) {
23+ void SendVDiskResponse (const TActorContext &ctx, const TActorId &recipient, IEventBase *ev, ui64 cookie, ui32 channel, const TIntrusivePtr<TVDiskContext>& vCtx, const TCommonHandleClass& handleClass ) {
2424 if (vCtx) {
2525 switch (ev->Type ()) {
26- #define HANDLE_EVENT (T ) \
27- case T::EventType: { \
28- T *event = static_cast <T *>(ev); \
29- ReportResponse (event->Record , vCtx); \
30- break ; \
26+ #define HANDLE_EVENT (T ) \
27+ case T::EventType: { \
28+ T *event = static_cast <T *>(ev); \
29+ ReportResponse (event->Record , handleClass, vCtx); \
30+ break ; \
3131 }
3232
3333 HANDLE_EVENT (TEvBlobStorage::TEvVPutResult)
@@ -84,13 +84,13 @@ struct TReportingOSStatus {
8484 NKikimrBlobStorage::TEvVMultiPutResult>;
8585
8686 template <typename TRecord>
87- static void Report (const TRecord& record, const TIntrusivePtr<TVDiskContext>& vCtx) {
87+ static void Report (const TRecord& record, const TCommonHandleClass&, const TIntrusivePtr<TVDiskContext>& vCtx) {
8888 LogOOSStatus (record.GetStatusFlags (), LogoBlobIDFromLogoBlobID (record.GetBlobID ()), vCtx->VDiskLogPrefix , vCtx->CurrentOOSStatusFlag );
8989 UpdateMonOOSStatus (record.GetStatusFlags (), vCtx->OOSMonGroup );
9090 }
9191
9292 template <>
93- void Report (const NKikimrBlobStorage::TEvVMultiPutResult& record, const TIntrusivePtr<TVDiskContext>& vCtx) {
93+ void Report (const NKikimrBlobStorage::TEvVMultiPutResult& record, const TCommonHandleClass&, const TIntrusivePtr<TVDiskContext>& vCtx) {
9494 if (record.ItemsSize () > 0 ) {
9595 const auto & item = record.GetItems (0 );
9696 LogOOSStatus (record.GetStatusFlags (), LogoBlobIDFromLogoBlobID (item.GetBlobID ()), vCtx->VDiskLogPrefix , vCtx->CurrentOOSStatusFlag );
@@ -108,37 +108,37 @@ struct TReportingResponseStatus {
108108 NKikimrBlobStorage::TEvVCollectGarbageResult>;
109109
110110 template <typename TRecord>
111- static void Report (const TRecord& record, const TIntrusivePtr<TVDiskContext>& vCtx) {
112- UpdateMonResponseStatus (record.GetStatus (), record. GetHandleClass () , vCtx->ResponseStatusMonGroup );
111+ static void Report (const TRecord& record, const TCommonHandleClass& handleClass, const TIntrusivePtr<TVDiskContext>& vCtx) {
112+ UpdateMonResponseStatus (record.GetStatus (), handleClass , vCtx->ResponseStatusMonGroup );
113113 }
114114
115115 template <>
116- void Report (const NKikimrBlobStorage::TEvVMultiPutResult& record, const TIntrusivePtr<TVDiskContext>& vCtx) {
116+ void Report (const NKikimrBlobStorage::TEvVMultiPutResult& record, const TCommonHandleClass& handleClass, const TIntrusivePtr<TVDiskContext>& vCtx) {
117117 for (const auto & item : record.GetItems ()) {
118- UpdateMonResponseStatus (item.GetStatus (), record. GetHandleClass () , vCtx->ResponseStatusMonGroup );
118+ UpdateMonResponseStatus (item.GetStatus (), handleClass , vCtx->ResponseStatusMonGroup );
119119 }
120120}
121121};
122122
123123#define DEFUNE_REPORT (NAME ) \
124124 template <typename TRecord> \
125125 typename std::enable_if<IsInTypes<TRecord, TReporting##NAME::EnableFor>::value>::type Report##NAME( \
126- const TRecord& record, const TIntrusivePtr<TVDiskContext>& vCtx) { \
127- TReporting##NAME::Report (record, vCtx); \
126+ const TRecord& record, const TCommonHandleClass& handleClass, const TIntrusivePtr<TVDiskContext>& vCtx) { \
127+ TReporting##NAME::Report (record, handleClass, vCtx); \
128128 } \
129129 \
130130 template <typename TRecord> \
131131 typename std::enable_if<!IsInTypes<TRecord, TReporting##NAME::EnableFor>::value>::type Report##NAME( \
132- const TRecord& record, const TIntrusivePtr<TVDiskContext>& vCtx) {}
132+ const TRecord& record, const TCommonHandleClass& handleClass, const TIntrusivePtr<TVDiskContext>& vCtx) {}
133133
134134 DEFUNE_REPORT (OSStatus)
135135 DEFUNE_REPORT (ResponseStatus)
136136#undef DEFUNE_REPORT
137137
138138template <class TRecord >
139- void ReportResponse (const TRecord& record, const TIntrusivePtr<TVDiskContext>& vCtx) {
140- ReportOSStatus (record, vCtx);
141- ReportResponseStatus (record, vCtx);
139+ void ReportResponse (const TRecord& record, const TCommonHandleClass& handleClass, const TIntrusivePtr<TVDiskContext>& vCtx) {
140+ ReportOSStatus (record, handleClass, vCtx);
141+ ReportResponseStatus (record, handleClass, vCtx);
142142}
143143
144144void LogOOSStatus (ui32 flags, const TLogoBlobID& blobId, const TString& vDiskLogPrefix, std::atomic<ui32>& curFlags) {
@@ -183,13 +183,18 @@ void UpdateMonOOSStatus(ui32 flags, const std::shared_ptr<NMonGroup::TOutOfSpace
183183 }
184184}
185185
186- void UpdateMonResponseStatus (NKikimrProto::EReplyStatus status, HandleClassType handleClass,
187- const std::shared_ptr<NMonGroup::TResponseStatusGroup>& monGroup) {
186+ void UpdateMonResponseStatus (NKikimrProto::EReplyStatus status, const TCommonHandleClass& handleClass, const std::shared_ptr<NMonGroup::TResponseStatusGroup>& monGroup) {
188187 if (!monGroup) {
189188 return ;
190189 }
191190
192- monGroup->GetCounter (status, handleClass).Inc ();
191+ if (handleClass.PutHandleClass ) {
192+ monGroup->GetCounter (status, handleClass.PutHandleClass ).Inc ();
193+ } else if (handleClass.GetHandleClass ) {
194+ monGroup->GetCounter (status, handleClass.GetHandleClass ).Inc ();
195+ } else {
196+ monGroup->GetCounter (status).Inc ();
197+ }
193198}
194199
195200} // NKikimr
0 commit comments