@@ -562,6 +562,8 @@ void ProducerImpl::sendAsyncWithStatsUpdate(const Message& msg, const SendCallba
562
562
msgMetadata.set_total_chunk_msg_size (compressedSize);
563
563
}
564
564
565
+ auto chunkMessageId = totalChunks > 1 ? std::make_shared<ChunkMessageIdImpl>() : nullptr ;
566
+
565
567
int beginIndex = 0 ;
566
568
for (int chunkId = 0 ; chunkId < totalChunks; chunkId++) {
567
569
if (sendChunks) {
@@ -578,7 +580,7 @@ void ProducerImpl::sendAsyncWithStatsUpdate(const Message& msg, const SendCallba
578
580
}
579
581
OpSendMsg op{msgMetadata, encryptedPayload, (chunkId == totalChunks - 1 ) ? callback : nullptr ,
580
582
producerId_, sequenceId, conf_.getSendTimeout (),
581
- 1 , uncompressedSize};
583
+ 1 , uncompressedSize, chunkMessageId };
582
584
583
585
if (!chunkingEnabled_) {
584
586
const uint32_t msgMetadataSize = op.metadata_ .ByteSize ();
@@ -873,14 +875,11 @@ bool ProducerImpl::ackReceived(uint64_t sequenceId, MessageId& rawMessageId) {
873
875
// Message was persisted correctly
874
876
LOG_DEBUG (getName () << " Received ack for msg " << sequenceId);
875
877
876
- auto totalChunks = op.metadata_ .num_chunks_from_msg ();
877
- if (totalChunks > 1 ) {
878
- if (!op.chunkedMessageId_ ) {
879
- op.chunkedMessageId_ = std::make_shared<ChunkMessageIdImpl>();
880
- }
878
+ if (op.chunkedMessageId_ ) {
879
+ // Handling the chunk message id.
881
880
if (op.metadata_ .chunk_id () == 0 ) {
882
881
op.chunkedMessageId_ ->setFirstChunkMessageId (messageId);
883
- } else if (op.metadata_ .chunk_id () == totalChunks - 1 ) {
882
+ } else if (op.metadata_ .chunk_id () == op. metadata_ . num_chunks_from_msg () - 1 ) {
884
883
op.chunkedMessageId_ ->setLastChunkMessageId (messageId);
885
884
messageId = ChunkMessageIdImpl::buildMessageId (op.chunkedMessageId_ );
886
885
}
0 commit comments