Skip to content

Commit

Permalink
Add rd_kafka_get_err_descs
Browse files Browse the repository at this point in the history
  • Loading branch information
arnaud-lb committed Feb 23, 2016
1 parent da30185 commit 7b6d516
Show file tree
Hide file tree
Showing 3 changed files with 93 additions and 6 deletions.
8 changes: 7 additions & 1 deletion config.m4
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,13 @@ if test "$PHP_RDKAFKA" != "no"; then
],[
AC_MSG_WARN([no rd_kafka_msg_partitioner_consistent, the consistent partitioner will not be available])
])


AC_CHECK_LIB($LIBNAME,[rd_kafka_get_err_descs],[
AC_DEFINE(HAVE_RD_KAFKA_GET_ERR_DESCS,1,[ ])
],[
AC_MSG_WARN([no rd_kafka_get_err_descs, the rd_kafka_get_err_descs function will not be available])
])

PHP_SUBST(RDKAFKA_SHARED_LIBADD)

PHP_NEW_EXTENSION(rdkafka, rdkafka.c metadata.c metadata_broker.c metadata_topic.c metadata_partition.c metadata_collection.c compat.c conf.c topic.c queue.c message.c fun.c, $ext_shared)
Expand Down
65 changes: 60 additions & 5 deletions fun.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@
#include "ext/spl/spl_exceptions.h"

/* {{{ arginfo */
ZEND_BEGIN_ARG_INFO_EX(arginfo_kafka_get_err_descs, 0, 0, 0)
ZEND_END_ARG_INFO()

ZEND_BEGIN_ARG_INFO_EX(arginfo_kafka_err2str, 0, 0, 1)
ZEND_ARG_INFO(0, err)
ZEND_END_ARG_INFO()
Expand All @@ -46,6 +49,55 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_kafka_offset_tail, 0, 0, 1)
ZEND_END_ARG_INFO()
/* }}} */

#ifdef HAVE_RD_KAFKA_GET_ERR_DESCS
/* {{{ proto array rd_kafka_get_err_descs()
* Returns the full list of error codes.
*/
PHP_FUNCTION(rd_kafka_get_err_descs)
{
const struct rd_kafka_err_desc *errdescs;
size_t cnt;
size_t i;
int seen_zero = 0;

if (zend_parse_parameters_none() == FAILURE) {
return;
}

rd_kafka_get_err_descs(&errdescs, &cnt);

array_init_size(return_value, cnt);

for (i = 0; i < cnt; i++) {
const struct rd_kafka_err_desc *desc = &errdescs[i];
zval *el;

if (desc->code == 0) {
if (seen_zero) {
continue;
}
seen_zero = 1;
}

ALLOC_INIT_ZVAL(el);
array_init(el);
add_assoc_long(el, "code", desc->code);
if (desc->name) {
add_assoc_string(el, "name", (char*) desc->name, 1);
} else {
add_assoc_null(el, "name");
}
if (desc->desc) {
add_assoc_string(el, "desc", (char*) desc->desc, 1);
}else {
add_assoc_null(el, "desc");
}
add_next_index_zval(return_value, el);
}
}
/* }}} */
#endif

/* {{{ proto string rd_kafka_err2str(int $err)
* Returns a human readable representation of a kafka error.
*/
Expand Down Expand Up @@ -123,11 +175,14 @@ PHP_FUNCTION(rd_kafka_offset_tail)
/* {{{ rdkafka_functions[]
*/
const zend_function_entry rdkafka_functions[] = {
PHP_FE(rd_kafka_err2str, arginfo_kafka_err2str)
PHP_FE(rd_kafka_errno2err, arginfo_kafka_errno2err)
PHP_FE(rd_kafka_errno, arginfo_kafka_errno)
PHP_FE(rd_kafka_offset_tail,arginfo_kafka_offset_tail)
PHP_FE(rd_kafka_thread_cnt, arginfo_kafka_thread_cnt)
#ifdef HAVE_RD_KAFKA_GET_ERR_DESCS
PHP_FE(rd_kafka_get_err_descs, arginfo_kafka_get_err_descs)
#endif
PHP_FE(rd_kafka_err2str, arginfo_kafka_err2str)
PHP_FE(rd_kafka_errno2err, arginfo_kafka_errno2err)
PHP_FE(rd_kafka_errno, arginfo_kafka_errno)
PHP_FE(rd_kafka_offset_tail, arginfo_kafka_offset_tail)
PHP_FE(rd_kafka_thread_cnt, arginfo_kafka_thread_cnt)
PHP_FE_END /* Must be the last line in rdkafka_functions[] */
};
/* }}} */
Expand Down
26 changes: 26 additions & 0 deletions tests/rd_kafka_get_err_descs.phpt
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
--TEST--
rd_kafka_get_err_descs()
--SKIPIF--
<?php
if (!function_exists('rd_kafka_get_err_descs')) {
echo "skip";
}
--FILE--
<?php
$descs = rd_kafka_get_err_descs();
var_dump(gettype($descs));
foreach ($descs as $desc) {
if ($desc['name'] == '_MSG_TIMED_OUT') {
var_dump($desc);
}
}
--EXPECT--
string(5) "array"
array(3) {
["code"]=>
int(-192)
["name"]=>
string(14) "_MSG_TIMED_OUT"
["desc"]=>
string(24) "Local: Message timed out"
}

0 comments on commit 7b6d516

Please sign in to comment.