From 012dffeee3d754e61b4e9744d39e8ea573efce41 Mon Sep 17 00:00:00 2001 From: Nishant Totla Date: Tue, 5 Apr 2016 09:17:16 -0700 Subject: [PATCH] Updating apiClient version using server version Signed-off-by: Nishant Totla --- api/mockclient/mock.go | 4 ++++ api/nopclient/nop.go | 4 ++++ cluster/engine.go | 24 +++++++++++++++++++++++- 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/api/mockclient/mock.go b/api/mockclient/mock.go index 2af4969e23..16e25a0e8f 100644 --- a/api/mockclient/mock.go +++ b/api/mockclient/mock.go @@ -347,6 +347,10 @@ func (client *MockClient) ServerVersion(ctx context.Context) (types.Version, err return args.Get(0).(types.Version), args.Error(1) } +// UpdateClientVersion updates the client version +func (client *MockClient) UpdateClientVersion(v string) { +} + // VolumeCreate creates a volume in the docker host func (client *MockClient) VolumeCreate(ctx context.Context, options types.VolumeCreateRequest) (types.Volume, error) { args := client.Mock.Called(ctx, options) diff --git a/api/nopclient/nop.go b/api/nopclient/nop.go index e5eb024204..f26387d1b6 100644 --- a/api/nopclient/nop.go +++ b/api/nopclient/nop.go @@ -297,6 +297,10 @@ func (client *NopClient) ServerVersion(ctx context.Context) (types.Version, erro return types.Version{}, errNoEngine } +// UpdateClientVersion updates the client version +func (client *NopClient) UpdateClientVersion(v string) { +} + // VolumeCreate creates a volume in the docker host func (client *NopClient) VolumeCreate(ctx context.Context, options types.VolumeCreateRequest) (types.Volume, error) { return types.Volume{}, errNoEngine diff --git a/cluster/engine.go b/cluster/engine.go index b47eda94a8..4b5d93758e 100644 --- a/cluster/engine.go +++ b/cluster/engine.go @@ -414,6 +414,26 @@ func (e *Engine) CheckConnectionErr(err error) { // other errors may be ambiguous. } +// Update API Version in apiClient +func (e *Engine) updateClientVersionFromServer(serverVersion string) { + // v will be >= 1.6, since this is checked earlier + v := version.Version(serverVersion) + switch { + case v.LessThan(version.Version("1.7")): + e.apiClient.UpdateClientVersion("1.18") + case v.LessThan(version.Version("1.8")): + e.apiClient.UpdateClientVersion("1.19") + case v.LessThan(version.Version("1.9")): + e.apiClient.UpdateClientVersion("1.20") + case v.LessThan(version.Version("1.10")): + e.apiClient.UpdateClientVersion("1.21") + case v.LessThan(version.Version("1.11")): + e.apiClient.UpdateClientVersion("1.22") + default: + e.apiClient.UpdateClientVersion("1.23") + } +} + // Gather engine specs (CPU, memory, constraints, ...). func (e *Engine) updateSpecs() error { info, err := e.apiClient.Info(context.TODO()) @@ -441,8 +461,10 @@ func (e *Engine) updateSpecs() error { e.CheckConnectionErr(err) return err } - // update version + // update server version e.Version = v.Version + // update client version. engine-api handles backward compatibility where needed + e.updateClientVersionFromServer(v.Version) e.Lock() defer e.Unlock()