Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 21 additions & 34 deletions config/clients/go/template/client/client.mustache
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ package client
import (
_context "context"
"encoding/json"
"errors"
"fmt"
"math"
_nethttp "net/http"
Expand Down Expand Up @@ -1778,18 +1779,14 @@ func (client *{{appShortName}}Client) WriteExecute(request SdkClientWriteRequest
if request.GetBody() != nil {
for i := 0; i < len(request.GetBody().Writes); i += writeChunkSize {
end := int(math.Min(float64(i+writeChunkSize), float64(len(request.GetBody().Writes))))

writeChunks = append(writeChunks, (request.GetBody().Writes)[i:end])
}
}

writeGroup, ctx := errgroup.WithContext(request.GetContext())

writeGroup.SetLimit(int(maxParallelReqs))
writeResponses := make([]ClientWriteResponse, len(writeChunks))
for index, writeBody := range writeChunks {
index, writeBody := index, writeBody
writeGroup.Go(func() error {
writePool := pool.NewWithResults[*ClientWriteResponse]().WithContext(request.GetContext()).WithMaxGoroutines(int(maxParallelReqs))
for _, writeBody := range writeChunks {
writeBody := writeBody
writePool.Go(func(ctx _context.Context) (*ClientWriteResponse, error) {
singleResponse, err := client.WriteExecute(&SdkClientWriteRequest{
ctx: ctx,
Client: client,
Expand All @@ -1800,22 +1797,18 @@ func (client *{{appShortName}}Client) WriteExecute(request SdkClientWriteRequest
RequestOptions: options.RequestOptions,
AuthorizationModelId: authorizationModelId,
StoreId: request.GetStoreIdOverride(),
Conflict: options.Conflict,
Conflict: options.Conflict,
},
})

if _, ok := err.(fgaSdk.FgaApiAuthenticationError); ok {
return err
var authErr fgaSdk.FgaApiAuthenticationError
if errors.As(err, &authErr) {
return nil, err
}

writeResponses[index] = *singleResponse

return nil
return singleResponse, nil
})
}

err = writeGroup.Wait()
// If an error was returned then it will be an authentication error so we want to return
writeResponses, err := writePool.Wait()
if err != nil {
return &response, err
}
Expand All @@ -1825,17 +1818,14 @@ func (client *{{appShortName}}Client) WriteExecute(request SdkClientWriteRequest
if request.GetBody() != nil {
for i := 0; i < len(request.GetBody().Deletes); i += deleteChunkSize {
end := int(math.Min(float64(i+writeChunkSize), float64(len(request.GetBody().Deletes))))

deleteChunks = append(deleteChunks, (request.GetBody().Deletes)[i:end])
}
}

deleteGroup, ctx := errgroup.WithContext(request.GetContext())
deleteGroup.SetLimit(int(maxParallelReqs))
deleteResponses := make([]ClientWriteResponse, len(deleteChunks))
for index, deleteBody := range deleteChunks {
index, deleteBody := index, deleteBody
deleteGroup.Go(func() error {
deletePool := pool.NewWithResults[*ClientWriteResponse]().WithContext(request.GetContext()).WithMaxGoroutines(int(maxParallelReqs))
for _, deleteBody := range deleteChunks {
deleteBody := deleteBody
deletePool.Go(func(ctx _context.Context) (*ClientWriteResponse, error) {
singleResponse, err := client.WriteExecute(&SdkClientWriteRequest{
ctx: ctx,
Client: client,
Expand All @@ -1846,23 +1836,20 @@ func (client *{{appShortName}}Client) WriteExecute(request SdkClientWriteRequest
RequestOptions: options.RequestOptions,
AuthorizationModelId: authorizationModelId,
StoreId: request.GetStoreIdOverride(),
Conflict: options.Conflict,
Conflict: options.Conflict,
},
})

if _, ok := err.(fgaSdk.FgaApiAuthenticationError); ok {
return err
var authErr fgaSdk.FgaApiAuthenticationError
if errors.As(err, &authErr) {
return nil, err
}

deleteResponses[index] = *singleResponse

return nil
return singleResponse, nil
})
}

err = deleteGroup.Wait()
deleteResponses, err := deletePool.Wait()
if err != nil {
// If an error was returned then it will be an authentication error so we want to return
return &response, err
}

Expand Down
Loading