| @@ -57,6 +57,10 @@ func (p *AccessStat) Start() *sync2.UnboundChannel[AccessStatEvent] { | |||||
| p.stats = nil | p.stats = nil | ||||
| p.lock.Unlock() | p.lock.Unlock() | ||||
| if len(st) == 0 { | |||||
| continue | |||||
| } | |||||
| err := coorCli.AddAccessStat(coormq.ReqAddAccessStat(st)) | err := coorCli.AddAccessStat(coormq.ReqAddAccessStat(st)) | ||||
| if err != nil { | if err != nil { | ||||
| logger.Errorf("add all package access stat counter: %v", err) | logger.Errorf("add all package access stat counter: %v", err) | ||||
| @@ -29,6 +29,10 @@ func (db *ObjectDB) GetByID(ctx SQLContext, objectID cdssdk.ObjectID) (model.Obj | |||||
| } | } | ||||
| func (db *ObjectDB) BatchTestObjectID(ctx SQLContext, objectIDs []cdssdk.ObjectID) (map[cdssdk.ObjectID]bool, error) { | func (db *ObjectDB) BatchTestObjectID(ctx SQLContext, objectIDs []cdssdk.ObjectID) (map[cdssdk.ObjectID]bool, error) { | ||||
| if len(objectIDs) == 0 { | |||||
| return make(map[cdssdk.ObjectID]bool), nil | |||||
| } | |||||
| stmt, args, err := sqlx.In("select ObjectID from Object where ObjectID in (?)", lo.Uniq(objectIDs)) | stmt, args, err := sqlx.In("select ObjectID from Object where ObjectID in (?)", lo.Uniq(objectIDs)) | ||||
| if err != nil { | if err != nil { | ||||
| return nil, err | return nil, err | ||||
| @@ -27,15 +27,38 @@ func (*ObjectAccessStatDB) GetByObjectID(ctx SQLContext, objID cdssdk.ObjectID) | |||||
| return ret, err | return ret, err | ||||
| } | } | ||||
| func (*ObjectAccessStatDB) BatchGetByObjectID(ctx SQLContext, objIDs []cdssdk.ObjectID) ([]model.ObjectAccessStat, error) { | |||||
| if len(objIDs) == 0 { | |||||
| return nil, nil | |||||
| } | |||||
| var ret []model.ObjectAccessStat | |||||
| stmt, args, err := sqlx.In("select * from ObjectAccessStat where ObjectID in (?)", objIDs) | |||||
| if err != nil { | |||||
| return ret, err | |||||
| } | |||||
| err = sqlx.Select(ctx, &ret, stmt, args...) | |||||
| return ret, err | |||||
| } | |||||
| func (*ObjectAccessStatDB) BatchAddCounter(ctx SQLContext, entries []coormq.AddAccessStatEntry) error { | func (*ObjectAccessStatDB) BatchAddCounter(ctx SQLContext, entries []coormq.AddAccessStatEntry) error { | ||||
| if len(entries) == 0 { | |||||
| return nil | |||||
| } | |||||
| sql := "insert into ObjectAccessStat(ObjectID, NodeID, Counter, Amount) " + | sql := "insert into ObjectAccessStat(ObjectID, NodeID, Counter, Amount) " + | ||||
| "values(:ObjectID, :NodeID, :Counter, 0) as new" + | |||||
| "on duplicate key update Counter=Counter+new.Counter" | |||||
| " values(:ObjectID, :NodeID, :Counter, 0) as new" + | |||||
| " on duplicate key update ObjectAccessStat.Counter=ObjectAccessStat.Counter+new.Counter" | |||||
| err := BatchNamedExec(ctx, sql, 4, entries, nil) | err := BatchNamedExec(ctx, sql, 4, entries, nil) | ||||
| return err | return err | ||||
| } | } | ||||
| func (*ObjectAccessStatDB) BatchUpdateAmountInPackage(ctx SQLContext, pkgIDs []cdssdk.PackageID, historyWeight float64) error { | func (*ObjectAccessStatDB) BatchUpdateAmountInPackage(ctx SQLContext, pkgIDs []cdssdk.PackageID, historyWeight float64) error { | ||||
| if len(pkgIDs) == 0 { | |||||
| return nil | |||||
| } | |||||
| stmt, args, err := sqlx.In("update ObjectAccessStat inner join Object"+ | stmt, args, err := sqlx.In("update ObjectAccessStat inner join Object"+ | ||||
| " on ObjectAccessStat.ObjectID = Object.ObjectID"+ | " on ObjectAccessStat.ObjectID = Object.ObjectID"+ | ||||
| " set Amount=Amount*?+Counter*(1-?), Counter = 0"+ | " set Amount=Amount*?+Counter*(1-?), Counter = 0"+ | ||||
| @@ -64,6 +87,10 @@ func (*ObjectAccessStatDB) DeleteByObjectID(ctx SQLContext, objID cdssdk.ObjectI | |||||
| } | } | ||||
| func (*ObjectAccessStatDB) BatchDeleteByObjectID(ctx SQLContext, objIDs []cdssdk.ObjectID) error { | func (*ObjectAccessStatDB) BatchDeleteByObjectID(ctx SQLContext, objIDs []cdssdk.ObjectID) error { | ||||
| if len(objIDs) == 0 { | |||||
| return nil | |||||
| } | |||||
| stmt, args, err := sqlx.In("delete from ObjectAccessStat where ObjectID in (?)", objIDs) | stmt, args, err := sqlx.In("delete from ObjectAccessStat where ObjectID in (?)", objIDs) | ||||
| if err != nil { | if err != nil { | ||||
| return err | return err | ||||
| @@ -33,6 +33,10 @@ func (db *PackageDB) GetByName(ctx SQLContext, bucketID cdssdk.BucketID, name st | |||||
| } | } | ||||
| func (db *PackageDB) BatchTestPackageID(ctx SQLContext, pkgIDs []cdssdk.PackageID) (map[cdssdk.PackageID]bool, error) { | func (db *PackageDB) BatchTestPackageID(ctx SQLContext, pkgIDs []cdssdk.PackageID) (map[cdssdk.PackageID]bool, error) { | ||||
| if len(pkgIDs) == 0 { | |||||
| return make(map[cdssdk.PackageID]bool), nil | |||||
| } | |||||
| stmt, args, err := sqlx.In("select PackageID from Package where PackageID in (?)", lo.Uniq(pkgIDs)) | stmt, args, err := sqlx.In("select PackageID from Package where PackageID in (?)", lo.Uniq(pkgIDs)) | ||||
| if err != nil { | if err != nil { | ||||
| return nil, err | return nil, err | ||||
| @@ -27,7 +27,26 @@ func (*PackageAccessStatDB) GetByPackageID(ctx SQLContext, pkgID cdssdk.PackageI | |||||
| return ret, err | return ret, err | ||||
| } | } | ||||
| func (*PackageAccessStatDB) BatchGetByPackageID(ctx SQLContext, pkgIDs []cdssdk.PackageID) ([]model.PackageAccessStat, error) { | |||||
| if len(pkgIDs) == 0 { | |||||
| return nil, nil | |||||
| } | |||||
| var ret []model.PackageAccessStat | |||||
| stmt, args, err := sqlx.In("select * from PackageAccessStat where PackageID in (?)", pkgIDs) | |||||
| if err != nil { | |||||
| return nil, err | |||||
| } | |||||
| err = sqlx.Select(ctx, &ret, stmt, args...) | |||||
| return ret, err | |||||
| } | |||||
| func (*PackageAccessStatDB) BatchAddCounter(ctx SQLContext, entries []coormq.AddAccessStatEntry) error { | func (*PackageAccessStatDB) BatchAddCounter(ctx SQLContext, entries []coormq.AddAccessStatEntry) error { | ||||
| if len(entries) == 0 { | |||||
| return nil | |||||
| } | |||||
| sql := "insert into PackageAccessStat(PackageID, NodeID, Counter, Amount)" + | sql := "insert into PackageAccessStat(PackageID, NodeID, Counter, Amount)" + | ||||
| " values(:PackageID, :NodeID, :Counter, 0) as new" + | " values(:PackageID, :NodeID, :Counter, 0) as new" + | ||||
| " on duplicate key update Counter=Counter+new.Counter" | " on duplicate key update Counter=Counter+new.Counter" | ||||
| @@ -36,6 +55,10 @@ func (*PackageAccessStatDB) BatchAddCounter(ctx SQLContext, entries []coormq.Add | |||||
| } | } | ||||
| func (*PackageAccessStatDB) BatchUpdateAmount(ctx SQLContext, pkgIDs []cdssdk.PackageID, historyWeight float64) error { | func (*PackageAccessStatDB) BatchUpdateAmount(ctx SQLContext, pkgIDs []cdssdk.PackageID, historyWeight float64) error { | ||||
| if len(pkgIDs) == 0 { | |||||
| return nil | |||||
| } | |||||
| stmt, args, err := sqlx.In("update PackageAccessStat set Amount=Amount*?+Counter*(1-?), Counter = 0 where PackageID in (?)", historyWeight, historyWeight, pkgIDs) | stmt, args, err := sqlx.In("update PackageAccessStat set Amount=Amount*?+Counter*(1-?), Counter = 0 where PackageID in (?)", historyWeight, historyWeight, pkgIDs) | ||||
| if err != nil { | if err != nil { | ||||
| return err | return err | ||||
| @@ -40,7 +40,7 @@ func (t *UpdatePackageAccessStatAmount) TryMerge(other Event) bool { | |||||
| } | } | ||||
| func (t *UpdatePackageAccessStatAmount) Execute(execCtx ExecuteContext) { | func (t *UpdatePackageAccessStatAmount) Execute(execCtx ExecuteContext) { | ||||
| log := logger.WithType[AgentCacheGC]("Event") | |||||
| log := logger.WithType[UpdatePackageAccessStatAmount]("Event") | |||||
| startTime := time.Now() | startTime := time.Now() | ||||
| log.Debugf("begin with %v", logger.FormatStruct(t.UpdatePackageAccessStatAmount)) | log.Debugf("begin with %v", logger.FormatStruct(t.UpdatePackageAccessStatAmount)) | ||||
| defer func() { | defer func() { | ||||