Don't reset buildset when cycle dependency merged
In case a live change depends on a cycle and the cycle is merged while the item is still active the scheduler will detect the cycle as changed and re-enqueue the dependent change. The reason for this behavior is that we don't consider dependencies of merged changes when building the dependency graph. Change-Id: Ibc952886b56655c0705882497511b120e5a731cd
This commit is contained in:
committed by
James E. Blair
parent
3bcd923a68
commit
349c6a029d
@@ -1633,11 +1633,18 @@ class PipelineManager(metaclass=ABCMeta):
|
||||
# Verify that the cycle dependency graph is correct
|
||||
cycle = self.cycleForChange(
|
||||
item.changes[0], dependency_graph, item.event, debug=False)
|
||||
cycle = cycle or [item.changes[0]]
|
||||
cycle = set(cycle or [item.changes[0]])
|
||||
item_cycle = set(item.changes)
|
||||
if set(cycle) != item_cycle:
|
||||
# We don't consider merged dependencies when building the
|
||||
# dependency graph, so we need to ignore differences resulting
|
||||
# from changes that have been merged in the meantime. Put any
|
||||
# missing merged changes back in the cycle for comparison
|
||||
# purposes.
|
||||
merged_changes = set(c for c in (item_cycle - cycle) if c.is_merged)
|
||||
cycle |= merged_changes
|
||||
if cycle != item_cycle:
|
||||
log.info("Item cycle has changed: %s, now: %s, was: %s", item,
|
||||
set(cycle), item_cycle)
|
||||
cycle, item_cycle)
|
||||
self.removeItem(item)
|
||||
if item.live:
|
||||
self.reEnqueueChanges(item, item.changes)
|
||||
|
||||
Reference in New Issue
Block a user