@@ -43,7 +43,7 @@ void TKafkaProduceActor::LogEvent(IEventHandle& ev) {
4343void TKafkaProduceActor::SendMetrics (const TString& topicName, size_t delta, const TString& name, const TActorContext& ctx) {
4444 auto topicWithoutDb = GetTopicNameWithoutDb (Context->DatabasePath , topicName);
4545 ctx.Send (MakeKafkaMetricsServiceID (), new TEvKafka::TEvUpdateCounter (delta, BuildLabels (Context, " " , topicWithoutDb, TStringBuilder () << " api.kafka.produce." << name, " " )));
46- ctx.Send (MakeKafkaMetricsServiceID (), new TEvKafka::TEvUpdateCounter (delta, BuildLabels (Context, " " , topicWithoutDb, " api.kafka.produce.total_messages" , " " )));
46+ ctx.Send (MakeKafkaMetricsServiceID (), new TEvKafka::TEvUpdateCounter (delta, BuildLabels (Context, " " , topicWithoutDb, " api.kafka.produce.total_messages" , " " )));
4747}
4848
4949void TKafkaProduceActor::Bootstrap (const NActors::TActorContext& /* ctx*/ ) {
@@ -82,7 +82,7 @@ void TKafkaProduceActor::PassAway() {
8282void TKafkaProduceActor::CleanTopics (const TActorContext& ctx) {
8383 const auto now = ctx.Now ();
8484
85- std::map<TString, TTopicInfo> newTopics;
85+ std::map<TString, TTopicInfo> newTopics;
8686 for (auto & [topicPath, topicInfo] : Topics) {
8787 if (topicInfo.ExpirationTime > now) {
8888 newTopics[topicPath] = std::move (topicInfo);
@@ -242,7 +242,8 @@ size_t TKafkaProduceActor::EnqueueInitialization() {
242242THolder<TEvPartitionWriter::TEvWriteRequest> Convert (const TProduceRequestData::TTopicProduceData::TPartitionProduceData& data,
243243 const TString& topicName,
244244 ui64 cookie,
245- const TString& clientDC) {
245+ const TString& clientDC,
246+ bool chargeExtraRU) {
246247 auto ev = MakeHolder<TEvPartitionWriter::TEvWriteRequest>();
247248 auto & request = ev->Record ;
248249
@@ -254,6 +255,9 @@ THolder<TEvPartitionWriter::TEvWriteRequest> Convert(const TProduceRequestData::
254255 partitionRequest->SetPartition (data.Index );
255256 // partitionRequest->SetCmdWriteOffset();
256257 partitionRequest->SetCookie (cookie);
258+ if (chargeExtraRU) {
259+ partitionRequest->SetChargeExtraRUCount (1 );
260+ }
257261
258262 ui64 totalSize = 0 ;
259263
@@ -319,11 +323,11 @@ void TKafkaProduceActor::ProcessRequest(TPendingRequest::TPtr pendingRequest, co
319323 pendingRequest->StartTime = ctx.Now ();
320324
321325 size_t position = 0 ;
326+ bool chargeExtraRU = Context->Config .GetChargeExtraRUOnRequest ();
322327 for (const auto & topicData : r->TopicData ) {
323328 const TString& topicPath = NormalizePath (Context->DatabasePath , *topicData.Name );
324329 for (const auto & partitionData : topicData.PartitionData ) {
325330 const auto partitionId = partitionData.Index ;
326-
327331 auto writer = PartitionWriter (topicPath, partitionId, ctx);
328332 if (OK == writer.first ) {
329333 auto ownCookie = ++Cookie;
@@ -336,7 +340,8 @@ void TKafkaProduceActor::ProcessRequest(TPendingRequest::TPtr pendingRequest, co
336340 pendingRequest->WaitAcceptingCookies .insert (ownCookie);
337341 pendingRequest->WaitResultCookies .insert (ownCookie);
338342
339- auto ev = Convert (partitionData, *topicData.Name , ownCookie, ClientDC);
343+ auto ev = Convert (partitionData, *topicData.Name , ownCookie, ClientDC, chargeExtraRU);
344+ chargeExtraRU = false ;
340345
341346 Send (writer.second , std::move (ev));
342347 } else {
@@ -443,7 +448,7 @@ void TKafkaProduceActor::SendResults(const TActorContext& ctx) {
443448 // We send the results in the order of receipt of the request
444449 while (!PendingRequests.empty ()) {
445450 auto pendingRequest = PendingRequests.front ();
446-
451+
447452 // We send the response by timeout. This is possible, for example, if the event was lost or the PartitionWrite died.
448453 bool expired = expireTime > pendingRequest->StartTime ;
449454
0 commit comments