1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-12 09:18:10 +03:00

KCC: let kcc.graph.ReplInfo know its duration

This is going to lead to a few simplifications.

Signed-off-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
Reviewed-by: Garming Sam <garming@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
This commit is contained in:
Douglas Bagnall 2015-06-05 12:35:39 +12:00 committed by Andrew Bartlett
parent 27e08cdead
commit b5a294eb50

View File

@ -43,6 +43,15 @@ class ReplInfo(object):
self.interval = 0
self.options = 0
self.schedule = None
self.duration = 84 * 8
def set_repltimes_from_schedule(self, schedule):
"""Convert the schedule and calculate duration
:param schdule: the schedule to convert
"""
self.schedule = convert_schedule_to_repltimes(schedule)
self.duration = total_schedule(self.schedule)
def total_schedule(schedule):
@ -137,6 +146,7 @@ def combine_repl_info(info_a, info_b, info_c):
if info_c.cost > MAX_DWORD:
info_c.cost = MAX_DWORD
info_c.duration = total_schedule(new_info)
return True
@ -293,7 +303,7 @@ def create_edge(con_type, site_link, guid_to_vertex):
e.repl_info.cost = site_link.cost
e.repl_info.options = site_link.options
e.repl_info.interval = site_link.interval
e.repl_info.schedule = convert_schedule_to_repltimes(site_link.schedule)
e.repl_info.set_repltimes_from_schedule(site_link.schedule)
e.con_type = con_type
e.directed = False
return e
@ -342,6 +352,7 @@ def setup_vertices(graph):
v.repl_info.interval = 0
v.repl_info.options = 0xFFFFFFFF
v.repl_info.schedule = None # TODO highly suspicious
v.repl_info.duration = 84 * 8
v.demoted = False
@ -409,14 +420,14 @@ def try_new_path(graph, queue, vfrom, edge, vto):
if newRI.cost > vto.repl_info.cost:
return
# Cheaper or longer schedule goes in the heap
if newRI.cost < vto.repl_info.cost and not intersect:
return
new_duration = total_schedule(newRI.schedule)
old_duration = total_schedule(vto.repl_info.schedule)
# Cheaper or longer schedule
if newRI.cost < vto.repl_info.cost or new_duration > old_duration:
if (newRI.cost < vto.repl_info.cost or
newRI.duration > vto.repl_info.duration):
vto.root = vfrom.root
vto.component_id = vfrom.component_id
vto.repl_info = newRI
@ -852,10 +863,8 @@ class InternalEdge(object):
if self.repl_info.cost != other.repl_info.cost:
return self.repl_info.cost < other.repl_info.cost
self_time = total_schedule(self.repl_info.schedule)
other_time = total_schedule(other.repl_info.schedule)
if self_time != other_time:
return self_time > other_time
if self.repl_info.duration != other.repl_info.duration:
return self.repl_info.duration > other.repl_info.duration
if self.v1.guid != other.v1.guid:
return self.v1.ndrpacked_guid < other.v1.ndrpacked_guid