remove sleep in integration after etcd store startup, periodic SyncCluster in etcd and include fix to SyncCluster in go-etcd lib

Signed-off-by: Alexandre Beslic <abronan@docker.com>
This commit is contained in:
Alexandre Beslic 2015-05-28 15:54:29 -07:00
parent 6eb5cd3b5c
commit c0fe0bc17d
4 changed files with 23 additions and 8 deletions

4
Godeps/Godeps.json generated
View File

@ -32,8 +32,8 @@
}, },
{ {
"ImportPath": "github.com/coreos/go-etcd/etcd", "ImportPath": "github.com/coreos/go-etcd/etcd",
"Comment": "v2.0.0-7-g73a8ef7", "Comment": "v2.0.0-8-g2698e87",
"Rev": "73a8ef737e8ea002281a28b4cb92a1de121ad4c6" "Rev": "2698e87871614d7f376775409c701dd538f0b50e"
}, },
{ {
"ImportPath": "github.com/docker/docker/pkg/ioutils", "ImportPath": "github.com/docker/docker/pkg/ioutils",

View File

@ -312,6 +312,9 @@ func (c *Client) SyncCluster() bool {
// internalSyncCluster syncs cluster information using the given machine list. // internalSyncCluster syncs cluster information using the given machine list.
func (c *Client) internalSyncCluster(machines []string) bool { func (c *Client) internalSyncCluster(machines []string) bool {
// comma-separated list of machines in the cluster.
members := ""
for _, machine := range machines { for _, machine := range machines {
httpPath := c.createHttpPath(machine, path.Join(version, "members")) httpPath := c.createHttpPath(machine, path.Join(version, "members"))
resp, err := c.httpClient.Get(httpPath) resp, err := c.httpClient.Get(httpPath)
@ -333,8 +336,7 @@ func (c *Client) internalSyncCluster(machines []string) bool {
// try another machine in the cluster // try another machine in the cluster
continue continue
} }
// update Machines List members = string(b)
c.cluster.updateFromStr(string(b))
} else { } else {
b, err := ioutil.ReadAll(resp.Body) b, err := ioutil.ReadAll(resp.Body)
resp.Body.Close() resp.Body.Close()
@ -355,9 +357,16 @@ func (c *Client) internalSyncCluster(machines []string) bool {
} }
// update Machines List // update Machines List
c.cluster.updateFromStr(strings.Join(urls, ",")) members = strings.Join(urls, ",")
} }
// We should never do an empty cluster update.
if members == "" {
continue
}
// update Machines List
c.cluster.updateFromStr(members)
logger.Debug("sync.machines ", c.cluster.Machines) logger.Debug("sync.machines ", c.cluster.Machines)
c.saveConfig() c.saveConfig()
return true return true

View File

@ -28,6 +28,9 @@ type etcdLock struct {
const ( const (
defaultLockTTL = 20 * time.Second defaultLockTTL = 20 * time.Second
defaultUpdateTime = 5 * time.Second defaultUpdateTime = 5 * time.Second
// periodicSync is the time between each call to SyncCluster
periodicSync = 10 * time.Minute
) )
// InitializeEtcd creates a new Etcd client given // InitializeEtcd creates a new Etcd client given
@ -51,7 +54,12 @@ func InitializeEtcd(addrs []string, options *Config) (Store, error) {
} }
} }
s.client.SyncCluster() go func() {
for {
s.client.SyncCluster()
time.Sleep(periodicSync)
}
}()
return s, nil return s, nil
} }

View File

@ -19,8 +19,6 @@ function start_store() {
quay.io/coreos/etcd:v2.0.11 \ quay.io/coreos/etcd:v2.0.11 \
--listen-client-urls="http://0.0.0.0:${PORT}" \ --listen-client-urls="http://0.0.0.0:${PORT}" \
--advertise-client-urls="http://${STORE_HOST}" --advertise-client-urls="http://${STORE_HOST}"
sleep 3
} }
function stop_store() { function stop_store() {