telemetry: fix port stats retrieval
authorCiara Power <ciara.power@intel.com>
Thu, 27 Feb 2020 17:04:56 +0000 (17:04 +0000)
committerDavid Marchand <david.marchand@redhat.com>
Fri, 13 Mar 2020 12:57:04 +0000 (13:57 +0100)
The ep struct is used to track what type of stats are required by the
client. For PORT_STATS type, it contains the lists of port and metric
ids to query, and the number of ids in each list.

The ep struct has values set (num of port and metric ids) when a request
for port stats values by name is received. However, after this value
assignment, the struct is reset to all 0 values, meaning the number of
port and metric ids required now both show as 0, and the client will not
receive the requested data in response. To fix this issue, the memset
call is now moved above the ep struct value assignment.

Fixes: 4080e46c8078 ("telemetry: support global metrics")
Cc: stable@dpdk.org
Signed-off-by: Ciara Power <ciara.power@intel.com>
Reviewed-by: Kevin Laatz <kevin.laatz@intel.com>
lib/librte_telemetry/rte_telemetry_parser.c

index 9601323..e8c269e 100644 (file)
@@ -456,9 +456,9 @@ rte_telemetry_command_ports_stats_values_by_name(struct telemetry_impl
        size_t index;
        json_t *value;
 
+       memset(&ep, 0, sizeof(ep));
        ep.pp.num_port_ids = json_array_size(port_ids_json);
        ep.pp.num_metric_ids = num_stat_names;
-       memset(&ep, 0, sizeof(ep));
        if (telemetry == NULL) {
                TELEMETRY_LOG_ERR("Invalid telemetry argument");
                return -1;