|
@@ -18,8 +18,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
|
|
|
+ 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
|
|
|
)
|
|
@@ -43,6 +43,8 @@ func StorageInit() {
|
|
|
}
|
|
|
|
|
|
func LoadBaseStoragePool() error {
|
|
|
+ //All fsh for the base pool
|
|
|
+ fsHandlers := []*fs.FileSystemHandler{}
|
|
|
//Use for Debian buster local file system
|
|
|
localFileSystem := "ext4"
|
|
|
if runtime.GOOS == "windows" {
|
|
@@ -134,7 +136,7 @@ func LoadStoragePoolForGroup(pg *permission.PermissionGroup) error {
|
|
|
expectedConfigPath := "./system/storage/" + pg.Name + ".json"
|
|
|
if fs.FileExists(expectedConfigPath) {
|
|
|
//Read the config file
|
|
|
- pgStorageConfig, err := ioutil.ReadFile(expectedConfigPath)
|
|
|
+ pgStorageConfig, err := os.ReadFile(expectedConfigPath)
|
|
|
if err != nil {
|
|
|
log.Println("Failed to read config for " + pg.Name + ": " + err.Error())
|
|
|
return errors.New("Failed to read config for " + pg.Name + ": " + err.Error())
|
|
@@ -147,9 +149,8 @@ func LoadStoragePoolForGroup(pg *permission.PermissionGroup) error {
|
|
|
return errors.New("Failed to load storage configuration: " + err.Error())
|
|
|
}
|
|
|
|
|
|
- //Add these to mounted handlers
|
|
|
+ //Show debug message
|
|
|
for _, thisHandler := range thisGroupFsHandlers {
|
|
|
- fsHandlers = append(fsHandlers, thisHandler)
|
|
|
log.Println(thisHandler.Name + " Mounted as " + thisHandler.UUID + ":/ for group " + pg.Name)
|
|
|
}
|
|
|
|
|
@@ -232,14 +233,37 @@ func GetFsHandlerByUUID(uuid string) (*fs.FileSystemHandler, error) {
|
|
|
if strings.Contains(uuid, ":") {
|
|
|
uuid = strings.Split(uuid, ":")[0]
|
|
|
}
|
|
|
-
|
|
|
- for _, fsh := range fsHandlers {
|
|
|
+ var resultFsh *fs.FileSystemHandler = nil
|
|
|
+ allFsh := GetAllLoadedFsh()
|
|
|
+ for _, fsh := range allFsh {
|
|
|
if fsh.UUID == uuid && !fsh.Closed {
|
|
|
- return fsh, nil
|
|
|
+ resultFsh = fsh
|
|
|
}
|
|
|
}
|
|
|
+ if resultFsh == nil {
|
|
|
+ return nil, errors.New("Filesystem handler with given UUID not found")
|
|
|
+ } else {
|
|
|
+ return resultFsh, nil
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func GetAllLoadedFsh() []*fs.FileSystemHandler {
|
|
|
+ fshTmp := map[string]*fs.FileSystemHandler{}
|
|
|
+ allFsh := []*fs.FileSystemHandler{}
|
|
|
+ allStoragePools := GetAllStoragePools()
|
|
|
+ for _, thisSP := range allStoragePools {
|
|
|
+ for _, thisFsh := range thisSP.Storages {
|
|
|
+ fshPointer := thisFsh
|
|
|
+ fshTmp[thisFsh.UUID] = fshPointer
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //Restructure the map to slice
|
|
|
+ for _, fsh := range fshTmp {
|
|
|
+ allFsh = append(allFsh, fsh)
|
|
|
+ }
|
|
|
|
|
|
- return nil, errors.New("Filesystem handler with given UUID not found")
|
|
|
+ return allFsh
|
|
|
}
|
|
|
|
|
|
func RegisterStorageSettings() {
|
|
@@ -257,7 +281,8 @@ func RegisterStorageSettings() {
|
|
|
|
|
|
//CloseAllStorages Close all storage database
|
|
|
func CloseAllStorages() {
|
|
|
- for _, fsh := range fsHandlers {
|
|
|
+ allFsh := GetAllLoadedFsh()
|
|
|
+ for _, fsh := range allFsh {
|
|
|
fsh.FilesystemDatabase.Close()
|
|
|
}
|
|
|
}
|