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.

faas.go 1.8 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package ops2
  2. import (
  3. "fmt"
  4. "github.com/samber/lo"
  5. "gitlink.org.cn/cloudream/common/pkgs/ioswitch/exec"
  6. cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
  7. "gitlink.org.cn/cloudream/storage/common/pkgs/storage/svcmgr"
  8. "gitlink.org.cn/cloudream/storage/common/pkgs/storage/types"
  9. )
  10. type InternalFaaSGalMultiply struct {
  11. Coefs [][]byte `json:"coefs"`
  12. InputFilePathes []exec.VarID `json:"inputFilePathes"` // 输入的文件的路径
  13. OutputFilePathes []exec.VarID `json:"outputFilePathes"` // 输出的文件的路径
  14. ChunkSize int `json:"chunkSize"`
  15. StorageID cdssdk.StorageID `json:"storageID"`
  16. }
  17. func (o *InternalFaaSGalMultiply) Execute(ctx *exec.ExecContext, e *exec.Executor) error {
  18. stgMgr, err := exec.GetValueByType[*svcmgr.Manager](ctx)
  19. if err != nil {
  20. return err
  21. }
  22. fass, err := svcmgr.GetComponent[types.InternalFaaSCall](stgMgr, o.StorageID)
  23. if err != nil {
  24. return fmt.Errorf("getting faas component: %w", err)
  25. }
  26. tmp, err := svcmgr.GetComponent[types.TempStore](stgMgr, o.StorageID)
  27. if err != nil {
  28. return fmt.Errorf("getting temp store component: %w", err)
  29. }
  30. inputVars, err := exec.BindArray[*exec.StringValue](e, ctx.Context, o.InputFilePathes)
  31. if err != nil {
  32. return err
  33. }
  34. var outputs []string
  35. for i := 0; i < len(o.OutputFilePathes); i++ {
  36. outputs = append(outputs, tmp.CreateTemp())
  37. }
  38. var outputVars []*exec.StringValue
  39. for _, output := range outputs {
  40. outputVars = append(outputVars, &exec.StringValue{Value: output})
  41. }
  42. inputs := lo.Map(inputVars, func(v *exec.StringValue, idx int) string { return v.Value })
  43. err = fass.GalMultiply(ctx.Context, o.Coefs, inputs, outputs, o.ChunkSize)
  44. if err != nil {
  45. return fmt.Errorf("faas gal multiply: %w", err)
  46. }
  47. exec.PutArray(e, o.OutputFilePathes, outputVars)
  48. return nil
  49. }

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