From 170c074223956c6dae393651ffe501f14989063f Mon Sep 17 00:00:00 2001 From: Emanuele Sabellico Date: Thu, 31 Jul 2025 10:55:45 +0200 Subject: [PATCH] Remaining ResourceType and ConfigResourceType enum values --- examples/incremental_alter_configs.c | 30 ++++++++++++++++--- src/rdkafka.h | 8 +++++ src/rdkafka_admin.c | 45 ++++++++++++++++++++++++++-- src/rdkafka_admin.h | 14 ++++++--- tests/0080-admin_ut.c | 10 ++++--- 5 files changed, 93 insertions(+), 14 deletions(-) diff --git a/examples/incremental_alter_configs.c b/examples/incremental_alter_configs.c index b63b414795..efad4df681 100644 --- a/examples/incremental_alter_configs.c +++ b/examples/incremental_alter_configs.c @@ -146,6 +146,31 @@ static void print_alter_configs_result( } } +/** + * @brief Parse a ConfigResourceType string and return the corresponding enum + * value. + * + * @param restype_id The resource type string, e.g., "TOPIC", "BROKER", etc. + * @return The corresponding rd_kafka_ResourceType_t enum value, or + * RD_KAFKA_RESOURCE_UNKNOWN if the string is invalid. + */ +static rd_kafka_ResourceType_t +parse_ConfigResourceType(const char *restype_id) { + size_t i; + static const char *restype_ids[] = {"TOPIC", "BROKER", "GROUP", + "BROKER_LOGGER", "CLIENT_METRICS"}; + static const rd_kafka_ResourceType_t restype_values[] = { + RD_KAFKA_RESOURCE_TOPIC, RD_KAFKA_RESOURCE_BROKER, + RD_KAFKA_RESOURCE_GROUP, RD_KAFKA_RESOURCE_BROKER_LOGGER, + RD_KAFKA_RESOURCE_CLIENT_METRICS}; + + for (i = 0; i < sizeof(restype_ids) / sizeof(restype_ids[0]); i++) { + if (!strcmp(restype_id, restype_ids[i])) { + return restype_values[i]; + } + } + return RD_KAFKA_RESOURCE_UNKNOWN; +} /** * @brief Call rd_kafka_IncrementalAlterConfigs() with a list of @@ -183,10 +208,7 @@ cmd_incremental_alter_configs(rd_kafka_conf_t *conf, int argc, char **argv) { rd_kafka_ConfigResource_t *config; rd_kafka_AlterConfigOpType_t op_type; rd_kafka_ResourceType_t restype = - !strcmp(restype_s, "TOPIC") ? RD_KAFKA_RESOURCE_TOPIC - : !strcmp(restype_s, "BROKER") ? RD_KAFKA_RESOURCE_BROKER - : !strcmp(restype_s, "GROUP") ? RD_KAFKA_RESOURCE_GROUP - : RD_KAFKA_RESOURCE_UNKNOWN; + parse_ConfigResourceType(restype_s); if (restype == RD_KAFKA_RESOURCE_UNKNOWN) { usage("Invalid resource type: %s", restype_s); diff --git a/src/rdkafka.h b/src/rdkafka.h index c0895f93cf..7c82e02361 100644 --- a/src/rdkafka.h +++ b/src/rdkafka.h @@ -7883,7 +7883,15 @@ typedef enum rd_kafka_ResourceType_t { RD_KAFKA_RESOURCE_GROUP = 3, /**< Group */ RD_KAFKA_RESOURCE_BROKER = 4, /**< Broker */ RD_KAFKA_RESOURCE_TRANSACTIONAL_ID = 5, /**< Transactional ID */ + RD_KAFKA_RESOURCE_DELEGATION_TOKEN = 6, /**< Delegation Token */ + RD_KAFKA_RESOURCE_USER = 7, /**< User */ RD_KAFKA_RESOURCE__CNT, /**< Number of resource types defined */ + +/* FIXME: Split into two enums in next major version. */ +#define RD_KAFKA_RESOURCE_CONFIG_RESOURCE__START RD_KAFKA_RESOURCE_BROKER_LOGGER + RD_KAFKA_RESOURCE_BROKER_LOGGER = 1000008, + RD_KAFKA_RESOURCE_CLIENT_METRICS = 1000016, + RD_KAFKA_RESOURCE_CONFIG_RESOURCE__END, } rd_kafka_ResourceType_t; /** diff --git a/src/rdkafka_admin.c b/src/rdkafka_admin.c index b2671f3c82..6e3e5b28d4 100644 --- a/src/rdkafka_admin.c +++ b/src/rdkafka_admin.c @@ -2911,8 +2911,19 @@ const char *rd_kafka_ResourcePatternType_name( } const char *rd_kafka_ResourceType_name(rd_kafka_ResourceType_t restype) { - static const char *names[] = {"UNKNOWN", "ANY", "TOPIC", - "GROUP", "BROKER", "TRANSACTIONAL_ID"}; + static const char *names[] = {"UNKNOWN", + "ANY", + "TOPIC", + "GROUP", + "BROKER", + "TRANSACTIONAL_ID", + "DELEGATION_TOKEN", + "USER"}; + + if ((unsigned int)restype >= RD_KAFKA_RESOURCE_CONFIG_RESOURCE__START && + (unsigned int)restype < RD_KAFKA_RESOURCE_CONFIG_RESOURCE__END) + return rd_kafka_ConfigResourceType_name( + rd_kafka_ResourceType_to_ConfigResourceType(restype)); if ((unsigned int)restype >= (unsigned int)RD_KAFKA_RESOURCE__CNT) return "UNSUPPORTED"; @@ -2928,6 +2939,10 @@ rd_kafka_ResourceType_to_ConfigResourceType(rd_kafka_ResourceType_t restype) { return RD_KAFKA_CONFIG_RESOURCE_TOPIC; case RD_KAFKA_RESOURCE_BROKER: return RD_KAFKA_CONFIG_RESOURCE_BROKER; + case RD_KAFKA_RESOURCE_BROKER_LOGGER: + return RD_KAFKA_CONFIG_RESOURCE_BROKER_LOGGER; + case RD_KAFKA_RESOURCE_CLIENT_METRICS: + return RD_KAFKA_CONFIG_RESOURCE_CLIENT_METRICS; case RD_KAFKA_RESOURCE_GROUP: return RD_KAFKA_CONFIG_RESOURCE_GROUP; default: @@ -2942,12 +2957,38 @@ rd_kafka_ResourceType_t rd_kafka_ConfigResourceType_to_ResourceType( return RD_KAFKA_RESOURCE_TOPIC; case RD_KAFKA_CONFIG_RESOURCE_BROKER: return RD_KAFKA_RESOURCE_BROKER; + case RD_KAFKA_CONFIG_RESOURCE_BROKER_LOGGER: + return RD_KAFKA_RESOURCE_BROKER_LOGGER; + case RD_KAFKA_CONFIG_RESOURCE_CLIENT_METRICS: + return RD_KAFKA_RESOURCE_CLIENT_METRICS; case RD_KAFKA_CONFIG_RESOURCE_GROUP: return RD_KAFKA_RESOURCE_GROUP; default: return RD_KAFKA_RESOURCE_UNKNOWN; } } +/** + * @brief Get the name of a ConfigResourceType_t. + */ +const char *rd_kafka_ConfigResourceType_name( + rd_kafka_ConfigResourceType_t config_resource_type) { + switch (config_resource_type) { + case RD_KAFKA_CONFIG_RESOURCE_UNKNOWN: + return "UNKNOWN"; + case RD_KAFKA_CONFIG_RESOURCE_TOPIC: + return "TOPIC"; + case RD_KAFKA_CONFIG_RESOURCE_BROKER: + return "BROKER"; + case RD_KAFKA_CONFIG_RESOURCE_BROKER_LOGGER: + return "BROKER_LOGGER"; + case RD_KAFKA_CONFIG_RESOURCE_CLIENT_METRICS: + return "CLIENT_METRICS"; + case RD_KAFKA_CONFIG_RESOURCE_GROUP: + return "GROUP"; + default: + return "UNSUPPORTED"; + } +} rd_kafka_ConfigResource_t * diff --git a/src/rdkafka_admin.h b/src/rdkafka_admin.h index c84849ea66..e25d1b9b7f 100644 --- a/src/rdkafka_admin.h +++ b/src/rdkafka_admin.h @@ -287,10 +287,13 @@ struct rd_kafka_ConfigResource_result_s { * @brief Resource type specific to config apis. */ typedef enum rd_kafka_ConfigResourceType_t { - RD_KAFKA_CONFIG_RESOURCE_UNKNOWN = 0, - RD_KAFKA_CONFIG_RESOURCE_TOPIC = 2, - RD_KAFKA_CONFIG_RESOURCE_BROKER = 4, - RD_KAFKA_CONFIG_RESOURCE_GROUP = 32, + RD_KAFKA_CONFIG_RESOURCE_UNKNOWN = 0, + RD_KAFKA_CONFIG_RESOURCE_TOPIC = 2, + RD_KAFKA_CONFIG_RESOURCE_BROKER = 4, + RD_KAFKA_CONFIG_RESOURCE_BROKER_LOGGER = 8, + RD_KAFKA_CONFIG_RESOURCE_CLIENT_METRICS = 16, + RD_KAFKA_CONFIG_RESOURCE_GROUP = 32, + RD_KAFKA_CONFIG_RESOURCE__END, } rd_kafka_ConfigResourceType_t; /** @@ -315,6 +318,9 @@ rd_kafka_ResourceType_t rd_kafka_ConfigResourceType_to_ResourceType( rd_kafka_ConfigResourceType_t config_resource_type); +const char *rd_kafka_ConfigResourceType_name( + rd_kafka_ConfigResourceType_t config_resource_type); + /**@}*/ diff --git a/tests/0080-admin_ut.c b/tests/0080-admin_ut.c index a9f0e1181f..1a6888654c 100644 --- a/tests/0080-admin_ut.c +++ b/tests/0080-admin_ut.c @@ -1206,8 +1206,9 @@ static void do_test_AclBinding() { char errstr[512]; rd_kafka_AclBinding_t *new_acl; - rd_bool_t valid_resource_types[] = { - rd_false, rd_false, rd_true, rd_true, rd_true, rd_true, rd_false}; + rd_bool_t valid_resource_types[] = {rd_false, rd_false, rd_true, + rd_true, rd_true, rd_true, + rd_true, rd_true, rd_false}; rd_bool_t valid_resource_pattern_types[] = { rd_false, rd_false, rd_false, rd_true, rd_true, rd_false}; rd_bool_t valid_acl_operation[] = { @@ -1338,8 +1339,9 @@ static void do_test_AclBindingFilter() { char errstr[512]; rd_kafka_AclBindingFilter_t *new_acl_filter; - rd_bool_t valid_resource_types[] = {rd_false, rd_true, rd_true, rd_true, - rd_true, rd_true, rd_false}; + rd_bool_t valid_resource_types[] = {rd_false, rd_true, rd_true, + rd_true, rd_true, rd_true, + rd_true, rd_true, rd_false}; rd_bool_t valid_resource_pattern_types[] = { rd_false, rd_true, rd_true, rd_true, rd_true, rd_false}; rd_bool_t valid_acl_operation[] = {