| @@ -31,7 +31,7 @@ func (svc *CacheService) StartCacheMovePackage(userID cdssdk.UserID, packageID c | |||||
| return 0, "", fmt.Errorf("get storage detail: %w", err) | return 0, "", fmt.Errorf("get storage detail: %w", err) | ||||
| } | } | ||||
| if getStg.Storages[0].Shard == nil { | |||||
| if getStg.Storages[0].Storage.ShardStore == nil { | |||||
| return 0, "", fmt.Errorf("shard storage is not enabled") | return 0, "", fmt.Errorf("shard storage is not enabled") | ||||
| } | } | ||||
| @@ -62,7 +62,7 @@ func (svc *StorageService) StartStorageLoadPackage(userID cdssdk.UserID, package | |||||
| return 0, "", fmt.Errorf("getting storage info: %w", err) | return 0, "", fmt.Errorf("getting storage info: %w", err) | ||||
| } | } | ||||
| if stgResp.Storages[0].Shard == nil { | |||||
| if stgResp.Storages[0].Storage.ShardStore == nil { | |||||
| return 0, "", fmt.Errorf("shard storage is not enabled") | return 0, "", fmt.Errorf("shard storage is not enabled") | ||||
| } | } | ||||
| @@ -133,7 +133,7 @@ func (svc *StorageService) StartStorageCreatePackage(userID cdssdk.UserID, bucke | |||||
| return 0, "", fmt.Errorf("getting storage info: %w", err) | return 0, "", fmt.Errorf("getting storage info: %w", err) | ||||
| } | } | ||||
| if stgResp.Storages[0].Shard == nil { | |||||
| if stgResp.Storages[0].Storage.ShardStore == nil { | |||||
| return 0, "", fmt.Errorf("shard storage is not enabled") | return 0, "", fmt.Errorf("shard storage is not enabled") | ||||
| } | } | ||||
| @@ -128,10 +128,8 @@ func (ObjectAccessStat) TableName() string { | |||||
| } | } | ||||
| type StorageDetail struct { | type StorageDetail struct { | ||||
| Storage cdssdk.Storage `json:"storage"` | |||||
| MasterHub *cdssdk.Hub `json:"masterHub"` | |||||
| Shard *cdssdk.ShardStorage `json:"shard"` | |||||
| Shared *cdssdk.SharedStorage `json:"shared"` | |||||
| Storage cdssdk.Storage `json:"storage"` | |||||
| MasterHub *cdssdk.Hub `json:"masterHub"` | |||||
| } | } | ||||
| type ObjectStorage struct { | type ObjectStorage struct { | ||||
| @@ -1,25 +0,0 @@ | |||||
| package db2 | |||||
| import ( | |||||
| cdssdk "gitlink.org.cn/cloudream/common/sdks/storage" | |||||
| ) | |||||
| type ShardStorageDB struct { | |||||
| *DB | |||||
| } | |||||
| func (db *DB) ShardStorage() *ShardStorageDB { | |||||
| return &ShardStorageDB{DB: db} | |||||
| } | |||||
| func (*ShardStorageDB) GetByStorageID(ctx SQLContext, stgID cdssdk.StorageID) (cdssdk.ShardStorage, error) { | |||||
| var ret cdssdk.ShardStorage | |||||
| err := ctx.Table("ShardStorage").First(&ret, stgID).Error | |||||
| return ret, err | |||||
| } | |||||
| func (*ShardStorageDB) BatchGetByStorageIDs(ctx SQLContext, stgIDs []cdssdk.StorageID) ([]cdssdk.ShardStorage, error) { | |||||
| var ret []cdssdk.ShardStorage | |||||
| err := ctx.Table("ShardStorage").Find(&ret, "StorageID IN (?)", stgIDs).Error | |||||
| return ret, err | |||||
| } | |||||
| @@ -1,25 +0,0 @@ | |||||
| package db2 | |||||
| import ( | |||||
| cdssdk "gitlink.org.cn/cloudream/common/sdks/storage" | |||||
| ) | |||||
| type SharedStorageDB struct { | |||||
| *DB | |||||
| } | |||||
| func (db *DB) SharedStorage() *SharedStorageDB { | |||||
| return &SharedStorageDB{DB: db} | |||||
| } | |||||
| func (*SharedStorageDB) GetByStorageID(ctx SQLContext, stgID cdssdk.StorageID) (cdssdk.SharedStorage, error) { | |||||
| var ret cdssdk.SharedStorage | |||||
| err := ctx.Table("SharedStorage").First(&ret, stgID).Error | |||||
| return ret, err | |||||
| } | |||||
| func (*SharedStorageDB) BatchGetByStorageIDs(ctx SQLContext, stgIDs []cdssdk.StorageID) ([]cdssdk.SharedStorage, error) { | |||||
| var ret []cdssdk.SharedStorage | |||||
| err := ctx.Table("SharedStorage").Find(&ret, "StorageID IN (?)", stgIDs).Error | |||||
| return ret, err | |||||
| } | |||||
| @@ -88,11 +88,9 @@ func (db *StorageDB) GetHubStorages(ctx SQLContext, hubID cdssdk.HubID) ([]model | |||||
| func (db *StorageDB) FillDetails(ctx SQLContext, details []stgmod.StorageDetail) error { | func (db *StorageDB) FillDetails(ctx SQLContext, details []stgmod.StorageDetail) error { | ||||
| stgsMp := make(map[cdssdk.StorageID]*stgmod.StorageDetail) | stgsMp := make(map[cdssdk.StorageID]*stgmod.StorageDetail) | ||||
| stgIDs := make([]cdssdk.StorageID, 0, len(details)) | |||||
| var masterHubIDs []cdssdk.HubID | var masterHubIDs []cdssdk.HubID | ||||
| for i := range details { | for i := range details { | ||||
| stgsMp[details[i].Storage.StorageID] = &details[i] | stgsMp[details[i].Storage.StorageID] = &details[i] | ||||
| stgIDs = append(stgIDs, details[i].Storage.StorageID) | |||||
| masterHubIDs = append(masterHubIDs, details[i].Storage.MasterHub) | masterHubIDs = append(masterHubIDs, details[i].Storage.MasterHub) | ||||
| } | } | ||||
| @@ -118,33 +116,5 @@ func (db *StorageDB) FillDetails(ctx SQLContext, details []stgmod.StorageDetail) | |||||
| } | } | ||||
| } | } | ||||
| // 获取分片存储 | |||||
| shards, err := db.ShardStorage().BatchGetByStorageIDs(ctx, stgIDs) | |||||
| if err != nil && err != gorm.ErrRecordNotFound { | |||||
| return fmt.Errorf("getting shard storage: %w", err) | |||||
| } | |||||
| for _, shard := range shards { | |||||
| stg := stgsMp[shard.StorageID] | |||||
| if stg == nil { | |||||
| continue | |||||
| } | |||||
| stg.Shard = &shard | |||||
| } | |||||
| // 获取共享存储的相关信息 | |||||
| shareds, err := db.SharedStorage().BatchGetByStorageIDs(ctx, stgIDs) | |||||
| if err != nil && err != gorm.ErrRecordNotFound { | |||||
| return fmt.Errorf("getting shared storage: %w", err) | |||||
| } | |||||
| for _, shared := range shareds { | |||||
| stg := stgsMp[shared.StorageID] | |||||
| if stg == nil { | |||||
| continue | |||||
| } | |||||
| stg.Shared = &shared | |||||
| } | |||||
| return nil | return nil | ||||
| } | } | ||||
| @@ -108,7 +108,7 @@ func (i *DownloadObjectIterator) init() error { | |||||
| if s == nil { | if s == nil { | ||||
| return fmt.Errorf("storage %v not found", stgIDs[idx]) | return fmt.Errorf("storage %v not found", stgIDs[idx]) | ||||
| } | } | ||||
| if s.Shard == nil { | |||||
| if s.Storage.ShardStore == nil { | |||||
| return fmt.Errorf("storage %v has no shard store", stgIDs[idx]) | return fmt.Errorf("storage %v has no shard store", stgIDs[idx]) | ||||
| } | } | ||||
| @@ -10,7 +10,7 @@ import ( | |||||
| ) | ) | ||||
| func createShardStore(detail stgmod.StorageDetail, ch *types.StorageEventChan, stg *storage) error { | func createShardStore(detail stgmod.StorageDetail, ch *types.StorageEventChan, stg *storage) error { | ||||
| switch confg := detail.Shard.Config.(type) { | |||||
| switch confg := detail.Storage.ShardStore.(type) { | |||||
| case *cdssdk.LocalShardStorage: | case *cdssdk.LocalShardStorage: | ||||
| store, err := local.NewShardStore(detail.Storage, *confg) | store, err := local.NewShardStore(detail.Storage, *confg) | ||||
| if err != nil { | if err != nil { | ||||
| @@ -48,7 +48,7 @@ func (m *Manager) InitStorage(detail stgmod.StorageDetail) error { | |||||
| stg := &storage{} | stg := &storage{} | ||||
| if detail.Shard != nil { | |||||
| if detail.Storage.ShardStore != nil { | |||||
| err := createShardStore(detail, m.eventChan, stg) | err := createShardStore(detail, m.eventChan, stg) | ||||
| if err != nil { | if err != nil { | ||||
| stopStorage(stg) | stopStorage(stg) | ||||
| @@ -56,7 +56,7 @@ func (m *Manager) InitStorage(detail stgmod.StorageDetail) error { | |||||
| } | } | ||||
| } | } | ||||
| if detail.Shared != nil { | |||||
| if detail.Storage.SharedStore != nil { | |||||
| err := createSharedStore(detail, m.eventChan, stg) | err := createSharedStore(detail, m.eventChan, stg) | ||||
| if err != nil { | if err != nil { | ||||
| stopStorage(stg) | stopStorage(stg) | ||||
| @@ -52,8 +52,6 @@ func migrate(configPath string) { | |||||
| migrateOne(db, stgmod.PackageAccessStat{}) | migrateOne(db, stgmod.PackageAccessStat{}) | ||||
| migrateOne(db, cdssdk.Package{}) | migrateOne(db, cdssdk.Package{}) | ||||
| migrateOne(db, cdssdk.PinnedObject{}) | migrateOne(db, cdssdk.PinnedObject{}) | ||||
| migrateOne(db, cdssdk.ShardStorage{}) | |||||
| migrateOne(db, cdssdk.SharedStorage{}) | |||||
| migrateOne(db, model.StoragePackage{}) | migrateOne(db, model.StoragePackage{}) | ||||
| migrateOne(db, cdssdk.Storage{}) | migrateOne(db, cdssdk.Storage{}) | ||||
| migrateOne(db, model.UserStorage{}) | migrateOne(db, model.UserStorage{}) | ||||
| @@ -30,33 +30,11 @@ func (svc *Service) GetHubConfig(msg *coormq.GetHubConfig) (*coormq.GetHubConfig | |||||
| return nil, mq.Failed(errorcode.OperationFailed, fmt.Sprintf("getting hub storages: %v", err)) | return nil, mq.Failed(errorcode.OperationFailed, fmt.Sprintf("getting hub storages: %v", err)) | ||||
| } | } | ||||
| var stgIDs []cdssdk.StorageID | |||||
| for _, stg := range stgs { | for _, stg := range stgs { | ||||
| detailsMap[stg.StorageID] = &stgmod.StorageDetail{ | detailsMap[stg.StorageID] = &stgmod.StorageDetail{ | ||||
| Storage: stg, | Storage: stg, | ||||
| MasterHub: &hub, | MasterHub: &hub, | ||||
| } | } | ||||
| stgIDs = append(stgIDs, stg.StorageID) | |||||
| } | |||||
| shards, err := svc.db2.ShardStorage().BatchGetByStorageIDs(svc.db2.DefCtx(), stgIDs) | |||||
| if err != nil { | |||||
| log.Warnf("getting shard storages: %v", err) | |||||
| return nil, mq.Failed(errorcode.OperationFailed, fmt.Sprintf("getting shard storages: %v", err)) | |||||
| } | |||||
| for _, shard := range shards { | |||||
| sh := shard | |||||
| detailsMap[shard.StorageID].Shard = &sh | |||||
| } | |||||
| shareds, err := svc.db2.SharedStorage().BatchGetByStorageIDs(svc.db2.DefCtx(), stgIDs) | |||||
| if err != nil { | |||||
| log.Warnf("getting shared storages: %v", err) | |||||
| return nil, mq.Failed(errorcode.OperationFailed, fmt.Sprintf("getting shared storages: %v", err)) | |||||
| } | |||||
| for _, shared := range shareds { | |||||
| sh := shared | |||||
| detailsMap[shared.StorageID].Shared = &sh | |||||
| } | } | ||||
| var details []stgmod.StorageDetail | var details []stgmod.StorageDetail | ||||