void RdKafka::log_cb_trampoline (const rd_kafka_t *rk, int level, const char *fac, const char *buf) { if (!rk) { rd_kafka_log_print(rk, level, fac, buf); return; } void *opaque = rd_kafka_opaque(rk); RdKafka::HandleImpl *handle = static_cast<RdKafka::HandleImpl *>(opaque); if (!handle->event_cb_) { rd_kafka_log_print(rk, level, fac, buf); return; } RdKafka::EventImpl event(RdKafka::Event::EVENT_LOG, RdKafka::ERR_NO_ERROR, static_cast<RdKafka::Event::Severity>(level), fac, buf); handle->event_cb_->event_cb(event); }
static PyObject * RdkHandle_stop(RdkHandle *self) { /* We'll only ever get a locking error if we programmed ourselves into a * deadlock. We'd have to admit defeat, abort, and leak this RdkHandle */ if (RdkHandle_excl_lock(self)) return NULL; Py_BEGIN_ALLOW_THREADS /* avoid callbacks deadlocking */ if (self->rdk_queue_handle) { rd_kafka_queue_destroy(self->rdk_queue_handle); self->rdk_queue_handle = NULL; } if (self->rdk_topic_handle) { rd_kafka_topic_destroy(self->rdk_topic_handle); self->rdk_topic_handle = NULL; } if (self->rdk_handle) { PyObject *opaque = (PyObject *)rd_kafka_opaque(self->rdk_handle); Py_XDECREF(opaque); rd_kafka_destroy(self->rdk_handle); self->rdk_handle = NULL; } if (self->rdk_conf) { rd_kafka_conf_destroy(self->rdk_conf); self->rdk_conf = NULL; } if (self->rdk_topic_conf) { rd_kafka_topic_conf_destroy(self->rdk_topic_conf); self->rdk_topic_conf = NULL; } Py_END_ALLOW_THREADS Py_CLEAR(self->partition_ids); if (RdkHandle_unlock(self)) return NULL; Py_INCREF(Py_None); return Py_None; }
static void producer_error_callback(rd_kafka_t *rk, int error, const char *reason, void *opaque) { hermann_conf_t *conf = (hermann_conf_t *)rd_kafka_opaque(rk); TRACER("error (%i): %s\n", error, reason); conf->isErrored = error; if (error) { /* If we have an old error string in here we need to make sure to * free() it before we allocate a new string */ if (NULL != conf->error) { free(conf->error); } /* Grab the length of the string plus the null character */ size_t error_length = strnlen(reason, HERMANN_MAX_ERRSTR_LEN) + 1; conf->error = (char *)malloc((sizeof(char) * error_length)); (void)strncpy(conf->error, reason, error_length); } }
static PyObject * Producer_produce(RdkHandle *self, PyObject *message) { if (RdkHandle_safe_lock(self, /* check_running= */ 1)) return NULL; PyObject *value = NULL; PyObject *partition_key = NULL; PyObject *partition_id = NULL; /* Keep message alive until the delivery-callback runs. Needed both * because we may want to put the message on a report queue when the * callback runs, and because we'll tell rd_kafka_produce() not to copy * the payload and it can safely use the raw Message bytes directly */ Py_INCREF(message); /* Get pointers to raw Message contents */ value = PyObject_GetAttrString(message, "value"); if (! value) goto failed; partition_key = PyObject_GetAttrString(message, "partition_key"); if (! partition_key) goto failed; partition_id = PyObject_GetAttrString(message, "partition_id"); if (! partition_id) goto failed; char *v = NULL; Py_ssize_t v_len = 0; if (value != Py_None) { v = PyBytes_AsString(value); if (! v) goto failed; v_len = PyBytes_GET_SIZE(value); } char *pk = NULL; Py_ssize_t pk_len = 0; if (partition_key != Py_None) { pk = PyBytes_AsString(partition_key); if (! pk) goto failed; pk_len = PyBytes_GET_SIZE(partition_key); } int32_t p_id = PyLong_AsLong(partition_id); if (p_id == -1 && PyErr_Occurred()) goto failed; int res = 0; Py_BEGIN_ALLOW_THREADS res = rd_kafka_produce(self->rdk_topic_handle, p_id, 0, /* ie don't copy and don't dealloc v */ v, v_len, pk, pk_len, (void *)message); Py_END_ALLOW_THREADS if (res == -1) { rd_kafka_resp_err_t err = rd_kafka_errno2err(errno); if (err == RD_KAFKA_RESP_ERR__QUEUE_FULL) { set_pykafka_error("ProducerQueueFullError", ""); goto failed; } else { /* Any other errors should go through the report queue, * because that's where pykafka.Producer would put them */ PyObject *put_func = (PyObject *)rd_kafka_opaque(self->rdk_handle); if (-1 == Producer_delivery_report_put(put_func, message, err)) { goto failed; } } Py_DECREF(message); /* There won't be a delivery-callback */ } Py_DECREF(value); Py_DECREF(partition_key); Py_DECREF(partition_id); if (RdkHandle_unlock(self)) return NULL; Py_INCREF(Py_None); return Py_None; failed: Py_XDECREF(value); Py_XDECREF(partition_key); Py_XDECREF(partition_id); RdkHandle_unlock(self); return NULL; }
int main (int argc, char **argv) { if (argc < 0 /* always false */) { rd_kafka_version(); rd_kafka_version_str(); rd_kafka_err2str(RD_KAFKA_RESP_ERR_NO_ERROR); rd_kafka_errno2err(EINVAL); rd_kafka_conf_new(); rd_kafka_conf_destroy(NULL); rd_kafka_conf_dup(NULL); rd_kafka_conf_set(NULL, NULL, NULL, NULL, 0); rd_kafka_conf_set_dr_cb(NULL, NULL); rd_kafka_conf_set_dr_msg_cb(NULL, NULL); rd_kafka_conf_set_error_cb(NULL, NULL); rd_kafka_conf_set_stats_cb(NULL, NULL); rd_kafka_conf_set_log_cb(NULL, NULL); rd_kafka_conf_set_socket_cb(NULL, NULL); rd_kafka_conf_set_open_cb(NULL, NULL); rd_kafka_conf_set_opaque(NULL, NULL); rd_kafka_opaque(NULL); rd_kafka_conf_dump(NULL, NULL); rd_kafka_topic_conf_dump(NULL, NULL); rd_kafka_conf_dump_free(NULL, 0); rd_kafka_conf_properties_show(NULL); rd_kafka_topic_conf_new(); rd_kafka_topic_conf_dup(NULL); rd_kafka_topic_conf_destroy(NULL); rd_kafka_topic_conf_set(NULL, NULL, NULL, NULL, 0); rd_kafka_topic_conf_set_opaque(NULL, NULL); rd_kafka_topic_conf_set_partitioner_cb(NULL, NULL); rd_kafka_topic_partition_available(NULL, 0); rd_kafka_msg_partitioner_random(NULL, NULL, 0, 0, NULL, NULL); rd_kafka_new(0, NULL, NULL, 0); rd_kafka_destroy(NULL); rd_kafka_name(NULL); rd_kafka_topic_new(NULL, NULL, NULL); rd_kafka_topic_destroy(NULL); rd_kafka_topic_name(NULL); rd_kafka_message_destroy(NULL); rd_kafka_message_errstr(NULL); rd_kafka_consume_start(NULL, 0, 0); rd_kafka_consume_stop(NULL, 0); rd_kafka_consume(NULL, 0, 0); rd_kafka_consume_batch(NULL, 0, 0, NULL, 0); rd_kafka_consume_callback(NULL, 0, 0, NULL, NULL); rd_kafka_offset_store(NULL, 0, 0); rd_kafka_produce(NULL, 0, 0, NULL, 0, NULL, 0, NULL); rd_kafka_poll(NULL, 0); rd_kafka_brokers_add(NULL, NULL); rd_kafka_set_logger(NULL, NULL); rd_kafka_set_log_level(NULL, 0); rd_kafka_log_print(NULL, 0, NULL, NULL); rd_kafka_log_syslog(NULL, 0, NULL, NULL); rd_kafka_outq_len(NULL); rd_kafka_dump(NULL, NULL); rd_kafka_thread_cnt(); rd_kafka_wait_destroyed(0); rd_kafka_metadata(NULL, 0, NULL, NULL, 0); rd_kafka_metadata_destroy(NULL); } return 0; }
int main_0006_symbols (int argc, char **argv) { if (argc < 0 /* always false */) { rd_kafka_version(); rd_kafka_version_str(); rd_kafka_get_debug_contexts(); rd_kafka_get_err_descs(NULL, NULL); rd_kafka_err2str(RD_KAFKA_RESP_ERR_NO_ERROR); rd_kafka_err2name(RD_KAFKA_RESP_ERR_NO_ERROR); rd_kafka_errno2err(EINVAL); rd_kafka_errno(); rd_kafka_last_error(); rd_kafka_conf_new(); rd_kafka_conf_destroy(NULL); rd_kafka_conf_dup(NULL); rd_kafka_conf_set(NULL, NULL, NULL, NULL, 0); rd_kafka_conf_set_dr_cb(NULL, NULL); rd_kafka_conf_set_dr_msg_cb(NULL, NULL); rd_kafka_conf_set_error_cb(NULL, NULL); rd_kafka_conf_set_stats_cb(NULL, NULL); rd_kafka_conf_set_log_cb(NULL, NULL); rd_kafka_conf_set_socket_cb(NULL, NULL); rd_kafka_conf_set_rebalance_cb(NULL, NULL); rd_kafka_conf_set_offset_commit_cb(NULL, NULL); rd_kafka_conf_set_throttle_cb(NULL, NULL); rd_kafka_conf_set_default_topic_conf(NULL, NULL); rd_kafka_conf_get(NULL, NULL, NULL, NULL); #ifndef _MSC_VER rd_kafka_conf_set_open_cb(NULL, NULL); #endif rd_kafka_conf_set_opaque(NULL, NULL); rd_kafka_opaque(NULL); rd_kafka_conf_dump(NULL, NULL); rd_kafka_topic_conf_dump(NULL, NULL); rd_kafka_conf_dump_free(NULL, 0); rd_kafka_conf_properties_show(NULL); rd_kafka_topic_conf_new(); rd_kafka_topic_conf_dup(NULL); rd_kafka_topic_conf_destroy(NULL); rd_kafka_topic_conf_set(NULL, NULL, NULL, NULL, 0); rd_kafka_topic_conf_set_opaque(NULL, NULL); rd_kafka_topic_conf_get(NULL, NULL, NULL, NULL); rd_kafka_topic_conf_set_partitioner_cb(NULL, NULL); rd_kafka_topic_partition_available(NULL, 0); rd_kafka_topic_opaque(NULL); rd_kafka_msg_partitioner_random(NULL, NULL, 0, 0, NULL, NULL); rd_kafka_msg_partitioner_consistent(NULL, NULL, 0, 0, NULL, NULL); rd_kafka_msg_partitioner_consistent_random(NULL, NULL, 0, 0, NULL, NULL); rd_kafka_new(0, NULL, NULL, 0); rd_kafka_destroy(NULL); rd_kafka_name(NULL); rd_kafka_memberid(NULL); rd_kafka_topic_new(NULL, NULL, NULL); rd_kafka_topic_destroy(NULL); rd_kafka_topic_name(NULL); rd_kafka_message_destroy(NULL); rd_kafka_message_errstr(NULL); rd_kafka_message_timestamp(NULL, NULL); rd_kafka_consume_start(NULL, 0, 0); rd_kafka_consume_stop(NULL, 0); rd_kafka_consume(NULL, 0, 0); rd_kafka_consume_batch(NULL, 0, 0, NULL, 0); rd_kafka_consume_callback(NULL, 0, 0, NULL, NULL); rd_kafka_offset_store(NULL, 0, 0); rd_kafka_produce(NULL, 0, 0, NULL, 0, NULL, 0, NULL); rd_kafka_produce_batch(NULL, 0, 0, NULL, 0); rd_kafka_poll(NULL, 0); rd_kafka_brokers_add(NULL, NULL); /* DEPRECATED: rd_kafka_set_logger(NULL, NULL); */ rd_kafka_set_log_level(NULL, 0); rd_kafka_log_print(NULL, 0, NULL, NULL); #ifndef _MSC_VER rd_kafka_log_syslog(NULL, 0, NULL, NULL); #endif rd_kafka_outq_len(NULL); rd_kafka_dump(NULL, NULL); rd_kafka_thread_cnt(); rd_kafka_wait_destroyed(0); rd_kafka_metadata(NULL, 0, NULL, NULL, 0); rd_kafka_metadata_destroy(NULL); rd_kafka_queue_destroy(NULL); rd_kafka_consume_start_queue(NULL, 0, 0, NULL); rd_kafka_consume_queue(NULL, 0); rd_kafka_consume_batch_queue(NULL, 0, NULL, 0); rd_kafka_consume_callback_queue(NULL, 0, NULL, NULL); rd_kafka_seek(NULL, 0, 0, 0); rd_kafka_yield(NULL); rd_kafka_mem_free(NULL, NULL); rd_kafka_list_groups(NULL, NULL, NULL, 0); rd_kafka_group_list_destroy(NULL); /* KafkaConsumer API */ rd_kafka_subscribe(NULL, NULL); rd_kafka_unsubscribe(NULL); rd_kafka_subscription(NULL, NULL); rd_kafka_consumer_poll(NULL, 0); rd_kafka_consumer_close(NULL); rd_kafka_assign(NULL, NULL); rd_kafka_assignment(NULL, NULL); rd_kafka_commit(NULL, NULL, 0); rd_kafka_commit_message(NULL, NULL, 0); rd_kafka_committed(NULL, NULL, 0); rd_kafka_position(NULL, NULL); /* TopicPartition */ rd_kafka_topic_partition_list_new(0); rd_kafka_topic_partition_list_destroy(NULL); rd_kafka_topic_partition_list_add(NULL, NULL, 0); rd_kafka_topic_partition_list_add_range(NULL, NULL, 0, 0); rd_kafka_topic_partition_list_del(NULL, NULL, 0); rd_kafka_topic_partition_list_del_by_idx(NULL, 0); rd_kafka_topic_partition_list_copy(NULL); rd_kafka_topic_partition_list_set_offset(NULL, NULL, 0, 0); rd_kafka_topic_partition_list_find(NULL, NULL, 0); rd_kafka_query_watermark_offsets(NULL, NULL, 0, NULL, NULL, 0); rd_kafka_get_watermark_offsets(NULL, NULL, 0, NULL, NULL); } return 0; }