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.3 kB

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

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