fix(snapshot): prevent snapshot containers from fast failing in Swarm mode (#8308)

pull/8485/head
Oscar Zhou 2023-02-13 14:42:10 +13:00 committed by GitHub
parent 0befdacc0e
commit cef9255161
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 21 additions and 14 deletions

View File

@ -167,22 +167,29 @@ func snapshotContainers(snapshot *portainer.DockerSnapshot, cli *client.Client)
// snapshot GPUs // snapshot GPUs
response, err := cli.ContainerInspect(context.Background(), container.ID) response, err := cli.ContainerInspect(context.Background(), container.ID)
if err != nil { if err != nil {
return err // Inspect a container will fail when the container runs on a different
} // Swarm node, so it is better to log the error instead of return error
// when the Swarm mode is enabled
var gpuOptions *_container.DeviceRequest = nil if !snapshot.Swarm {
for _, deviceRequest := range response.HostConfig.Resources.DeviceRequests { return err
if deviceRequest.Driver == "nvidia" || deviceRequest.Capabilities[0][0] == "gpu" { } else {
gpuOptions = &deviceRequest log.Info().Str("container", container.ID).Err(err).Msg("unable to inspect container in other Swarm nodes")
} }
} } else {
var gpuOptions *_container.DeviceRequest = nil
if gpuOptions != nil { for _, deviceRequest := range response.HostConfig.Resources.DeviceRequests {
if gpuOptions.Count == -1 { if deviceRequest.Driver == "nvidia" || deviceRequest.Capabilities[0][0] == "gpu" {
gpuUseAll = true gpuOptions = &deviceRequest
}
} }
for _, id := range gpuOptions.DeviceIDs {
gpuUseSet[id] = struct{}{} if gpuOptions != nil {
if gpuOptions.Count == -1 {
gpuUseAll = true
}
for _, id := range gpuOptions.DeviceIDs {
gpuUseSet[id] = struct{}{}
}
} }
} }
} }