From c1412615b9d41193cc03fc4a0676b6af5f481dd8 Mon Sep 17 00:00:00 2001 From: Vivek Patel Date: Fri, 20 May 2022 18:27:39 +0530 Subject: [PATCH] Fix pagination issue in migration of rbac resource rules --- .../migrations_202203_rbac_resource_fix.go | 37 +++++++++++++++---- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/pkg/provision/migrations_202203_rbac_resource_fix.go b/pkg/provision/migrations_202203_rbac_resource_fix.go index a2a4e930b..f62bc2f34 100644 --- a/pkg/provision/migrations_202203_rbac_resource_fix.go +++ b/pkg/provision/migrations_202203_rbac_resource_fix.go @@ -255,6 +255,34 @@ func migratePost202203RbacRule(r *rbac.Rule, rx *resIndex) (op int) { func preloadRbacResourceIndex(ctx context.Context, s store.Storer) (*resIndex, error) { rx := &resIndex{} + rx.records = make(map[uint64]*composeTypes.Record) + var getRecords func(*composeTypes.Module, *filter.PagingCursor) (composeTypes.RecordSet, composeTypes.RecordFilter, error) + getRecords = func(m *composeTypes.Module, cursor *filter.PagingCursor) (rr composeTypes.RecordSet, f composeTypes.RecordFilter, err error) { + rr, f, err = store.SearchComposeRecords(ctx, s, m, composeTypes.RecordFilter{ + Paging: filter.Paging{ + Limit: 10000, + PageCursor: cursor, + }, + Deleted: filter.StateInclusive, + }) + + if err != nil { + return + } + for _, rec := range rr { + rx.records[rec.ID] = rec + } + + if f.NextPage != nil { + _, _, err = getRecords(m, f.NextPage) + if err != nil { + return + } + } + + return + } + rx.modules = make(map[uint64]*composeTypes.Module) modules, _, err := store.SearchComposeModules(ctx, s, composeTypes.ModuleFilter{ Paging: filter.Paging{Limit: 0}, @@ -267,17 +295,10 @@ func preloadRbacResourceIndex(ctx context.Context, s store.Storer) (*resIndex, e for _, r := range modules { rx.modules[r.ID] = r modIDs = append(modIDs, r.ID) - - rx.records = make(map[uint64]*composeTypes.Record) - records, _, err := store.SearchComposeRecords(ctx, s, r, composeTypes.RecordFilter{ - Deleted: filter.StateInclusive, - }) + _, _, err = getRecords(r, nil) if err != nil { return nil, err } - for _, rec := range records { - rx.records[rec.ID] = rec - } } if len(modIDs) > 0 {