with storage wrapper

pull/89331/head
Ryan McKinley 11 months ago
parent d97d59ab38
commit 4fa60b6546
  1. 54
      pkg/storage/unified/resource/server.go
  2. 7
      pkg/storage/unified/resource/server_test.go

@ -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)
})
}

Loading…
Cancel
Save