diff --git a/lib/backend/constants.go b/lib/backend/constants.go index 12db5dfb4..c5d96e26b 100644 --- a/lib/backend/constants.go +++ b/lib/backend/constants.go @@ -30,4 +30,5 @@ const ( var ( ReadinessCheckNamespace string = core.NamespaceFixture() ReadinessCheckName string = core.DigestFixture().Hex() + ReadinessCheckDigest, _ = core.NewSHA256DigestFromHex(ReadinessCheckName) ) diff --git a/mocks/origin/blobclient/client.go b/mocks/origin/blobclient/client.go index 7c6a182a4..1e11e8f97 100644 --- a/mocks/origin/blobclient/client.go +++ b/mocks/origin/blobclient/client.go @@ -1,41 +1,47 @@ // Code generated by MockGen. DO NOT EDIT. // Source: github.com/uber/kraken/origin/blobclient (interfaces: Client) +// +// Generated by this command: +// +// mockgen -package mockblobclient . Client +// // Package mockblobclient is a generated GoMock package. package mockblobclient import ( gomock "github.com/golang/mock/gomock" - core "github.com/uber/kraken/core" io "io" reflect "reflect" time "time" + core "github.com/uber/kraken/core" ) -// MockClient is a mock of Client interface +// MockClient is a mock of Client interface. type MockClient struct { ctrl *gomock.Controller recorder *MockClientMockRecorder + isgomock struct{} } -// MockClientMockRecorder is the mock recorder for MockClient +// MockClientMockRecorder is the mock recorder for MockClient. type MockClientMockRecorder struct { mock *MockClient } -// NewMockClient creates a new mock instance +// NewMockClient creates a new mock instance. func NewMockClient(ctrl *gomock.Controller) *MockClient { mock := &MockClient{ctrl: ctrl} mock.recorder = &MockClientMockRecorder{mock} return mock } -// EXPECT returns an object that allows the caller to indicate expected use +// EXPECT returns an object that allows the caller to indicate expected use. func (m *MockClient) EXPECT() *MockClientMockRecorder { return m.recorder } -// Addr mocks base method +// Addr mocks base method. func (m *MockClient) Addr() string { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "Addr") @@ -43,84 +49,98 @@ func (m *MockClient) Addr() string { return ret0 } -// Addr indicates an expected call of Addr +// Addr indicates an expected call of Addr. func (mr *MockClientMockRecorder) Addr() *gomock.Call { mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Addr", reflect.TypeOf((*MockClient)(nil).Addr)) } -// DeleteBlob mocks base method -func (m *MockClient) DeleteBlob(arg0 core.Digest) error { +// CheckReadiness mocks base method. +func (m *MockClient) CheckReadiness() error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "CheckReadiness") + ret0, _ := ret[0].(error) + return ret0 +} + +// CheckReadiness indicates an expected call of CheckReadiness. +func (mr *MockClientMockRecorder) CheckReadiness() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CheckReadiness", reflect.TypeOf((*MockClient)(nil).CheckReadiness)) +} + +// DeleteBlob mocks base method. +func (m *MockClient) DeleteBlob(d core.Digest) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "DeleteBlob", arg0) + ret := m.ctrl.Call(m, "DeleteBlob", d) ret0, _ := ret[0].(error) return ret0 } -// DeleteBlob indicates an expected call of DeleteBlob -func (mr *MockClientMockRecorder) DeleteBlob(arg0 interface{}) *gomock.Call { +// DeleteBlob indicates an expected call of DeleteBlob. +func (mr *MockClientMockRecorder) DeleteBlob(d interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteBlob", reflect.TypeOf((*MockClient)(nil).DeleteBlob), arg0) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteBlob", reflect.TypeOf((*MockClient)(nil).DeleteBlob), d) } -// DownloadBlob mocks base method -func (m *MockClient) DownloadBlob(arg0 string, arg1 core.Digest, arg2 io.Writer) error { +// DownloadBlob mocks base method. +func (m *MockClient) DownloadBlob(namespace string, d core.Digest, dst io.Writer) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "DownloadBlob", arg0, arg1, arg2) + ret := m.ctrl.Call(m, "DownloadBlob", namespace, d, dst) ret0, _ := ret[0].(error) return ret0 } -// DownloadBlob indicates an expected call of DownloadBlob -func (mr *MockClientMockRecorder) DownloadBlob(arg0, arg1, arg2 interface{}) *gomock.Call { +// DownloadBlob indicates an expected call of DownloadBlob. +func (mr *MockClientMockRecorder) DownloadBlob(namespace, d, dst interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DownloadBlob", reflect.TypeOf((*MockClient)(nil).DownloadBlob), arg0, arg1, arg2) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DownloadBlob", reflect.TypeOf((*MockClient)(nil).DownloadBlob), namespace, d, dst) } -// DuplicateUploadBlob mocks base method -func (m *MockClient) DuplicateUploadBlob(arg0 string, arg1 core.Digest, arg2 io.Reader, arg3 time.Duration) error { +// DuplicateUploadBlob mocks base method. +func (m *MockClient) DuplicateUploadBlob(namespace string, d core.Digest, blob io.Reader, delay time.Duration) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "DuplicateUploadBlob", arg0, arg1, arg2, arg3) + ret := m.ctrl.Call(m, "DuplicateUploadBlob", namespace, d, blob, delay) ret0, _ := ret[0].(error) return ret0 } -// DuplicateUploadBlob indicates an expected call of DuplicateUploadBlob -func (mr *MockClientMockRecorder) DuplicateUploadBlob(arg0, arg1, arg2, arg3 interface{}) *gomock.Call { +// DuplicateUploadBlob indicates an expected call of DuplicateUploadBlob. +func (mr *MockClientMockRecorder) DuplicateUploadBlob(namespace, d, blob, delay interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DuplicateUploadBlob", reflect.TypeOf((*MockClient)(nil).DuplicateUploadBlob), arg0, arg1, arg2, arg3) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DuplicateUploadBlob", reflect.TypeOf((*MockClient)(nil).DuplicateUploadBlob), namespace, d, blob, delay) } -// ForceCleanup mocks base method -func (m *MockClient) ForceCleanup(arg0 time.Duration) error { +// ForceCleanup mocks base method. +func (m *MockClient) ForceCleanup(ttl time.Duration) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "ForceCleanup", arg0) + ret := m.ctrl.Call(m, "ForceCleanup", ttl) ret0, _ := ret[0].(error) return ret0 } -// ForceCleanup indicates an expected call of ForceCleanup -func (mr *MockClientMockRecorder) ForceCleanup(arg0 interface{}) *gomock.Call { +// ForceCleanup indicates an expected call of ForceCleanup. +func (mr *MockClientMockRecorder) ForceCleanup(ttl interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ForceCleanup", reflect.TypeOf((*MockClient)(nil).ForceCleanup), arg0) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ForceCleanup", reflect.TypeOf((*MockClient)(nil).ForceCleanup), ttl) } -// GetMetaInfo mocks base method -func (m *MockClient) GetMetaInfo(arg0 string, arg1 core.Digest) (*core.MetaInfo, error) { +// GetMetaInfo mocks base method. +func (m *MockClient) GetMetaInfo(namespace string, d core.Digest) (*core.MetaInfo, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetMetaInfo", arg0, arg1) + ret := m.ctrl.Call(m, "GetMetaInfo", namespace, d) ret0, _ := ret[0].(*core.MetaInfo) ret1, _ := ret[1].(error) return ret0, ret1 } -// GetMetaInfo indicates an expected call of GetMetaInfo -func (mr *MockClientMockRecorder) GetMetaInfo(arg0, arg1 interface{}) *gomock.Call { +// GetMetaInfo indicates an expected call of GetMetaInfo. +func (mr *MockClientMockRecorder) GetMetaInfo(namespace, d interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetMetaInfo", reflect.TypeOf((*MockClient)(nil).GetMetaInfo), arg0, arg1) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetMetaInfo", reflect.TypeOf((*MockClient)(nil).GetMetaInfo), namespace, d) } -// GetPeerContext mocks base method +// GetPeerContext mocks base method. func (m *MockClient) GetPeerContext() (core.PeerContext, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "GetPeerContext") @@ -129,109 +149,109 @@ func (m *MockClient) GetPeerContext() (core.PeerContext, error) { return ret0, ret1 } -// GetPeerContext indicates an expected call of GetPeerContext +// GetPeerContext indicates an expected call of GetPeerContext. func (mr *MockClientMockRecorder) GetPeerContext() *gomock.Call { mr.mock.ctrl.T.Helper() return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetPeerContext", reflect.TypeOf((*MockClient)(nil).GetPeerContext)) } -// Locations mocks base method -func (m *MockClient) Locations(arg0 core.Digest) ([]string, error) { +// Locations mocks base method. +func (m *MockClient) Locations(d core.Digest) ([]string, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Locations", arg0) + ret := m.ctrl.Call(m, "Locations", d) ret0, _ := ret[0].([]string) ret1, _ := ret[1].(error) return ret0, ret1 } -// Locations indicates an expected call of Locations -func (mr *MockClientMockRecorder) Locations(arg0 interface{}) *gomock.Call { +// Locations indicates an expected call of Locations. +func (mr *MockClientMockRecorder) Locations(d interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Locations", reflect.TypeOf((*MockClient)(nil).Locations), arg0) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Locations", reflect.TypeOf((*MockClient)(nil).Locations), d) } -// OverwriteMetaInfo mocks base method -func (m *MockClient) OverwriteMetaInfo(arg0 core.Digest, arg1 int64) error { +// OverwriteMetaInfo mocks base method. +func (m *MockClient) OverwriteMetaInfo(d core.Digest, pieceLength int64) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "OverwriteMetaInfo", arg0, arg1) + ret := m.ctrl.Call(m, "OverwriteMetaInfo", d, pieceLength) ret0, _ := ret[0].(error) return ret0 } -// OverwriteMetaInfo indicates an expected call of OverwriteMetaInfo -func (mr *MockClientMockRecorder) OverwriteMetaInfo(arg0, arg1 interface{}) *gomock.Call { +// OverwriteMetaInfo indicates an expected call of OverwriteMetaInfo. +func (mr *MockClientMockRecorder) OverwriteMetaInfo(d, pieceLength interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "OverwriteMetaInfo", reflect.TypeOf((*MockClient)(nil).OverwriteMetaInfo), arg0, arg1) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "OverwriteMetaInfo", reflect.TypeOf((*MockClient)(nil).OverwriteMetaInfo), d, pieceLength) } -// ReplicateToRemote mocks base method -func (m *MockClient) ReplicateToRemote(arg0 string, arg1 core.Digest, arg2 string) error { +// ReplicateToRemote mocks base method. +func (m *MockClient) ReplicateToRemote(namespace string, d core.Digest, remoteDNS string) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "ReplicateToRemote", arg0, arg1, arg2) + ret := m.ctrl.Call(m, "ReplicateToRemote", namespace, d, remoteDNS) ret0, _ := ret[0].(error) return ret0 } -// ReplicateToRemote indicates an expected call of ReplicateToRemote -func (mr *MockClientMockRecorder) ReplicateToRemote(arg0, arg1, arg2 interface{}) *gomock.Call { +// ReplicateToRemote indicates an expected call of ReplicateToRemote. +func (mr *MockClientMockRecorder) ReplicateToRemote(namespace, d, remoteDNS interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ReplicateToRemote", reflect.TypeOf((*MockClient)(nil).ReplicateToRemote), arg0, arg1, arg2) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ReplicateToRemote", reflect.TypeOf((*MockClient)(nil).ReplicateToRemote), namespace, d, remoteDNS) } -// Stat mocks base method -func (m *MockClient) Stat(arg0 string, arg1 core.Digest) (*core.BlobInfo, error) { +// Stat mocks base method. +func (m *MockClient) Stat(namespace string, d core.Digest) (*core.BlobInfo, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Stat", arg0, arg1) + ret := m.ctrl.Call(m, "Stat", namespace, d) ret0, _ := ret[0].(*core.BlobInfo) ret1, _ := ret[1].(error) return ret0, ret1 } -// Stat indicates an expected call of Stat -func (mr *MockClientMockRecorder) Stat(arg0, arg1 interface{}) *gomock.Call { +// Stat indicates an expected call of Stat. +func (mr *MockClientMockRecorder) Stat(namespace, d interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Stat", reflect.TypeOf((*MockClient)(nil).Stat), arg0, arg1) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Stat", reflect.TypeOf((*MockClient)(nil).Stat), namespace, d) } -// StatLocal mocks base method -func (m *MockClient) StatLocal(arg0 string, arg1 core.Digest) (*core.BlobInfo, error) { +// StatLocal mocks base method. +func (m *MockClient) StatLocal(namespace string, d core.Digest) (*core.BlobInfo, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "StatLocal", arg0, arg1) + ret := m.ctrl.Call(m, "StatLocal", namespace, d) ret0, _ := ret[0].(*core.BlobInfo) ret1, _ := ret[1].(error) return ret0, ret1 } -// StatLocal indicates an expected call of StatLocal -func (mr *MockClientMockRecorder) StatLocal(arg0, arg1 interface{}) *gomock.Call { +// StatLocal indicates an expected call of StatLocal. +func (mr *MockClientMockRecorder) StatLocal(namespace, d interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StatLocal", reflect.TypeOf((*MockClient)(nil).StatLocal), arg0, arg1) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "StatLocal", reflect.TypeOf((*MockClient)(nil).StatLocal), namespace, d) } -// TransferBlob mocks base method -func (m *MockClient) TransferBlob(arg0 core.Digest, arg1 io.Reader) error { +// TransferBlob mocks base method. +func (m *MockClient) TransferBlob(d core.Digest, blob io.Reader) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "TransferBlob", arg0, arg1) + ret := m.ctrl.Call(m, "TransferBlob", d, blob) ret0, _ := ret[0].(error) return ret0 } -// TransferBlob indicates an expected call of TransferBlob -func (mr *MockClientMockRecorder) TransferBlob(arg0, arg1 interface{}) *gomock.Call { +// TransferBlob indicates an expected call of TransferBlob. +func (mr *MockClientMockRecorder) TransferBlob(d, blob interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "TransferBlob", reflect.TypeOf((*MockClient)(nil).TransferBlob), arg0, arg1) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "TransferBlob", reflect.TypeOf((*MockClient)(nil).TransferBlob), d, blob) } -// UploadBlob mocks base method -func (m *MockClient) UploadBlob(arg0 string, arg1 core.Digest, arg2 io.Reader) error { +// UploadBlob mocks base method. +func (m *MockClient) UploadBlob(namespace string, d core.Digest, blob io.Reader) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "UploadBlob", arg0, arg1, arg2) + ret := m.ctrl.Call(m, "UploadBlob", namespace, d, blob) ret0, _ := ret[0].(error) return ret0 } -// UploadBlob indicates an expected call of UploadBlob -func (mr *MockClientMockRecorder) UploadBlob(arg0, arg1, arg2 interface{}) *gomock.Call { +// UploadBlob indicates an expected call of UploadBlob. +func (mr *MockClientMockRecorder) UploadBlob(namespace, d, blob interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UploadBlob", reflect.TypeOf((*MockClient)(nil).UploadBlob), arg0, arg1, arg2) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UploadBlob", reflect.TypeOf((*MockClient)(nil).UploadBlob), namespace, d, blob) } diff --git a/mocks/origin/blobclient/clusterclient.go b/mocks/origin/blobclient/clusterclient.go index c97250fd8..f4b2c4c8f 100644 --- a/mocks/origin/blobclient/clusterclient.go +++ b/mocks/origin/blobclient/clusterclient.go @@ -1,5 +1,10 @@ // Code generated by MockGen. DO NOT EDIT. // Source: github.com/uber/kraken/origin/blobclient (interfaces: ClusterClient) +// +// Generated by this command: +// +// mockgen -package mockblobclient . ClusterClient +// // Package mockblobclient is a generated GoMock package. package mockblobclient @@ -11,126 +16,141 @@ import ( reflect "reflect" ) -// MockClusterClient is a mock of ClusterClient interface +// MockClusterClient is a mock of ClusterClient interface. type MockClusterClient struct { ctrl *gomock.Controller recorder *MockClusterClientMockRecorder + isgomock struct{} } -// MockClusterClientMockRecorder is the mock recorder for MockClusterClient +// MockClusterClientMockRecorder is the mock recorder for MockClusterClient. type MockClusterClientMockRecorder struct { mock *MockClusterClient } -// NewMockClusterClient creates a new mock instance +// NewMockClusterClient creates a new mock instance. func NewMockClusterClient(ctrl *gomock.Controller) *MockClusterClient { mock := &MockClusterClient{ctrl: ctrl} mock.recorder = &MockClusterClientMockRecorder{mock} return mock } -// EXPECT returns an object that allows the caller to indicate expected use +// EXPECT returns an object that allows the caller to indicate expected use. func (m *MockClusterClient) EXPECT() *MockClusterClientMockRecorder { return m.recorder } -// DownloadBlob mocks base method -func (m *MockClusterClient) DownloadBlob(arg0 string, arg1 core.Digest, arg2 io.Writer) error { +// CheckReadiness mocks base method. +func (m *MockClusterClient) CheckReadiness() error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "DownloadBlob", arg0, arg1, arg2) + ret := m.ctrl.Call(m, "CheckReadiness") ret0, _ := ret[0].(error) return ret0 } -// DownloadBlob indicates an expected call of DownloadBlob -func (mr *MockClusterClientMockRecorder) DownloadBlob(arg0, arg1, arg2 interface{}) *gomock.Call { +// CheckReadiness indicates an expected call of CheckReadiness. +func (mr *MockClusterClientMockRecorder) CheckReadiness() *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DownloadBlob", reflect.TypeOf((*MockClusterClient)(nil).DownloadBlob), arg0, arg1, arg2) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CheckReadiness", reflect.TypeOf((*MockClusterClient)(nil).CheckReadiness)) } -// GetMetaInfo mocks base method -func (m *MockClusterClient) GetMetaInfo(arg0 string, arg1 core.Digest) (*core.MetaInfo, error) { +// DownloadBlob mocks base method. +func (m *MockClusterClient) DownloadBlob(namespace string, d core.Digest, dst io.Writer) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetMetaInfo", arg0, arg1) + ret := m.ctrl.Call(m, "DownloadBlob", namespace, d, dst) + ret0, _ := ret[0].(error) + return ret0 +} + +// DownloadBlob indicates an expected call of DownloadBlob. +func (mr *MockClusterClientMockRecorder) DownloadBlob(namespace, d, dst interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DownloadBlob", reflect.TypeOf((*MockClusterClient)(nil).DownloadBlob), namespace, d, dst) +} + +// GetMetaInfo mocks base method. +func (m *MockClusterClient) GetMetaInfo(namespace string, d core.Digest) (*core.MetaInfo, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetMetaInfo", namespace, d) ret0, _ := ret[0].(*core.MetaInfo) ret1, _ := ret[1].(error) return ret0, ret1 } -// GetMetaInfo indicates an expected call of GetMetaInfo -func (mr *MockClusterClientMockRecorder) GetMetaInfo(arg0, arg1 interface{}) *gomock.Call { +// GetMetaInfo indicates an expected call of GetMetaInfo. +func (mr *MockClusterClientMockRecorder) GetMetaInfo(namespace, d interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetMetaInfo", reflect.TypeOf((*MockClusterClient)(nil).GetMetaInfo), arg0, arg1) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetMetaInfo", reflect.TypeOf((*MockClusterClient)(nil).GetMetaInfo), namespace, d) } -// OverwriteMetaInfo mocks base method -func (m *MockClusterClient) OverwriteMetaInfo(arg0 core.Digest, arg1 int64) error { +// OverwriteMetaInfo mocks base method. +func (m *MockClusterClient) OverwriteMetaInfo(d core.Digest, pieceLength int64) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "OverwriteMetaInfo", arg0, arg1) + ret := m.ctrl.Call(m, "OverwriteMetaInfo", d, pieceLength) ret0, _ := ret[0].(error) return ret0 } -// OverwriteMetaInfo indicates an expected call of OverwriteMetaInfo -func (mr *MockClusterClientMockRecorder) OverwriteMetaInfo(arg0, arg1 interface{}) *gomock.Call { +// OverwriteMetaInfo indicates an expected call of OverwriteMetaInfo. +func (mr *MockClusterClientMockRecorder) OverwriteMetaInfo(d, pieceLength interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "OverwriteMetaInfo", reflect.TypeOf((*MockClusterClient)(nil).OverwriteMetaInfo), arg0, arg1) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "OverwriteMetaInfo", reflect.TypeOf((*MockClusterClient)(nil).OverwriteMetaInfo), d, pieceLength) } -// Owners mocks base method -func (m *MockClusterClient) Owners(arg0 core.Digest) ([]core.PeerContext, error) { +// Owners mocks base method. +func (m *MockClusterClient) Owners(d core.Digest) ([]core.PeerContext, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Owners", arg0) + ret := m.ctrl.Call(m, "Owners", d) ret0, _ := ret[0].([]core.PeerContext) ret1, _ := ret[1].(error) return ret0, ret1 } -// Owners indicates an expected call of Owners -func (mr *MockClusterClientMockRecorder) Owners(arg0 interface{}) *gomock.Call { +// Owners indicates an expected call of Owners. +func (mr *MockClusterClientMockRecorder) Owners(d interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Owners", reflect.TypeOf((*MockClusterClient)(nil).Owners), arg0) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Owners", reflect.TypeOf((*MockClusterClient)(nil).Owners), d) } -// ReplicateToRemote mocks base method -func (m *MockClusterClient) ReplicateToRemote(arg0 string, arg1 core.Digest, arg2 string) error { +// ReplicateToRemote mocks base method. +func (m *MockClusterClient) ReplicateToRemote(namespace string, d core.Digest, remoteDNS string) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "ReplicateToRemote", arg0, arg1, arg2) + ret := m.ctrl.Call(m, "ReplicateToRemote", namespace, d, remoteDNS) ret0, _ := ret[0].(error) return ret0 } -// ReplicateToRemote indicates an expected call of ReplicateToRemote -func (mr *MockClusterClientMockRecorder) ReplicateToRemote(arg0, arg1, arg2 interface{}) *gomock.Call { +// ReplicateToRemote indicates an expected call of ReplicateToRemote. +func (mr *MockClusterClientMockRecorder) ReplicateToRemote(namespace, d, remoteDNS interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ReplicateToRemote", reflect.TypeOf((*MockClusterClient)(nil).ReplicateToRemote), arg0, arg1, arg2) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ReplicateToRemote", reflect.TypeOf((*MockClusterClient)(nil).ReplicateToRemote), namespace, d, remoteDNS) } -// Stat mocks base method -func (m *MockClusterClient) Stat(arg0 string, arg1 core.Digest) (*core.BlobInfo, error) { +// Stat mocks base method. +func (m *MockClusterClient) Stat(namespace string, d core.Digest) (*core.BlobInfo, error) { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Stat", arg0, arg1) + ret := m.ctrl.Call(m, "Stat", namespace, d) ret0, _ := ret[0].(*core.BlobInfo) ret1, _ := ret[1].(error) return ret0, ret1 } -// Stat indicates an expected call of Stat -func (mr *MockClusterClientMockRecorder) Stat(arg0, arg1 interface{}) *gomock.Call { +// Stat indicates an expected call of Stat. +func (mr *MockClusterClientMockRecorder) Stat(namespace, d interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Stat", reflect.TypeOf((*MockClusterClient)(nil).Stat), arg0, arg1) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Stat", reflect.TypeOf((*MockClusterClient)(nil).Stat), namespace, d) } -// UploadBlob mocks base method -func (m *MockClusterClient) UploadBlob(arg0 string, arg1 core.Digest, arg2 io.Reader) error { +// UploadBlob mocks base method. +func (m *MockClusterClient) UploadBlob(namespace string, d core.Digest, blob io.Reader) error { m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "UploadBlob", arg0, arg1, arg2) + ret := m.ctrl.Call(m, "UploadBlob", namespace, d, blob) ret0, _ := ret[0].(error) return ret0 } -// UploadBlob indicates an expected call of UploadBlob -func (mr *MockClusterClientMockRecorder) UploadBlob(arg0, arg1, arg2 interface{}) *gomock.Call { +// UploadBlob indicates an expected call of UploadBlob. +func (mr *MockClusterClientMockRecorder) UploadBlob(namespace, d, blob interface{}) *gomock.Call { mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UploadBlob", reflect.TypeOf((*MockClusterClient)(nil).UploadBlob), arg0, arg1, arg2) + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "UploadBlob", reflect.TypeOf((*MockClusterClient)(nil).UploadBlob), namespace, d, blob) } diff --git a/origin/blobclient/client.go b/origin/blobclient/client.go index a3c2bee54..08bfafffe 100644 --- a/origin/blobclient/client.go +++ b/origin/blobclient/client.go @@ -4,7 +4,7 @@ // 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 +// 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, @@ -36,6 +36,7 @@ import ( type Client interface { Addr() string + CheckReadiness() error Locations(d core.Digest) ([]string, error) DeleteBlob(d core.Digest) error TransferBlob(d core.Digest, blob io.Reader) error @@ -95,6 +96,17 @@ func (c *HTTPClient) Addr() string { return c.addr } +func (c *HTTPClient) CheckReadiness() error { + _, err := httputil.Get( + fmt.Sprintf("http://%s/readiness", c.addr), + httputil.SendTimeout(5*time.Second), + httputil.SendTLS(c.tls)) + if err != nil { + return fmt.Errorf("origin not ready: %v", err) + } + return nil +} + // Locations returns the origin server addresses which d is sharded on. func (c *HTTPClient) Locations(d core.Digest) ([]string, error) { r, err := httputil.Get( diff --git a/origin/blobclient/cluster_client.go b/origin/blobclient/cluster_client.go index 7d18a0477..e2aa0f40c 100644 --- a/origin/blobclient/cluster_client.go +++ b/origin/blobclient/cluster_client.go @@ -4,7 +4,7 @@ // 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 +// 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, @@ -25,6 +25,7 @@ import ( "github.com/cenkalti/backoff" "github.com/uber/kraken/core" + "github.com/uber/kraken/lib/backend" "github.com/uber/kraken/lib/hostlist" "github.com/uber/kraken/utils/errutil" "github.com/uber/kraken/utils/httputil" @@ -49,7 +50,7 @@ func Locations(p Provider, cluster hostlist.List, d core.Digest) (locs []string, // ClientResolver resolves digests into Clients of origins. type ClientResolver interface { - // Resolve must return an ordered, stable list of Clients for origins owning d. + // Resolve must return an ordered, stable, non-empty list of Clients for origins owning d. Resolve(d core.Digest) ([]Client, error) } @@ -78,6 +79,7 @@ func (r *clientResolver) Resolve(d core.Digest) ([]Client, error) { // ClusterClient defines a top-level origin cluster client which handles blob // location resolution and retries. type ClusterClient interface { + CheckReadiness() error UploadBlob(namespace string, d core.Digest, blob io.Reader) error DownloadBlob(namespace string, d core.Digest, dst io.Writer) error GetMetaInfo(namespace string, d core.Digest) (*core.MetaInfo, error) @@ -108,6 +110,15 @@ func (c *clusterClient) defaultPollBackOff() backoff.BackOff { } } +func (c *clusterClient) CheckReadiness() error { + clients, err := c.resolver.Resolve(backend.ReadinessCheckDigest) + if err != nil { + return fmt.Errorf("resolve clients: %s", err) + } + randIdx := rand.Intn(len(clients)) + return clients[randIdx].CheckReadiness() +} + // UploadBlob uploads blob to origin cluster. See Client.UploadBlob for more details. func (c *clusterClient) UploadBlob(namespace string, d core.Digest, blob io.Reader) (err error) { clients, err := c.resolver.Resolve(d) diff --git a/origin/blobserver/server_test.go b/origin/blobserver/server_test.go index 6711905f7..4ed7ab357 100644 --- a/origin/blobserver/server_test.go +++ b/origin/blobserver/server_test.go @@ -57,55 +57,44 @@ func TestHealth(t *testing.T) { func TestReadiness(t *testing.T) { for _, tc := range []struct { + name string mockStatErr error expectedErrMsg string - status int }{ { + name: "success", mockStatErr: nil, expectedErrMsg: "", - status: http.StatusOK, }, { - mockStatErr: backenderrors.ErrBlobNotFound, - expectedErrMsg: "", - status: http.StatusOK, - }, - { - mockStatErr: errors.New("failed due to backend error"), - expectedErrMsg: fmt.Sprintf("not ready to serve traffic: backend for namespace '%s' not ready: failed due to backend error", backend.ReadinessCheckNamespace), - status: http.StatusServiceUnavailable, + name: "503 is returned (since stat fails)", + mockStatErr: errors.New("test error"), + expectedErrMsg: fmt.Sprintf("503: not ready to serve traffic: backend for namespace '%s' not ready: test error", backend.ReadinessCheckNamespace), }, } { - require := require.New(t) + t.Run(tc.name, func(t *testing.T) { + require := require.New(t) - cp := newTestClientProvider() + cp := newTestClientProvider() - s := newTestServer(t, master1, hashRingMaxReplica(), cp) - defer s.cleanup() + s := newTestServer(t, master1, hashRingMaxReplica(), cp) + defer s.cleanup() - backendClient := s.backendClient(backend.ReadinessCheckNamespace, true) - mockStat := &core.BlobInfo{} - if tc.mockStatErr != nil { - mockStat = nil - } - - backendClient.EXPECT().Stat(backend.ReadinessCheckNamespace, backend.ReadinessCheckName).Return(mockStat, tc.mockStatErr) - - resp, err := httputil.Get( - fmt.Sprintf("http://%s/readiness", s.addr)) - - if tc.status == http.StatusOK { - defer resp.Body.Close() - require.Equal(tc.status, resp.StatusCode) - require.NoError(err) - b, _ := ioutil.ReadAll(resp.Body) - require.Equal("OK\n", string(b)) - } else { - require.True(httputil.IsStatus(err, tc.status)) - require.True(strings.Contains(err.Error(), tc.expectedErrMsg)) - require.Nil(resp) - } + backendClient := s.backendClient(backend.ReadinessCheckNamespace, true) + + mockStat := &core.BlobInfo{} + if tc.mockStatErr != nil { + mockStat = nil + } + backendClient.EXPECT().Stat(backend.ReadinessCheckNamespace, backend.ReadinessCheckName).Return(mockStat, tc.mockStatErr) + + err := cp.Provide(master1).CheckReadiness() + if tc.expectedErrMsg == "" { + require.Nil(err) + } else { + require.True(strings.Contains(err.Error(), tc.expectedErrMsg)) + } + }) } }