mirror of
https://github.com/hanzoai/visor.git
synced 2026-09-24 17:04:14 +00:00
This allows to find all containers inside a sandbox more efficiently. This operation is required every time a container starts and stops, and previously required loading *all* container state files to check whether the container belonged to the sandbox. Apert from being inneficient, it has caused problems when state files are stale or corrupt, causing inavalability to create any container. Also adjust commands `list` and `debug` to skip over files that fail to load. Resolves #5052 PiperOrigin-RevId: 348050637
69 lines
1.8 KiB
Go
69 lines
1.8 KiB
Go
// Copyright 2018 The gVisor Authors.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package cmd
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/google/subcommands"
|
|
"gvisor.dev/gvisor/runsc/config"
|
|
"gvisor.dev/gvisor/runsc/container"
|
|
"gvisor.dev/gvisor/runsc/flag"
|
|
)
|
|
|
|
// Pause implements subcommands.Command for the "pause" command.
|
|
type Pause struct{}
|
|
|
|
// Name implements subcommands.Command.Name.
|
|
func (*Pause) Name() string {
|
|
return "pause"
|
|
}
|
|
|
|
// Synopsis implements subcommands.Command.Synopsis.
|
|
func (*Pause) Synopsis() string {
|
|
return "pause suspends all processes in a container"
|
|
}
|
|
|
|
// Usage implements subcommands.Command.Usage.
|
|
func (*Pause) Usage() string {
|
|
return `pause <container id> - pause process in instance of container.`
|
|
}
|
|
|
|
// SetFlags implements subcommands.Command.SetFlags.
|
|
func (*Pause) SetFlags(f *flag.FlagSet) {
|
|
}
|
|
|
|
// Execute implements subcommands.Command.Execute.
|
|
func (*Pause) Execute(_ context.Context, f *flag.FlagSet, args ...interface{}) subcommands.ExitStatus {
|
|
if f.NArg() != 1 {
|
|
f.Usage()
|
|
return subcommands.ExitUsageError
|
|
}
|
|
|
|
id := f.Arg(0)
|
|
conf := args[0].(*config.Config)
|
|
|
|
cont, err := container.Load(conf.RootDir, container.FullID{ContainerID: id}, container.LoadOpts{})
|
|
if err != nil {
|
|
Fatalf("loading container: %v", err)
|
|
}
|
|
|
|
if err := cont.Pause(); err != nil {
|
|
Fatalf("pause failed: %v", err)
|
|
}
|
|
|
|
return subcommands.ExitSuccess
|
|
}
|