func()

in lib/store/cleanup.go [204:261]


func (m *cleanupManager) customPolicyBasedCleanup(op base.FileOp, config CleanupConfig, customPolicy func(a, b fInfo) int, diskUsageFn diskUsageFn) (usage int64, err error) {
	names, err := op.ListNames()
	if err != nil {
		return 0, fmt.Errorf("list names: %s", err)
	}

	var fInfos []fInfo
	var totalUsage int64
	for _, name := range names {
		fStat, err := op.GetFileStat(name)
		if err != nil {
			log.With("name", name).Errorf("Error getting file stat: %s", err)
			continue
		}
		fInfo := fInfo{
			name:         name,
			downloadTime: fStat.ModTime(),
			size:         fStat.Size(),
		}
		totalUsage += fStat.Size()

		var accessTime metadata.LastAccessTime
		err = op.GetFileMetadata(name, &accessTime)
		if os.IsNotExist(err) {
			continue
		}
		if err != nil {
			log.With("name", name).Errorf("Error getting file metadata: %s", err)
			continue
		}
		fInfo.accessTime = accessTime.Time
		fInfos = append(fInfos, fInfo)
	}

	slices.SortFunc(fInfos, customPolicy)

	dInfo, err := diskUsageFn()
	if err != nil {
		return 0, fmt.Errorf("get disk usage info %s: %s", op, err)
	}

	minBytes := dInfo.TotalBytes * uint64(config.AggressiveLowerThreshold) / 100

	remainDeleteBytes := int64(dInfo.TotalBytes) - int64(minBytes)
	for _, file := range fInfos {
		if remainDeleteBytes <= 0 {
			break
		}
		err := op.DeleteFile(file.name)
		if err != nil && err != base.ErrFilePersisted {
			log.With("name", file.name).Errorf("Error deleting expired file: %s", err)
		}
		if err == nil {
			remainDeleteBytes -= file.size
		}
	}
	return totalUsage, nil
}