@@ -365,8 +365,8 @@ func (d *DB) scanObsoleteFiles(list []string, flushableIngests []*ingestedFlusha
365
365
366
366
manifestFileNum := d .mu .versions .manifestFileNum
367
367
368
- var obsoleteTables []objectInfo
369
- var obsoleteBlobs []objectInfo
368
+ var obsoleteTables []obsoleteFile
369
+ var obsoleteBlobs []obsoleteFile
370
370
var obsoleteOptions []obsoleteFile
371
371
var obsoleteManifests []obsoleteFile
372
372
@@ -411,32 +411,32 @@ func (d *DB) scanObsoleteFiles(list []string, flushableIngests []*ingestedFlusha
411
411
if _ , ok := liveFileNums [obj .DiskFileNum ]; ok {
412
412
continue
413
413
}
414
- makeObjectInfo := func () objectInfo {
415
- fileInfo := fileInfo {FileNum : obj .DiskFileNum }
416
- if size , err := d .objProvider .Size (obj ); err == nil {
417
- fileInfo .FileSize = uint64 (size )
418
- }
419
- return objectInfo {
420
- fileInfo : fileInfo ,
421
- isLocal : ! obj .IsRemote (),
422
- }
423
- }
424
-
425
- switch obj .FileType {
426
- case base .FileTypeTable :
427
- obsoleteTables = append (obsoleteTables , makeObjectInfo ())
428
- case base .FileTypeBlob :
429
- obsoleteBlobs = append (obsoleteBlobs , makeObjectInfo ())
430
- default :
414
+ if obj .FileType != base .FileTypeTable && obj .FileType != base .FileTypeBlob {
431
415
// Ignore object types we don't know about.
416
+ continue
417
+ }
418
+ of := obsoleteFile {
419
+ fileType : obj .FileType ,
420
+ fs : d .opts .FS ,
421
+ path : base .MakeFilepath (d .opts .FS , d .dirname , obj .FileType , obj .DiskFileNum ),
422
+ fileNum : obj .DiskFileNum ,
423
+ isLocal : true ,
424
+ }
425
+ if size , err := d .objProvider .Size (obj ); err == nil {
426
+ of .fileSize = uint64 (size )
427
+ }
428
+ if obj .FileType == base .FileTypeTable {
429
+ obsoleteTables = append (obsoleteTables , of )
430
+ } else {
431
+ obsoleteBlobs = append (obsoleteBlobs , of )
432
432
}
433
433
}
434
434
435
- d .mu .versions .obsoleteTables = mergeObjectInfos (d .mu .versions .obsoleteTables , obsoleteTables )
436
- d .mu .versions .obsoleteBlobs = mergeObjectInfos (d .mu .versions .obsoleteBlobs , obsoleteBlobs )
437
- d .mu .versions .updateObsoleteObjectMetricsLocked ()
435
+ d .mu .versions .obsoleteTables = mergeObsoleteFiles (d .mu .versions .obsoleteTables , obsoleteTables )
436
+ d .mu .versions .obsoleteBlobs = mergeObsoleteFiles (d .mu .versions .obsoleteBlobs , obsoleteBlobs )
438
437
d .mu .versions .obsoleteManifests = mergeObsoleteFiles (d .mu .versions .obsoleteManifests , obsoleteManifests )
439
438
d .mu .versions .obsoleteOptions = mergeObsoleteFiles (d .mu .versions .obsoleteOptions , obsoleteOptions )
439
+ d .mu .versions .updateObsoleteObjectMetricsLocked ()
440
440
}
441
441
442
442
// disableFileDeletions disables file deletions and then waits for any
@@ -504,9 +504,9 @@ func (d *DB) deleteObsoleteFiles(jobID JobID) {
504
504
d .opts .Logger .Fatalf ("obsoleteManifests is not sorted" )
505
505
case ! slices .IsSortedFunc (d .mu .versions .obsoleteOptions , cmpObsoleteFileNumbers ):
506
506
d .opts .Logger .Fatalf ("obsoleteOptions is not sorted" )
507
- case ! slices .IsSortedFunc (obsoleteTables , cmpObjectFileNums ):
507
+ case ! slices .IsSortedFunc (obsoleteTables , cmpObsoleteFileNumbers ):
508
508
d .opts .Logger .Fatalf ("obsoleteTables is not sorted" )
509
- case ! slices .IsSortedFunc (obsoleteBlobs , cmpObjectFileNums ):
509
+ case ! slices .IsSortedFunc (obsoleteBlobs , cmpObsoleteFileNumbers ):
510
510
d .opts .Logger .Fatalf ("obsoleteBlobs is not sorted" )
511
511
}
512
512
}
@@ -529,9 +529,12 @@ func (d *DB) deleteObsoleteFiles(jobID JobID) {
529
529
d .mu .Unlock ()
530
530
defer d .mu .Lock ()
531
531
532
- filesToDelete := make ([]obsoleteFile , 0 , len (obsoleteLogs )+ len (obsoleteTables )+ len (obsoleteManifests )+ len (obsoleteOptions ))
532
+ n := len (obsoleteLogs ) + len (obsoleteTables ) + len (obsoleteBlobs ) + len (obsoleteManifests ) + len (obsoleteOptions )
533
+ filesToDelete := make ([]obsoleteFile , 0 , n )
533
534
filesToDelete = append (filesToDelete , obsoleteManifests ... )
534
535
filesToDelete = append (filesToDelete , obsoleteOptions ... )
536
+ filesToDelete = append (filesToDelete , obsoleteTables ... )
537
+ filesToDelete = append (filesToDelete , obsoleteBlobs ... )
535
538
for _ , f := range obsoleteLogs {
536
539
filesToDelete = append (filesToDelete , obsoleteFile {
537
540
fileType : base .FileTypeLog ,
@@ -543,14 +546,11 @@ func (d *DB) deleteObsoleteFiles(jobID JobID) {
543
546
})
544
547
}
545
548
for _ , f := range obsoleteTables {
546
- d .fileCache .Evict (f .FileNum , base .FileTypeTable )
547
- filesToDelete = append (filesToDelete , f .asObsoleteFile (d .opts .FS , base .FileTypeTable , d .dirname ))
549
+ d .fileCache .Evict (f .fileNum , base .FileTypeTable )
548
550
}
549
551
for _ , f := range obsoleteBlobs {
550
- d .fileCache .Evict (f .FileNum , base .FileTypeBlob )
551
- filesToDelete = append (filesToDelete , f .asObsoleteFile (d .opts .FS , base .FileTypeBlob , d .dirname ))
552
+ d .fileCache .Evict (f .fileNum , base .FileTypeBlob )
552
553
}
553
-
554
554
if len (filesToDelete ) > 0 {
555
555
d .cleanupManager .EnqueueJob (jobID , filesToDelete )
556
556
}
@@ -682,18 +682,3 @@ func (z *zombieObjects) TotalSize() uint64 {
682
682
func (z * zombieObjects ) LocalStats () (count uint64 , size uint64 ) {
683
683
return z .localCount , z .localSize
684
684
}
685
-
686
- func mergeObjectInfos (a , b []objectInfo ) []objectInfo {
687
- if len (b ) == 0 {
688
- return a
689
- }
690
- a = append (a , b ... )
691
- slices .SortFunc (a , cmpObjectFileNums )
692
- return slices .CompactFunc (a , func (a , b objectInfo ) bool {
693
- return a .FileNum == b .FileNum
694
- })
695
- }
696
-
697
- func cmpObjectFileNums (a , b objectInfo ) int {
698
- return cmp .Compare (a .FileNum , b .FileNum )
699
- }
0 commit comments