dub icon indicating copy to clipboard operation
dub copied to clipboard

Draft: Dependency resolution is faulty

Open nordlow opened this issue 4 years ago • 0 comments
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.

nordlow avatar Sep 08 '21 10:09 nordlow