1
0
Fork 0
mirror of https://github.com/moby/moby.git synced 2022-11-09 12:21:53 -05:00

Add agent initialization wait method in controller

Agent initialization wait method is added to make sure callers for
controller methods which depend on agent initialization to be complete
can wait on it.

Signed-off-by: Jana Radhakrishnan <mrjana@docker.com>
This commit is contained in:
Jana Radhakrishnan 2016-06-05 19:37:13 -07:00
parent 5a6f101f7d
commit a63fca344f

View file

@ -114,6 +114,9 @@ type NetworkController interface {
// SetClusterProvider sets cluster provider // SetClusterProvider sets cluster provider
SetClusterProvider(provider cluster.Provider) SetClusterProvider(provider cluster.Provider)
// Wait for agent initialization complete in libnetwork controller
AgentInitWait()
} }
// NetworkWalker is a client provided function which will be used to walk the Networks. // NetworkWalker is a client provided function which will be used to walk the Networks.
@ -143,6 +146,7 @@ type controller struct {
ingressSandbox *sandbox ingressSandbox *sandbox
sboxOnce sync.Once sboxOnce sync.Once
agent *agent agent *agent
agentInitDone chan struct{}
sync.Mutex sync.Mutex
} }
@ -159,6 +163,7 @@ func New(cfgOptions ...config.Option) (NetworkController, error) {
sandboxes: sandboxTable{}, sandboxes: sandboxTable{},
svcRecords: make(map[string]svcInfo), svcRecords: make(map[string]svcInfo),
serviceBindings: make(map[string]*service), serviceBindings: make(map[string]*service),
agentInitDone: make(chan struct{}),
} }
if err := c.initStores(); err != nil { if err := c.initStores(); err != nil {
@ -248,6 +253,10 @@ func (c *controller) clusterAgentInit() {
} }
return false return false
}) })
if c.agent != nil {
close(c.agentInitDone)
}
} }
} }
if remoteAddr != "" { if remoteAddr != "" {
@ -262,6 +271,12 @@ func (c *controller) clusterAgentInit() {
} }
} }
// AgentInitWait waits for agent initialization to be completed in the
// controller.
func (c *controller) AgentInitWait() {
<-c.agentInitDone
}
func (c *controller) makeDriverConfig(ntype string) map[string]interface{} { func (c *controller) makeDriverConfig(ntype string) map[string]interface{} {
if c.cfg == nil { if c.cfg == nil {
return nil return nil