@@ -1036,6 +1036,58 @@ void KafkaConsumerCommitted::HandleErrorCallback() {
1036
1036
callback->Call (argc, argv);
1037
1037
}
1038
1038
1039
+ /* *
1040
+ * @brief KafkaConsumer commit offsets with a callback function.
1041
+ *
1042
+ * The first callback argument is the commit error, or null on success.
1043
+ *
1044
+ * @see RdKafka::KafkaConsumer::commitSync
1045
+ */
1046
+ KafkaConsumerCommitCb::KafkaConsumerCommitCb (Nan::Callback *callback,
1047
+ KafkaConsumer* consumer,
1048
+ std::optional<std::vector<RdKafka::TopicPartition*>> & t) :
1049
+ ErrorAwareWorker (callback),
1050
+ m_consumer (consumer),
1051
+ m_topic_partitions (t) {}
1052
+
1053
+ KafkaConsumerCommitCb::~KafkaConsumerCommitCb () {
1054
+ // Delete the underlying topic partitions as they are ephemeral or cloned
1055
+ if (m_topic_partitions.has_value ())
1056
+ RdKafka::TopicPartition::destroy (m_topic_partitions.value ());
1057
+ }
1058
+
1059
+ void KafkaConsumerCommitCb::Execute () {
1060
+ Baton b = Baton (NULL );
1061
+ if (m_topic_partitions.has_value ()) {
1062
+ b = m_consumer->Commit (m_topic_partitions.value ());
1063
+ } else {
1064
+ b = m_consumer->Commit ();
1065
+ }
1066
+ if (b.err () != RdKafka::ERR_NO_ERROR) {
1067
+ SetErrorBaton (b);
1068
+ }
1069
+ }
1070
+
1071
+ void KafkaConsumerCommitCb::HandleOKCallback () {
1072
+ Nan::HandleScope scope;
1073
+
1074
+ const unsigned int argc = 1 ;
1075
+ v8::Local<v8::Value> argv[argc];
1076
+
1077
+ argv[0 ] = Nan::Null ();
1078
+
1079
+ callback->Call (argc, argv);
1080
+ }
1081
+
1082
+ void KafkaConsumerCommitCb::HandleErrorCallback () {
1083
+ Nan::HandleScope scope;
1084
+
1085
+ const unsigned int argc = 1 ;
1086
+ v8::Local<v8::Value> argv[argc] = { GetErrorObject () };
1087
+
1088
+ callback->Call (argc, argv);
1089
+ }
1090
+
1039
1091
/* *
1040
1092
* @brief KafkaConsumer seek
1041
1093
*
0 commit comments