with storage wrapper
This commit is contained in:
@@ -32,8 +32,8 @@ var (
|
||||
// ResourceServer implements all services
|
||||
type ResourceServer interface {
|
||||
ResourceStoreServer
|
||||
// ResourceSearchServer
|
||||
// DiagnosticsServer
|
||||
ResourceSearchServer
|
||||
DiagnosticsServer
|
||||
|
||||
// Called once for initialization
|
||||
Init() error
|
||||
@@ -108,10 +108,10 @@ func NewResourceServer(opts ResourceServerOptions) (ResourceServer, error) {
|
||||
return nil, fmt.Errorf("missing AppendingStore implementation")
|
||||
}
|
||||
if opts.Search == nil {
|
||||
return nil, fmt.Errorf("missing ResourceSearchServer implementation")
|
||||
opts.Search = &NoopServer{}
|
||||
}
|
||||
if opts.Diagnostics == nil {
|
||||
return nil, fmt.Errorf("missing Diagnostics implementation")
|
||||
opts.Search = &NoopServer{}
|
||||
}
|
||||
|
||||
return &server{
|
||||
@@ -318,10 +318,22 @@ func (s *server) Create(ctx context.Context, req *CreateRequest) (*CreateRespons
|
||||
// Convert golang errors to status result errors that can be returned to a client
|
||||
func errToStatus(err error) (*StatusResult, error) {
|
||||
if err != nil {
|
||||
apistatus, ok := err.(apierrors.APIStatus)
|
||||
if ok {
|
||||
s := apistatus.Status()
|
||||
return &StatusResult{
|
||||
Status: s.Status,
|
||||
Message: s.Message,
|
||||
Reason: string(s.Reason),
|
||||
Code: s.Code,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// TODO... better conversion!!!
|
||||
return &StatusResult{
|
||||
Status: "Failure",
|
||||
Message: err.Error(),
|
||||
Code: 500,
|
||||
}, nil
|
||||
}
|
||||
return nil, err
|
||||
@@ -467,3 +479,37 @@ func (s *server) Watch(req *WatchRequest, srv ResourceStore_WatchServer) error {
|
||||
}
|
||||
return s.Watch(req, srv)
|
||||
}
|
||||
|
||||
// GetBlob implements ResourceServer.
|
||||
func (s *server) GetBlob(ctx context.Context, req *GetBlobRequest) (*GetBlobResponse, error) {
|
||||
if err := s.Init(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
rsp, err := s.search.GetBlob(ctx, req)
|
||||
rsp.Status, err = errToStatus(err)
|
||||
return rsp, err
|
||||
}
|
||||
|
||||
// History implements ResourceServer.
|
||||
func (s *server) History(ctx context.Context, req *HistoryRequest) (*HistoryResponse, error) {
|
||||
if err := s.Init(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return s.search.History(ctx, req)
|
||||
}
|
||||
|
||||
// IsHealthy implements ResourceServer.
|
||||
func (s *server) IsHealthy(ctx context.Context, req *HealthCheckRequest) (*HealthCheckResponse, error) {
|
||||
if err := s.Init(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return s.diagnostics.IsHealthy(ctx, req)
|
||||
}
|
||||
|
||||
// Origin implements ResourceServer.
|
||||
func (s *server) Origin(ctx context.Context, req *OriginRequest) (*OriginResponse, error) {
|
||||
if err := s.Init(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return s.search.Origin(ctx, req)
|
||||
}
|
||||
|
||||
@@ -97,11 +97,12 @@ func TestWriter(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
require.True(t, deleted.ResourceVersion > updated.ResourceVersion)
|
||||
|
||||
// We should get not found when trying to read the latest value
|
||||
// We should get not found status when trying to read the latest value
|
||||
key.ResourceVersion = 0
|
||||
found, err = server.Read(ctx, &ReadRequest{Key: key})
|
||||
require.Error(t, err)
|
||||
require.Nil(t, found)
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, found.Status)
|
||||
require.Equal(t, int32(404), found.Status.Code)
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user