From 79181b2a17ff5e6392ec73e604457d840ed2d1bb Mon Sep 17 00:00:00 2001 From: "Jonathan Leibiusky @xetorthio" Date: Thu, 10 Aug 2017 16:47:48 -0300 Subject: [PATCH] Fix close session bug --- pwd/instance.go | 4 ++-- pwd/session.go | 22 ++++++++++++++++------ 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/pwd/instance.go b/pwd/instance.go index 5c65001..e323ad8 100644 --- a/pwd/instance.go +++ b/pwd/instance.go @@ -84,12 +84,12 @@ func (p *pwd) InstanceDelete(session *types.Session, instance *types.Instance) e return err } - p.event.Emit(event.INSTANCE_DELETE, session.Id, instance.Name) - if err := p.storage.InstanceDelete(session.Id, instance.Name); err != nil { return err } + p.event.Emit(event.INSTANCE_DELETE, session.Id, instance.Name) + p.setGauges() return nil diff --git a/pwd/session.go b/pwd/session.go index 362d08b..0f9265b 100644 --- a/pwd/session.go +++ b/pwd/session.go @@ -15,6 +15,7 @@ import ( "github.com/play-with-docker/play-with-docker/docker" "github.com/play-with-docker/play-with-docker/event" "github.com/play-with-docker/play-with-docker/pwd/types" + "github.com/play-with-docker/play-with-docker/storage" ) var preparedSessions = map[string]bool{} @@ -72,7 +73,7 @@ func (p *pwd) SessionNew(duration time.Duration, stack, stackName, imageName str } if err := dockerClient.CreateNetwork(s.Id); err != nil { - log.Println("ERROR NETWORKING") + log.Println("ERROR NETWORKING", err) return nil, err } log.Printf("Network [%s] created for session [%s]\n", s.Id, s.Id) @@ -99,8 +100,17 @@ func (p *pwd) SessionNew(duration time.Duration, stack, stackName, imageName str func (p *pwd) SessionClose(s *types.Session) error { defer observeAction("SessionClose", time.Now()) - s.Lock() - defer s.Unlock() + updatedSession, err := p.storage.SessionGet(s.Id) + if err != nil { + if storage.NotFound(err) { + log.Printf("Session with id [%s] was not found in storage.\n", s.Id) + return err + } else { + log.Printf("Couldn't close session. Got: %s\n", err) + return err + } + } + s = updatedSession log.Printf("Starting clean up of session [%s]\n", s.Id) for _, i := range s.Instances { @@ -113,11 +123,11 @@ func (p *pwd) SessionClose(s *types.Session) error { // Disconnect PWD daemon from the network if err := p.docker(s.Id).DisconnectNetwork(config.L2ContainerName, s.Id); err != nil { if !strings.Contains(err.Error(), "is not connected to the network") { - log.Println("ERROR NETWORKING") + log.Println("ERROR NETWORKING", err) return err } } - log.Printf("Disconnected pwd from network [%s]\n", s.Id) + log.Printf("Disconnected l2 from network [%s]\n", s.Id) if err := p.docker(s.Id).DeleteNetwork(s.Id); err != nil { if !strings.Contains(err.Error(), "not found") { log.Println(err) @@ -125,7 +135,7 @@ func (p *pwd) SessionClose(s *types.Session) error { } } - err := p.storage.SessionDelete(s.Id) + err = p.storage.SessionDelete(s.Id) if err != nil { return err }