server: locking around server components

Signed-off-by: Antonio Murdaca <runcom@redhat.com>
This commit is contained in:
Antonio Murdaca 2016-09-17 16:10:35 +02:00
parent 66fdf3ae21
commit 158dfdfbda
No known key found for this signature in database
GPG key ID: B2BEAD150DE936B9
2 changed files with 63 additions and 17 deletions

View file

@ -3,6 +3,7 @@ package server
import (
"fmt"
"os"
"sync"
"github.com/kubernetes-incubator/ocid/oci"
"github.com/kubernetes-incubator/ocid/utils"
@ -18,6 +19,7 @@ const (
type Server struct {
runtime *oci.Runtime
sandboxDir string
stateLock sync.Mutex
state *serverState
netPlugin ocicni.CNIPlugin
}
@ -63,37 +65,71 @@ type serverState struct {
}
type sandbox struct {
name string
logDir string
labels map[string]string
containers map[string]*oci.Container
}
func (s *Server) addSandbox(sb *sandbox) {
s.state.sandboxes[sb.name] = sb
}
func (s *Server) hasSandbox(name string) bool {
_, ok := s.state.sandboxes[name]
return ok
name string
logDir string
labels map[string]string
containersLock sync.Mutex
containers map[string]*oci.Container
}
func (s *sandbox) addContainer(c *oci.Container) {
s.containersLock.Lock()
s.containers[c.Name()] = c
s.containersLock.Unlock()
}
func (s *sandbox) getContainer(name string) *oci.Container {
s.containersLock.Lock()
c := s.containers[name]
s.containersLock.Unlock()
return c
}
func (s *sandbox) removeContainer(c *oci.Container) {
s.containersLock.Lock()
delete(s.containers, c.Name())
s.containersLock.Unlock()
}
func (s *Server) addSandbox(sb *sandbox) {
s.stateLock.Lock()
s.state.sandboxes[sb.name] = sb
s.stateLock.Unlock()
}
func (s *Server) getSandbox(name string) *sandbox {
s.stateLock.Lock()
sb := s.state.sandboxes[name]
s.stateLock.Unlock()
return sb
}
func (s *Server) hasSandbox(name string) bool {
s.stateLock.Lock()
_, ok := s.state.sandboxes[name]
s.stateLock.Unlock()
return ok
}
func (s *Server) addContainer(c *oci.Container) {
s.stateLock.Lock()
sandbox := s.state.sandboxes[c.Sandbox()]
sandbox.addContainer(c)
s.state.containers[c.Name()] = c
s.stateLock.Unlock()
}
func (s *Server) getContainer(name string) *oci.Container {
s.stateLock.Lock()
c := s.state.containers[name]
s.stateLock.Unlock()
return c
}
func (s *Server) removeContainer(c *oci.Container) {
s.stateLock.Lock()
sandbox := s.state.sandboxes[c.Sandbox()]
sandbox.removeContainer(c)
delete(s.state.containers, c.Name())
s.stateLock.Unlock()
}