mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-07-01 09:42:45 +00:00
runtime-v2: Make sure Shutdown() only shuts the server down
Because the runtime v2 runs as a RPC server, the caller will at some point use the Shutdown() API to shut down the server. Because this will cause the server to exit, the caller cannot expect any valid answer when calling this. That's why we cannot afford stopping and deleting the sandbox from this function. Instead, we move sandbox.Stop() and sandbox.Delete() to a more appropriate API, the Delete() one. Fixes #1150 Signed-off-by: Sebastien Boeuf <sebastien.boeuf@intel.com>
This commit is contained in:
parent
d7b02c502e
commit
5329a71b3d
@ -386,6 +386,22 @@ func (s *service) Delete(ctx context.Context, r *taskAPI.DeleteRequest) (*taskAP
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Take care of the use case where it is a sandbox.
|
||||
// Right after the container representing the sandbox has
|
||||
// been deleted, let's make sure we stop and delete the
|
||||
// sandbox.
|
||||
if c.cType.IsSandbox() {
|
||||
if err = s.sandbox.Stop(); err != nil {
|
||||
logrus.WithField("sandbox", s.sandbox.ID()).Error("failed to stop sandbox")
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if err = s.sandbox.Delete(); err != nil {
|
||||
logrus.WithField("sandbox", s.sandbox.ID()).Error("failed to delete sandbox")
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
return &taskAPI.DeleteResponse{
|
||||
ExitStatus: c.exit,
|
||||
ExitedAt: c.time,
|
||||
@ -654,26 +670,17 @@ func (s *service) Connect(ctx context.Context, r *taskAPI.ConnectRequest) (*task
|
||||
|
||||
func (s *service) Shutdown(ctx context.Context, r *taskAPI.ShutdownRequest) (*ptypes.Empty, error) {
|
||||
s.Lock()
|
||||
defer s.Unlock()
|
||||
|
||||
if len(s.containers) != 0 {
|
||||
s.Unlock()
|
||||
return empty, nil
|
||||
}
|
||||
s.Unlock()
|
||||
|
||||
defer os.Exit(0)
|
||||
os.Exit(0)
|
||||
|
||||
err := s.sandbox.Stop()
|
||||
if err != nil {
|
||||
logrus.WithField("sandbox", s.sandbox.ID()).Error("failed to stop sandbox")
|
||||
return empty, err
|
||||
}
|
||||
|
||||
err = s.sandbox.Delete()
|
||||
if err != nil {
|
||||
logrus.WithField("sandbox", s.sandbox.ID()).Error("failed to delete sandbox")
|
||||
}
|
||||
|
||||
return empty, err
|
||||
// This will never be called, but this is only there to make sure the
|
||||
// program can compile.
|
||||
return empty, nil
|
||||
}
|
||||
|
||||
func (s *service) Stats(ctx context.Context, r *taskAPI.StatsRequest) (*taskAPI.StatsResponse, error) {
|
||||
|
Loading…
Reference in New Issue
Block a user