aboutsummaryrefslogtreecommitdiff
path: root/rumba/model.py
diff options
context:
space:
mode:
authorVincenzo Maffione <v.maffione@gmail.com>2017-03-19 16:49:51 +0100
committerVincenzo Maffione <v.maffione@gmail.com>2017-03-19 16:49:51 +0100
commita3b5e4464c5897e30c39e0f9971d2e5d6cd04443 (patch)
tree3948d37cf12a5e51bab6188f53c87087be396078 /rumba/model.py
parent9bc830fc85831db2550a8bbebe943609185726bf (diff)
downloadrumba-a3b5e4464c5897e30c39e0f9971d2e5d6cd04443.tar.gz
rumba-a3b5e4464c5897e30c39e0f9971d2e5d6cd04443.zip
model: compute_ipcps(): compute enrollments
Diffstat (limited to 'rumba/model.py')
-rw-r--r--rumba/model.py22
1 files changed, 16 insertions, 6 deletions
diff --git a/rumba/model.py b/rumba/model.py
index 694ce33..1e28147 100644
--- a/rumba/model.py
+++ b/rumba/model.py
@@ -283,11 +283,15 @@ class IPCP:
self.node = node
self.dif = dif
self.registrations = []
+ self.enrollments = []
def __repr__(self):
- return "IPCP=%s DIF=%s N-1-DIFs=(%s)" % \
+ return "{IPCP=%s,DIF=%s,N-1-DIFs=(%s),enrollments=(%s)}" % \
(self.name, self.dif.name,
- ' '.join([dif.name for dif in self.registrations]))
+ ' '.join([dif.name for dif in self.registrations]),
+ ' '.join(['{neigh=%s,N-1-DIF=%s}' % (e['enroller'].name,
+ e['lower_dif'].name) for e in self.enrollments])
+ )
def __hash__(self):
return hash((self.name, self.dif.name))
@@ -433,6 +437,8 @@ class Experiment:
if node1 != node2:
dif_graphs[dif][node1].append((node2, lower_dif))
+ self.enrollments[dif] = []
+
if first == None:
# This is a shim DIF, nothing to do
continue
@@ -443,8 +449,6 @@ class Experiment:
er.append("%s --[%s]--> %s" % (node.name, edge[1].name, edge[0].name))
print("DIF graph for %s: %s" % (dif, ', '.join(er)))
- self.enrollments[dif] = []
-
if self.enrollment_strategy == 'minimal':
# To generate the list of enrollments, we simulate one,
# using breadth-first trasversal.
@@ -480,7 +484,8 @@ class Experiment:
e['lower_dif']))
def compute_ipcps(self):
- # For each node, compute the required IPCP instances
+ # For each node, compute the required IPCP instances, and associated
+ # registrations and enrollments
for node in self.nodes:
node.ipcps = []
# We want also the node.ipcps list to be generated in
@@ -488,13 +493,18 @@ class Experiment:
for dif in self.dif_ordering:
if dif not in node.difs:
continue
- ipcp = IPCP(name = '%s.%s.IPCP' % (dif.name, node.name),
+ ipcp = IPCP(name = '%s.%s' % (dif.name, node.name),
node = node, dif = dif)
if dif in node.dif_registrations:
for lower in node.dif_registrations[dif]:
ipcp.registrations.append(lower)
+ for e in self.enrollments[dif]:
+ if e['enrollee'] == node:
+ ipcp.enrollments.append({'enroller': e['enroller'],
+ 'lower_dif': e['lower_dif']})
+
node.ipcps.append(ipcp)
print("IPCP for node %s: %s" % (node.name, node.ipcps))