@@ -28,24 +28,32 @@ import (
2828#include "glue_rdkafka.h"
2929
3030
31- #ifdef RD_KAFKA_V_HEADERS
32- void chdrs_to_tmphdrs (rd_kafka_headers_t *chdrs, tmphdr_t *tmphdrs) {
33- size_t i = 0;
34- const char *name;
35- const void *val;
36- size_t size;
37-
38- while (!rd_kafka_header_get_all(chdrs, i,
39- &tmphdrs[i].key,
40- &tmphdrs[i].val,
41- (size_t *)&tmphdrs[i].size))
42- i++;
31+ void chdrs_to_tmphdrs (glue_msg_t *gMsg) {
32+ size_t i = 0;
33+ const char *name;
34+ const void *val;
35+ size_t size;
36+ rd_kafka_headers_t *chdrs;
37+
38+ if (rd_kafka_message_headers(gMsg->msg, &chdrs)) {
39+ gMsg->tmphdrs = NULL;
40+ gMsg->tmphdrsCnt = 0;
41+ return;
42+ }
43+
44+ gMsg->tmphdrsCnt = rd_kafka_header_cnt(chdrs);
45+ gMsg->tmphdrs = malloc(sizeof(*gMsg->tmphdrs) * gMsg->tmphdrsCnt);
46+
47+ while (!rd_kafka_header_get_all(chdrs, i,
48+ &gMsg->tmphdrs[i].key,
49+ &gMsg->tmphdrs[i].val,
50+ (size_t *)&gMsg->tmphdrs[i].size))
51+ i++;
4352}
44- #endif
4553
4654rd_kafka_event_t *_rk_queue_poll (rd_kafka_queue_t *rkq, int timeoutMs,
4755 rd_kafka_event_type_t *evtype,
48- fetched_c_msg_t *fcMsg ,
56+ glue_msg_t *gMsg ,
4957 rd_kafka_event_t *prev_rkev) {
5058 rd_kafka_event_t *rkev;
5159
@@ -56,31 +64,22 @@ rd_kafka_event_t *_rk_queue_poll (rd_kafka_queue_t *rkq, int timeoutMs,
5664 *evtype = rd_kafka_event_type(rkev);
5765
5866 if (*evtype == RD_KAFKA_EVENT_FETCH) {
59- #ifdef RD_KAFKA_V_HEADERS
60- rd_kafka_headers_t *hdrs;
61- #endif
62-
63- fcMsg->msg = (rd_kafka_message_t *)rd_kafka_event_message_next(rkev);
64- fcMsg->ts = rd_kafka_message_timestamp(fcMsg->msg, &fcMsg->tstype);
65-
66- #ifdef RD_KAFKA_V_HEADERS
67- if (!rd_kafka_message_headers(fcMsg->msg, &hdrs)) {
68- fcMsg->tmphdrsCnt = rd_kafka_header_cnt(hdrs);
69- fcMsg->tmphdrs = malloc(sizeof(*fcMsg->tmphdrs) * fcMsg->tmphdrsCnt);
70- chdrs_to_tmphdrs(hdrs, fcMsg->tmphdrs);
71- } else {
72- #else
73- if (1) {
74- #endif
75- fcMsg->tmphdrs = NULL;
76- fcMsg->tmphdrsCnt = 0;
77- }
67+ gMsg->msg = (rd_kafka_message_t *)rd_kafka_event_message_next(rkev);
68+ gMsg->ts = rd_kafka_message_timestamp(gMsg->msg, &gMsg->tstype);
69+
70+ if (gMsg->want_hdrs)
71+ chdrs_to_tmphdrs(gMsg);
7872 }
73+
7974 return rkev;
8075}
8176*/
8277import "C"
8378
79+ func chdrsToTmphdrs (gMsg * C.glue_msg_t ) {
80+ C .chdrs_to_tmphdrs (gMsg )
81+ }
82+
8483// Event generic interface
8584type Event interface {
8685 // String returns a human-readable representation of the event
@@ -164,8 +163,9 @@ func (h *handle) eventPoll(channel chan Event, timeoutMs int, maxEvents int, ter
164163out:
165164 for evcnt := 0 ; evcnt < maxEvents ; evcnt ++ {
166165 var evtype C.rd_kafka_event_type_t
167- var fcMsg C.fetched_c_msg_t
168- rkev := C ._rk_queue_poll (h .rkq , C .int (timeoutMs ), & evtype , & fcMsg , prevRkev )
166+ var gMsg C.glue_msg_t
167+ gMsg .want_hdrs = C .int8_t (bool2cint (h .msgFields .Headers ))
168+ rkev := C ._rk_queue_poll (h .rkq , C .int (timeoutMs ), & evtype , & gMsg , prevRkev )
169169 prevRkev = rkev
170170 timeoutMs = 0
171171
174174 switch evtype {
175175 case C .RD_KAFKA_EVENT_FETCH :
176176 // Consumer fetch event, new message.
177- // Extracted into temporary fcMsg for optimization
178- retval = h .newMessageFromFcMsg ( & fcMsg )
177+ // Extracted into temporary gMsg for optimization
178+ retval = h .newMessageFromGlueMsg ( & gMsg )
179179
180180 case C .RD_KAFKA_EVENT_REBALANCE :
181181 // Consumer rebalance event
0 commit comments