diff options
author | 2016-02-10 13:58:41 -0500 | |
---|---|---|
committer | 2016-02-10 14:04:12 -0500 | |
commit | c585d631dde54732d04b2f3ee5661f15e7648719 (patch) | |
tree | 68935c5b1199c28bf0f45059f1995fccfd223fd8 /scripts/automation/trex_control_plane/stl | |
parent | 48d3b77b634b911c6ba3f311d863c3da9625aeca (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')
-rw-r--r-- | scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_port.py | 2 | ||||
-rw-r--r-- | scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_stats.py | 10 |
2 files changed, 9 insertions, 3 deletions
diff --git a/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_port.py b/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_port.py index b1cf9ebc..de96f1ac 100644 --- a/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_port.py +++ b/scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_port.py @@ -132,7 +132,7 @@ class Port(object): # TODO: handle syncing the streams into stream_db - self.next_available_id = long(rc.data()['max_stream_id']) + self.next_available_id = long(rc.data()['max_stream_id']) + 1 return self.ok() 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) |