Skip to content

Commit 50a3065

Browse files
committed
wip wip wip
1 parent 7854360 commit 50a3065

File tree

2 files changed

+200
-117
lines changed

2 files changed

+200
-117
lines changed

pkg/sync/syncer.go

Lines changed: 92 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -852,99 +852,9 @@ func (s *syncer) SyncAssets(ctx context.Context) error {
852852
func (s *syncer) SyncGrantExpansion(ctx context.Context) error {
853853
l := ctxzap.Extract(ctx)
854854
entitlementGraph := s.state.EntitlementGraph(ctx)
855-
if !entitlementGraph.Loaded {
856-
pageToken := s.state.PageToken(ctx)
857-
858-
if pageToken == "" {
859-
l.Info("Expanding grants...")
860-
s.handleInitialActionForStep(ctx, *s.state.Current())
861-
}
862-
863-
resp, err := s.store.ListGrants(ctx, &v2.GrantsServiceListGrantsRequest{PageToken: pageToken})
864-
if err != nil {
865-
return err
866-
}
867-
868-
// We want to take action on the next page before we push any new actions
869-
if resp.NextPageToken != "" {
870-
err = s.state.NextPage(ctx, resp.NextPageToken)
871-
if err != nil {
872-
return err
873-
}
874-
} else {
875-
l.Info("Finished loading entitlement graph", zap.Int("edges", len(entitlementGraph.Edges)))
876-
entitlementGraph.Loaded = true
877-
}
878-
879-
for _, grant := range resp.List {
880-
annos := annotations.Annotations(grant.Annotations)
881-
expandable := &v2.GrantExpandable{}
882-
_, err := annos.Pick(expandable)
883-
if err != nil {
884-
return err
885-
}
886-
if len(expandable.GetEntitlementIds()) == 0 {
887-
continue
888-
}
889-
890-
principalID := grant.GetPrincipal().GetId()
891-
if principalID == nil {
892-
return fmt.Errorf("principal id was nil")
893-
}
894-
895-
// FIXME(morgabra) Log and skip some of the error paths here?
896-
for _, srcEntitlementID := range expandable.EntitlementIds {
897-
l.Debug(
898-
"Expandable entitlement found",
899-
zap.String("src_entitlement_id", srcEntitlementID),
900-
zap.String("dst_entitlement_id", grant.GetEntitlement().GetId()),
901-
)
902-
903-
srcEntitlement, err := s.store.GetEntitlement(ctx, &reader_v2.EntitlementsReaderServiceGetEntitlementRequest{
904-
EntitlementId: srcEntitlementID,
905-
})
906-
if err != nil {
907-
l.Error("error fetching source entitlement",
908-
zap.String("src_entitlement_id", srcEntitlementID),
909-
zap.String("dst_entitlement_id", grant.GetEntitlement().GetId()),
910-
zap.Error(err),
911-
)
912-
continue
913-
}
914-
915-
// The expand annotation points at entitlements by id. Those entitlements' resource should match
916-
// the current grant's principal, so we don't allow expanding arbitrary entitlements.
917-
sourceEntitlementResourceID := srcEntitlement.GetEntitlement().GetResource().GetId()
918-
if sourceEntitlementResourceID == nil {
919-
return fmt.Errorf("source entitlement resource id was nil")
920-
}
921-
if principalID.ResourceType != sourceEntitlementResourceID.ResourceType ||
922-
principalID.Resource != sourceEntitlementResourceID.Resource {
923-
l.Error(
924-
"source entitlement resource id did not match grant principal id",
925-
zap.String("grant_principal_id", principalID.String()),
926-
zap.String("source_entitlement_resource_id", sourceEntitlementResourceID.String()))
927-
928-
return fmt.Errorf("source entitlement resource id did not match grant principal id")
929-
}
930-
931-
entitlementGraph.AddEntitlement(grant.Entitlement)
932-
entitlementGraph.AddEntitlement(srcEntitlement.GetEntitlement())
933-
err = entitlementGraph.AddEdge(ctx,
934-
srcEntitlement.GetEntitlement().GetId(),
935-
grant.GetEntitlement().GetId(),
936-
expandable.Shallow,
937-
expandable.ResourceTypeIds,
938-
)
939-
if err != nil {
940-
return fmt.Errorf("error adding edge to graph: %w", err)
941-
}
942-
}
943-
}
944-
return nil
945-
}
946-
855+
fmt.Printf("%v\n", entitlementGraph)
947856
if entitlementGraph.Loaded {
857+
fmt.Printf("getting cycles1\n")
948858
cycle := entitlementGraph.GetFirstCycle()
949859
if cycle != nil {
950860
l.Warn(
@@ -955,19 +865,105 @@ func (s *syncer) SyncGrantExpansion(ctx context.Context) error {
955865
if dontFixCycles {
956866
return fmt.Errorf("cycles detected in entitlement graph")
957867
}
958-
868+
fmt.Printf("fixing cycles1\n")
959869
err := entitlementGraph.FixCycles()
870+
fmt.Printf("fixed cycles1\n")
960871
if err != nil {
961872
return err
962873
}
963874
}
875+
fmt.Printf("expandGrantsForEntitlements\n")
876+
return s.expandGrantsForEntitlements(ctx)
964877
}
965878

966-
err := s.expandGrantsForEntitlements(ctx)
879+
pageToken := s.state.PageToken(ctx)
880+
881+
if pageToken == "" {
882+
l.Info("Expanding grants...")
883+
s.handleInitialActionForStep(ctx, *s.state.Current())
884+
}
885+
886+
resp, err := s.store.ListGrants(ctx, &v2.GrantsServiceListGrantsRequest{PageToken: pageToken})
967887
if err != nil {
968888
return err
969889
}
970890

891+
// We want to take action on the next page before we push any new actions
892+
if resp.NextPageToken != "" {
893+
err = s.state.NextPage(ctx, resp.NextPageToken)
894+
if err != nil {
895+
return err
896+
}
897+
} else {
898+
l.Info("Finished loading entitlement graph", zap.Int("edges", len(entitlementGraph.Edges)))
899+
entitlementGraph.Loaded = true
900+
}
901+
902+
for _, grant := range resp.List {
903+
annos := annotations.Annotations(grant.Annotations)
904+
expandable := &v2.GrantExpandable{}
905+
_, err := annos.Pick(expandable)
906+
if err != nil {
907+
return err
908+
}
909+
if len(expandable.GetEntitlementIds()) == 0 {
910+
continue
911+
}
912+
913+
principalID := grant.GetPrincipal().GetId()
914+
if principalID == nil {
915+
return fmt.Errorf("principal id was nil")
916+
}
917+
918+
// FIXME(morgabra) Log and skip some of the error paths here?
919+
for _, srcEntitlementID := range expandable.EntitlementIds {
920+
l.Debug(
921+
"Expandable entitlement found",
922+
zap.String("src_entitlement_id", srcEntitlementID),
923+
zap.String("dst_entitlement_id", grant.GetEntitlement().GetId()),
924+
)
925+
926+
srcEntitlement, err := s.store.GetEntitlement(ctx, &reader_v2.EntitlementsReaderServiceGetEntitlementRequest{
927+
EntitlementId: srcEntitlementID,
928+
})
929+
if err != nil {
930+
l.Error("error fetching source entitlement",
931+
zap.String("src_entitlement_id", srcEntitlementID),
932+
zap.String("dst_entitlement_id", grant.GetEntitlement().GetId()),
933+
zap.Error(err),
934+
)
935+
continue
936+
}
937+
938+
// The expand annotation points at entitlements by id. Those entitlements' resource should match
939+
// the current grant's principal, so we don't allow expanding arbitrary entitlements.
940+
sourceEntitlementResourceID := srcEntitlement.GetEntitlement().GetResource().GetId()
941+
if sourceEntitlementResourceID == nil {
942+
return fmt.Errorf("source entitlement resource id was nil")
943+
}
944+
if principalID.ResourceType != sourceEntitlementResourceID.ResourceType ||
945+
principalID.Resource != sourceEntitlementResourceID.Resource {
946+
l.Error(
947+
"source entitlement resource id did not match grant principal id",
948+
zap.String("grant_principal_id", principalID.String()),
949+
zap.String("source_entitlement_resource_id", sourceEntitlementResourceID.String()))
950+
951+
return fmt.Errorf("source entitlement resource id did not match grant principal id")
952+
}
953+
954+
entitlementGraph.AddEntitlement(grant.Entitlement)
955+
entitlementGraph.AddEntitlement(srcEntitlement.GetEntitlement())
956+
err = entitlementGraph.AddEdge(ctx,
957+
srcEntitlement.GetEntitlement().GetId(),
958+
grant.GetEntitlement().GetId(),
959+
expandable.Shallow,
960+
expandable.ResourceTypeIds,
961+
)
962+
if err != nil {
963+
return fmt.Errorf("error adding edge to graph: %w", err)
964+
}
965+
}
966+
}
971967
return nil
972968
}
973969

@@ -1430,6 +1426,7 @@ func (s *syncer) expandGrantsForEntitlements(ctx context.Context) error {
14301426
actions := len(graph.Actions)
14311427
if actions%250 == 0 || actions < 10 {
14321428
l.Info("Expanding grants", zap.Int("actions", actions))
1429+
fmt.Printf("actions: %v: %v\n", actions, graph.Actions)
14331430
}
14341431

14351432
actionsDone, err := s.runGrantExpandActions(ctx)
@@ -1440,7 +1437,7 @@ func (s *syncer) expandGrantsForEntitlements(ctx context.Context) error {
14401437
if !actionsDone {
14411438
return nil
14421439
}
1443-
1440+
fmt.Printf("not done: %v\n", graph.Depth)
14441441
if graph.Depth > maxDepth {
14451442
l.Error(
14461443
"expandGrantsForEntitlements: exceeded max depth",

0 commit comments

Comments
 (0)