@@ -852,99 +852,9 @@ func (s *syncer) SyncAssets(ctx context.Context) error {
852852func (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