@@ -130,42 +130,53 @@ func (r *resourceTree) fillNode(ctx context.Context, parent *node) error {
130130 lifecycleState : resourcemanager .LIFECYCLESTATE_ACTIVE ,
131131 labels : folder .GetLabels (),
132132 }
133+ r .mu .Lock ()
133134 parent .children = append (parent .children , newFolderNode )
135+ r .mu .Unlock ()
134136 return r .fillNode (ctx , newFolderNode )
135137 })
136138 }
137139 return g .Wait ()
138140}
139141
140142func (r * resourceTree ) getNodeProjects (ctx context.Context , parent * node ) error {
141- req := r . resourceClient . ListProjects ( ctx ). ContainerParentId ( parent . resourceID )
142- resp , err := req . Execute ()
143- if err != nil {
144- if ! isForbiddenError ( err ) {
145- return err
143+ offset := 0
144+ for {
145+ req := r . resourceClient . ListProjects ( ctx ). ContainerParentId ( parent . resourceID ). Offset ( float32 ( offset ))
146+ if r . projectCreationTimeAfter != nil {
147+ req = req . CreationTimeStart ( * r . projectCreationTimeAfter )
146148 }
147- // listing projects for parent was forbidden, trying with member
148- resp , err = req .Member (r .member ).Execute ()
149+ resp , err := req .Execute ()
149150 if err != nil {
150- return err
151- }
152- }
153- for _ , proj := range resp .GetItems () {
154- if r .projectLifecycleState != nil && * r .projectLifecycleState != strings .ToLower (string (proj .GetLifecycleState ())) {
155- continue
151+ if ! isForbiddenError (err ) {
152+ return err
153+ }
154+ // listing projects for parent was forbidden, trying with member
155+ resp , err = req .Member (r .member ).Execute ()
156+ if err != nil {
157+ return err
158+ }
156159 }
157- if r . projectCreationTimeAfter != nil && ! proj . CreationTime . After ( * r . projectCreationTimeAfter ) {
158- return nil
160+ if len ( resp . GetItems ()) == 0 {
161+ break
159162 }
160- projNode := & node {
161- resourceID : proj .GetProjectId (),
162- typ : resourceTypeProject ,
163- name : proj .GetName (),
164- labels : proj .GetLabels (),
165- lifecycleState : proj .GetLifecycleState (),
166- parent : parent ,
163+ for _ , proj := range resp .GetItems () {
164+ if r .projectLifecycleState != nil && * r .projectLifecycleState != strings .ToLower (string (proj .GetLifecycleState ())) {
165+ continue
166+ }
167+ projNode := & node {
168+ resourceID : proj .GetProjectId (),
169+ typ : resourceTypeProject ,
170+ name : proj .GetName (),
171+ labels : proj .GetLabels (),
172+ lifecycleState : proj .GetLifecycleState (),
173+ parent : parent ,
174+ }
175+ r .mu .Lock ()
176+ parent .children = append (parent .children , projNode )
177+ r .mu .Unlock ()
167178 }
168- parent . children = append ( parent . children , projNode )
179+ offset += len ( resp . GetItems () )
169180 }
170181 return nil
171182}
0 commit comments