summaryrefslogtreecommitdiffstats
path: root/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_stats.py
diff options
context:
space:
mode:
authorimarom <imarom@cisco.com>2016-02-10 13:58:41 -0500
committerimarom <imarom@cisco.com>2016-02-10 14:04:12 -0500
commitc585d631dde54732d04b2f3ee5661f15e7648719 (patch)
tree68935c5b1199c28bf0f45059f1995fccfd223fd8 /scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_stats.py
parent48d3b77b634b911c6ba3f311d863c3da9625aeca (diff)
fixed two bugs:
1. deque race between two threads in the stats 2. max stream ID + 1 for port
Diffstat (limited to 'scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_stats.py')
-rw-r--r--scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_stats.py10
1 files changed, 8 insertions, 2 deletions
diff --git a/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_stats.py b/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_stats.py
index 3f09e47c..183ae0c6 100644
--- a/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_stats.py
+++ b/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_stats.py
@@ -12,6 +12,7 @@ import time
import re
import math
import copy
+import threading
GLOBAL_STATS = 'g'
PORT_STATS = 'p'
@@ -272,6 +273,7 @@ class CTRexStats(object):
self.latest_stats = {}
self.last_update_ts = time.time()
self.history = deque(maxlen = 10)
+ self.lock = threading.Lock()
def __getitem__(self, item):
# override this to allow quick and clean access to fields
@@ -313,7 +315,9 @@ class CTRexStats(object):
def update(self, snapshot):
# update
self.latest_stats = snapshot
- self.history.append(snapshot)
+
+ with self.lock:
+ self.history.append(snapshot)
diff_time = time.time() - self.last_update_ts
@@ -365,7 +369,9 @@ class CTRexStats(object):
if self.latest_stats[field] < percision:
return 0
- field_samples = [sample[field] for sample in self.history]
+ # must lock, deque is not thread-safe for iteration
+ with self.lock:
+ field_samples = [sample[field] for sample in self.history]
if use_raw:
return calculate_diff_raw(field_samples)