@@ -25,9 +25,22 @@ if timestamp_last ~= false then
25
25
redis .call (' HSET' , ' TIMESTAMP' , ' effective_pfcwd_poll_time_last' , global_effective_poll_time )
26
26
end
27
27
28
+ -- Get timestamp from TIME_STAMP table for PFC_WD counters
29
+ -- Use a field name without spaces to avoid issues
30
+ local port_timestamp_current = tonumber (redis .call (' HGET' , ' COUNTERS:TIME_STAMP' , ' PFC_WD_Port_Counter_time_stamp' ))
31
+ local port_timestamp_last = tonumber (redis .call (' HGET' , ' COUNTERS:TIME_STAMP' , ' PFC_WD_Port_Counter_time_stamp_last' ))
32
+
33
+ -- Update the last timestamp for all ports at once
34
+ if port_timestamp_current ~= nil then
35
+ redis .call (' HSET' , ' COUNTERS:TIME_STAMP' , ' PFC_WD_Port_Counter_time_stamp_last' , port_timestamp_current )
36
+ end
37
+
28
38
local effective_poll_time
29
- local effective_poll_time_lasttime
30
- local port_timestamp_last_cache = {}
39
+ if port_timestamp_current ~= nil and port_timestamp_last ~= nil then
40
+ effective_poll_time = (port_timestamp_current - port_timestamp_last ) / 1000
41
+ else
42
+ effective_poll_time = global_effective_poll_time
43
+ end
31
44
32
45
local debug_storm_global = redis .call (' HGET' , ' DEBUG_STORM' , ' enabled' ) == ' true'
33
46
local debug_storm_threshold = tonumber (redis .call (' HGET' , ' DEBUG_STORM' , ' threshold' ))
@@ -63,27 +76,6 @@ for i = n, 1, -1 do
63
76
local pfc_rx_pkt_key = ' SAI_PORT_STAT_PFC_' .. queue_index .. ' _RX_PKTS'
64
77
local pfc_duration_key = ' SAI_PORT_STAT_PFC_' .. queue_index .. ' _RX_PAUSE_DURATION_US'
65
78
66
- -- Get port specific timestamp
67
- local port_timestamp_current = tonumber (redis .call (' HGET' , counters_table_name .. ' :' .. port_id , ' PFC_WD_time_stamp' ))
68
- if port_timestamp_current ~= nil then
69
- local port_timestamp_lasttime = port_timestamp_last_cache [port_id ]
70
- if port_timestamp_lasttime == nil then
71
- port_timestamp_lasttime = tonumber (redis .call (' HGET' , counters_table_name .. ' :' .. port_id , ' PFC_WD_time_stamp_last' ))
72
- port_timestamp_last_cache [port_id ] = port_timestamp_lasttime
73
- redis .call (' HSET' , counters_table_name .. ' :' .. port_id , ' PFC_WD_time_stamp_last' , port_timestamp_current )
74
- end
75
-
76
- if port_timestamp_lasttime ~= nil then
77
- effective_poll_time = (port_timestamp_current - port_timestamp_lasttime ) / 1000
78
- else
79
- effective_poll_time = global_effective_poll_time
80
- end
81
- effective_poll_time_lasttime = false
82
- else
83
- effective_poll_time = global_effective_poll_time
84
- effective_poll_time_lasttime = global_effective_poll_time_lasttime
85
- end
86
-
87
79
-- Get all counters
88
80
local occupancy_bytes = redis .call (' HGET' , counters_table_name .. ' :' .. KEYS [i ], ' SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES' )
89
81
local packets = redis .call (' HGET' , counters_table_name .. ' :' .. KEYS [i ], ' SAI_QUEUE_STAT_PACKETS' )
@@ -132,8 +124,8 @@ for i = n, 1, -1 do
132
124
local pfc_rx_packets_string = ' "pfc_rx_packets","' .. tostring (pfc_rx_packets ) .. ' ","pfc_rx_packets_last","' .. tostring (pfc_rx_packets_last ) .. ' ",'
133
125
local storm_condition_string = ' "pfc_duration","' .. tostring (pfc_duration ) .. ' ","pfc_duration_last","' .. tostring (pfc_duration_last ) .. ' ",'
134
126
local timestamps = ' "timestamp","' .. timestamp_string .. ' ","timestamp_last","' .. timestamp_last .. ' ","effective_poll_time","' .. effective_poll_time .. ' "'
135
- if effective_poll_time_lasttime ~= false then
136
- timestamps = timestamps .. ' ,"effective_pfcwd_poll_time_last","' .. effective_poll_time_lasttime .. ' "'
127
+ if global_effective_poll_time_lasttime ~= false then
128
+ timestamps = timestamps .. ' ,"effective_pfcwd_poll_time_last","' .. global_effective_poll_time_lasttime .. ' "'
137
129
end
138
130
redis .call (' PUBLISH' , ' PFC_WD_ACTION' , ' ["' .. KEYS [i ] .. ' ","storm",' .. occupancy_string .. packets_string .. pfc_rx_packets_string .. storm_condition_string .. timestamps .. ' ]' )
139
131
is_deadlock = true
0 commit comments