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 10 kB

11 months ago
11 months ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291
  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. "gitlink.org.cn/cloudream/common/utils/math2"
  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. coormq "gitlink.org.cn/cloudream/storage/common/pkgs/mq/coordinator"
  15. )
  16. func init() {
  17. rootCmd.AddCommand(&cobra.Command{
  18. Use: "test",
  19. Short: "test",
  20. Run: func(cmd *cobra.Command, args []string) {
  21. coorCli, err := stgglb.CoordinatorMQPool.Acquire()
  22. if err != nil {
  23. panic(err)
  24. }
  25. defer stgglb.CoordinatorMQPool.Release(coorCli)
  26. stgs, err := coorCli.GetStorageDetails(coormq.ReqGetStorageDetails([]cdssdk.StorageID{1, 2, 3, 4, 5}))
  27. if err != nil {
  28. panic(err)
  29. }
  30. ft := ioswitch2.NewFromTo()
  31. ft.ECParam = cdssdk.NewECRedundancy(3, 6, 1024*1024*5)
  32. // ft.SegmentParam = cdssdk.NewSegmentRedundancy(1024*100*3, 3)
  33. ft.AddFrom(ioswitch2.NewFromShardstore("FullC036CBB7553A909F8B8877D4461924307F27ECB66CFF928EEEAFD569C3887E29", *stgs.Storages[3].MasterHub, *stgs.Storages[3], ioswitch2.ECStream(2)))
  34. ft.AddFrom(ioswitch2.NewFromShardstore("Full543F38D9F524238AC0239263AA0DD4B4328763818EA98A7A5F72E59748FDA27A", *stgs.Storages[3].MasterHub, *stgs.Storages[3], ioswitch2.ECStream(3)))
  35. ft.AddFrom(ioswitch2.NewFromShardstore("Full50B464DB2FDDC29D0380D9FFAB6D944FAF5C7624955D757939280590F01F3ECD", *stgs.Storages[3].MasterHub, *stgs.Storages[3], ioswitch2.ECStream(4)))
  36. // ft.AddFrom(ioswitch2.NewFromShardstore("Full4D142C458F2399175232D5636235B09A84664D60869E925EB20FFBE931045BDD", *stgs.Storages[1].MasterHub, *stgs.Storages[1], ioswitch2.SegmentStream(2)))
  37. // ft.AddFrom(ioswitch2.NewFromShardstore("Full03B5CF4B57251D7BB4308FE5C81AF5A21E2B28994CC7CB1FB37698DAE271DC22", *stgs.Storages[2].MasterHub, *stgs.Storages[2], ioswitch2.RawStream()))
  38. // ft.AddTo(ioswitch2.NewToShardStore(*stgs.Storages[3].MasterHub, *stgs.Storages[3], ioswitch2.RawStream(), "0"))
  39. // ft.AddTo(ioswitch2.NewToShardStore(*stgs.Storages[1].MasterHub, stgs.Storages[1].Storage, ioswitch2.SegmentStream(0), "0"))
  40. // ft.AddTo(ioswitch2.NewToShardStoreWithRange(*stgs.Storages[1].MasterHub, *stgs.Storages[1], ioswitch2.SegmentStream(1), "1", math2.Range{Offset: 1}))
  41. ft.AddTo(ioswitch2.NewToShardStore(*stgs.Storages[4].MasterHub, *stgs.Storages[4], ioswitch2.ECStream(0), "0"))
  42. ft.AddTo(ioswitch2.NewToShardStore(*stgs.Storages[4].MasterHub, *stgs.Storages[4], ioswitch2.ECStream(1), "1"))
  43. ft.AddTo(ioswitch2.NewToShardStore(*stgs.Storages[4].MasterHub, *stgs.Storages[4], ioswitch2.ECStream(5), "2"))
  44. plans := exec.NewPlanBuilder()
  45. err = parser.Parse(ft, plans)
  46. if err != nil {
  47. panic(err)
  48. }
  49. fmt.Printf("plans: %v\n", plans)
  50. exec := plans.Execute(exec.NewExecContext())
  51. fut := future.NewSetVoid()
  52. go func() {
  53. mp, err := exec.Wait(context.Background())
  54. if err != nil {
  55. panic(err)
  56. }
  57. fmt.Printf("0: %v, 1: %v, 2: %v\n", mp["0"], mp["1"], mp["2"])
  58. fut.SetVoid()
  59. }()
  60. fut.Wait(context.TODO())
  61. },
  62. })
  63. rootCmd.AddCommand(&cobra.Command{
  64. Use: "test32",
  65. Short: "test32",
  66. Run: func(cmd *cobra.Command, args []string) {
  67. coorCli, err := stgglb.CoordinatorMQPool.Acquire()
  68. if err != nil {
  69. panic(err)
  70. }
  71. defer stgglb.CoordinatorMQPool.Release(coorCli)
  72. stgs, err := coorCli.GetStorageDetails(coormq.ReqGetStorageDetails([]cdssdk.StorageID{1, 2}))
  73. if err != nil {
  74. panic(err)
  75. }
  76. ft := ioswitch2.NewFromTo()
  77. ft.SegmentParam = cdssdk.NewSegmentRedundancy(1293, 3)
  78. ft.AddFrom(ioswitch2.NewFromShardstore("4E69A8B8CD9F42EDE371DA94458BADFB2308AFCA736AA393784A3D81F4746377", *stgs.Storages[0].MasterHub, *stgs.Storages[0], ioswitch2.RawStream()))
  79. // ft.AddTo(ioswitch2.NewToShardStore(*stgs.Storages[1].MasterHub, stgs.Storages[1].Storage, ioswitch2.SegmentStream(0), "0"))
  80. ft.AddTo(ioswitch2.NewToShardStoreWithRange(*stgs.Storages[1].MasterHub, *stgs.Storages[1], ioswitch2.SegmentStream(1), "1", math2.Range{Offset: 1}))
  81. ft.AddTo(ioswitch2.NewToShardStore(*stgs.Storages[1].MasterHub, *stgs.Storages[1], ioswitch2.SegmentStream(2), "2"))
  82. plans := exec.NewPlanBuilder()
  83. err = parser.Parse(ft, plans)
  84. if err != nil {
  85. panic(err)
  86. }
  87. fmt.Printf("plans: %v\n", plans)
  88. exec := plans.Execute(exec.NewExecContext())
  89. fut := future.NewSetVoid()
  90. go func() {
  91. mp, err := exec.Wait(context.Background())
  92. if err != nil {
  93. panic(err)
  94. }
  95. fmt.Printf("0: %v, 1: %v, 2: %v\n", mp["0"], mp["1"], mp["2"])
  96. fut.SetVoid()
  97. }()
  98. fut.Wait(context.TODO())
  99. },
  100. })
  101. rootCmd.AddCommand(&cobra.Command{
  102. Use: "test1",
  103. Short: "test1",
  104. Run: func(cmd *cobra.Command, args []string) {
  105. coorCli, err := stgglb.CoordinatorMQPool.Acquire()
  106. if err != nil {
  107. panic(err)
  108. }
  109. defer stgglb.CoordinatorMQPool.Release(coorCli)
  110. stgs, err := coorCli.GetStorageDetails(coormq.ReqGetStorageDetails([]cdssdk.StorageID{1, 2}))
  111. if err != nil {
  112. panic(err)
  113. }
  114. ft := ioswitch2.NewFromTo()
  115. ft.SegmentParam = cdssdk.NewSegmentRedundancy(1293, 3)
  116. ft.ECParam = &cdssdk.DefaultECRedundancy
  117. ft.AddFrom(ioswitch2.NewFromShardstore("22CC59CE3297F78F2D20DC1E33181B77F21E6782097C94E1664F99F129834069", *stgs.Storages[1].MasterHub, *stgs.Storages[1], ioswitch2.SegmentStream(0)))
  118. ft.AddFrom(ioswitch2.NewFromShardstore("5EAC20EB3EBC7B5FA176C5BD1C01041FB2A6D14C35D6A232CA83D7F1E4B01ADE", *stgs.Storages[1].MasterHub, *stgs.Storages[1], ioswitch2.SegmentStream(1)))
  119. ft.AddFrom(ioswitch2.NewFromShardstore("A9BC1802F37100C80C72A1D6E8F53C0E0B73F85F99153D8C78FB01CEC9D8D903", *stgs.Storages[1].MasterHub, *stgs.Storages[1], ioswitch2.SegmentStream(2)))
  120. toDrv, drvStr := ioswitch2.NewToDriverWithRange(ioswitch2.RawStream(), math2.NewRange(0, 1293))
  121. ft.AddTo(toDrv)
  122. ft.AddTo(ioswitch2.NewToShardStore(*stgs.Storages[0].MasterHub, *stgs.Storages[0], ioswitch2.ECStream(0), "EC0"))
  123. ft.AddTo(ioswitch2.NewToShardStore(*stgs.Storages[0].MasterHub, *stgs.Storages[0], ioswitch2.ECStream(1), "EC1"))
  124. ft.AddTo(ioswitch2.NewToShardStore(*stgs.Storages[0].MasterHub, *stgs.Storages[0], ioswitch2.ECStream(2), "EC2"))
  125. plans := exec.NewPlanBuilder()
  126. err = parser.Parse(ft, plans)
  127. if err != nil {
  128. panic(err)
  129. }
  130. fmt.Printf("plans: %v\n", plans)
  131. exec := plans.Execute(exec.NewExecContext())
  132. fut := future.NewSetVoid()
  133. go func() {
  134. mp, err := exec.Wait(context.Background())
  135. if err != nil {
  136. panic(err)
  137. }
  138. for k, v := range mp {
  139. fmt.Printf("%s: %v\n", k, v)
  140. }
  141. fut.SetVoid()
  142. }()
  143. go func() {
  144. str, err := exec.BeginRead(drvStr)
  145. if err != nil {
  146. panic(err)
  147. }
  148. data, err := io.ReadAll(str)
  149. if err != nil {
  150. panic(err)
  151. }
  152. fmt.Printf("read(%v): %s\n", len(data), string(data))
  153. }()
  154. fut.Wait(context.TODO())
  155. },
  156. })
  157. rootCmd.AddCommand(&cobra.Command{
  158. Use: "test4",
  159. Short: "test4",
  160. Run: func(cmd *cobra.Command, args []string) {
  161. coorCli, err := stgglb.CoordinatorMQPool.Acquire()
  162. if err != nil {
  163. panic(err)
  164. }
  165. defer stgglb.CoordinatorMQPool.Release(coorCli)
  166. stgs, err := coorCli.GetStorageDetails(coormq.ReqGetStorageDetails([]cdssdk.StorageID{1, 2}))
  167. if err != nil {
  168. panic(err)
  169. }
  170. ft := ioswitch2.NewFromTo()
  171. ft.ECParam = &cdssdk.DefaultECRedundancy
  172. ft.AddFrom(ioswitch2.NewFromShardstore("4E69A8B8CD9F42EDE371DA94458BADFB2308AFCA736AA393784A3D81F4746377", *stgs.Storages[1].MasterHub, *stgs.Storages[1], ioswitch2.RawStream()))
  173. ft.AddTo(ioswitch2.NewToShardStore(*stgs.Storages[0].MasterHub, *stgs.Storages[0], ioswitch2.ECStream(0), "EC0"))
  174. ft.AddTo(ioswitch2.NewToShardStore(*stgs.Storages[0].MasterHub, *stgs.Storages[0], ioswitch2.ECStream(1), "EC1"))
  175. ft.AddTo(ioswitch2.NewToShardStore(*stgs.Storages[0].MasterHub, *stgs.Storages[0], ioswitch2.ECStream(2), "EC2"))
  176. plans := exec.NewPlanBuilder()
  177. err = parser.Parse(ft, plans)
  178. if err != nil {
  179. panic(err)
  180. }
  181. fmt.Printf("plans: %v\n", plans)
  182. exec := plans.Execute(exec.NewExecContext())
  183. fut := future.NewSetVoid()
  184. go func() {
  185. mp, err := exec.Wait(context.Background())
  186. if err != nil {
  187. panic(err)
  188. }
  189. for k, v := range mp {
  190. fmt.Printf("%s: %v\n", k, v)
  191. }
  192. fut.SetVoid()
  193. }()
  194. fut.Wait(context.TODO())
  195. },
  196. })
  197. rootCmd.AddCommand(&cobra.Command{
  198. Use: "test11",
  199. Short: "test11",
  200. Run: func(cmd *cobra.Command, args []string) {
  201. coorCli, err := stgglb.CoordinatorMQPool.Acquire()
  202. if err != nil {
  203. panic(err)
  204. }
  205. defer stgglb.CoordinatorMQPool.Release(coorCli)
  206. stgs, err := coorCli.GetStorageDetails(coormq.ReqGetStorageDetails([]cdssdk.StorageID{1, 2}))
  207. if err != nil {
  208. panic(err)
  209. }
  210. ft := ioswitch2.NewFromTo()
  211. ft.SegmentParam = cdssdk.NewSegmentRedundancy(1293, 3)
  212. ft.ECParam = &cdssdk.DefaultECRedundancy
  213. ft.AddFrom(ioswitch2.NewFromShardstore("22CC59CE3297F78F2D20DC1E33181B77F21E6782097C94E1664F99F129834069", *stgs.Storages[1].MasterHub, *stgs.Storages[1], ioswitch2.SegmentStream(0)))
  214. ft.AddFrom(ioswitch2.NewFromShardstore("5EAC20EB3EBC7B5FA176C5BD1C01041FB2A6D14C35D6A232CA83D7F1E4B01ADE", *stgs.Storages[1].MasterHub, *stgs.Storages[1], ioswitch2.SegmentStream(1)))
  215. ft.AddFrom(ioswitch2.NewFromShardstore("A9BC1802F37100C80C72A1D6E8F53C0E0B73F85F99153D8C78FB01CEC9D8D903", *stgs.Storages[1].MasterHub, *stgs.Storages[1], ioswitch2.SegmentStream(2)))
  216. ft.AddTo(ioswitch2.NewToShardStoreWithRange(*stgs.Storages[0].MasterHub, *stgs.Storages[0], ioswitch2.RawStream(), "raw", math2.NewRange(10, 645)))
  217. plans := exec.NewPlanBuilder()
  218. err = parser.Parse(ft, plans)
  219. if err != nil {
  220. panic(err)
  221. }
  222. fmt.Printf("plans: %v\n", plans)
  223. exec := plans.Execute(exec.NewExecContext())
  224. fut := future.NewSetVoid()
  225. go func() {
  226. mp, err := exec.Wait(context.Background())
  227. if err != nil {
  228. panic(err)
  229. }
  230. for k, v := range mp {
  231. fmt.Printf("%s: %v\n", k, v)
  232. }
  233. fut.SetVoid()
  234. }()
  235. fut.Wait(context.TODO())
  236. },
  237. })
  238. }

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