1
1
package database
2
2
3
3
import (
4
+ "cmp"
4
5
"context"
5
6
"encoding/json"
6
7
"fmt"
@@ -166,7 +167,7 @@ func (c *Client) CreateOrUpdateAlert(ctx context.Context, machineID string, aler
166
167
167
168
decisions := []* ent.Decision {}
168
169
169
- for builderChunk := range slices .Chunk (decisionBuilders , c .decisionBulkSize ) {
170
+ for builderChunk := range slices .Chunk (decisionBuilders , max ( 1 , cmp . Or ( c .decisionBulkSize , len ( decisionBuilders ))) ) {
170
171
decisionsCreateRet , err := c .Ent .Decision .CreateBulk (builderChunk ... ).Save (ctx )
171
172
if err != nil {
172
173
return "" , fmt .Errorf ("creating alert decisions: %w" , err )
@@ -177,7 +178,7 @@ func (c *Client) CreateOrUpdateAlert(ctx context.Context, machineID string, aler
177
178
178
179
// now that we bulk created missing decisions, let's update the alert
179
180
180
- for decisionChunk := range slices .Chunk (decisions , c .decisionBulkSize ) {
181
+ for decisionChunk := range slices .Chunk (decisions , max ( 1 , cmp . Or ( c .decisionBulkSize , len ( decisions ))) ) {
181
182
err = c .Ent .Alert .Update ().Where (alert .UUID (alertItem .UUID )).AddDecisions (decisionChunk ... ).Exec (ctx )
182
183
if err != nil {
183
184
return "" , fmt .Errorf ("updating alert %s: %w" , alertItem .UUID , err )
@@ -325,7 +326,7 @@ func (c *Client) UpdateCommunityBlocklist(ctx context.Context, alertItem *models
325
326
valueList = append (valueList , * decisionItem .Value )
326
327
}
327
328
328
- for deleteChunk := range slices .Chunk (valueList , c .decisionBulkSize ) {
329
+ for deleteChunk := range slices .Chunk (valueList , max ( 1 , cmp . Or ( c .decisionBulkSize , len ( valueList ))) ) {
329
330
// Deleting older decisions from capi
330
331
deletedDecisions , err := txClient .Decision .Delete ().
331
332
Where (decision .And (
@@ -340,7 +341,7 @@ func (c *Client) UpdateCommunityBlocklist(ctx context.Context, alertItem *models
340
341
deleted += deletedDecisions
341
342
}
342
343
343
- for builderChunk := range slices .Chunk (decisionBuilders , c .decisionBulkSize ) {
344
+ for builderChunk := range slices .Chunk (decisionBuilders , max ( 1 , cmp . Or ( c .decisionBulkSize , len ( decisionBuilders ))) ) {
344
345
insertedDecisions , err := txClient .Decision .CreateBulk (builderChunk ... ).Save (ctx )
345
346
if err != nil {
346
347
return 0 , 0 , 0 , rollbackOnError (txClient , err , "bulk creating decisions" )
@@ -537,7 +538,7 @@ func buildMetaCreates(ctx context.Context, logger log.FieldLogger, client *ent.C
537
538
func buildDecisions (ctx context.Context , logger log.FieldLogger , client * Client , alertItem * models.Alert , stopAtTime time.Time ) ([]* ent.Decision , int , error ) {
538
539
decisions := []* ent.Decision {}
539
540
540
- for decisionChunk := range slices .Chunk (alertItem .Decisions , client .decisionBulkSize ) {
541
+ for decisionChunk := range slices .Chunk (alertItem .Decisions , max ( 1 , cmp . Or ( client .decisionBulkSize , len ( alertItem . Decisions ))) ) {
541
542
decisionRet , err := client .createDecisionChunk (ctx , * alertItem .Simulated , stopAtTime , decisionChunk )
542
543
if err != nil {
543
544
return nil , 0 , fmt .Errorf ("creating alert decisions: %w" , err )
@@ -593,7 +594,7 @@ func saveAlerts(ctx context.Context, c *Client, alertBuilders []*ent.AlertCreate
593
594
594
595
d := alertDecisions [i ]
595
596
596
- for d2 := range slices .Chunk (d , c .decisionBulkSize ) {
597
+ for d2 := range slices .Chunk (d , max ( 1 , cmp . Or ( c .decisionBulkSize , len ( d ))) ) {
597
598
if err := retryOnBusy (func () error {
598
599
_ , err := c .Ent .Alert .Update ().Where (alert .IDEQ (a .ID )).AddDecisions (d2 ... ).Save (ctx )
599
600
return err
@@ -712,7 +713,7 @@ func (c *Client) CreateAlert(ctx context.Context, machineID string, alertList []
712
713
713
714
alertIDs := []string {}
714
715
715
- for alertChunk := range slices .Chunk (alertList , alertCreateBulkSize ) {
716
+ for alertChunk := range slices .Chunk (alertList , max ( 1 , cmp . Or ( alertCreateBulkSize , len ( alertList ))) ) {
716
717
ids , err := c .createAlertChunk (ctx , machineID , owner , alertChunk )
717
718
if err != nil {
718
719
return nil , fmt .Errorf ("machine '%s': %w" , machineID , err )
0 commit comments