STATS: Optimistic concurrency handling in Python library.

Change-Id: I2135f3e77206fd171636a1e0b07c373c0bf093e4
Signed-off-by: Ole Troan <ot@cisco.com>
This commit is contained in:
Ole Troan
2018-09-18 11:06:33 +02:00
parent 45d5c87d86
commit b4603a70cb

View File

@ -127,6 +127,9 @@ class VPPStats:
def dump(self, counters):
stats = {}
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)
for i in range(rv_len):
n = ffi.string(rv[i].name).decode()
@ -135,16 +138,33 @@ class VPPStats:
return stats
def get_counter(self, name):
dir = self.ls(name)
return self.dump(dir).values()[0]
retries = 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):
self.api.stat_segment_disconnect()
def set_errors(self):
'''Return all errors counters > 0'''
error_names = self.ls(['/err/'])
error_counters = self.dump(error_names)
retries = 0
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]
for k in error_counters.keys() if error_counters[k]}