@@ -3,7 +3,9 @@ package deletion
33import (
44 "context"
55 "fmt"
6+ "slices"
67 "sort"
8+ "strings"
79 "sync"
810 "time"
911
@@ -94,8 +96,10 @@ func (d *DeleteRequestsManager) mergeShardedRequests(ctx context.Context) error
9496 return err
9597 }
9698
97- deletesPerRequest := partitionByRequestID (deleteGroups )
98- deleteRequests := mergeDeletes (deletesPerRequest )
99+ slices .SortFunc (deleteGroups , func (a , b DeleteRequest ) int {
100+ return strings .Compare (a .RequestID , b .RequestID )
101+ })
102+ deleteRequests := mergeDeletes (deleteGroups )
99103 for _ , req := range deleteRequests {
100104 // do not consider requests which do not have an id. Request ID won't be set in some tests or there is a bug in our code for loading requests.
101105 if req .RequestID == "" {
@@ -108,17 +112,38 @@ func (d *DeleteRequestsManager) mergeShardedRequests(ctx context.Context) error
108112 continue
109113 }
110114 // do not do anything if we are not done with processing all the shards or the number of shards is 1
111- if req .Status != StatusProcessed || len (deletesPerRequest [req .RequestID ]) == 1 {
115+ if req .Status != StatusProcessed {
116+ continue
117+ }
118+
119+ var idxStart , idxEnd int
120+ for i := range deleteGroups {
121+ if req .RequestID == deleteGroups [i ].RequestID {
122+ idxStart = i
123+ break
124+ }
125+ }
126+
127+ for i := len (deleteGroups ) - 1 ; i > 0 ; i -- {
128+ if req .RequestID == deleteGroups [i ].RequestID {
129+ idxEnd = i
130+ break
131+ }
132+ }
133+
134+ // do not do anything if the number of shards is 1
135+ if idxStart == idxEnd {
112136 continue
113137 }
138+ reqShards := deleteGroups [idxStart : idxEnd + 1 ]
114139
115140 level .Info (util_log .Logger ).Log ("msg" , "merging sharded request" ,
116141 "request_id" , req .RequestID ,
117- "num_shards" , len (deletesPerRequest ),
142+ "num_shards" , len (reqShards ),
118143 "start_time" , req .StartTime .Unix (),
119144 "end_time" , req .EndTime .Unix (),
120145 )
121- if err := d .deleteRequestsStore .MergeShardedRequests (ctx , req , deletesPerRequest [ req . RequestID ] ); err != nil {
146+ if err := d .deleteRequestsStore .MergeShardedRequests (ctx , req , reqShards ); err != nil {
122147 return err
123148 }
124149 }
0 commit comments