From c0f951cbfe40dba6017ff7853d0d6cbb7f3b5448 Mon Sep 17 00:00:00 2001 From: Volodymyr Boiko <66446128+vboykox@users.noreply.github.com> Date: Thu, 3 Dec 2020 02:37:46 +0200 Subject: [PATCH] [port_rates][rif_rates] Fix port_rates.lua (#1520) Previously, loop sets DONE state on processing the first port, leaving the rest of the ports' states uninitialized. Now, the fix set rate collect logic init state per port. Signed-off-by: Volodymyr Boyko --- orchagent/port_rates.lua | 12 ++++++------ orchagent/rif_rates.lua | 11 ++++++----- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/orchagent/port_rates.lua b/orchagent/port_rates.lua index 60ff27c0aa..f1f383a857 100644 --- a/orchagent/port_rates.lua +++ b/orchagent/port_rates.lua @@ -29,12 +29,12 @@ logit(alpha) logit(one_minus_alpha) logit(delta) -local initialized = redis.call('HGET', rates_table_name .. ':' .. 'PORT', 'INIT_DONE') - -logit(initialized) - local n = table.getn(KEYS) for i = 1, n do + local state_table = rates_table_name .. ':' .. KEYS[i] .. ':' .. 'PORT' + local initialized = redis.call('HGET', state_table, 'INIT_DONE') + logit(initialized) + -- Get new COUNTERS values local in_ucast_pkts = redis.call('HGET', counters_table_name .. ':' .. KEYS[i], 'SAI_PORT_STAT_IF_IN_UCAST_PKTS') local in_non_ucast_pkts = redis.call('HGET', counters_table_name .. ':' .. KEYS[i], 'SAI_PORT_STAT_IF_IN_NON_UCAST_PKTS') @@ -76,7 +76,7 @@ for i = 1, n do redis.call('HSET', rates_table_name .. ':' .. KEYS[i], 'RX_PPS', rx_pps_new) redis.call('HSET', rates_table_name .. ':' .. KEYS[i], 'TX_BPS', tx_bps_new) redis.call('HSET', rates_table_name .. ':' .. KEYS[i], 'TX_PPS', tx_pps_new) - redis.call('HSET', rates_table_name .. ':' .. 'PORT', 'INIT_DONE', 'DONE') + redis.call('HSET', state_table, 'INIT_DONE', 'DONE') end else -- Set old COUNTERS values @@ -86,7 +86,7 @@ for i = 1, n do redis.call('HSET', rates_table_name .. ':' .. KEYS[i], 'SAI_PORT_STAT_IF_OUT_NON_UCAST_PKTS_last', out_non_ucast_pkts) redis.call('HSET', rates_table_name .. ':' .. KEYS[i], 'SAI_PORT_STAT_IF_IN_OCTETS_last', in_octets) redis.call('HSET', rates_table_name .. ':' .. KEYS[i], 'SAI_PORT_STAT_IF_OUT_OCTETS_last', out_octets) - redis.call('HSET', rates_table_name .. ':' .. 'PORT', 'INIT_DONE', 'COUNTERS_LAST') + redis.call('HSET', state_table, 'INIT_DONE', 'COUNTERS_LAST') end end diff --git a/orchagent/rif_rates.lua b/orchagent/rif_rates.lua index edda70d248..0cce7ce911 100644 --- a/orchagent/rif_rates.lua +++ b/orchagent/rif_rates.lua @@ -25,11 +25,12 @@ end local one_minus_alpha = 1.0 - alpha local delta = tonumber(ARGV[3]) -local initialized = redis.call('HGET', rates_table_name .. ':' .. 'RIF', 'INIT_DONE') -logit(initialized) - local n = table.getn(KEYS) for i = 1, n do + local state_table = rates_table_name .. ':' .. KEYS[i] .. ':' .. 'RIF' + local initialized = redis.call('HGET', state_table, 'INIT_DONE') + logit(initialized) + -- Get new COUNTERS values local in_octets = redis.call('HGET', counters_table_name .. ':' .. KEYS[i], 'SAI_ROUTER_INTERFACE_STAT_IN_OCTETS') local in_pkts = redis.call('HGET', counters_table_name .. ':' .. KEYS[i], 'SAI_ROUTER_INTERFACE_STAT_IN_PACKETS') @@ -67,7 +68,7 @@ for i = 1, n do redis.call('HSET', rates_table_name .. ':' .. KEYS[i], 'RX_PPS', rx_pps_new) redis.call('HSET', rates_table_name .. ':' .. KEYS[i], 'TX_BPS', tx_bps_new) redis.call('HSET', rates_table_name .. ':' .. KEYS[i], 'TX_PPS', tx_pps_new) - redis.call('HSET', rates_table_name .. ':' .. 'RIF', 'INIT_DONE', 'DONE') + redis.call('HSET', state_table, 'INIT_DONE', 'DONE') end else -- Set old COUNTERS values @@ -75,7 +76,7 @@ for i = 1, n do redis.call('HSET', rates_table_name .. ':' .. KEYS[i], 'SAI_ROUTER_INTERFACE_STAT_IN_PACKETS_last', in_pkts) redis.call('HSET', rates_table_name .. ':' .. KEYS[i], 'SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS_last', out_octets) redis.call('HSET', rates_table_name .. ':' .. KEYS[i], 'SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS_last', out_pkts) - redis.call('HSET', rates_table_name .. ':' .. 'RIF', 'INIT_DONE', 'COUNTERS_LAST') + redis.call('HSET', state_table, 'INIT_DONE', 'COUNTERS_LAST') end end