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

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