Skip to content
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

Workload feature band fallback doesn't work with workload update #23403

Closed
dsplaisted opened this issue Jan 12, 2022 · 3 comments
Closed

Workload feature band fallback doesn't work with workload update #23403

dsplaisted opened this issue Jan 12, 2022 · 3 comments
Assignees
Milestone

Comments

@dsplaisted
Copy link
Member

dsplaisted commented Jan 12, 2022

The .NET SDK will fall back to workload manifests from previous feature bands. This ensures that when we create the first builds of a new .NET SDK, workloads will continue to work without having been updated to the new feature band.

However, if there are newer versions of the workload manifests from a previous feature band, they will not be picked up with dotnet workload update. This is because the update process looks for the latest version of the workload manifest package, but the package ID is constructed using the current SDKs feature band version. So if it's falling back to a previous band, and there's a newer version of that workload manifest package, it won't find it.

To fix this we should probably first check for the latest package using the current SDK's feature band. If we don't find any packages, and the current manifest on disk is coming from falling back to a previous band's manifest, then we should also try to get the latest version of the package for that previous feature band.

We probably don't need to worry about possible feature bands in between the two. IE if we had a 6.0.300 SDK using a 6.0.100 manifest, then we should check for the latest 6.0.300 manifest, and if that's not found check for the latest version of the 6.0.100 manifest, but never check for a 6.0.200 manifest.

Dictionary<WorkloadId, WorkloadDefinition> Workloads)> CalculateManifestUpdates()

EDIT: We will also need to figure out how to differentiate between the feature band an advertising manifest is branded as and the feature band of the SDK it's advertised to, for example in WorkloadManifestUpdater.GetAdvertisingManifestVersionAndWorkloads. Right now we put advertising manifests in separate folders per feature band, but this doesn't let us model a 6.0.200 manifest being advertised to a 6.0.300 SDK, for example.

@dotnet-issue-labeler dotnet-issue-labeler bot added Area-Workloads untriaged Request triage from a team member labels Jan 12, 2022
@dsplaisted
Copy link
Member Author

FYI @jonathanpeppers @Redth

@Redth
Copy link
Member

Redth commented Mar 3, 2022

We probably don't need to worry about possible feature bands in between the two. IE if we had a 6.0.300 SDK using a 6.0.100 manifest, then we should check for the latest 6.0.300 manifest, and if that's not found check for the latest version of the 6.0.100 manifest, but never check for a 6.0.200 manifest.

I know we talked about this probably being ok, but I'm doubting that now. I guess there's added cost in this check if it needs to query nuget? But maybe it's still worth that cost to avoid unexpected behaviour here? I think even with our current baseline manifests in the installer today might be at 6.0.100 and we don't have 6.0.300 yet, so really 6.0.200 is what we want but would be missed in this case.

@joeloff
Copy link
Member

joeloff commented May 13, 2022

This logic is going to complicate servicing because it will need to be mimicked.

@gkulin gkulin closed this as completed May 17, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants