|
@@ -19,8 +19,8 @@ import (
|
|
|
var (
|
|
|
baseStoragePool *storage.StoragePool //base storage pool, all user can access these virtual roots
|
|
|
fsHandlers []*fs.FileSystemHandler //All File system handlers. All opened handles must be registered in here
|
|
|
- storagePools []*storage.StoragePool //All Storage pool opened
|
|
|
- bridgeManager *bridge.Record //Manager to handle bridged FSH
|
|
|
+ //storagePools []*storage.StoragePool //All Storage pool opened
|
|
|
+ bridgeManager *bridge.Record //Manager to handle bridged FSH
|
|
|
)
|
|
|
|
|
|
func StorageInit() {
|
|
@@ -105,9 +105,6 @@ func LoadBaseStoragePool() error {
|
|
|
return err
|
|
|
}
|
|
|
|
|
|
- //Push base pool into the opened storage pool list
|
|
|
- storagePools = append(storagePools, sp)
|
|
|
-
|
|
|
//Update the storage pool permission to readwrite
|
|
|
sp.OtherPermission = "readwrite"
|
|
|
baseStoragePool = sp
|
|
@@ -137,7 +134,7 @@ func BridgeStoragePoolInit() {
|
|
|
bridgeRecords, err := bridgeManager.ReadConfig()
|
|
|
if err != nil {
|
|
|
log.Println("[ERROR] Fail to read File System Handler bridge config")
|
|
|
- panic(err.Error())
|
|
|
+ return
|
|
|
}
|
|
|
|
|
|
for _, bridgeConf := range bridgeRecords {
|
|
@@ -153,11 +150,44 @@ func BridgeStoragePoolInit() {
|
|
|
continue
|
|
|
}
|
|
|
|
|
|
- BridgeFSHandlerToGroup(fsh, basePool)
|
|
|
+ err = BridgeFSHandlerToGroup(fsh, basePool)
|
|
|
+ if err != nil {
|
|
|
+ log.Println("Failed to bridge "+fsh.UUID+":/ to "+basePool.Owner, err.Error())
|
|
|
+ }
|
|
|
log.Println(fsh.UUID + ":/ bridged to " + basePool.Owner + " Storage Pool")
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+func BridgeStoragePoolForGroup(group string) {
|
|
|
+ bridgeRecords, err := bridgeManager.ReadConfig()
|
|
|
+ if err != nil {
|
|
|
+ log.Println("Failed to bridge FSH for group " + group)
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, bridgeConf := range bridgeRecords {
|
|
|
+ if bridgeConf.SPOwner == group {
|
|
|
+ fsh, err := GetFsHandlerByUUID(bridgeConf.FSHUUID)
|
|
|
+ if err != nil {
|
|
|
+ //This fsh is not found. Skip this
|
|
|
+ continue
|
|
|
+ }
|
|
|
+
|
|
|
+ basePool, err := GetStoragePoolByOwner(bridgeConf.SPOwner)
|
|
|
+ if err != nil {
|
|
|
+ //This fsh is not found. Skip this
|
|
|
+ continue
|
|
|
+ }
|
|
|
+
|
|
|
+ err = BridgeFSHandlerToGroup(fsh, basePool)
|
|
|
+ if err != nil {
|
|
|
+ log.Println("Failed to bridge "+fsh.UUID+":/ to "+basePool.Owner, err.Error())
|
|
|
+ }
|
|
|
+ log.Println(fsh.UUID + ":/ bridged to " + basePool.Owner + " Storage Pool")
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
//Bridge a FSH to a given Storage Pool
|
|
|
func BridgeFSHandlerToGroup(fsh *fs.FileSystemHandler, sp *storage.StoragePool) error {
|
|
|
//Check if the fsh already exists in the basepool
|
|
@@ -225,10 +255,15 @@ func LoadStoragePoolForGroup(pg *permission.PermissionGroup) error {
|
|
|
//Assign storage pool to group
|
|
|
pg.StoragePool = sp
|
|
|
|
|
|
- storagePools = append(storagePools, sp)
|
|
|
} else {
|
|
|
//Storage configuration not exists. Fill in the basic information and move to next storage pool
|
|
|
- pg.StoragePool.Owner = pg.Name
|
|
|
+
|
|
|
+ //Create a new empty storage pool for this group
|
|
|
+ sp, err := storage.NewStoragePool([]*fs.FileSystemHandler{}, pg.Name)
|
|
|
+ if err != nil {
|
|
|
+ log.Println("Failed to create empty storage pool for group: ", pg.Name)
|
|
|
+ }
|
|
|
+ pg.StoragePool = sp
|
|
|
pg.StoragePool.OtherPermission = "denied"
|
|
|
}
|
|
|
|
|
@@ -241,8 +276,21 @@ func StoragePoolExists(poolOwner string) bool {
|
|
|
return err == nil
|
|
|
}
|
|
|
|
|
|
+func GetAllStoragePools() []*storage.StoragePool {
|
|
|
+ //Append the base pool
|
|
|
+ results := []*storage.StoragePool{baseStoragePool}
|
|
|
+
|
|
|
+ //Add each permissionGroup's pool
|
|
|
+ for _, pg := range permissionHandler.PermissionGroups {
|
|
|
+ results = append(results, pg.StoragePool)
|
|
|
+ }
|
|
|
+
|
|
|
+ return results
|
|
|
+}
|
|
|
+
|
|
|
func GetStoragePoolByOwner(owner string) (*storage.StoragePool, error) {
|
|
|
- for _, pool := range storagePools {
|
|
|
+ sps := GetAllStoragePools()
|
|
|
+ for _, pool := range sps {
|
|
|
if pool.Owner == owner {
|
|
|
return pool, nil
|
|
|
}
|
|
@@ -286,7 +334,7 @@ func CloseAllStorages() {
|
|
|
}
|
|
|
|
|
|
func closeAllStoragePools() {
|
|
|
- for _, sp := range storagePools {
|
|
|
+ for _, sp := range GetAllStoragePools() {
|
|
|
sp.Close()
|
|
|
}
|
|
|
}
|