Merge pull request #35940 from yongtang/35920-filter-health-starting
Fix issue of filter in `docker ps` where `health=starting` returns nothing
This commit is contained in:
commit
7c7a7c7944
3 changed files with 29 additions and 10 deletions
|
@ -102,15 +102,6 @@ func (s *State) String() string {
|
|||
return fmt.Sprintf("Exited (%d) %s ago", s.ExitCodeValue, units.HumanDuration(time.Now().UTC().Sub(s.FinishedAt)))
|
||||
}
|
||||
|
||||
// HealthString returns a single string to describe health status.
|
||||
func (s *State) HealthString() string {
|
||||
if s.Health == nil {
|
||||
return types.NoHealthcheck
|
||||
}
|
||||
|
||||
return s.Health.String()
|
||||
}
|
||||
|
||||
// IsValidHealthString checks if the provided string is a valid container health status or not.
|
||||
func IsValidHealthString(s string) bool {
|
||||
return s == types.Starting ||
|
||||
|
|
|
@ -295,6 +295,10 @@ func (v *memdbView) GetAllNames() map[string][]string {
|
|||
// transform maps a (deep) copied Container object to what queries need.
|
||||
// A lock on the Container is not held because these are immutable deep copies.
|
||||
func (v *memdbView) transform(container *Container) *Snapshot {
|
||||
health := types.NoHealthcheck
|
||||
if container.Health != nil {
|
||||
health = container.Health.Status()
|
||||
}
|
||||
snapshot := &Snapshot{
|
||||
Container: types.Container{
|
||||
ID: container.ID,
|
||||
|
@ -313,7 +317,7 @@ func (v *memdbView) transform(container *Container) *Snapshot {
|
|||
Managed: container.Managed,
|
||||
ExposedPorts: make(nat.PortSet),
|
||||
PortBindings: make(nat.PortSet),
|
||||
Health: container.HealthString(),
|
||||
Health: health,
|
||||
Running: container.Running,
|
||||
Paused: container.Paused,
|
||||
ExitCode: container.ExitCode(),
|
||||
|
|
|
@ -6,6 +6,7 @@ import (
|
|||
"path/filepath"
|
||||
"testing"
|
||||
|
||||
"github.com/docker/docker/api/types"
|
||||
containertypes "github.com/docker/docker/api/types/container"
|
||||
"github.com/pborman/uuid"
|
||||
"github.com/stretchr/testify/assert"
|
||||
|
@ -159,3 +160,26 @@ func TestNames(t *testing.T) {
|
|||
view = db.Snapshot()
|
||||
assert.Equal(t, map[string][]string{"containerid4": {"name1", "name2"}}, view.GetAllNames())
|
||||
}
|
||||
|
||||
// Test case for GitHub issue 35920
|
||||
func TestViewWithHealthCheck(t *testing.T) {
|
||||
var (
|
||||
db, _ = NewViewDB()
|
||||
one = newContainer(t)
|
||||
)
|
||||
one.Health = &Health{
|
||||
Health: types.Health{
|
||||
Status: "starting",
|
||||
},
|
||||
}
|
||||
if err := one.CheckpointTo(db); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
s, err := db.Snapshot().Get(one.ID)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if s == nil || s.Health != "starting" {
|
||||
t.Fatalf("expected Health=starting. Got: %+v", s)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue