From 4b5a94ae6894ba455fb3d80ee8ebb4b1026c97f7 Mon Sep 17 00:00:00 2001 From: nick Date: Sun, 16 May 2021 18:33:47 +0200 Subject: [PATCH 1/9] add metadat property --- php_simple_kafka_client_int.h | 6 +++- tests/topic_partition.phpt | 24 +++++++++++++ topic_partition.c | 63 ++++++++++++++++++++++++++++++++--- topic_partition.stub.php | 7 +++- topic_partition_arginfo.h | 14 +++++++- 5 files changed, 106 insertions(+), 8 deletions(-) diff --git a/php_simple_kafka_client_int.h b/php_simple_kafka_client_int.h index d25d115..b6dc354 100644 --- a/php_simple_kafka_client_int.h +++ b/php_simple_kafka_client_int.h @@ -69,6 +69,7 @@ typedef struct _kafka_topic_partition_intern { char *topic; int32_t partition; int64_t offset; + zval metadata; zend_object std; } kafka_topic_partition_intern; @@ -113,6 +114,9 @@ typedef void (*kafka_metadata_collection_ctor_t)(zval *renurn_value, zval *zmeta #define Z_PARAM_STRING_OR_NULL(dest, dest_len) \ Z_PARAM_STRING_EX(dest, dest_len, 1, 0) +#define Z_PARAM_ZVAL_OR_NULL(dest) \ + Z_PARAM_ZVAL_EX(dest, 1, 0) + #endif #ifdef PHP_WIN32 @@ -208,7 +212,7 @@ void kafka_metadata_topic_init(INIT_FUNC_ARGS); void kafka_metadata_topic_ctor(zval *return_value, zval *zmetadata, const void *metadata_topic); void kafka_topic_init(INIT_FUNC_ARGS); void kafka_metadata_topic_partition_init(INIT_FUNC_ARGS); -void kafka_topic_partition_init(zval *z, char *topic, int32_t partition, int64_t offset); +void kafka_topic_partition_init(zval *z, char *topic, int32_t partition, int64_t offset, zval *metadata); void kafka_topic_partition_list_to_array(zval *return_value, rd_kafka_topic_partition_list_t *list); kafka_topic_partition_intern * get_topic_partition_object(zval *z); diff --git a/tests/topic_partition.phpt b/tests/topic_partition.phpt index 0fdf9b7..371c457 100644 --- a/tests/topic_partition.phpt +++ b/tests/topic_partition.phpt @@ -11,10 +11,15 @@ $topar = new SimpleKafkaClient\TopicPartition("test", RD_KAFKA_PARTITION_UA, 42) var_dump($topar); +$topar = new SimpleKafkaClient\TopicPartition("test", RD_KAFKA_PARTITION_UA, 42, ['test']); + +var_dump($topar); + var_dump(array( "topic" => $topar->getTopicName(), "partition" => $topar->getPartition(), "offset" => $topar->getOffset(), + "metadata" => $topar->getMetadata() )); $topar @@ -31,6 +36,18 @@ object(SimpleKafkaClient\TopicPartition)#1 (3) { int(-1) ["offset"]=> int(0) + ["metadata"]=> + NULL +} +object(SimpleKafkaClient\TopicPartition)#2 (3) { + ["topic"]=> + string(4) "test" + ["partition"]=> + int(-1) + ["offset"]=> + int(42) + ["metadata"]=> + NULL } object(SimpleKafkaClient\TopicPartition)#2 (3) { ["topic"]=> @@ -39,6 +56,8 @@ object(SimpleKafkaClient\TopicPartition)#2 (3) { int(-1) ["offset"]=> int(42) + ["metadata"]=> + NULL } array(3) { ["topic"]=> @@ -47,6 +66,11 @@ array(3) { int(-1) ["offset"]=> int(42) + ["metadata"]=> + array(1) { + [0]=> + string(4) "test" + } } object(SimpleKafkaClient\TopicPartition)#2 (3) { ["topic"]=> diff --git a/topic_partition.c b/topic_partition.c index b9c5cb5..b71b0f9 100644 --- a/topic_partition.c +++ b/topic_partition.c @@ -118,12 +118,13 @@ static HashTable *get_debug_info(Z_KAFKA_OBJ *object, int *is_temp) /* {{{ */ add_assoc_long(&ary, "partition", intern->partition); add_assoc_long(&ary, "offset", intern->offset); + add_assoc_zval(&ary, "metadata", &intern->metadata); return Z_ARRVAL(ary); } /* }}} */ -void kafka_topic_partition_init(zval *zobj, char * topic, int32_t partition, int64_t offset) /* {{{ */ +void kafka_topic_partition_init(zval *zobj, char * topic, int32_t partition, int64_t offset, zval *metadata) /* {{{ */ { object_intern *intern; @@ -139,6 +140,12 @@ void kafka_topic_partition_init(zval *zobj, char * topic, int32_t partition, int intern->partition = partition; intern->offset = offset; + + if (!metadata) { + ZVAL_NULL(&intern->metadata); + } else { + intern->metadata = *metadata; + } } /* }}} */ void kafka_topic_partition_list_to_array(zval *return_value, rd_kafka_topic_partition_list_t *list) /* {{{ */ @@ -153,7 +160,7 @@ void kafka_topic_partition_list_to_array(zval *return_value, rd_kafka_topic_part topar = &list->elems[i]; ZVAL_NULL(&ztopar); object_init_ex(&ztopar, ce_kafka_topic_partition); - kafka_topic_partition_init(&ztopar, topar->topic, topar->partition, topar->offset); + kafka_topic_partition_init(&ztopar, topar->topic, topar->partition, topar->offset, topar->metadata); add_next_index_zval(return_value, &ztopar); } } /* }}} */ @@ -199,7 +206,7 @@ rd_kafka_topic_partition_list_t * array_arg_to_kafka_topic_partition_list(int ar } /* }}} */ -/* {{{ proto void SimpleKafkaClient\TopicPartition::__construct(string $topic, int $partition[, int $offset]) +/* {{{ proto void SimpleKafkaClient\TopicPartition::__construct(string $topic, int $partition[, int $offset, mixed $metadata]) Constructor */ ZEND_METHOD(SimpleKafkaClient_TopicPartition, __construct) { @@ -207,15 +214,17 @@ ZEND_METHOD(SimpleKafkaClient_TopicPartition, __construct) size_t topic_len; zend_long partition; zend_long offset = 0; + zval *metadata = NULL; - ZEND_PARSE_PARAMETERS_START_EX(ZEND_PARSE_PARAMS_THROW, 2, 3) + ZEND_PARSE_PARAMETERS_START_EX(ZEND_PARSE_PARAMS_THROW, 2, 4) Z_PARAM_STRING(topic, topic_len) Z_PARAM_LONG(partition) Z_PARAM_OPTIONAL Z_PARAM_LONG(offset) + Z_PARAM_ZVAL_OR_NULL(metadata) ZEND_PARSE_PARAMETERS_END(); - kafka_topic_partition_init(getThis(), topic, partition, offset); + kafka_topic_partition_init(getThis(), topic, partition, offset, metadata); } /* }}} */ @@ -348,6 +357,50 @@ ZEND_METHOD(SimpleKafkaClient_TopicPartition, setOffset) } /* }}} */ +/* {{{ proto int SimpleKafkaClient\TopicPartition::getMetadata() + Returns offset */ +ZEND_METHOD(SimpleKafkaClient_TopicPartition, getMetadata) +{ + object_intern *intern; + + ZEND_PARSE_PARAMETERS_START_EX(ZEND_PARSE_PARAMS_THROW, 0, 0) + ZEND_PARSE_PARAMETERS_END(); + + intern = get_object(getThis()); + if (!intern) { + return; + } + + RETURN_ZVAL(&intern->metadata, 1, 0); +} +/* }}} */ + +/* {{{ proto TopicPartition SimpleKafkaClient\TopicPartition::setMetadata($metadata) + Sets metadata */ +ZEND_METHOD(SimpleKafkaClient_TopicPartition, setMetadata) +{ + zval *metadata = NULL; + object_intern *intern; + + ZEND_PARSE_PARAMETERS_START_EX(ZEND_PARSE_PARAMS_THROW, 1, 1) + Z_PARAM_ZVAL(metadata) + ZEND_PARSE_PARAMETERS_END(); + + intern = get_object(getThis()); + if (!intern) { + return; + } + + if(Z_TYPE(intern->metadata) == IS_UNDEF) { + RETURN_NULL(); + } + + intern->metadata = *metadata; + + RETURN_ZVAL(getThis(), 1, 0); +} +/* }}} */ + void kafka_metadata_topic_partition_init(INIT_FUNC_ARGS) /* {{{ */ { zend_class_entry tmpce; diff --git a/topic_partition.stub.php b/topic_partition.stub.php index 683fed3..f7aa881 100644 --- a/topic_partition.stub.php +++ b/topic_partition.stub.php @@ -6,7 +6,7 @@ class TopicPartition { - public function __construct(string $topicName, int $partition, int $offset = 0) {} + public function __construct(string $topicName, int $partition, int $offset = 0, mixed $metadata = null) {} public function getTopicName(): ?string {} @@ -19,4 +19,9 @@ public function setPartition(int $partition): TopicPartition {} public function getOffset(): int {} public function setOffset(int $offset): TopicPartition {} + + /** @param mixed $metadata */ + public function setMetadata($metadata): TopicPartition {} + + public function getMetadata(): mixed {} } diff --git a/topic_partition_arginfo.h b/topic_partition_arginfo.h index 334f3e3..d3e2f15 100644 --- a/topic_partition_arginfo.h +++ b/topic_partition_arginfo.h @@ -1,10 +1,11 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 95f09c698079d00927dd2d02910325d6aff76157 */ + * Stub hash: d4e875b35492e4e54e47a1beb90522d6a5fe1118 */ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SimpleKafkaClient_TopicPartition___construct, 0, 0, 2) ZEND_ARG_TYPE_INFO(0, topicName, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, partition, IS_LONG, 0) ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, offset, IS_LONG, 0, "0") + ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, metadata, IS_MIXED, 0, "null") ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_SimpleKafkaClient_TopicPartition_getTopicName, 0, 0, IS_STRING, 1) @@ -27,6 +28,13 @@ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_SimpleKafkaClient_TopicPart ZEND_ARG_TYPE_INFO(0, offset, IS_LONG, 0) ZEND_END_ARG_INFO() +ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_SimpleKafkaClient_TopicPartition_setMetadata, 0, 1, SimpleKafkaClient\\TopicPartition, 0) + ZEND_ARG_INFO(0, metadata) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_SimpleKafkaClient_TopicPartition_getMetadata, 0, 0, IS_MIXED, 0) +ZEND_END_ARG_INFO() + ZEND_METHOD(SimpleKafkaClient_TopicPartition, __construct); ZEND_METHOD(SimpleKafkaClient_TopicPartition, getTopicName); @@ -35,6 +43,8 @@ ZEND_METHOD(SimpleKafkaClient_TopicPartition, getPartition); ZEND_METHOD(SimpleKafkaClient_TopicPartition, setPartition); ZEND_METHOD(SimpleKafkaClient_TopicPartition, getOffset); ZEND_METHOD(SimpleKafkaClient_TopicPartition, setOffset); +ZEND_METHOD(SimpleKafkaClient_TopicPartition, setMetadata); +ZEND_METHOD(SimpleKafkaClient_TopicPartition, getMetadata); static const zend_function_entry class_SimpleKafkaClient_TopicPartition_methods[] = { @@ -45,5 +55,7 @@ static const zend_function_entry class_SimpleKafkaClient_TopicPartition_methods[ ZEND_ME(SimpleKafkaClient_TopicPartition, setPartition, arginfo_class_SimpleKafkaClient_TopicPartition_setPartition, ZEND_ACC_PUBLIC) ZEND_ME(SimpleKafkaClient_TopicPartition, getOffset, arginfo_class_SimpleKafkaClient_TopicPartition_getOffset, ZEND_ACC_PUBLIC) ZEND_ME(SimpleKafkaClient_TopicPartition, setOffset, arginfo_class_SimpleKafkaClient_TopicPartition_setOffset, ZEND_ACC_PUBLIC) + ZEND_ME(SimpleKafkaClient_TopicPartition, setMetadata, arginfo_class_SimpleKafkaClient_TopicPartition_setMetadata, ZEND_ACC_PUBLIC) + ZEND_ME(SimpleKafkaClient_TopicPartition, getMetadata, arginfo_class_SimpleKafkaClient_TopicPartition_getMetadata, ZEND_ACC_PUBLIC) ZEND_FE_END }; From 5c8f11e9d7a71187bbf2d8949188076148dbf4ed Mon Sep 17 00:00:00 2001 From: nick Date: Sun, 16 May 2021 18:35:48 +0200 Subject: [PATCH 2/9] remove obsolete check --- topic_partition.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/topic_partition.c b/topic_partition.c index b71b0f9..7b86105 100644 --- a/topic_partition.c +++ b/topic_partition.c @@ -391,10 +391,6 @@ ZEND_METHOD(SimpleKafkaClient_TopicPartition, setMetadata) return; } - if(Z_TYPE(intern->metadata) == IS_UNDEF) { - RETURN_NULL(); - } - intern->metadata = *metadata; RETURN_ZVAL(getThis(), 1, 0); From e216657106d6c1f75189c29dbd37561bd6f851ae Mon Sep 17 00:00:00 2001 From: nick Date: Sun, 16 May 2021 18:39:10 +0200 Subject: [PATCH 3/9] fix stubs --- topic_partition.stub.php | 3 ++- topic_partition_arginfo.h | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/topic_partition.stub.php b/topic_partition.stub.php index f7aa881..e3d5c2d 100644 --- a/topic_partition.stub.php +++ b/topic_partition.stub.php @@ -23,5 +23,6 @@ public function setOffset(int $offset): TopicPartition {} /** @param mixed $metadata */ public function setMetadata($metadata): TopicPartition {} - public function getMetadata(): mixed {} + /** @return mixed */ + public function getMetadata() {} } diff --git a/topic_partition_arginfo.h b/topic_partition_arginfo.h index d3e2f15..ac51813 100644 --- a/topic_partition_arginfo.h +++ b/topic_partition_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: d4e875b35492e4e54e47a1beb90522d6a5fe1118 */ + * Stub hash: 32f5fa0f34d7d0fc80d6432664900f81926e915c */ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SimpleKafkaClient_TopicPartition___construct, 0, 0, 2) ZEND_ARG_TYPE_INFO(0, topicName, IS_STRING, 0) @@ -32,7 +32,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(arginfo_class_SimpleKafkaClient_TopicPart ZEND_ARG_INFO(0, metadata) ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class_SimpleKafkaClient_TopicPartition_getMetadata, 0, 0, IS_MIXED, 0) +ZEND_BEGIN_ARG_INFO_EX(arginfo_class_SimpleKafkaClient_TopicPartition_getMetadata, 0, 0, 0) ZEND_END_ARG_INFO() From 3a8c9d84b7c0814e01eaf4829b9d7b0793ca18ff Mon Sep 17 00:00:00 2001 From: nick Date: Sun, 16 May 2021 18:48:33 +0200 Subject: [PATCH 4/9] fix test --- tests/topic_partition.phpt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tests/topic_partition.phpt b/tests/topic_partition.phpt index 371c457..f016865 100644 --- a/tests/topic_partition.phpt +++ b/tests/topic_partition.phpt @@ -25,7 +25,8 @@ var_dump(array( $topar ->setTopicName("foo") ->setPartition(123) - ->setOffset(43); + ->setOffset(43) + ->setMetadata(2); var_dump($topar); --EXPECT-- @@ -79,4 +80,6 @@ object(SimpleKafkaClient\TopicPartition)#2 (3) { int(123) ["offset"]=> int(43) + ["metadata"]=> + int(2) } From a0f1c055b268bd59f26d26e84443eb7f280bd8b7 Mon Sep 17 00:00:00 2001 From: nick Date: Sun, 16 May 2021 18:51:29 +0200 Subject: [PATCH 5/9] fix test --- tests/topic_partition.phpt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/topic_partition.phpt b/tests/topic_partition.phpt index f016865..c06a499 100644 --- a/tests/topic_partition.phpt +++ b/tests/topic_partition.phpt @@ -19,7 +19,7 @@ var_dump(array( "topic" => $topar->getTopicName(), "partition" => $topar->getPartition(), "offset" => $topar->getOffset(), - "metadata" => $topar->getMetadata() + "metadata" => $topar->getMetadata(), )); $topar From d6b9935ae436e825b2523e58d75c654e773e6794 Mon Sep 17 00:00:00 2001 From: nick Date: Sun, 16 May 2021 20:25:19 +0200 Subject: [PATCH 6/9] fix test --- tests/topic_partition.phpt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tests/topic_partition.phpt b/tests/topic_partition.phpt index c06a499..2b54150 100644 --- a/tests/topic_partition.phpt +++ b/tests/topic_partition.phpt @@ -58,7 +58,10 @@ object(SimpleKafkaClient\TopicPartition)#2 (3) { ["offset"]=> int(42) ["metadata"]=> - NULL + array(1) { + [0]=> + string(4) "test" + } } array(3) { ["topic"]=> From 1298425e8c2fa4d22a79f49a525d6373b62c99fb Mon Sep 17 00:00:00 2001 From: nick Date: Sun, 16 May 2021 20:29:42 +0200 Subject: [PATCH 7/9] fix count in test --- tests/topic_partition.phpt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/topic_partition.phpt b/tests/topic_partition.phpt index 2b54150..721d28b 100644 --- a/tests/topic_partition.phpt +++ b/tests/topic_partition.phpt @@ -30,7 +30,7 @@ $topar var_dump($topar); --EXPECT-- -object(SimpleKafkaClient\TopicPartition)#1 (3) { +object(SimpleKafkaClient\TopicPartition)#1 (4) { ["topic"]=> string(4) "test" ["partition"]=> @@ -40,7 +40,7 @@ object(SimpleKafkaClient\TopicPartition)#1 (3) { ["metadata"]=> NULL } -object(SimpleKafkaClient\TopicPartition)#2 (3) { +object(SimpleKafkaClient\TopicPartition)#2 (4) { ["topic"]=> string(4) "test" ["partition"]=> @@ -50,7 +50,7 @@ object(SimpleKafkaClient\TopicPartition)#2 (3) { ["metadata"]=> NULL } -object(SimpleKafkaClient\TopicPartition)#2 (3) { +object(SimpleKafkaClient\TopicPartition)#2 (4) { ["topic"]=> string(4) "test" ["partition"]=> @@ -63,7 +63,7 @@ object(SimpleKafkaClient\TopicPartition)#2 (3) { string(4) "test" } } -array(3) { +array(4) { ["topic"]=> string(4) "test" ["partition"]=> @@ -76,7 +76,7 @@ array(3) { string(4) "test" } } -object(SimpleKafkaClient\TopicPartition)#2 (3) { +object(SimpleKafkaClient\TopicPartition)#2 (4) { ["topic"]=> string(3) "foo" ["partition"]=> From 3dd10a8c9d60812bbb96c2af876db09c56b31d08 Mon Sep 17 00:00:00 2001 From: nick Date: Sun, 16 May 2021 21:05:36 +0200 Subject: [PATCH 8/9] fix debug info --- topic_partition.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/topic_partition.c b/topic_partition.c index 7b86105..bc3a44b 100644 --- a/topic_partition.c +++ b/topic_partition.c @@ -97,30 +97,31 @@ kafka_topic_partition_intern * get_topic_partition_object(zval *z) /* {{{ */ static HashTable *get_debug_info(Z_KAFKA_OBJ *object, int *is_temp) /* {{{ */ { - zval ary; + zval arr; object_intern *intern; *is_temp = 1; - array_init(&ary); + array_init(&arr); intern = kafka_get_debug_object(object_intern, object); if (!intern) { - return Z_ARRVAL(ary); + return Z_ARRVAL(arr); } if (intern->topic) { - add_assoc_string(&ary, "topic", intern->topic); + add_assoc_string(&arr, "topic", intern->topic); } else { - add_assoc_null(&ary, "topic"); + add_assoc_null(&arr, "topic"); } - add_assoc_long(&ary, "partition", intern->partition); - add_assoc_long(&ary, "offset", intern->offset); - add_assoc_zval(&ary, "metadata", &intern->metadata); + add_assoc_long(&arr, "partition", intern->partition); + add_assoc_long(&arr, "offset", intern->offset); + Z_TRY_ADDREF_P(&intern->metadata); + add_assoc_zval(&arr, "metadata", &intern->metadata); - return Z_ARRVAL(ary); + return Z_ARRVAL(arr); } /* }}} */ From 78a953537d29e3457333f52b957c82181245c474 Mon Sep 17 00:00:00 2001 From: nick Date: Sun, 16 May 2021 21:11:23 +0200 Subject: [PATCH 9/9] fix test --- tests/topic_partition.phpt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/topic_partition.phpt b/tests/topic_partition.phpt index 721d28b..71b2588 100644 --- a/tests/topic_partition.phpt +++ b/tests/topic_partition.phpt @@ -50,7 +50,7 @@ object(SimpleKafkaClient\TopicPartition)#2 (4) { ["metadata"]=> NULL } -object(SimpleKafkaClient\TopicPartition)#2 (4) { +object(SimpleKafkaClient\TopicPartition)#1 (4) { ["topic"]=> string(4) "test" ["partition"]=> @@ -76,7 +76,7 @@ array(4) { string(4) "test" } } -object(SimpleKafkaClient\TopicPartition)#2 (4) { +object(SimpleKafkaClient\TopicPartition)#1 (4) { ["topic"]=> string(3) "foo" ["partition"]=>