package tickevent import ( "time" "gitlink.org.cn/cloudream/common/pkgs/logger" "gitlink.org.cn/cloudream/storage/common/pkgs/mq/scanner/event" evt "gitlink.org.cn/cloudream/storage/scanner/internal/event" ) type BatchCleanPinned struct { lastCheckStart int } func NewBatchCleanPinned() *BatchCleanPinned { return &BatchCleanPinned{} } func (e *BatchCleanPinned) Execute(ctx ExecuteContext) { log := logger.WithType[BatchCleanPinned]("TickEvent") log.Debugf("begin") defer log.Debugf("end") // TODO 更好的策略 nowHour := time.Now().Hour() if nowHour > 6 { return } packageIDs, err := ctx.Args.DB.Package().BatchGetAllPackageIDs(ctx.Args.DB.DefCtx(), e.lastCheckStart, CheckPackageBatchSize) if err != nil { log.Warnf("batch get package ids failed, err: %s", err.Error()) return } for _, id := range packageIDs { ctx.Args.EventExecutor.Post(evt.NewCleanPinned(event.NewCleanPinned(id))) } // 如果结果的长度小于预期的长度,则认为已经查询了所有,下次从头再来 if len(packageIDs) < CheckPackageBatchSize { e.lastCheckStart = 0 log.Debugf("all package clean pinned, next time will start check at offset 0") } else { e.lastCheckStart += CheckPackageBatchSize } }