253
// sortAndFilterFiles sort visibility record file names based on close timestamp (desc) and use hashed runID to break ties.
254
// if a nextPageToken is give, it only returns filenames that have a smaller close timestamp
255
>
func sortAndFilterFiles(filenames []string, token *queryVisibilityToken) ([]string, error) {
visibility_archiver.go
256
>
var parsedFilenames []*parsedVisFilename
257
>
for _, name := range filenames {
258
>
pieces := strings.FieldsFunc(name, func(r rune) bool {
259
>
return r == '_' || r == '.'
260
>
})
261
>
if len(pieces) != 3 {
262
return nil, fmt.Errorf("failed to parse visibility filename %s", name)
263
}
264
266
>
if err != nil {
267
return nil, fmt.Errorf("failed to parse visibility filename %s", name)
268
}
270
>
name: name,
271
>
closeTime: timestamp.UnixOrZeroTime(closeTime),
272
>
hashedRunID: pieces[1],
273
>
})
274
}
275
277
>
if parsedFilenames[i].closeTime.Equal(parsedFilenames[j].closeTime) {
278
return parsedFilenames[i].hashedRunID > parsedFilenames[j].hashedRunID
279
}
281
})
282
284
>
if token != nil {
285
LastHashedRunID := hash(token.LastRunID)
286
startIdx = sort.Search(len(parsedFilenames), func(i int) bool {