dub
dub copied to clipboard
Draft: Dependency resolution is faulty
trafficstars
In my search to understand why dependency resolution goes wrong for a company internal build I've added these debug prints in dub.project.
Observations:
-
The function
getDependency()is called about 150k times. That doesn't seem sane. -
Problems are likely caused by faulty dependency resolution logic in
getPackageConfigs(). -
Problems seem to lie in the code section
writeln("configs:", configs);
// successively remove configurations until only one configuration per package is left
bool changed;
do {
// remove all configs that are not reachable by all parent packages
changed = false;
foreach (i, ref c; configs) {
if (c == Vertex.init) continue; // ignore deleted configurations
if (!isReachableByAllParentPacks(i)) {
logDebug("%s %s NOT REACHABLE by all of (%s):", c.pack, c.config, parents[c.pack]);
removeConfig(i);
changed = true;
}
}
// when all edges are cleaned up, pick one package and remove all but one config
if (!changed) {
foreach (p; getTopologicalPackageList()) {
size_t cnt = 0;
foreach (i, ref c; configs)
if (c.pack == p.name && ++cnt > 1) {
logDebug("NON-PRIMARY: %s %s", c.pack, c.config);
removeConfig(i);
}
if (cnt > 1) {
changed = true;
break;
}
}
}
} while (changed);
writeln("adjusted configs:", configs);
. The debug print before shows seems sane before whereas the debug print after shows
adjusted configs:[Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", ""), Vertex("", "")]
Two of the debug prints shows two instances of Vertex having its config field be empty string "". Could this be the source of problem?
- Graph representation at the top of
getPackageConfigs()should use plain pointers to nodes and vertices as D is a GC-backed language.