Client cache API paging (#5107)

* internal/clientcache: add -force-reset-schema flag

* clientcache: stream list pages directly to DB

---------

Co-authored-by: Johan Brandhorst-Satzkorn <johan.brandhorst@gmail.com>
(cherry picked from commit ccea8a4ce53f7b0d1105c1c1e4875e443635d96a)
This commit is contained in:
Irena Rindos authored and Timothy Messier committed 2024-09-24 14:18:53 +00:00
1 parent 3a4ee032d9
commit 2945692bf4
54 files changed
+793 -397

No files matched your search

+12 -2
View File
@@ -321,7 +321,12 @@ func (c *Client) List(ctx context.Context, authMethodId string, opt ...Option) (
opts, apiOpts := getOpts(opt...)
opts.queryMap["auth_method_id"] = authMethodId
req, err := c.client.NewRequest(ctx, "GET", "managed-groups", nil, apiOpts...)
requestPath := "managed-groups"
if opts.withResourcePathOverride != "" {
requestPath = opts.withResourcePathOverride
}
req, err := c.client.NewRequest(ctx, "GET", requestPath, nil, apiOpts...)
if err != nil {
return nil, fmt.Errorf("error creating List request: %w", err)
}
@@ -470,7 +475,12 @@ func (c *Client) ListNextPage(ctx context.Context, currentPage *ManagedGroupList
opts.queryMap["page_size"] = strconv.FormatUint(uint64(currentPage.pageSize), 10)
}
req, err := c.client.NewRequest(ctx, "GET", "managed-groups", nil, apiOpts...)
requestPath := "managed-groups"
if opts.withResourcePathOverride != "" {
requestPath = opts.withResourcePathOverride
}
req, err := c.client.NewRequest(ctx, "GET", requestPath, nil, apiOpts...)
if err != nil {
return nil, fmt.Errorf("error creating List request: %w", err)
}
+8
View File
@@ -29,6 +29,7 @@ type options struct {
withListToken string
withClientDirectedPagination bool
withPageSize uint32
withResourcePathOverride string
}
func getDefaultOptions() options {
@@ -111,6 +112,13 @@ func WithPageSize(with uint32) Option {
}
}
// WithResourcePathOverride tells the API to use the provided resource path
func WithResourcePathOverride(path string) Option {
return func(o *options) {
o.withResourcePathOverride = path
}
}
func WithAttributes(inAttributes map[string]interface{}) Option {
return func(o *options) {
o.postMap["attributes"] = inAttributes