2015-03-26 04:25:08 +00:00
|
|
|
/*
|
2016-06-03 00:25:58 +00:00
|
|
|
Copyright 2015 The Kubernetes Authors.
|
2015-03-26 04:25:08 +00:00
|
|
|
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
you may not use this file except in compliance with the License.
|
|
|
|
You may obtain a copy of the License at
|
|
|
|
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
See the License for the specific language governing permissions and
|
|
|
|
limitations under the License.
|
|
|
|
*/
|
|
|
|
|
2015-03-26 18:44:52 +00:00
|
|
|
package container
|
2015-03-26 04:25:08 +00:00
|
|
|
|
|
|
|
import (
|
|
|
|
"sync"
|
|
|
|
|
2017-06-22 17:25:57 +00:00
|
|
|
"k8s.io/api/core/v1"
|
2015-03-26 04:25:08 +00:00
|
|
|
)
|
|
|
|
|
2015-03-26 18:44:52 +00:00
|
|
|
// RefManager manages the references for the containers.
|
2015-03-26 04:25:08 +00:00
|
|
|
// The references are used for reporting events such as creation,
|
|
|
|
// failure, etc. This manager is thread-safe, no locks are necessary
|
|
|
|
// for the caller.
|
2015-03-26 18:44:52 +00:00
|
|
|
type RefManager struct {
|
2015-03-26 04:25:08 +00:00
|
|
|
sync.RWMutex
|
2016-11-18 20:50:58 +00:00
|
|
|
containerIDToRef map[ContainerID]*v1.ObjectReference
|
2015-03-26 04:25:08 +00:00
|
|
|
}
|
|
|
|
|
2015-03-26 18:44:52 +00:00
|
|
|
// NewRefManager creates and returns a container reference manager
|
2015-03-26 04:25:08 +00:00
|
|
|
// with empty contents.
|
2015-03-26 18:44:52 +00:00
|
|
|
func NewRefManager() *RefManager {
|
2016-11-18 20:50:58 +00:00
|
|
|
return &RefManager{containerIDToRef: make(map[ContainerID]*v1.ObjectReference)}
|
2015-03-26 04:25:08 +00:00
|
|
|
}
|
|
|
|
|
2015-03-26 18:44:52 +00:00
|
|
|
// SetRef stores a reference to a pod's container, associating it with the given container ID.
|
2016-11-18 20:50:58 +00:00
|
|
|
func (c *RefManager) SetRef(id ContainerID, ref *v1.ObjectReference) {
|
2015-03-26 04:25:08 +00:00
|
|
|
c.Lock()
|
|
|
|
defer c.Unlock()
|
|
|
|
c.containerIDToRef[id] = ref
|
|
|
|
}
|
|
|
|
|
|
|
|
// ClearRef forgets the given container id and its associated container reference.
|
2015-10-07 17:58:05 +00:00
|
|
|
func (c *RefManager) ClearRef(id ContainerID) {
|
2015-03-26 04:25:08 +00:00
|
|
|
c.Lock()
|
|
|
|
defer c.Unlock()
|
|
|
|
delete(c.containerIDToRef, id)
|
|
|
|
}
|
|
|
|
|
2015-03-26 18:44:52 +00:00
|
|
|
// GetRef returns the container reference of the given ID, or (nil, false) if none is stored.
|
2016-11-18 20:50:58 +00:00
|
|
|
func (c *RefManager) GetRef(id ContainerID) (ref *v1.ObjectReference, ok bool) {
|
2015-03-26 04:25:08 +00:00
|
|
|
c.RLock()
|
|
|
|
defer c.RUnlock()
|
|
|
|
ref, ok = c.containerIDToRef[id]
|
|
|
|
return ref, ok
|
|
|
|
}
|