diff --git a/client/internal/http/server.go b/client/internal/http/server.go index 4594910..8f0216a 100644 --- a/client/internal/http/server.go +++ b/client/internal/http/server.go @@ -43,7 +43,7 @@ func (s *Server) Serve() error { func (s *Server) initRouters() { rt := s.engine.Use() - // initTemp(rt, s) + initTemp(rt, s) s.routeV1(s.engine) diff --git a/client/internal/http/temp.go b/client/internal/http/temp.go index 3c0b06e..9b46e44 100644 --- a/client/internal/http/temp.go +++ b/client/internal/http/temp.go @@ -1,6 +1,5 @@ package http -/* import ( "net/http" @@ -96,7 +95,7 @@ type TempGetObjectDetailResp struct { type ObjectBlockDetail struct { ObjectID cdssdk.ObjectID `json:"objectID"` Type string `json:"type"` - FileHash string `json:"fileHash"` + FileHash cdssdk.FileHash `json:"fileHash"` LocationType string `json:"locationType"` LocationName string `json:"locationName"` } @@ -123,43 +122,36 @@ func (s *TempService) GetObjectDetail(ctx *gin.Context) { return } - loadedHubIDs, err := s.svc.PackageSvc().GetLoadedNodes(1, details.Object.PackageID) - if err != nil { - log.Warnf("getting loaded nodes: %s", err.Error()) - ctx.JSON(http.StatusOK, Failed(errorcode.OperationFailed, "get loaded nodes failed")) - return - } - - var allHubIDs []cdssdk.HubID - allHubIDs = append(allHubIDs, details.PinnedAt...) + var allStgIDs []cdssdk.StorageID + allStgIDs = append(allStgIDs, details.PinnedAt...) for _, b := range details.Blocks { - allHubIDs = append(allHubIDs, b.StorageID) + allStgIDs = append(allStgIDs, b.StorageID) } - allHubIDs = append(allHubIDs, loadedHubIDs...) - allHubIDs = lo.Uniq(allHubIDs) + allStgIDs = lo.Uniq(allStgIDs) - getNodes, err := s.svc.NodeSvc().GetNodes(allHubIDs) + getStgs, err := s.svc.StorageSvc().GetDetails(allStgIDs) if err != nil { log.Warnf("getting nodes: %s", err.Error()) ctx.JSON(http.StatusOK, Failed(errorcode.OperationFailed, "get nodes failed")) return } - allNodes := make(map[cdssdk.HubID]*cdssdk.Node) - for _, n := range getNodes { - n2 := n - allNodes[n.HubID] = &n2 + allStgs := make(map[cdssdk.StorageID]cdssdk.Storage) + for _, n := range getStgs { + if n != nil { + allStgs[n.Storage.StorageID] = n.Storage + } } var blocks []ObjectBlockDetail - for _, hubID := range details.PinnedAt { + for _, stgID := range details.PinnedAt { blocks = append(blocks, ObjectBlockDetail{ Type: "Rep", FileHash: details.Object.FileHash, LocationType: "Agent", - LocationName: allNodes[hubID].Name, + LocationName: allStgs[stgID].Name, }) } @@ -171,7 +163,7 @@ func (s *TempService) GetObjectDetail(ctx *gin.Context) { Type: "Rep", FileHash: blk.FileHash, LocationType: "Agent", - LocationName: allNodes[blk.StorageID].Name, + LocationName: allStgs[blk.StorageID].Name, }) } } @@ -182,7 +174,7 @@ func (s *TempService) GetObjectDetail(ctx *gin.Context) { Type: "Rep", FileHash: blk.FileHash, LocationType: "Agent", - LocationName: allNodes[blk.StorageID].Name, + LocationName: allStgs[blk.StorageID].Name, }) } } @@ -193,20 +185,11 @@ func (s *TempService) GetObjectDetail(ctx *gin.Context) { Type: "Block", FileHash: blk.FileHash, LocationType: "Agent", - LocationName: allNodes[blk.StorageID].Name, + LocationName: allStgs[blk.StorageID].Name, }) } } - for _, hubID := range loadedHubIDs { - blocks = append(blocks, ObjectBlockDetail{ - Type: "Rep", - FileHash: details.Object.FileHash, - LocationType: "Storage", - LocationName: allNodes[hubID].Name, - }) - } - ctx.JSON(http.StatusOK, OK(TempGetObjectDetailResp{ Blocks: blocks, })) @@ -252,15 +235,25 @@ func (s *TempService) GetDatabaseAll(ctx *gin.Context) { return } - nodes, err := s.svc.NodeSvc().GetNodes(nil) + var allStgIDs []cdssdk.StorageID + for _, obj := range db.Objects { + allStgIDs = append(allStgIDs, obj.PinnedAt...) + for _, blk := range obj.Blocks { + allStgIDs = append(allStgIDs, blk.StorageID) + } + } + + getStgs, err := s.svc.StorageSvc().GetDetails(allStgIDs) if err != nil { log.Warnf("getting nodes: %s", err.Error()) ctx.JSON(http.StatusOK, Failed(errorcode.OperationFailed, "get nodes failed")) return } - allNodes := make(map[cdssdk.HubID]cdssdk.Node) - for _, n := range nodes { - allNodes[n.HubID] = n + allStgs := make(map[cdssdk.StorageID]cdssdk.Storage) + for _, n := range getStgs { + if n != nil { + allStgs[n.Storage.StorageID] = n.Storage + } } bkts := make(map[cdssdk.BucketID]*BucketDetail) @@ -274,25 +267,25 @@ func (s *TempService) GetDatabaseAll(ctx *gin.Context) { type PackageDetail struct { Package cdssdk.Package - Loaded []cdssdk.Node + // Loaded []cdssdk.Node } pkgs := make(map[cdssdk.PackageID]*PackageDetail) for _, pkg := range db.Packages { p := PackageDetail{ Package: pkg, - Loaded: make([]cdssdk.Node, 0), + // Loaded: make([]cdssdk.Node, 0), } - loaded, err := s.svc.PackageSvc().GetLoadedNodes(1, pkg.PackageID) - if err != nil { - log.Warnf("getting loaded nodes: %s", err.Error()) - ctx.JSON(http.StatusOK, Failed(errorcode.OperationFailed, "get loaded nodes failed")) - return - } + // loaded, err := s.svc.PackageSvc().GetLoadedNodes(1, pkg.PackageID) + // if err != nil { + // log.Warnf("getting loaded nodes: %s", err.Error()) + // ctx.JSON(http.StatusOK, Failed(errorcode.OperationFailed, "get loaded nodes failed")) + // return + // } - for _, hubID := range loaded { - p.Loaded = append(p.Loaded, allNodes[hubID]) - } + // for _, hubID := range loaded { + // p.Loaded = append(p.Loaded, allNodes[hubID]) + // } pkgs[pkg.PackageID] = &p } @@ -316,7 +309,7 @@ func (s *TempService) GetDatabaseAll(ctx *gin.Context) { Type: "Rep", FileHash: obj.Object.FileHash, LocationType: "Agent", - LocationName: allNodes[hubID].Name, + LocationName: allStgs[hubID].Name, }) } @@ -329,7 +322,7 @@ func (s *TempService) GetDatabaseAll(ctx *gin.Context) { Type: "Rep", FileHash: blk.FileHash, LocationType: "Agent", - LocationName: allNodes[blk.StorageID].Name, + LocationName: allStgs[blk.StorageID].Name, }) } } @@ -341,7 +334,7 @@ func (s *TempService) GetDatabaseAll(ctx *gin.Context) { Type: "Rep", FileHash: blk.FileHash, LocationType: "Agent", - LocationName: allNodes[blk.StorageID].Name, + LocationName: allStgs[blk.StorageID].Name, }) } } @@ -353,20 +346,20 @@ func (s *TempService) GetDatabaseAll(ctx *gin.Context) { Type: "Block", FileHash: blk.FileHash, LocationType: "Agent", - LocationName: allNodes[blk.StorageID].Name, + LocationName: allStgs[blk.StorageID].Name, }) } } - for _, node := range pkgs[obj.Object.PackageID].Loaded { - blocks = append(blocks, ObjectBlockDetail{ - ObjectID: obj.Object.ObjectID, - Type: "Rep", - FileHash: obj.Object.FileHash, - LocationType: "Storage", - LocationName: allNodes[node.HubID].Name, - }) - } + // for _, node := range pkgs[obj.Object.PackageID].Loaded { + // blocks = append(blocks, ObjectBlockDetail{ + // ObjectID: obj.Object.ObjectID, + // Type: "Rep", + // FileHash: obj.Object.FileHash, + // LocationType: "Storage", + // LocationName: allNodes[node.HubID].Name, + // }) + // } } @@ -390,4 +383,3 @@ func auth(ctx *gin.Context) { ctx.AbortWithStatus(http.StatusUnauthorized) } } -*/ diff --git a/client/internal/services/storage.go b/client/internal/services/storage.go index 046de63..df437fc 100644 --- a/client/internal/services/storage.go +++ b/client/internal/services/storage.go @@ -10,6 +10,7 @@ import ( cdssdk "gitlink.org.cn/cloudream/common/sdks/storage" stgglb "gitlink.org.cn/cloudream/storage/common/globals" + stgmod "gitlink.org.cn/cloudream/storage/common/models" "gitlink.org.cn/cloudream/storage/common/pkgs/db2/model" "gitlink.org.cn/cloudream/storage/common/pkgs/distlock/reqbuilder" "gitlink.org.cn/cloudream/storage/common/pkgs/downloader/strategy" @@ -58,6 +59,21 @@ func (svc *StorageService) GetByName(userID cdssdk.UserID, name string) (*model. return &getResp.Storage, nil } +func (svc *StorageService) GetDetails(stgIDs []cdssdk.StorageID) ([]*stgmod.StorageDetail, error) { + coorCli, err := stgglb.CoordinatorMQPool.Acquire() + if err != nil { + return nil, fmt.Errorf("new coordinator client: %w", err) + } + defer stgglb.CoordinatorMQPool.Release(coorCli) + + getResp, err := coorCli.GetStorageDetails(coormq.ReqGetStorageDetails(stgIDs)) + if err != nil { + return nil, fmt.Errorf("request to coordinator: %w", err) + } + + return getResp.Storages, nil +} + func (svc *StorageService) LoadPackage(userID cdssdk.UserID, packageID cdssdk.PackageID, storageID cdssdk.StorageID, rootPath string) error { coorCli, err := stgglb.CoordinatorMQPool.Acquire() if err != nil {