Add an argument returnConvergenceInfo to checkConvergence which returns detailed information when convergence fails.
Adds returnConvergenceInfo as an argument to checkConvergence which returns a dictionary of nodes detailing which prefixes were missing from each node. Argument defaults to false to ensure backwards compatibility with pre-existing experiment code. Refs: #5236 Change-Id: Ia690d50b42f849deee755098248e91a428b8af19
This commit is contained in:
1 parent
dc05e3ce90
commit
edd777fdfc
1 file changed
+35
-13
@@ -33,38 +33,60 @@ from minindn.util import getSafeName
|
||||
|
||||
class Experiment(object):
|
||||
@staticmethod
|
||||
def checkConvergence(ndn, hosts, convergenceTime, quit=False):
|
||||
def checkConvergence(ndn, hosts, convergenceTime, quit=False, returnConvergenceInfo=False):
|
||||
# Wait for convergence time period
|
||||
info('Waiting {} seconds for convergence...\n'.format(convergenceTime))
|
||||
time.sleep(convergenceTime)
|
||||
info('...done\n')
|
||||
|
||||
# To check whether all the nodes of NLSR have converged
|
||||
didNlsrConverge = True
|
||||
convergeInfo = {}
|
||||
|
||||
# Checking for convergence
|
||||
for host in hosts:
|
||||
convergeInfo[host.name] = {}
|
||||
statusRouter = host.cmd('nfdc fib list | grep site/%C1.Router/cs/')
|
||||
statusPrefix = host.cmd('nfdc fib list | grep ndn | grep site | grep -v Router')
|
||||
didNodeConverge = True
|
||||
for node in hosts:
|
||||
# Node has its own router name in the fib list, but not name prefix
|
||||
if (('/ndn/{}-site/%C1.Router/cs/{}'.format(node.name, node.name)) not in statusRouter or
|
||||
host.name != node.name and ('/ndn/{}-site/{}'.format(node.name, node.name)) not in statusPrefix):
|
||||
didNodeConverge = False
|
||||
routerPrefix = ('/ndn/{}-site/%C1.Router/cs/{}'.format(node.name, node.name))
|
||||
namePrefix = ('/ndn/{}-site/{}'.format(node.name, node.name))
|
||||
|
||||
statusRouterCheck = routerPrefix not in statusRouter
|
||||
statusPrefixCheck = host.name != node.name and namePrefix not in statusPrefix
|
||||
|
||||
if statusRouterCheck or statusPrefixCheck:
|
||||
didNlsrConverge = False
|
||||
host.cmd('echo {} > convergence-result &'.format(False))
|
||||
|
||||
host.cmd('echo {} > convergence-result &'.format(didNodeConverge))
|
||||
if returnConvergenceInfo:
|
||||
convergeInfo[host.name][node.name] = []
|
||||
if statusRouterCheck:
|
||||
convergeInfo[host.name][node.name].append(routerPrefix)
|
||||
|
||||
if not didNlsrConverge:
|
||||
info('NLSR has not converged. Exiting...\n')
|
||||
if statusPrefixCheck:
|
||||
convergeInfo[host.name][node.name].append(namePrefix)
|
||||
else:
|
||||
host.cmd('echo {} > convergence-result &'.format(True))
|
||||
|
||||
if didNlsrConverge:
|
||||
if quit:
|
||||
info('NLSR has converged successfully. Exiting...\n')
|
||||
ndn.stop()
|
||||
sys.exit(0)
|
||||
else:
|
||||
info('NLSR has converged successfully.\n')
|
||||
else:
|
||||
if quit:
|
||||
info('NLSR has not converged. Exiting...\n')
|
||||
ndn.stop()
|
||||
sys.exit(1)
|
||||
else:
|
||||
info('NLSR has converged successfully.\n')
|
||||
else:
|
||||
info('NLSR has not converged.\n')
|
||||
|
||||
return didNlsrConverge
|
||||
if returnConvergenceInfo:
|
||||
return didNlsrConverge, convergeInfo
|
||||
else:
|
||||
return didNlsrConverge
|
||||
|
||||
@staticmethod
|
||||
def setupPing(hosts, strategy):
|
||||
|
||||
Reference in new issue
Block a user