public inbox for gentoo-portage-dev@lists.gentoo.org
 help / color / mirror / Atom feed
Search results ordered by [date|relevance]  view[summary|nested|Atom feed]
thread overview below | download: 
* Re: [gentoo-portage-dev] [PATCH] depgraph._serialize_tasks: improve runtime cycle handling (bug 590514)
  @ 2016-08-07 15:14 99% ` Brian Dolbec
  0 siblings, 0 replies; 1+ results
From: Brian Dolbec @ 2016-08-07 15:14 UTC (permalink / raw
  To: gentoo-portage-dev

On Thu,  4 Aug 2016 21:33:59 -0700
Zac Medico <zmedico@gentoo.org> wrote:

> Previously, it was possible for _serialize_tasks to count some
> dependencies of a runtime cycle as part of that cycle, leading to
> sub-optimal merge order for these dependencies because they got
> grouped together with the cycle in the overall merge order. Fix
> it to separate these dependencies from the cycle, and merge them
> earlier.
> 
> X-Gentoo-Bug: 590514
> X-Gentoo-Bug-url: https://bugs.gentoo.org/show_bug.cgi?id=590514
> ---
>  pym/_emerge/depgraph.py                            | 50
> +++++++-------- .../resolver/test_runtime_cycle_merge_order.py     |
> 72 ++++++++++++++++++++++ 2 files changed, 98 insertions(+), 24
> deletions(-) create mode 100644
> pym/portage/tests/resolver/test_runtime_cycle_merge_order.py
> 
> diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py
> index fc957f5..26037ad 100644
> --- a/pym/_emerge/depgraph.py
> +++ b/pym/_emerge/depgraph.py
> @@ -7415,36 +7415,38 @@ class depgraph(object):
>  						selected_nodes =
> set() if gather_deps(ignore_priority,
>  							mergeable_nodes,
> selected_nodes, node):
> -							# When
> selecting asap_nodes, we need to ensure
> -							# that we
> haven't selected a large runtime cycle
> -							# that is
> obviously sub-optimal. This will be
> -							# obvious if
> any of the non-asap selected_nodes
> -							# is a leaf
> node when medium_soft deps are
> -							# ignored.
> -							if
> prefer_asap and asap_nodes and \
> -
> len(selected_nodes) > 1:
> -								for
> node in selected_nodes.difference(
> -
> asap_nodes):
> -
> if not mygraph.child_nodes(node,
> -
> ignore_priority =
> -
> DepPriorityNormalRange.ignore_medium_soft):
> -
> selected_nodes = None
> -
> break
> -							if
> selected_nodes:
> -								if
> smallest_cycle is None or \
> -
> len(selected_nodes) < len(smallest_cycle):
> -
> smallest_cycle = selected_nodes
> +							if
> smallest_cycle is None or \
> +
> len(selected_nodes) < len(smallest_cycle):
> +
> smallest_cycle = selected_nodes 
>  					selected_nodes =
> smallest_cycle 
> -					if selected_nodes and debug:
> -						writemsg("\nruntime
> cycle digraph (%s nodes):\n\n" %
> -
> (len(selected_nodes),), noiselevel=-1)
> +					if selected_nodes is not
> None: cycle_digraph = mygraph.copy()
>  						cycle_digraph.difference_update([x
> for x in cycle_digraph if x not in selected_nodes])
> -
> cycle_digraph.debug_print()
> -						writemsg("\n",
> noiselevel=-1) +
> +						leaves =
> cycle_digraph.leaf_nodes()
> +						if leaves:
> +							# NOTE: This
> case should only be triggered when
> +							#
> prefer_asap is True, since otherwise these
> +							# leaves
> would have been selected to merge
> +							# before
> this point. Since these "leaves" may
> +							# actually
> have some low-priority dependencies
> +							# that we
> have intentionally ignored, select
> +							# only one
> node here, so that merge order
> +							# accounts
> for as many dependencies as possible.
> +
> selected_nodes = [leaves[0]] +
> +						if debug:
> +
> writemsg("\nruntime cycle digraph (%s nodes):\n\n" %
> +
> (len(selected_nodes),), noiselevel=-1)
> +
> cycle_digraph.debug_print()
> +
> writemsg("\n", noiselevel=-1) +
> +							if leaves:
> +
> writemsg("runtime cycle leaf: %s\n\n" %
> +
> (selected_nodes[0],), noiselevel=-1) 
>  					if prefer_asap and
> asap_nodes and not selected_nodes: # We failed to find any asap nodes
> to merge, so ignore diff --git

As usual, we are not resolver guru's, but the code changes look decent
enough :)

LGTM

-- 
Brian Dolbec <dolsen>



^ permalink raw reply	[relevance 99%]

Results 1-1 of 1 | reverse | options above
-- pct% links below jump to the message on this page, permalinks otherwise --
2016-08-05  4:33     [gentoo-portage-dev] [PATCH] depgraph._serialize_tasks: improve runtime cycle handling (bug 590514) Zac Medico
2016-08-07 15:14 99% ` Brian Dolbec

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox