package tickevent import ( "github.com/samber/lo" "gitlink.org.cn/cloudream/common/utils/logger" mysql "gitlink.org.cn/cloudream/db/sql" "gitlink.org.cn/cloudream/scanner/internal/event" ) const CHECK_OBJECT_BATCH_SIZE = 100 type BatchCheckAllObject struct { lastCheckStart int } func NewBatchCheckAllObject() *BatchCheckAllObject { return &BatchCheckAllObject{} } func (e *BatchCheckAllObject) Execute(ctx ExecuteContext) { objectIDs, err := mysql.Object.BatchGetAllObjectIDs(ctx.Args.DB.SQLCtx(), e.lastCheckStart, CHECK_OBJECT_BATCH_SIZE) if err != nil { logger.Warnf("batch get object ids failed, err: %s", err.Error()) return } // TODO 将ID字段换成int64类型 ctx.Args.EventExecutor.Post(event.NewCheckObject(lo.Map(objectIDs, func(id int64, index int) int { return int(id) }))) // 如果结果的长度小于预期的长度,则认为已经查询了所有,下次从头再来 if len(objectIDs) < CHECK_OBJECT_BATCH_SIZE { e.lastCheckStart = 0 logger.Debugf("all object checked, next time will start check at 0") } else { e.lastCheckStart += CHECK_OBJECT_BATCH_SIZE } }