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.

command_service_ec.go 2.7 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package services
  2. import (
  3. ramsg "gitlink.org.cn/cloudream/rabbitmq/message"
  4. coormsg "gitlink.org.cn/cloudream/rabbitmq/message/coordinator"
  5. )
  6. func (service *Service) ECWrite(msg *coormsg.ECWriteCommand) (*coormsg.PreUploadResp, *ramsg.CodeMessage) {
  7. panic("not implement yet!")
  8. /*
  9. //jh:根据command中的UserId查询用户节点权限表,返回用户可用的NodeIp
  10. //kx:根据command中的ecName,得到ecN,然后从jh查到的NodeIp中选择ecN个,赋值给Ips
  11. //jh:完成对象表、对象编码块表的插入(对象编码块表的Hash字段先不插入)
  12. //返回消息
  13. //查询用户可用的节点IP
  14. nodes, err := service.db.GetUserNodes(msg.Body.UserID)
  15. if err != nil {
  16. log.Warnf("query user nodes failed, err: %s", err.Error())
  17. return ramsg.NewCoorWriteRespFailed(errorcode.OPERATION_FAILED, "query user nodes failed")
  18. }
  19. ecid := msg.Body.ECName
  20. ecPolicies := *utils.GetEcPolicy()
  21. ecPolicy := ecPolicies[ecid]
  22. ecN := ecPolicy.GetN()
  23. if len(nodes) < ecN {
  24. log.Warnf("user nodes are not enough, err: %s", err.Error())
  25. return ramsg.NewCoorWriteRespFailed(errorcode.OPERATION_FAILED, "user nodes are not enough")
  26. }
  27. ids := make([]int, ecN)
  28. ips := make([]string, ecN)
  29. //随机选取numRep个nodeIp
  30. start := utils.GetRandInt(len(nodes))
  31. for i := 0; i < ecN; i++ {
  32. index := (start + i) % len(nodes)
  33. ids[i] = nodes[index].NodeID
  34. ips[i] = nodes[index].IP
  35. }
  36. // TODO 参考RepWrite,将创建EC对象的逻辑移动到WriteECHash中,并合成成一个事务
  37. //根据BucketName查询BucketID
  38. BucketID := Query_BucketID(msg.Body.BucketName)
  39. if BucketID == -1 {
  40. // TODO 日志
  41. return ramsg.NewCoorWriteRespFailed(errorcode.OPERATION_FAILED, fmt.Sprintf("bucket id not found for %s", msg.Body.BucketName))
  42. }
  43. //对象表插入Insert_Cache
  44. ObjectID := Insert_EcObject(msg.Body.ObjectName, BucketID, msg.Body.FileSize, msg.Body.ECName)
  45. //对象编码块表插入,hash暂时为空
  46. for i := 0; i < ecN; i++ {
  47. Insert_EcObjectBlock(ObjectID, i)
  48. }
  49. return ramsg.NewCoorWriteRespOK(ids, ips)
  50. */
  51. }
  52. func (service *Service) WriteECHash(msg *coormsg.WriteECHashCommand) (*coormsg.CreateObjectResp, *ramsg.CodeMessage) {
  53. panic("not implement yet!")
  54. /*
  55. //jh:根据command中的信息,插入对象编码块表中的Hash字段,并完成缓存表的插入
  56. //返回消息
  57. //插入对象编码块表中的Hash字段
  58. // TODO 参考WriteRepHash的逻辑
  59. ObjectId := Query_ObjectID(msg.Body.ObjectName)
  60. Insert_EcHash(ObjectId, msg.Body.Hashes)
  61. //缓存表的插入
  62. Insert_Cache(msg.Body.Hashes, msg.Body.NodeIDs, false)
  63. return ramsg.NewCoorWriteHashRespOK()
  64. */
  65. }

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