3939import org .apache .pulsar .client .api .Producer ;
4040import org .apache .pulsar .client .api .RawMessage ;
4141import org .apache .pulsar .client .api .RawReader ;
42+ import org .apache .pulsar .common .api .proto .BrokerEntryMetadata ;
4243import org .apache .pulsar .common .api .proto .MessageMetadata ;
4344import org .apache .pulsar .common .policies .data .ClusterData ;
4445import org .apache .pulsar .common .policies .data .TenantInfoImpl ;
@@ -57,6 +58,11 @@ public class RawReaderTest extends MockedPulsarServiceBaseTest {
5758 @ BeforeMethod
5859 @ Override
5960 public void setup () throws Exception {
61+ conf .setBrokerEntryMetadataInterceptors (org .assertj .core .util .Sets .newTreeSet (
62+ "org.apache.pulsar.common.intercept.AppendBrokerTimestampMetadataInterceptor" ,
63+ "org.apache.pulsar.common.intercept.AppendIndexMetadataInterceptor"
64+ ));
65+ conf .setExposingBrokerEntryMetadataToClientEnabled (true );
6066 super .internalSetup ();
6167
6268 admin .clusters ().createCluster ("test" ,
@@ -384,6 +390,40 @@ public void testBatchingRebatch() throws Exception {
384390 }
385391 }
386392
393+ @ Test
394+ public void testBatchingRebatchWithBrokerEntryMetadata () throws Exception {
395+ String topic = "persistent://my-property/my-ns/my-raw-topic" ;
396+
397+ try (Producer <byte []> producer = pulsarClient .newProducer ().topic (topic )
398+ .maxPendingMessages (3 )
399+ .enableBatching (true )
400+ .batchingMaxMessages (3 )
401+ .batchingMaxPublishDelay (1 , TimeUnit .HOURS )
402+ .messageRoutingMode (MessageRoutingMode .SinglePartition )
403+ .create ()) {
404+ producer .newMessage ().key ("key1" ).value ("my-content-1" .getBytes ()).sendAsync ();
405+ producer .newMessage ().key ("key2" ).value ("my-content-2" .getBytes ()).sendAsync ();
406+ producer .newMessage ().key ("key3" ).value ("my-content-3" .getBytes ()).send ();
407+ }
408+
409+ RawReader reader = RawReader .create (pulsarClient , topic , subscription ).get ();
410+ try (RawMessage m1 = reader .readNextAsync ().get ()) {
411+ RawMessage m2 = RawBatchConverter .rebatchMessage (m1 , (key , id ) -> key .equals ("key2" )).get ();
412+ BrokerEntryMetadata brokerEntryMetadata =
413+ Commands .parseBrokerEntryMetadataIfExist (m2 .getHeadersAndPayload ());
414+ Assert .assertNotNull (brokerEntryMetadata );
415+ Assert .assertEquals (brokerEntryMetadata .getIndex (), 2 );
416+ Assert .assertTrue (brokerEntryMetadata .getBrokerTimestamp () < System .currentTimeMillis ());
417+ List <ImmutableTriple <MessageId , String , Integer >> idsAndKeys = RawBatchConverter .extractIdsAndKeysAndSize (m2 );
418+ Assert .assertEquals (idsAndKeys .size (), 1 );
419+ Assert .assertEquals (idsAndKeys .get (0 ).getMiddle (), "key2" );
420+ m2 .close ();
421+ Assert .assertEquals (m1 .getHeadersAndPayload ().refCnt (), 1 );
422+ } finally {
423+ reader .closeAsync ().get ();
424+ }
425+ }
426+
387427 @ Test
388428 public void testAcknowledgeWithProperties () throws Exception {
389429 int numKeys = 10 ;
0 commit comments