microsoft / vcpkg

C++ Library Manager for Windows, Linux, and MacOS
MIT License
23.17k stars 6.39k forks source link

Rework upgrading of packages to prevent port downtime #35948

Open BullyWiiPlaza opened 10 months ago

BullyWiiPlaza commented 10 months ago

Is your feature request related to a problem? Please describe.

When you upgrade ports, vcpkg immediately wipes out the old version of the port, then goes into the long process of downloading and building the new version of the port. Depending on the size and transitive dependencies, this can take a long time. Also, if the process is interrupted or fails, the old version of the port is still unavailable and cannot be restored (?). I've lost a lot of time because of this issue so far.

Proposed solution

It would be great if vcpkg uprades a package first in a temporary location, then, when everything succeeded, removes the old version of the port and sets the new version live. Take an example of a database transaction. This change would minimize port downtime so a user/developer does not have to potentially wait hours to be able to recompile code and work isn't interrupted at all when upgrading ports ideally.

Describe alternatives you've considered

Copying/Moving the entire vcpkg folder but it's very slow and inefficient as well so it's not a very useful solution. Doing manual backups of specific port directories etc. beforehand is not viable either.

JonLiu1993 commented 10 months ago

@BullyWiiPlaza, Thanks for posting this issue, could you briefly describe the application scenarios of your feature? Or what kind of scenario makes you want to add this feature.

BullyWiiPlaza commented 10 months ago

@BullyWiiPlaza, Thanks for posting this issue, could you briefly describe the application scenarios of your feature? Or what kind of scenario makes you want to add this feature.

Hello, if I want to for example upgrade Boost, vcpkg first removes all Boost libraries and then downloads/installs the new ones. Since Boost is a huge library, it can take a while. If the installation is interrupted or while it runs, no more compilation is possible which references Boost since the libraries were removed. This is a downtime a developer experiences while upgrading and it can be hours or even 1 - 2 days. A seemless transition from the old version to the new version with minimal downtime would be greatly appreciated.

github-actions[bot] commented 4 months ago

This is an automated message. Per our repo policy, stale issues get closed if there has been no activity in the past 180 days. The issue will be automatically closed in 14 days. If you wish to keep this issue open, please add a new comment.