check for deleted

This commit is contained in:
Ryan McKinley 2024-07-03 13:55:12 -07:00
parent ddcbc753d3
commit d09979b332
2 changed files with 32 additions and 13 deletions

View File

@ -167,15 +167,11 @@ func (s *cdkBackend) Read(ctx context.Context, req *ReadRequest) (*ReadResponse,
} }
raw, err := s.bucket.ReadAll(ctx, path) raw, err := s.bucket.ReadAll(ctx, path)
if err == nil && bytes.Contains(raw, []byte(`"DeletedMarker"`)) { if err == nil && isDeletedMarker(raw) {
tmp := &unstructured.Unstructured{} return nil, apierrors.NewNotFound(schema.GroupResource{
err = tmp.UnmarshalJSON(raw) Group: req.Key.Group,
if err == nil && tmp.GetKind() == "DeletedMarker" { Resource: req.Key.Resource,
return nil, apierrors.NewNotFound(schema.GroupResource{ }, req.Key.Name)
Group: req.Key.Group,
Resource: req.Key.Resource,
}, req.Key.Name)
}
} }
return &ReadResponse{ return &ReadResponse{
@ -184,6 +180,17 @@ func (s *cdkBackend) Read(ctx context.Context, req *ReadRequest) (*ReadResponse,
}, err }, err
} }
func isDeletedMarker(raw []byte) bool {
if bytes.Contains(raw, []byte(`"DeletedMarker"`)) {
tmp := &unstructured.Unstructured{}
err := tmp.UnmarshalJSON(raw)
if err == nil && tmp.GetKind() == "DeletedMarker" {
return true
}
}
return false
}
// List implements AppendingStore. // List implements AppendingStore.
func (s *cdkBackend) PrepareList(ctx context.Context, req *ListRequest) (*ListResponse, error) { func (s *cdkBackend) PrepareList(ctx context.Context, req *ListRequest) (*ListResponse, error) {
resources, err := buildTree(ctx, s, req.Options.Key) resources, err := buildTree(ctx, s, req.Options.Key)
@ -198,10 +205,12 @@ func (s *cdkBackend) PrepareList(ctx context.Context, req *ListRequest) (*ListRe
if err != nil { if err != nil {
return nil, err return nil, err
} }
rsp.Items = append(rsp.Items, &ResourceWrapper{ if !isDeletedMarker(raw) {
ResourceVersion: latest.rv, rsp.Items = append(rsp.Items, &ResourceWrapper{
Value: raw, ResourceVersion: latest.rv,
}) Value: raw,
})
}
} }
return rsp, nil return rsp, nil
} }

View File

@ -132,6 +132,16 @@ func TestSimpleServer(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
require.NotNil(t, found.Status) require.NotNil(t, found.Status)
require.Equal(t, int32(404), found.Status.Code) require.Equal(t, int32(404), found.Status.Code)
// And the deleted value should not be in the results
all, err = server.List(ctx, &ListRequest{Options: &ListOptions{
Key: &ResourceKey{
Group: key.Group,
Resource: key.Resource,
},
}})
require.NoError(t, err)
require.Len(t, all.Items, 0) // empty
}) })
} }