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.

mount.go 2.9 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. package cmd
  2. import (
  3. "fmt"
  4. "os"
  5. "time"
  6. "github.com/spf13/cobra"
  7. "gitlink.org.cn/cloudream/common/pkgs/logger"
  8. "gitlink.org.cn/cloudream/storage/client2/internal/config"
  9. "gitlink.org.cn/cloudream/storage/client2/internal/mount"
  10. mntcfg "gitlink.org.cn/cloudream/storage/client2/internal/mount/config"
  11. stgglb "gitlink.org.cn/cloudream/storage/common/globals"
  12. "gitlink.org.cn/cloudream/storage/common/pkgs/connectivity"
  13. "gitlink.org.cn/cloudream/storage/common/pkgs/db2"
  14. "gitlink.org.cn/cloudream/storage/common/pkgs/downloader"
  15. "gitlink.org.cn/cloudream/storage/common/pkgs/downloader/strategy"
  16. agtrpc "gitlink.org.cn/cloudream/storage/common/pkgs/grpc/agent"
  17. "gitlink.org.cn/cloudream/storage/common/pkgs/metacache"
  18. "gitlink.org.cn/cloudream/storage/common/pkgs/storage/agtpool"
  19. )
  20. func init() {
  21. var configPath string
  22. cmd := &cobra.Command{
  23. Use: "mount",
  24. Args: cobra.ExactArgs(1),
  25. Run: func(cmd *cobra.Command, args []string) {
  26. mountCmd(args[0], configPath)
  27. },
  28. }
  29. cmd.Flags().StringVarP(&configPath, "config", "c", "", "path to config file")
  30. RootCmd.AddCommand(cmd)
  31. }
  32. func mountCmd(mountPoint string, configPath string) {
  33. err := config.Init(configPath)
  34. if err != nil {
  35. fmt.Printf("init config failed, err: %s", err.Error())
  36. os.Exit(1)
  37. }
  38. err = logger.Init(&config.Cfg().Logger)
  39. if err != nil {
  40. fmt.Printf("init logger failed, err: %s", err.Error())
  41. os.Exit(1)
  42. }
  43. stgglb.InitLocal(&config.Cfg().Local)
  44. stgglb.InitMQPool(config.Cfg().RabbitMQ)
  45. stgglb.InitAgentRPCPool(&agtrpc.PoolConfig{})
  46. stgglb.Stats.SetupHubStorageTransfer(*config.Cfg().Local.HubID)
  47. stgglb.Stats.SetupHubTransfer(*config.Cfg().Local.HubID)
  48. // 初始化存储服务管理器
  49. stgAgts := agtpool.NewPool()
  50. // 启动网络连通性检测,并就地检测一次
  51. conCol := connectivity.NewCollector(&config.Cfg().Connectivity, nil)
  52. // conCol.CollectInPlace()
  53. // 初始化元数据缓存服务
  54. metacacheHost := metacache.NewHost()
  55. go metacacheHost.Serve()
  56. stgMeta := metacacheHost.AddStorageMeta()
  57. hubMeta := metacacheHost.AddHubMeta()
  58. conMeta := metacacheHost.AddConnectivity()
  59. // 初始化下载策略选择器
  60. strgSel := strategy.NewSelector(config.Cfg().DownloadStrategy, stgMeta, hubMeta, conMeta)
  61. // 初始化下载器
  62. dlder := downloader.NewDownloader(config.Cfg().Downloader, &conCol, stgAgts, strgSel)
  63. db, err := db2.NewDB(&config.Cfg().DB)
  64. if err != nil {
  65. logger.Fatalf("new db2 failed, err: %s", err.Error())
  66. }
  67. mnt := mount.NewMount(&mntcfg.Config{
  68. CacheDir: "./cache",
  69. MountPoint: mountPoint,
  70. AttrTimeout: time.Second * 5,
  71. }, db, &dlder)
  72. ch := mnt.Start()
  73. for {
  74. evt, err := ch.Receive()
  75. if err != nil {
  76. break
  77. }
  78. switch e := evt.(type) {
  79. case mount.MountingFailedEvent:
  80. fmt.Println("mounting failed:", e.Err)
  81. return
  82. case mount.MountExitEvent:
  83. fmt.Printf("mount exit\n")
  84. return
  85. }
  86. }
  87. }

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