STATS: Optimistic concurrency handling in Python library.
Change-Id: I2135f3e77206fd171636a1e0b07c373c0bf093e4 Signed-off-by: Ole Troan <ot@cisco.com>
This commit is contained in:
@ -127,6 +127,9 @@ class VPPStats:
|
|||||||
def dump(self, counters):
|
def dump(self, counters):
|
||||||
stats = {}
|
stats = {}
|
||||||
rv = self.api.stat_segment_dump(counters)
|
rv = self.api.stat_segment_dump(counters)
|
||||||
|
# Raise exception and retry
|
||||||
|
if rv == ffi.NULL:
|
||||||
|
raise IOError()
|
||||||
rv_len = self.api.stat_segment_vec_len(rv)
|
rv_len = self.api.stat_segment_vec_len(rv)
|
||||||
for i in range(rv_len):
|
for i in range(rv_len):
|
||||||
n = ffi.string(rv[i].name).decode()
|
n = ffi.string(rv[i].name).decode()
|
||||||
@ -135,16 +138,33 @@ class VPPStats:
|
|||||||
return stats
|
return stats
|
||||||
|
|
||||||
def get_counter(self, name):
|
def get_counter(self, name):
|
||||||
dir = self.ls(name)
|
retries = 0
|
||||||
return self.dump(dir).values()[0]
|
while True:
|
||||||
|
try:
|
||||||
|
dir = self.ls(name)
|
||||||
|
return self.dump(dir).values()[0]
|
||||||
|
except:
|
||||||
|
if retries > 10:
|
||||||
|
return None
|
||||||
|
retries += 1
|
||||||
|
pass
|
||||||
|
|
||||||
def disconnect(self):
|
def disconnect(self):
|
||||||
self.api.stat_segment_disconnect()
|
self.api.stat_segment_disconnect()
|
||||||
|
|
||||||
def set_errors(self):
|
def set_errors(self):
|
||||||
'''Return all errors counters > 0'''
|
'''Return all errors counters > 0'''
|
||||||
error_names = self.ls(['/err/'])
|
retries = 0
|
||||||
error_counters = self.dump(error_names)
|
while True:
|
||||||
|
try:
|
||||||
|
error_names = self.ls(['/err/'])
|
||||||
|
error_counters = self.dump(error_names)
|
||||||
|
break
|
||||||
|
except:
|
||||||
|
if retries > 10:
|
||||||
|
return None
|
||||||
|
retries += 1
|
||||||
|
pass
|
||||||
return {k: error_counters[k]
|
return {k: error_counters[k]
|
||||||
for k in error_counters.keys() if error_counters[k]}
|
for k in error_counters.keys() if error_counters[k]}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user