Skip to content

Commit 661e799

Browse files
committed
Added consumer.consumer_group_metadata() for use with send_offsets_to_transaction()
1 parent e0480ed commit 661e799

File tree

3 files changed

+87
-0
lines changed

3 files changed

+87
-0
lines changed

confluent_kafka/src/Consumer.c

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1001,6 +1001,30 @@ static PyObject *Consumer_close (Handle *self, PyObject *ignore) {
10011001
Py_RETURN_NONE;
10021002
}
10031003

1004+
static PyObject *
1005+
Consumer_consumer_group_metadata (Handle *self, PyObject *ignore) {
1006+
rd_kafka_consumer_group_metadata_t *cgmd;
1007+
PyObject *obj;
1008+
1009+
if (!self->rk) {
1010+
PyErr_SetString(PyExc_RuntimeError,
1011+
"Consumer closed");
1012+
return NULL;
1013+
}
1014+
1015+
if (!(cgmd = rd_kafka_consumer_group_metadata(self->rk))) {
1016+
PyErr_SetString(PyExc_RuntimeError,
1017+
"Consumer group metadata not available");
1018+
return NULL;
1019+
}
1020+
1021+
obj = c_cgmd_to_py(cgmd);
1022+
1023+
rd_kafka_consumer_group_metadata_destroy(cgmd);
1024+
1025+
return obj; /* Possibly NULL */
1026+
}
1027+
10041028

10051029
static PyMethodDef Consumer_methods[] = {
10061030
{ "subscribe", (PyCFunction)Consumer_subscribe,
@@ -1277,6 +1301,16 @@ static PyMethodDef Consumer_methods[] = {
12771301
{ "list_topics", (PyCFunction)list_topics, METH_VARARGS|METH_KEYWORDS,
12781302
list_topics_doc
12791303
},
1304+
{ "consumer_group_metadata",
1305+
(PyCFunction)Consumer_consumer_group_metadata, METH_NOARGS,
1306+
".. py:function:: consumer_group_metadata()\n"
1307+
"\n"
1308+
" :returns: the consumer's current group metadata. "
1309+
"This object should be passed to the transactional producer's "
1310+
"send_offsets_to_transaction() API.\n"
1311+
"\n"
1312+
},
1313+
12801314

12811315
{ NULL }
12821316
};

confluent_kafka/src/confluent_kafka.c

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1257,6 +1257,55 @@ PyObject *c_headers_to_py (rd_kafka_headers_t *headers) {
12571257
#endif
12581258

12591259

1260+
/**
1261+
* @brief Convert C rd_kafka_consumer_group_metadata_t to Python binary string
1262+
*
1263+
* @returns The new Python object, or NULL and raises an exception failure.
1264+
*/
1265+
PyObject *c_cgmd_to_py (const rd_kafka_consumer_group_metadata_t *cgmd) {
1266+
PyObject *obj;
1267+
void *buffer;
1268+
size_t size;
1269+
rd_kafka_error_t *error;
1270+
1271+
error = rd_kafka_consumer_group_metadata_write(cgmd, &buffer, &size);
1272+
if (error) {
1273+
cfl_PyErr_from_error_destroy(error);
1274+
return NULL;
1275+
}
1276+
1277+
obj = cfl_PyBin(_FromStringAndSize(buffer, (Py_ssize_t)size));
1278+
rd_kafka_mem_free(NULL, buffer);
1279+
1280+
return obj;
1281+
}
1282+
1283+
/**
1284+
* @brief Convert Python bytes object to C rd_kafka_consumer_group_metadata_t.
1285+
*
1286+
* @returns The new C object, or NULL and raises an exception on failure.
1287+
*/
1288+
rd_kafka_consumer_group_metadata_t *py_to_c_cgmd (PyObject *obj) {
1289+
rd_kafka_consumer_group_metadata_t *cgmd;
1290+
rd_kafka_error_t *error;
1291+
char *buffer;
1292+
Py_ssize_t size;
1293+
1294+
if (cfl_PyBin(_AsStringAndSize(obj, &buffer, &size)) == -1)
1295+
return NULL;
1296+
1297+
error = rd_kafka_consumer_group_metadata_read(&cgmd,
1298+
(const void *)buffer,
1299+
(size_t)size);
1300+
if (error) {
1301+
cfl_PyErr_from_error_destroy(error);
1302+
return NULL;
1303+
}
1304+
1305+
return cgmd;
1306+
}
1307+
1308+
12601309
/****************************************************************************
12611310
*
12621311
*

confluent_kafka/src/confluent_kafka.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -373,6 +373,10 @@ rd_kafka_headers_t *py_headers_to_c (PyObject *hdrs);
373373
PyObject *c_headers_to_py (rd_kafka_headers_t *headers);
374374
#endif
375375

376+
PyObject *c_cgmd_to_py (const rd_kafka_consumer_group_metadata_t *cgmd);
377+
rd_kafka_consumer_group_metadata_t *py_to_c_cgmd (PyObject *obj);
378+
379+
376380
/****************************************************************************
377381
*
378382
*

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy