1
1
package database
2
2
3
3
import (
4
+ "cmp"
4
5
"context"
5
6
"encoding/json"
6
7
"fmt"
@@ -170,7 +171,7 @@ func (c *Client) CreateOrUpdateAlert(ctx context.Context, machineID string, aler
170
171
171
172
decisions := []* ent.Decision {}
172
173
173
- for builderChunk := range slices .Chunk (decisionBuilders , c .decisionBulkSize ) {
174
+ for builderChunk := range slices .Chunk (decisionBuilders , max ( 1 , cmp . Or ( c .decisionBulkSize , len ( decisionBuilders ))) ) {
174
175
decisionsCreateRet , err := c .Ent .Decision .CreateBulk (builderChunk ... ).Save (ctx )
175
176
if err != nil {
176
177
return "" , fmt .Errorf ("creating alert decisions: %w" , err )
@@ -181,7 +182,7 @@ func (c *Client) CreateOrUpdateAlert(ctx context.Context, machineID string, aler
181
182
182
183
// now that we bulk created missing decisions, let's update the alert
183
184
184
- for decisionChunk := range slices .Chunk (decisions , c .decisionBulkSize ) {
185
+ for decisionChunk := range slices .Chunk (decisions , max ( 1 , cmp . Or ( c .decisionBulkSize , len ( decisions ))) ) {
185
186
err = c .Ent .Alert .Update ().Where (alert .UUID (alertItem .UUID )).AddDecisions (decisionChunk ... ).Exec (ctx )
186
187
if err != nil {
187
188
return "" , fmt .Errorf ("updating alert %s: %w" , alertItem .UUID , err )
@@ -332,7 +333,7 @@ func (c *Client) UpdateCommunityBlocklist(ctx context.Context, alertItem *models
332
333
valueList = append (valueList , * decisionItem .Value )
333
334
}
334
335
335
- for deleteChunk := range slices .Chunk (valueList , c .decisionBulkSize ) {
336
+ for deleteChunk := range slices .Chunk (valueList , max ( 1 , cmp . Or ( c .decisionBulkSize , len ( valueList ))) ) {
336
337
// Deleting older decisions from capi
337
338
deletedDecisions , err := txClient .Decision .Delete ().
338
339
Where (decision .And (
@@ -347,7 +348,7 @@ func (c *Client) UpdateCommunityBlocklist(ctx context.Context, alertItem *models
347
348
deleted += deletedDecisions
348
349
}
349
350
350
- for builderChunk := range slices .Chunk (decisionBuilders , c .decisionBulkSize ) {
351
+ for builderChunk := range slices .Chunk (decisionBuilders , max ( 1 , cmp . Or ( c .decisionBulkSize , len ( decisionBuilders ))) ) {
351
352
insertedDecisions , err := txClient .Decision .CreateBulk (builderChunk ... ).Save (ctx )
352
353
if err != nil {
353
354
return 0 , 0 , 0 , rollbackOnError (txClient , err , "bulk creating decisions" )
@@ -547,7 +548,7 @@ func buildMetaCreates(ctx context.Context, logger log.FieldLogger, client *ent.C
547
548
func buildDecisions (ctx context.Context , logger log.FieldLogger , client * Client , alertItem * models.Alert , stopAtTime time.Time ) ([]* ent.Decision , int , error ) {
548
549
decisions := []* ent.Decision {}
549
550
550
- for decisionChunk := range slices .Chunk (alertItem .Decisions , client .decisionBulkSize ) {
551
+ for decisionChunk := range slices .Chunk (alertItem .Decisions , max ( 1 , cmp . Or ( client .decisionBulkSize , len ( alertItem . Decisions ))) ) {
551
552
decisionRet , err := client .createDecisionChunk (ctx , * alertItem .Simulated , stopAtTime , decisionChunk )
552
553
if err != nil {
553
554
return nil , 0 , fmt .Errorf ("creating alert decisions: %w" , err )
@@ -602,7 +603,7 @@ func saveAlerts(ctx context.Context, c *Client, alertBuilders []*ent.AlertCreate
602
603
603
604
d := alertDecisions [i ]
604
605
605
- for d2 := range slices .Chunk (d , c .decisionBulkSize ) {
606
+ for d2 := range slices .Chunk (d , max ( 1 , cmp . Or ( c .decisionBulkSize , len ( d ))) ) {
606
607
if err := retryOnBusy (func () error {
607
608
_ , err := c .Ent .Alert .Update ().Where (alert .IDEQ (a .ID )).AddDecisions (d2 ... ).Save (ctx )
608
609
return err
@@ -720,7 +721,7 @@ func (c *Client) CreateAlert(ctx context.Context, machineID string, alertList []
720
721
721
722
alertIDs := []string {}
722
723
723
- for alertChunk := range slices .Chunk (alertList , alertCreateBulkSize ) {
724
+ for alertChunk := range slices .Chunk (alertList , max ( 1 , cmp . Or ( alertCreateBulkSize , len ( alertList ))) ) {
724
725
ids , err := c .createAlertChunk (ctx , machineID , owner , alertChunk )
725
726
if err != nil {
726
727
return nil , fmt .Errorf ("machine '%s': %w" , machineID , err )
0 commit comments