Unified Storage: Pass ns, group, resource to GetResourceStats instead of just namespace (#114050)
* passes nsr to GetResourceStats instead of just namespace * removes ns check * fixes failing tests * make update-workspace * pass group and resource from rebuild request when getting resource stats
This commit is contained in:
@@ -245,7 +245,10 @@ func (s *searchSupport) ListManagedObjects(ctx context.Context, req *resourcepb.
|
||||
}
|
||||
|
||||
rsp := &resourcepb.ListManagedObjectsResponse{}
|
||||
stats, err := s.storage.GetResourceStats(ctx, req.Namespace, 0)
|
||||
nsr := NamespacedResource{
|
||||
Namespace: req.Namespace,
|
||||
}
|
||||
stats, err := s.storage.GetResourceStats(ctx, nsr, 0)
|
||||
if err != nil {
|
||||
rsp.Error = AsErrorResult(err)
|
||||
return rsp, nil
|
||||
@@ -286,7 +289,10 @@ func (s *searchSupport) ListManagedObjects(ctx context.Context, req *resourcepb.
|
||||
|
||||
func (s *searchSupport) CountManagedObjects(ctx context.Context, req *resourcepb.CountManagedObjectsRequest) (*resourcepb.CountManagedObjectsResponse, error) {
|
||||
rsp := &resourcepb.CountManagedObjectsResponse{}
|
||||
stats, err := s.storage.GetResourceStats(ctx, req.Namespace, 0)
|
||||
nsr := NamespacedResource{
|
||||
Namespace: req.Namespace,
|
||||
}
|
||||
stats, err := s.storage.GetResourceStats(ctx, nsr, 0)
|
||||
if err != nil {
|
||||
rsp.Error = AsErrorResult(err)
|
||||
return rsp, nil
|
||||
@@ -408,7 +414,10 @@ func (s *searchSupport) GetStats(ctx context.Context, req *resourcepb.ResourceSt
|
||||
return rsp, nil
|
||||
}
|
||||
|
||||
stats, err := s.storage.GetResourceStats(ctx, req.Namespace, 0)
|
||||
nsr := NamespacedResource{
|
||||
Namespace: req.Namespace,
|
||||
}
|
||||
stats, err := s.storage.GetResourceStats(ctx, nsr, 0)
|
||||
if err != nil {
|
||||
return &resourcepb.ResourceStatsResponse{
|
||||
Error: AsErrorResult(err),
|
||||
@@ -457,7 +466,7 @@ func (s *searchSupport) buildIndexes(ctx context.Context) (int, error) {
|
||||
group := errgroup.Group{}
|
||||
group.SetLimit(s.initWorkers)
|
||||
|
||||
stats, err := s.storage.GetResourceStats(ctx, "", s.initMinSize)
|
||||
stats, err := s.storage.GetResourceStats(ctx, NamespacedResource{}, s.initMinSize)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
@@ -657,7 +666,12 @@ func (s *searchSupport) rebuildIndex(ctx context.Context, req rebuildRequest) {
|
||||
|
||||
// Get the correct value of size + RV for building the index. This is important for our Bleve
|
||||
// backend to decide whether to build index in-memory or as file-based.
|
||||
stats, err := s.storage.GetResourceStats(ctx, req.Namespace, 0)
|
||||
nsr := NamespacedResource{
|
||||
Namespace: req.Namespace,
|
||||
Group: req.Group,
|
||||
Resource: req.Resource,
|
||||
}
|
||||
stats, err := s.storage.GetResourceStats(ctx, nsr, 0)
|
||||
if err != nil {
|
||||
span.RecordError(fmt.Errorf("failed to get resource stats: %w", err))
|
||||
l.Error("failed to get resource stats", "error", err)
|
||||
@@ -750,7 +764,10 @@ func (s *searchSupport) getOrCreateIndex(ctx context.Context, key NamespacedReso
|
||||
|
||||
// Get correct value of size + RV for building the index. This is important for our Bleve
|
||||
// backend to decide whether to build index in-memory or as file-based.
|
||||
stats, err := s.storage.GetResourceStats(ctx, key.Namespace, 0)
|
||||
nsr := NamespacedResource{
|
||||
Namespace: key.Namespace,
|
||||
}
|
||||
stats, err := s.storage.GetResourceStats(ctx, nsr, 0)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to get resource stats: %w", err)
|
||||
}
|
||||
|
||||
@@ -88,7 +88,7 @@ type mockStorageBackend struct {
|
||||
resourceStats []ResourceStats
|
||||
}
|
||||
|
||||
func (m *mockStorageBackend) GetResourceStats(ctx context.Context, namespace string, minCount int) ([]ResourceStats, error) {
|
||||
func (m *mockStorageBackend) GetResourceStats(ctx context.Context, nsr NamespacedResource, minCount int) ([]ResourceStats, error) {
|
||||
var result []ResourceStats
|
||||
for _, stat := range m.resourceStats {
|
||||
// Apply the minCount filter like the real implementation does
|
||||
|
||||
@@ -123,7 +123,7 @@ type StorageBackend interface {
|
||||
WatchWriteEvents(ctx context.Context) (<-chan *WrittenEvent, error)
|
||||
|
||||
// Get resource stats within the storage backend. When namespace is empty, it will apply to all
|
||||
GetResourceStats(ctx context.Context, namespace string, minCount int) ([]ResourceStats, error)
|
||||
GetResourceStats(ctx context.Context, nsr NamespacedResource, minCount int) ([]ResourceStats, error)
|
||||
|
||||
// GetResourceLastImportTimes returns import times for all namespaced resources in the backend.
|
||||
GetResourceLastImportTimes(ctx context.Context) iter.Seq2[ResourceLastImportTime, error]
|
||||
|
||||
@@ -1223,8 +1223,8 @@ func (k *kvStorageBackend) WatchWriteEvents(ctx context.Context) (<-chan *Writte
|
||||
}
|
||||
|
||||
// GetResourceStats returns resource stats within the storage backend.
|
||||
func (k *kvStorageBackend) GetResourceStats(ctx context.Context, namespace string, minCount int) ([]ResourceStats, error) {
|
||||
return k.dataStore.GetResourceStats(ctx, namespace, minCount)
|
||||
func (k *kvStorageBackend) GetResourceStats(ctx context.Context, nsr NamespacedResource, minCount int) ([]ResourceStats, error) {
|
||||
return k.dataStore.GetResourceStats(ctx, nsr.Namespace, minCount)
|
||||
}
|
||||
|
||||
func (k *kvStorageBackend) GetResourceLastImportTimes(ctx context.Context) iter.Seq2[ResourceLastImportTime, error] {
|
||||
|
||||
@@ -1397,7 +1397,7 @@ func TestKvStorageBackend_GetResourceStats_Success(t *testing.T) {
|
||||
}
|
||||
|
||||
// Get stats for default namespace
|
||||
stats, err := backend.GetResourceStats(ctx, "default", 0)
|
||||
stats, err := backend.GetResourceStats(ctx, NamespacedResource{Namespace: "default"}, 0)
|
||||
require.NoError(t, err)
|
||||
require.Len(t, stats, 2) // Should have stats for 2 resource types in default namespace
|
||||
|
||||
@@ -1413,12 +1413,12 @@ func TestKvStorageBackend_GetResourceStats_Success(t *testing.T) {
|
||||
require.Equal(t, int64(1), resourceTypes["default/core/services"])
|
||||
|
||||
// Get stats for all namespaces (empty string)
|
||||
allStats, err := backend.GetResourceStats(ctx, "", 0)
|
||||
allStats, err := backend.GetResourceStats(ctx, NamespacedResource{Namespace: ""}, 0)
|
||||
require.NoError(t, err)
|
||||
require.Len(t, allStats, 4) // Should have stats for all 4 resource types across namespaces
|
||||
|
||||
// Get stats with minCount filter
|
||||
filteredStats, err := backend.GetResourceStats(ctx, "", 1)
|
||||
filteredStats, err := backend.GetResourceStats(ctx, NamespacedResource{Namespace: ""}, 1)
|
||||
require.NoError(t, err)
|
||||
require.Len(t, filteredStats, 1) // Only resources in default namespace has count > 1
|
||||
|
||||
|
||||
Reference in New Issue
Block a user