You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

check_cache.go 2.2 kB

2 years ago
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package event
  2. import (
  3. "database/sql"
  4. "gitlink.org.cn/cloudream/common/pkgs/logger"
  5. cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
  6. "gitlink.org.cn/cloudream/storage/common/consts"
  7. "gitlink.org.cn/cloudream/storage/common/pkgs/distlock/reqbuilder"
  8. scevt "gitlink.org.cn/cloudream/storage/common/pkgs/mq/scanner/event"
  9. )
  10. type CheckCache struct {
  11. *scevt.CheckCache
  12. }
  13. func NewCheckCache(nodeID cdssdk.NodeID) *CheckCache {
  14. return &CheckCache{
  15. CheckCache: scevt.NewCheckCache(nodeID),
  16. }
  17. }
  18. func (t *CheckCache) TryMerge(other Event) bool {
  19. event, ok := other.(*CheckCache)
  20. if !ok {
  21. return false
  22. }
  23. if event.NodeID != t.NodeID {
  24. return false
  25. }
  26. return true
  27. }
  28. func (t *CheckCache) Execute(execCtx ExecuteContext) {
  29. log := logger.WithType[AgentCheckStorage]("Event")
  30. log.Debugf("begin with %v", logger.FormatStruct(t.CheckCache))
  31. defer log.Debugf("end")
  32. mutex, err := reqbuilder.NewBuilder().
  33. Metadata().
  34. // 查询节点状态
  35. Node().ReadOne(t.NodeID).
  36. // 删除节点所有的Cache记录
  37. Cache().WriteAny().
  38. MutexLock(execCtx.Args.DistLock)
  39. if err != nil {
  40. log.Warnf("acquire locks failed, err: %s", err.Error())
  41. return
  42. }
  43. defer mutex.Unlock()
  44. node, err := execCtx.Args.DB.Node().GetByID(execCtx.Args.DB.SQLCtx(), t.NodeID)
  45. if err == sql.ErrNoRows {
  46. return
  47. }
  48. if err != nil {
  49. log.WithField("NodeID", t.NodeID).Warnf("get node failed, err: %s", err.Error())
  50. return
  51. }
  52. if node.State != consts.NodeStateUnavailable {
  53. return
  54. }
  55. /*
  56. caches, err := execCtx.Args.DB.Cache().GetNodeCaches(execCtx.Args.DB.SQLCtx(), t.NodeID)
  57. if err != nil {
  58. log.WithField("NodeID", t.NodeID).Warnf("get node caches failed, err: %s", err.Error())
  59. return
  60. }
  61. err = execCtx.Args.DB.Cache().DeleteNodeAll(execCtx.Args.DB.SQLCtx(), t.NodeID)
  62. if err != nil {
  63. log.WithField("NodeID", t.NodeID).Warnf("delete node all caches failed, err: %s", err.Error())
  64. return
  65. }
  66. */
  67. //execCtx.Executor.Post(NewCheckRepCount(lo.Map(caches, func(ch model.Cache, index int) string { return ch.FileHash })))
  68. }
  69. func init() {
  70. RegisterMessageConvertor(func(msg *scevt.CheckCache) Event { return NewCheckCache(msg.NodeID) })
  71. }

本项目旨在将云际存储公共基础设施化,使个人及企业可低门槛使用高效的云际存储服务(安装开箱即用云际存储客户端即可,无需关注其他组件的部署),同时支持用户灵活便捷定制云际存储的功能细节。