Skip to content

Commit

Permalink
Merge pull request #1086 from YaoZengzeng/exec-fix
Browse files Browse the repository at this point in the history
bugfix: loop execInspect to get result for cri manager's exec method
  • Loading branch information
allencloud authored Apr 10, 2018
2 parents bc01dc6 + 08b2c3e commit 42cd312
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 6 deletions.
15 changes: 12 additions & 3 deletions daemon/mgr/cri.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
"path"
"path/filepath"
"strings"
"time"

apitypes "github.com/alibaba/pouch/apis/types"
"github.com/alibaba/pouch/cri/stream"
Expand Down Expand Up @@ -686,9 +687,17 @@ func (c *CriManager) ExecSync(ctx context.Context, r *runtime.ExecSyncRequest) (
return nil, fmt.Errorf("failed to start exec for container %q: %v", id, err)
}

execConfig, err := c.ContainerMgr.GetExecConfig(ctx, execid)
if err != nil {
return nil, fmt.Errorf("failed to inspect exec for container %q: %v", id, err)
var execConfig *ContainerExecConfig
for {
execConfig, err = c.ContainerMgr.GetExecConfig(ctx, execid)
if err != nil {
return nil, fmt.Errorf("failed to inspect exec for container %q: %v", id, err)
}
// Loop until exec finished.
if !execConfig.Running {
break
}
time.Sleep(100 * time.Millisecond)
}

var stderr []byte
Expand Down
15 changes: 12 additions & 3 deletions daemon/mgr/cri_stream.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"net"
"os/exec"
"strings"
"time"

apitypes "github.com/alibaba/pouch/apis/types"
"github.com/alibaba/pouch/cri/stream"
Expand Down Expand Up @@ -58,9 +59,17 @@ func (s *streamRuntime) Exec(containerID string, cmd []string, streamOpts *remot
return 0, fmt.Errorf("failed to start exec for container %q: %v", containerID, err)
}

ei, err := s.containerMgr.InspectExec(ctx, execid)
if err != nil {
return 0, fmt.Errorf("failed to inspect exec for container %q: %v", containerID, err)
var ei *apitypes.ContainerExecInspect
for {
ei, err = s.containerMgr.InspectExec(ctx, execid)
if err != nil {
return 0, fmt.Errorf("failed to inspect exec for container %q: %v", containerID, err)
}
// Loop until exec finished.
if !ei.Running {
break
}
time.Sleep(100 * time.Millisecond)
}

return uint32(ei.ExitCode), nil
Expand Down

0 comments on commit 42cd312

Please sign in to comment.