84 lines
2.1 KiB
Go
84 lines
2.1 KiB
Go
package event
|
|
|
|
import (
|
|
"database/sql"
|
|
|
|
"gitlink.org.cn/cloudream/common/pkgs/logger"
|
|
cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
|
|
"gitlink.org.cn/cloudream/storage/common/consts"
|
|
"gitlink.org.cn/cloudream/storage/common/pkgs/distlock/reqbuilder"
|
|
scevt "gitlink.org.cn/cloudream/storage/common/pkgs/mq/scanner/event"
|
|
)
|
|
|
|
type CheckCache struct {
|
|
*scevt.CheckCache
|
|
}
|
|
|
|
func NewCheckCache(nodeID cdssdk.NodeID) *CheckCache {
|
|
return &CheckCache{
|
|
CheckCache: scevt.NewCheckCache(nodeID),
|
|
}
|
|
}
|
|
|
|
func (t *CheckCache) TryMerge(other Event) bool {
|
|
event, ok := other.(*CheckCache)
|
|
if !ok {
|
|
return false
|
|
}
|
|
if event.NodeID != t.NodeID {
|
|
return false
|
|
}
|
|
|
|
return true
|
|
}
|
|
|
|
func (t *CheckCache) Execute(execCtx ExecuteContext) {
|
|
log := logger.WithType[AgentCheckStorage]("Event")
|
|
log.Debugf("begin with %v", logger.FormatStruct(t.CheckCache))
|
|
defer log.Debugf("end")
|
|
|
|
mutex, err := reqbuilder.NewBuilder().
|
|
Metadata().
|
|
// 查询节点状态
|
|
Node().ReadOne(t.NodeID).
|
|
// 删除节点所有的Cache记录
|
|
Cache().WriteAny().
|
|
MutexLock(execCtx.Args.DistLock)
|
|
if err != nil {
|
|
log.Warnf("acquire locks failed, err: %s", err.Error())
|
|
return
|
|
}
|
|
defer mutex.Unlock()
|
|
|
|
node, err := execCtx.Args.DB.Node().GetByID(execCtx.Args.DB.SQLCtx(), t.NodeID)
|
|
if err == sql.ErrNoRows {
|
|
return
|
|
}
|
|
if err != nil {
|
|
log.WithField("NodeID", t.NodeID).Warnf("get node failed, err: %s", err.Error())
|
|
return
|
|
}
|
|
|
|
if node.State != consts.NodeStateUnavailable {
|
|
return
|
|
}
|
|
/*
|
|
caches, err := execCtx.Args.DB.Cache().GetNodeCaches(execCtx.Args.DB.SQLCtx(), t.NodeID)
|
|
if err != nil {
|
|
log.WithField("NodeID", t.NodeID).Warnf("get node caches failed, err: %s", err.Error())
|
|
return
|
|
}
|
|
|
|
err = execCtx.Args.DB.Cache().DeleteNodeAll(execCtx.Args.DB.SQLCtx(), t.NodeID)
|
|
if err != nil {
|
|
log.WithField("NodeID", t.NodeID).Warnf("delete node all caches failed, err: %s", err.Error())
|
|
return
|
|
}
|
|
*/
|
|
//execCtx.Executor.Post(NewCheckRepCount(lo.Map(caches, func(ch model.Cache, index int) string { return ch.FileHash })))
|
|
}
|
|
|
|
func init() {
|
|
RegisterMessageConvertor(func(msg *scevt.CheckCache) Event { return NewCheckCache(msg.NodeID) })
|
|
}
|