@@ -132,9 +132,7 @@ void TKafkaProduceActor::HandleInit(TEvTxProxySchemeCache::TEvNavigateKeySetResu
132
132
if (info.SecurityObject ->CheckAccess (NACLib::EAccessRights::UpdateRow, *Context->UserToken )) {
133
133
topic.Status = OK;
134
134
topic.ExpirationTime = now + TOPIC_OK_EXPIRATION_INTERVAL;
135
- for (auto & p : info.PQGroupInfo ->Description .GetPartitions ()) {
136
- topic.partitions [p.GetPartitionId ()] = p.GetTabletId ();
137
- }
135
+ topic.PartitionChooser = CreatePartitionChooser (info.PQGroupInfo ->Description );
138
136
} else {
139
137
KAFKA_LOG_W (" Produce actor: Unauthorized PRODUCE to topic '" << topicPath << " '" );
140
138
topic.Status = UNAUTHORIZED;
@@ -178,7 +176,7 @@ void TKafkaProduceActor::Handle(TEvTxProxySchemeCache::TEvWatchNotifyDeleted::TP
178
176
auto & topicInfo = Topics[path];
179
177
topicInfo.Status = NOT_FOUND;
180
178
topicInfo.ExpirationTime = ctx.Now () + TOPIC_NOT_FOUND_EXPIRATION_INTERVAL;
181
- topicInfo.partitions . clear ();
179
+ topicInfo.PartitionChooser . reset ();
182
180
}
183
181
184
182
void TKafkaProduceActor::Handle (TEvTxProxySchemeCache::TEvWatchNotifyUpdated::TPtr& ev, const TActorContext& ctx) {
@@ -192,10 +190,7 @@ void TKafkaProduceActor::Handle(TEvTxProxySchemeCache::TEvWatchNotifyUpdated::TP
192
190
}
193
191
topic.Status = OK;
194
192
topic.ExpirationTime = ctx.Now () + TOPIC_OK_EXPIRATION_INTERVAL;
195
- topic.partitions .clear ();
196
- for (auto & p : e->Result ->GetPathDescription ().GetPersQueueGroup ().GetPartitions ()) {
197
- topic.partitions [p.GetPartitionId ()] = p.GetTabletId ();
198
- }
193
+ topic.PartitionChooser = CreatePartitionChooser (e->Result ->GetPathDescription ().GetPersQueueGroup ());
199
194
}
200
195
201
196
void TKafkaProduceActor::Handle (TEvKafka::TEvProduceRequest::TPtr request, const TActorContext& ctx) {
@@ -578,17 +573,17 @@ std::pair<TKafkaProduceActor::ETopicStatus, TActorId> TKafkaProduceActor::Partit
578
573
return { OK, writerInfo.ActorId };
579
574
}
580
575
581
- auto & partitions = topicInfo.partitions ;
582
- auto pit = partitions.find (partitionId);
583
- if (pit == partitions.end ()) {
576
+ auto * partition = topicInfo.PartitionChooser ->GetPartition (partitionId);
577
+ if (!partition) {
584
578
return { NOT_FOUND, TActorId{} };
585
579
}
586
580
587
- auto tabletId = pit->second ;
588
581
TPartitionWriterOpts opts;
589
582
opts.WithDeduplication (false )
583
+ .WithSourceId (SourceId)
584
+ .WithTopicPath (topicPath)
590
585
.WithCheckRequestUnits (topicInfo.MeteringMode , Context->RlContext );
591
- auto * writerActor = CreatePartitionWriter (SelfId (), topicPath, tabletId, partitionId, { /* expectedGeneration */ }, SourceId , opts);
586
+ auto * writerActor = CreatePartitionWriter (SelfId (), partition-> TabletId , partitionId, opts);
592
587
593
588
auto & writerInfo = partitionWriters[partitionId];
594
589
writerInfo.ActorId = ctx.RegisterWithSameMailbox (writerActor);
0 commit comments