New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[SR-4400] Resolver is doing too much work #5054
Comments
Looks like the problem is not recursion but resolver having to do a lot of work, which depends on the number of dependencies and the eligible versions for each constraint that is encountered. I created a mock test to demonstrate this: https://github.com/aciidb0mb3r/swift-package-manager/blob/fix-long-wait/Tests/PackageGraphTests/DependencyResolverTests.swift#L618 $ st -s PackageGraphTests.DependencyResolverTests/testComplex
Test Suite 'Selected tests' started at 2017-04-07 16:31:28.247
Test Suite 'SwiftPMPackageTests.xctest' started at 2017-04-07 16:31:28.247
Test Suite 'DependencyResolverTests' started at 2017-04-07 16:31:28.247
Test Case '-[PackageGraphTests.DependencyResolverTests testComplex]' started.
Trying to merge Kassandra @ 0.2.3
Trying to merge BlueSocket @ 0.12.49
Trying to merge Kitura @ 1.0.0
Unabled to merge:
[BlueSocket @ 0.11.0..<0.12.0]
into
[Kassandra @ 0.2.0..<0.3.0, Kitura @ 1.0.0..<1.1.0, BlueSocket @ 0.12.0..<0.13.0, ]
==========
Trying to merge BlueSocket @ 0.12.48
Trying to merge Kitura @ 1.0.0
Unabled to merge:
[BlueSocket @ 0.11.0..<0.12.0]
into
[Kassandra @ 0.2.0..<0.3.0, Kitura @ 1.0.0..<1.1.0, BlueSocket @ 0.12.0..<0.13.0, ]
==========
Trying to merge BlueSocket @ 0.12.47
Trying to merge Kitura @ 1.0.0
Unabled to merge:
[BlueSocket @ 0.11.0..<0.12.0]
into
[Kassandra @ 0.2.0..<0.3.0, Kitura @ 1.0.0..<1.1.0, BlueSocket @ 0.12.0..<0.13.0, ]
==========
Trying to merge BlueSocket @ 0.12.46
Trying to merge Kitura @ 1.0.0
Unabled to merge:
[BlueSocket @ 0.11.0..<0.12.0]
into
[Kassandra @ 0.2.0..<0.3.0, Kitura @ 1.0.0..<1.1.0, BlueSocket @ 0.12.0..<0.13.0, ]
==========
Trying to merge BlueSocket @ 0.12.45
Trying to merge Kitura @ 1.0.0
Unabled to merge:
[BlueSocket @ 0.11.0..<0.12.0]
into
[Kassandra @ 0.2.0..<0.3.0, Kitura @ 1.0.0..<1.1.0, BlueSocket @ 0.12.0..<0.13.0, ]
==========
Trying to merge BlueSocket @ 0.12.44
Trying to merge Kitura @ 1.0.0
Unabled to merge:
[BlueSocket @ 0.11.0..<0.12.0]
into
[Kassandra @ 0.2.0..<0.3.0, Kitura @ 1.0.0..<1.1.0, BlueSocket @ 0.12.0..<0.13.0, ]
==========
Trying to merge BlueSocket @ 0.12.43
Trying to merge Kitura @ 1.0.0
Unabled to merge:
[BlueSocket @ 0.11.0..<0.12.0]
into
[Kassandra @ 0.2.0..<0.3.0, Kitura @ 1.0.0..<1.1.0, BlueSocket @ 0.12.0..<0.13.0, ]
==========
Trying to merge BlueSocket @ 0.12.42
Trying to merge Kitura @ 1.0.0
Unabled to merge:
[BlueSocket @ 0.11.0..<0.12.0]
into
[Kassandra @ 0.2.0..<0.3.0, Kitura @ 1.0.0..<1.1.0, BlueSocket @ 0.12.0..<0.13.0, ]
==========
Trying to merge BlueSocket @ 0.12.41
Trying to merge Kitura @ 1.0.0
Unabled to merge:
[BlueSocket @ 0.11.0..<0.12.0]
into
[Kassandra @ 0.2.0..<0.3.0, Kitura @ 1.0.0..<1.1.0, BlueSocket @ 0.12.0..<0.13.0, ]
==========
Trying to merge BlueSocket @ 0.12.40
Trying to merge Kitura @ 1.0.0
Unabled to merge:
[BlueSocket @ 0.11.0..<0.12.0]
into
[Kassandra @ 0.2.0..<0.3.0, Kitura @ 1.0.0..<1.1.0, BlueSocket @ 0.12.0..<0.13.0, ]
==========
Trying to merge BlueSocket @ 0.12.39
Trying to merge Kitura @ 1.0.0
Unabled to merge:
[BlueSocket @ 0.11.0..<0.12.0]
into
[Kassandra @ 0.2.0..<0.3.0, Kitura @ 1.0.0..<1.1.0, BlueSocket @ 0.12.0..<0.13.0, ]
==========
Trying to merge BlueSocket @ 0.12.38
Trying to merge Kitura @ 1.0.0
Unabled to merge:
[BlueSocket @ 0.11.0..<0.12.0]
into
[Kassandra @ 0.2.0..<0.3.0, Kitura @ 1.0.0..<1.1.0, BlueSocket @ 0.12.0..<0.13.0, ]
==========
Trying to merge BlueSocket @ 0.12.37
Trying to merge Kitura @ 1.0.0
Unabled to merge:
[BlueSocket @ 0.11.0..<0.12.0]
into
[Kassandra @ 0.2.0..<0.3.0, Kitura @ 1.0.0..<1.1.0, BlueSocket @ 0.12.0..<0.13.0, ]
==========
Trying to merge BlueSocket @ 0.12.36
Trying to merge Kitura @ 1.0.0
Unabled to merge:
[BlueSocket @ 0.11.0..<0.12.0]
into
[Kassandra @ 0.2.0..<0.3.0, Kitura @ 1.0.0..<1.1.0, BlueSocket @ 0.12.0..<0.13.0, ]
==========
Trying to merge BlueSocket @ 0.12.35
Trying to merge Kitura @ 1.0.0
Unabled to merge:
[BlueSocket @ 0.11.0..<0.12.0]
into
[Kassandra @ 0.2.0..<0.3.0, Kitura @ 1.0.0..<1.1.0, BlueSocket @ 0.12.0..<0.13.0, ]
==========
Trying to merge BlueSocket @ 0.12.34
Trying to merge Kitura @ 1.0.0
Unabled to merge:
[BlueSocket @ 0.11.0..<0.12.0]
into
[Kassandra @ 0.2.0..<0.3.0, Kitura @ 1.0.0..<1.1.0, BlueSocket @ 0.12.0..<0.13.0, ]
==========
Trying to merge BlueSocket @ 0.12.33
Trying to merge Kitura @ 1.0.0
Unabled to merge:
[BlueSocket @ 0.11.0..<0.12.0]
into
[Kassandra @ 0.2.0..<0.3.0, Kitura @ 1.0.0..<1.1.0, BlueSocket @ 0.12.0..<0.13.0, ]
==========
Trying to merge BlueSocket @ 0.12.32
Trying to merge Kitura @ 1.0.0
Unabled to merge:
[BlueSocket @ 0.11.0..<0.12.0]
into
[Kassandra @ 0.2.0..<0.3.0, Kitura @ 1.0.0..<1.1.0, BlueSocket @ 0.12.0..<0.13.0, ]
==========
Trying to merge BlueSocket @ 0.12.31
Trying to merge Kitura @ 1.0.0
Unabled to merge:
[BlueSocket @ 0.11.0..<0.12.0]
into
[Kassandra @ 0.2.0..<0.3.0, Kitura @ 1.0.0..<1.1.0, BlueSocket @ 0.12.0..<0.13.0, ]
==========
Trying to merge BlueSocket @ 0.12.30
Trying to merge Kitura @ 1.0.0
Unabled to merge:
[BlueSocket @ 0.11.0..<0.12.0]
into
[Kassandra @ 0.2.0..<0.3.0, Kitura @ 1.0.0..<1.1.0, BlueSocket @ 0.12.0..<0.13.0, ]
==========
Trying to merge BlueSocket @ 0.12.29
Trying to merge Kitura @ 1.0.0
Unabled to merge:
[BlueSocket @ 0.11.0..<0.12.0]
into
[Kassandra @ 0.2.0..<0.3.0, Kitura @ 1.0.0..<1.1.0, BlueSocket @ 0.12.0..<0.13.0, ]
==========
Trying to merge BlueSocket @ 0.12.28
Trying to merge Kitura @ 1.0.0
Unabled to merge:
[BlueSocket @ 0.11.0..<0.12.0]
into
[Kassandra @ 0.2.0..<0.3.0, Kitura @ 1.0.0..<1.1.0, BlueSocket @ 0.12.0..<0.13.0, ]
==========
Trying to merge BlueSocket @ 0.12.27
Trying to merge Kitura @ 1.0.0
Unabled to merge:
[BlueSocket @ 0.11.0..<0.12.0]
into
[Kassandra @ 0.2.0..<0.3.0, Kitura @ 1.0.0..<1.1.0, BlueSocket @ 0.12.0..<0.13.0, ]
==========
Trying to merge BlueSocket @ 0.12.26
Trying to merge Kitura @ 1.0.0
Unabled to merge:
[BlueSocket @ 0.11.0..<0.12.0]
into
[Kassandra @ 0.2.0..<0.3.0, Kitura @ 1.0.0..<1.1.0, BlueSocket @ 0.12.0..<0.13.0, ]
==========
Trying to merge BlueSocket @ 0.12.25
Trying to merge Kitura @ 1.0.0
Unabled to merge:
[BlueSocket @ 0.11.0..<0.12.0]
into
[Kassandra @ 0.2.0..<0.3.0, Kitura @ 1.0.0..<1.1.0, BlueSocket @ 0.12.0..<0.13.0, ]
==========
Trying to merge BlueSocket @ 0.12.24
Trying to merge Kitura @ 1.0.0
Unabled to merge:
[BlueSocket @ 0.11.0..<0.12.0]
into
[Kassandra @ 0.2.0..<0.3.0, Kitura @ 1.0.0..<1.1.0, BlueSocket @ 0.12.0..<0.13.0, ]
==========
Trying to merge BlueSocket @ 0.12.23
Trying to merge Kitura @ 1.0.0
Unabled to merge:
[BlueSocket @ 0.11.0..<0.12.0]
into
[Kassandra @ 0.2.0..<0.3.0, Kitura @ 1.0.0..<1.1.0, BlueSocket @ 0.12.0..<0.13.0, ]
==========
Trying to merge BlueSocket @ 0.12.22
Trying to merge Kitura @ 1.0.0
Unabled to merge:
[BlueSocket @ 0.11.0..<0.12.0]
into
[Kassandra @ 0.2.0..<0.3.0, Kitura @ 1.0.0..<1.1.0, BlueSocket @ 0.12.0..<0.13.0, ]
==========
Trying to merge BlueSocket @ 0.12.21
Trying to merge Kitura @ 1.0.0
Unabled to merge:
[BlueSocket @ 0.11.0..<0.12.0]
into
[Kassandra @ 0.2.0..<0.3.0, Kitura @ 1.0.0..<1.1.0, BlueSocket @ 0.12.0..<0.13.0, ]
==========
Trying to merge BlueSocket @ 0.12.20
Trying to merge Kitura @ 1.0.0
Unabled to merge:
[BlueSocket @ 0.11.0..<0.12.0]
into
[Kassandra @ 0.2.0..<0.3.0, Kitura @ 1.0.0..<1.1.0, BlueSocket @ 0.12.0..<0.13.0, ]
==========
Trying to merge BlueSocket @ 0.12.19
Trying to merge Kitura @ 1.0.0
Unabled to merge:
[BlueSocket @ 0.11.0..<0.12.0]
into
[Kassandra @ 0.2.0..<0.3.0, Kitura @ 1.0.0..<1.1.0, BlueSocket @ 0.12.0..<0.13.0, ]
==========
Trying to merge BlueSocket @ 0.12.18
Trying to merge Kitura @ 1.0.0
Unabled to merge:
[BlueSocket @ 0.11.0..<0.12.0]
into
[Kassandra @ 0.2.0..<0.3.0, Kitura @ 1.0.0..<1.1.0, BlueSocket @ 0.12.0..<0.13.0, ]
==========
Trying to merge BlueSocket @ 0.12.17
Trying to merge Kitura @ 1.0.0
Unabled to merge:
[BlueSocket @ 0.11.0..<0.12.0]
into
[Kassandra @ 0.2.0..<0.3.0, Kitura @ 1.0.0..<1.1.0, BlueSocket @ 0.12.0..<0.13.0, ]
==========
Trying to merge BlueSocket @ 0.12.16
Trying to merge Kitura @ 1.0.0
Unabled to merge:
[BlueSocket @ 0.11.0..<0.12.0]
into
[Kassandra @ 0.2.0..<0.3.0, Kitura @ 1.0.0..<1.1.0, BlueSocket @ 0.12.0..<0.13.0, ]
==========
Trying to merge BlueSocket @ 0.12.15
Trying to merge Kitura @ 1.0.0
Unabled to merge:
[BlueSocket @ 0.11.0..<0.12.0]
into
[Kassandra @ 0.2.0..<0.3.0, Kitura @ 1.0.0..<1.1.0, BlueSocket @ 0.12.0..<0.13.0, ]
==========
Trying to merge BlueSocket @ 0.12.14
Trying to merge Kitura @ 1.0.0
Unabled to merge:
[BlueSocket @ 0.11.0..<0.12.0]
into
[Kassandra @ 0.2.0..<0.3.0, Kitura @ 1.0.0..<1.1.0, BlueSocket @ 0.12.0..<0.13.0, ]
==========
Trying to merge BlueSocket @ 0.12.13
Trying to merge Kitura @ 1.0.0
Unabled to merge:
[BlueSocket @ 0.11.0..<0.12.0]
into
[Kassandra @ 0.2.0..<0.3.0, Kitura @ 1.0.0..<1.1.0, BlueSocket @ 0.12.0..<0.13.0, ]
==========
Trying to merge BlueSocket @ 0.12.12
Trying to merge Kitura @ 1.0.0
Unabled to merge:
[BlueSocket @ 0.11.0..<0.12.0]
into
[Kassandra @ 0.2.0..<0.3.0, Kitura @ 1.0.0..<1.1.0, BlueSocket @ 0.12.0..<0.13.0, ]
==========
Trying to merge BlueSocket @ 0.12.11
Trying to merge Kitura @ 1.0.0
Unabled to merge:
[BlueSocket @ 0.11.0..<0.12.0]
into
[Kassandra @ 0.2.0..<0.3.0, Kitura @ 1.0.0..<1.1.0, BlueSocket @ 0.12.0..<0.13.0, ]
==========
Trying to merge BlueSocket @ 0.12.10
Trying to merge Kitura @ 1.0.0
Unabled to merge:
[BlueSocket @ 0.11.0..<0.12.0]
into
[Kassandra @ 0.2.0..<0.3.0, Kitura @ 1.0.0..<1.1.0, BlueSocket @ 0.12.0..<0.13.0, ]
==========
Trying to merge BlueSocket @ 0.12.9
Trying to merge Kitura @ 1.0.0
Unabled to merge:
[BlueSocket @ 0.11.0..<0.12.0]
into
[Kassandra @ 0.2.0..<0.3.0, Kitura @ 1.0.0..<1.1.0, BlueSocket @ 0.12.0..<0.13.0, ]
==========
Trying to merge BlueSocket @ 0.12.8
Trying to merge Kitura @ 1.0.0
Unabled to merge:
[BlueSocket @ 0.11.0..<0.12.0]
into
[Kassandra @ 0.2.0..<0.3.0, Kitura @ 1.0.0..<1.1.0, BlueSocket @ 0.12.0..<0.13.0, ]
==========
Trying to merge BlueSocket @ 0.12.7
Trying to merge Kitura @ 1.0.0
Unabled to merge:
[BlueSocket @ 0.11.0..<0.12.0]
into
[Kassandra @ 0.2.0..<0.3.0, Kitura @ 1.0.0..<1.1.0, BlueSocket @ 0.12.0..<0.13.0, ]
==========
Trying to merge BlueSocket @ 0.12.6
Trying to merge Kitura @ 1.0.0
Unabled to merge:
[BlueSocket @ 0.11.0..<0.12.0]
into
[Kassandra @ 0.2.0..<0.3.0, Kitura @ 1.0.0..<1.1.0, BlueSocket @ 0.12.0..<0.13.0, ]
==========
Trying to merge BlueSocket @ 0.12.5
Trying to merge Kitura @ 1.0.0
Unabled to merge:
[BlueSocket @ 0.11.0..<0.12.0]
into
[Kassandra @ 0.2.0..<0.3.0, Kitura @ 1.0.0..<1.1.0, BlueSocket @ 0.12.0..<0.13.0, ]
==========
Trying to merge BlueSocket @ 0.12.4
Trying to merge Kitura @ 1.0.0
Unabled to merge:
[BlueSocket @ 0.11.0..<0.12.0]
into
[Kassandra @ 0.2.0..<0.3.0, Kitura @ 1.0.0..<1.1.0, BlueSocket @ 0.12.0..<0.13.0, ]
==========
Trying to merge BlueSocket @ 0.12.3
Trying to merge Kitura @ 1.0.0
Unabled to merge:
[BlueSocket @ 0.11.0..<0.12.0]
into
[Kassandra @ 0.2.0..<0.3.0, Kitura @ 1.0.0..<1.1.0, BlueSocket @ 0.12.0..<0.13.0, ]
==========
Trying to merge BlueSocket @ 0.12.2
Trying to merge Kitura @ 1.0.0
Unabled to merge:
[BlueSocket @ 0.11.0..<0.12.0]
into
[Kassandra @ 0.2.0..<0.3.0, Kitura @ 1.0.0..<1.1.0, BlueSocket @ 0.12.0..<0.13.0, ]
==========
Trying to merge BlueSocket @ 0.12.1
Trying to merge Kitura @ 1.0.0
Unabled to merge:
[BlueSocket @ 0.11.0..<0.12.0]
into
[Kassandra @ 0.2.0..<0.3.0, Kitura @ 1.0.0..<1.1.0, BlueSocket @ 0.12.0..<0.13.0, ]
==========
Trying to merge BlueSocket @ 0.12.0
Trying to merge Kitura @ 1.0.0
Unabled to merge:
[BlueSocket @ 0.11.0..<0.12.0]
into
[Kassandra @ 0.2.0..<0.3.0, Kitura @ 1.0.0..<1.1.0, BlueSocket @ 0.12.0..<0.13.0, ]
==========
Trying to merge Kassandra @ 0.2.2
Trying to merge BlueSocket @ 0.11.49
Trying to merge Kitura @ 1.0.0
Trying to merge BlueSocket @ 0.11.49
[(container: "Kassandra", binding: 0.2.2), (container: "Kitura", binding: 1.0.0), (container: "BlueSocket", binding: 0.11.49)]
Test Case '-[PackageGraphTests.DependencyResolverTests testComplex]' passed (0.099 seconds).
Test Suite 'DependencyResolverTests' passed at 2017-04-07 16:31:28.346.
Executed 1 test, with 0 failures (0 unexpected) in 0.099 (0.099) seconds
Test Suite 'SwiftPMPackageTests.xctest' passed at 2017-04-07 16:31:28.346.
Executed 1 test, with 0 failures (0 unexpected) in 0.099 (0.099) seconds
Test Suite 'Selected tests' passed at 2017-04-07 16:31:28.346.
Executed 1 test, with 0 failures (0 unexpected) in 0.099 (0.099) seconds |
@swift-ci create |
Comment by Mathäus Zingerle (JIRA) Any update on this one? Especially for "beginners" it's hard to know why the SPM hangs and it can be frustrating because you might just think that it takes some time and only after some research you find out that it might be that dependencies can't be resolved. Other package managers immediately give you that feedback and stop with an error. |
SwiftPM has adopted a new dependency resolution implementation (in Swift 5.2) and such issues should no longer happen. |
Attachment: Download
Environment
Tried on Darwin Carls-MacBook-Pro.local 16.4.0 Darwin Kernel Version 16.4.0: Thu Dec 22 22:53:21 PST 2016; root:xnu-3789.41.3~3/RELEASE_X86_64 x86_64
and Linux swift-testbuilds01.ibmswift.com 4.4.0-53-generic #74-Ubuntu SMP Fri Dec 2 15:59:10 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
Additional Detail from JIRA
md5: 2fa673f5f312efe231ab4168f54763b4
is duplicated by:
relates to:
Issue Description:
Running `swift package fetch` on the repo https://github.com/carlbrown/Blitter/tree/spm_infinite_loop gives me:
```
error: The dependency graph could not be satisfied (https://github.com/IBM-Swift/BlueSocket.git)
```
with SPM on Swift 3.0.2 and a seemingly infinite loop when running the same command on Swift 3.1. `swift package -v fetch` log attached.
The text was updated successfully, but these errors were encountered: