|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- package mq
-
- import (
- "fmt"
-
- "gitlink.org.cn/cloudream/common/consts/errorcode"
- "gitlink.org.cn/cloudream/common/pkgs/logger"
-
- "gitlink.org.cn/cloudream/common/pkgs/mq"
- coormq "gitlink.org.cn/cloudream/storage2/common/pkgs/mq/coordinator"
- "gitlink.org.cn/cloudream/storage2/coordinator/internal/db"
- cortypes "gitlink.org.cn/cloudream/storage2/coordinator/types"
- )
-
- func (svc *Service) GetStorageDetails(msg *coormq.GetStorageDetails) (*coormq.GetStorageDetailsResp, *mq.CodeMessage) {
- d := svc.db
- stgs, err := db.DoTx02(d, func(tx db.SQLContext) ([]*cortypes.StorageDetail, error) {
- stgs, err := d.Storage().BatchGetByID(tx, msg.StorageIDs)
- if err != nil {
- return nil, fmt.Errorf("getting storages: %v", err)
- }
- stgMap := make(map[cortypes.StorageID]*cortypes.Storage)
- for _, stg := range stgs {
- s := stg
- stgMap[stg.StorageID] = &s
- }
-
- hubIDs := make([]cortypes.HubID, 0, len(stgs))
- for _, stg := range stgs {
- if stg.MasterHub != 0 {
- hubIDs = append(hubIDs, stg.MasterHub)
- }
- }
-
- hubs, err := d.Hub().BatchGetByID(tx, hubIDs)
- if err != nil {
- return nil, fmt.Errorf("getting hubs: %v", err)
- }
-
- hubMap := make(map[cortypes.HubID]*cortypes.Hub)
- for _, hub := range hubs {
- h := hub
- hubMap[hub.HubID] = &h
- }
-
- details := make([]*cortypes.StorageDetail, len(msg.StorageIDs))
- for i, stgID := range msg.StorageIDs {
- stg := stgMap[stgID]
- if stg == nil {
- continue
- }
- details[i] = &cortypes.StorageDetail{
- Storage: *stg,
- MasterHub: hubMap[stg.MasterHub],
- }
- }
-
- return details, nil
- })
- if err != nil {
- logger.Warnf("getting storage details: %s", err.Error())
- return nil, mq.Failed(errorcode.OperationFailed, fmt.Sprintf("getting storage details: %v", err))
- }
-
- return mq.ReplyOK(coormq.RespGetStorageDetails(stgs))
- }
|