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.

test.go 7.2 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. package cmdline
  2. import (
  3. "context"
  4. "fmt"
  5. "io"
  6. "github.com/spf13/cobra"
  7. "gitlink.org.cn/cloudream/common/pkgs/future"
  8. "gitlink.org.cn/cloudream/common/pkgs/ioswitch/exec"
  9. cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
  10. stgglb "gitlink.org.cn/cloudream/storage/common/globals"
  11. "gitlink.org.cn/cloudream/storage/common/pkgs/ioswitch2"
  12. "gitlink.org.cn/cloudream/storage/common/pkgs/ioswitch2/parser"
  13. "gitlink.org.cn/cloudream/storage/common/pkgs/ioswitchlrc"
  14. lrcparser "gitlink.org.cn/cloudream/storage/common/pkgs/ioswitchlrc/parser"
  15. coormq "gitlink.org.cn/cloudream/storage/common/pkgs/mq/coordinator"
  16. )
  17. func init() {
  18. rootCmd.AddCommand(&cobra.Command{
  19. Use: "test2",
  20. Short: "test2",
  21. // Args: cobra.ExactArgs(1),
  22. Run: func(cmd *cobra.Command, args []string) {
  23. // cmdCtx := GetCmdCtx(cmd)
  24. coorCli, err := stgglb.CoordinatorMQPool.Acquire()
  25. if err != nil {
  26. panic(err)
  27. }
  28. defer stgglb.CoordinatorMQPool.Release(coorCli)
  29. nodes, err := coorCli.GetNodes(coormq.NewGetNodes([]cdssdk.NodeID{1, 2}))
  30. if err != nil {
  31. panic(err)
  32. }
  33. ft := ioswitch2.NewFromTo()
  34. ft.AddFrom(ioswitch2.NewFromNode("Qmf412jQZiuVUtdgnB36FXFX7xg5V6KEbSJ4dpQuhkLyfD", &nodes.Nodes[0], -1))
  35. ft.AddTo(ioswitch2.NewToNode(nodes.Nodes[1], -1, "asd"))
  36. le := int64(3)
  37. toExec, hd := ioswitch2.NewToDriverWithRange(-1, exec.Range{Offset: 5, Length: &le})
  38. ft.AddTo(toExec)
  39. ft.AddTo(ioswitch2.NewToNode(nodes.Nodes[1], 0, "0"))
  40. ft.AddTo(ioswitch2.NewToNode(nodes.Nodes[1], 1, "1"))
  41. ft.AddTo(ioswitch2.NewToNode(nodes.Nodes[1], 2, "2"))
  42. // ft.AddFrom(ioswitch2.NewFromNode("QmS2s8GRYHEurXL7V1zUtKvf2H1BGcQc5NN1T1hiSnWvbd", &nodes.Nodes[0], 1))
  43. // ft.AddFrom(ioswitch2.NewFromNode("QmUgUEUMzdnjPNx6xu9PDGXpSyXTk8wzPWvyYZ9zasE1WW", &nodes.Nodes[1], 2))
  44. // le := int64(5)
  45. // toExec, hd := ioswitch2.NewToDriverWithRange(-1, exec.Range{Offset: 3, Length: &le})
  46. // toExec, hd := plans.NewToExecutorWithRange(1, plans.Range{Offset: 0, Length: nil})
  47. // toExec2, hd2 := plans.NewToExecutorWithRange(2, plans.Range{Offset: 0, Length: nil})
  48. // ft.AddTo(toExec)
  49. // ft.AddTo(toExec2)
  50. // fromExec, hd := plans.NewFromExecutor(-1)
  51. // ft.AddFrom(fromExec)
  52. // ft.AddTo(plans.NewToNode(nodes.Nodes[1], -1, "asd"))
  53. parser := parser.NewParser(cdssdk.DefaultECRedundancy)
  54. plans := exec.NewPlanBuilder()
  55. err = parser.Parse(ft, plans)
  56. if err != nil {
  57. panic(err)
  58. }
  59. exec := plans.Execute()
  60. fut := future.NewSetVoid()
  61. go func() {
  62. mp, err := exec.Wait(context.Background())
  63. if err != nil {
  64. panic(err)
  65. }
  66. fmt.Printf("mp: %+v\n", mp)
  67. fut.SetVoid()
  68. }()
  69. go func() {
  70. // exec.BeginWrite(io.NopCloser(bytes.NewBuffer([]byte("hello world"))), hd)
  71. // if err != nil {
  72. // panic(err)
  73. // }
  74. str, err := exec.BeginRead(hd)
  75. if err != nil {
  76. panic(err)
  77. }
  78. defer str.Close()
  79. data, err := io.ReadAll(str)
  80. if err != nil && err != io.EOF {
  81. panic(err)
  82. }
  83. fmt.Printf("data: %v(%v)\n", string(data), len(data))
  84. }()
  85. fut.Wait(context.TODO())
  86. },
  87. })
  88. // rootCmd.AddCommand(&cobra.Command{
  89. // Use: "test",
  90. // Short: "test",
  91. // // Args: cobra.ExactArgs(1),
  92. // Run: func(cmd *cobra.Command, args []string) {
  93. // cmdCtx := GetCmdCtx(cmd)
  94. // file, _ := cmdCtx.Cmdline.Svc.ObjectSvc().Download(1, downloader.DownloadReqeust{
  95. // ObjectID: 27379,
  96. // Length: -1,
  97. // })
  98. // data, _ := io.ReadAll(file.File)
  99. // fmt.Printf("data: %v(%v)\n", string(data), len(data))
  100. // },
  101. // })
  102. rootCmd.AddCommand(&cobra.Command{
  103. Use: "test3",
  104. Short: "test3",
  105. // Args: cobra.ExactArgs(1),
  106. Run: func(cmd *cobra.Command, args []string) {
  107. // cmdCtx := GetCmdCtx(cmd)
  108. coorCli, err := stgglb.CoordinatorMQPool.Acquire()
  109. if err != nil {
  110. panic(err)
  111. }
  112. defer stgglb.CoordinatorMQPool.Release(coorCli)
  113. nodes, err := coorCli.GetNodes(coormq.NewGetNodes([]cdssdk.NodeID{1, 2}))
  114. if err != nil {
  115. panic(err)
  116. }
  117. red := cdssdk.DefaultLRCRedundancy
  118. var toes []ioswitchlrc.To
  119. for i := 0; i < red.N; i++ {
  120. toes = append(toes, ioswitchlrc.NewToNode(nodes.Nodes[i%2], i, fmt.Sprintf("%d", i)))
  121. }
  122. plans := exec.NewPlanBuilder()
  123. err = lrcparser.Encode(ioswitchlrc.NewFromNode("QmNspjDLxQbAsuh37jRXKvLWHE2f7JpqY4HEJ8x7Jgbzqa", &nodes.Nodes[0], -1), toes, plans)
  124. if err != nil {
  125. panic(err)
  126. // return nil, fmt.Errorf("parsing plan: %w", err)
  127. }
  128. ioRet, err := plans.Execute().Wait(context.TODO())
  129. if err != nil {
  130. panic(err)
  131. // return nil, fmt.Errorf("executing io plan: %w", err)
  132. }
  133. fmt.Printf("ioRet: %v\n", ioRet)
  134. },
  135. })
  136. rootCmd.AddCommand(&cobra.Command{
  137. Use: "test",
  138. Short: "test",
  139. // Args: cobra.ExactArgs(1),
  140. Run: func(cmd *cobra.Command, args []string) {
  141. // cmdCtx := GetCmdCtx(cmd)
  142. coorCli, err := stgglb.CoordinatorMQPool.Acquire()
  143. if err != nil {
  144. panic(err)
  145. }
  146. defer stgglb.CoordinatorMQPool.Release(coorCli)
  147. nodes, err := coorCli.GetNodes(coormq.NewGetNodes([]cdssdk.NodeID{1, 2}))
  148. if err != nil {
  149. panic(err)
  150. }
  151. // red := cdssdk.DefaultLRCRedundancy
  152. plans := exec.NewPlanBuilder()
  153. err = lrcparser.ReconstructGroup([]ioswitchlrc.From{
  154. ioswitchlrc.NewFromNode("QmVAZzVQEvnvTvzSz2SvpziAcDSQ8aYCoTyGrZNuV8raEQ", &nodes.Nodes[1], 0),
  155. ioswitchlrc.NewFromNode("QmVAZzVQEvnvTvzSz2SvpziAcDSQ8aYCoTyGrZNuV8raEQ", &nodes.Nodes[1], 1),
  156. }, []ioswitchlrc.To{
  157. ioswitchlrc.NewToNode(nodes.Nodes[1], 3, "3"),
  158. }, plans)
  159. if err != nil {
  160. panic(err)
  161. // return nil, fmt.Errorf("parsing plan: %w", err)
  162. }
  163. ioRet, err := plans.Execute().Wait(context.TODO())
  164. if err != nil {
  165. panic(err)
  166. // return nil, fmt.Errorf("executing io plan: %w", err)
  167. }
  168. fmt.Printf("ioRet: %v\n", ioRet)
  169. },
  170. })
  171. rootCmd.AddCommand(&cobra.Command{
  172. Use: "test4",
  173. Short: "test4",
  174. // Args: cobra.ExactArgs(1),
  175. Run: func(cmd *cobra.Command, args []string) {
  176. // cmdCtx := GetCmdCtx(cmd)
  177. coorCli, err := stgglb.CoordinatorMQPool.Acquire()
  178. if err != nil {
  179. panic(err)
  180. }
  181. defer stgglb.CoordinatorMQPool.Release(coorCli)
  182. nodes, err := coorCli.GetNodes(coormq.NewGetNodes([]cdssdk.NodeID{1, 2}))
  183. if err != nil {
  184. panic(err)
  185. }
  186. // red := cdssdk.DefaultLRCRedundancy
  187. plans := exec.NewPlanBuilder()
  188. le := int64(1293)
  189. err = lrcparser.ReconstructAny([]ioswitchlrc.From{
  190. ioswitchlrc.NewFromNode("QmVAZzVQEvnvTvzSz2SvpziAcDSQ8aYCoTyGrZNuV8raEQ", &nodes.Nodes[0], 0),
  191. ioswitchlrc.NewFromNode("QmQBKncEDqxw3BrGr3th3gS3jUC2fizGz1w29ZxxrrKfNv", &nodes.Nodes[0], 2),
  192. }, []ioswitchlrc.To{
  193. ioswitchlrc.NewToNodeWithRange(nodes.Nodes[1], -1, "-1", exec.Range{0, &le}),
  194. ioswitchlrc.NewToNode(nodes.Nodes[1], 0, "0"),
  195. ioswitchlrc.NewToNode(nodes.Nodes[1], 1, "1"),
  196. ioswitchlrc.NewToNode(nodes.Nodes[1], 2, "2"),
  197. ioswitchlrc.NewToNode(nodes.Nodes[1], 3, "3"),
  198. }, plans)
  199. if err != nil {
  200. panic(err)
  201. // return nil, fmt.Errorf("parsing plan: %w", err)
  202. }
  203. ioRet, err := plans.Execute().Wait(context.TODO())
  204. if err != nil {
  205. panic(err)
  206. // return nil, fmt.Errorf("executing io plan: %w", err)
  207. }
  208. fmt.Printf("ioRet: %v\n", ioRet)
  209. },
  210. })
  211. }

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