diff --git a/pkg/compute/regiondrivers/kvm.go b/pkg/compute/regiondrivers/kvm.go index 540bfb710a..7527028a16 100644 --- a/pkg/compute/regiondrivers/kvm.go +++ b/pkg/compute/regiondrivers/kvm.go @@ -1433,7 +1433,8 @@ func (self *SKVMRegionDriver) RequestSyncBackupStorageStatus(ctx context.Context return nil, err } status, _ := res.GetString("status") - return nil, bs.SetStatus(userCred, status, "sync status") + reason, _ := res.GetString("reason") + return nil, bs.SetStatus(userCred, status, reason) }) return nil } diff --git a/pkg/hostman/storageman/backupstorage/backup_storage.go b/pkg/hostman/storageman/backupstorage/backup_storage.go index 8775b45063..d1e86adecc 100644 --- a/pkg/hostman/storageman/backupstorage/backup_storage.go +++ b/pkg/hostman/storageman/backupstorage/backup_storage.go @@ -33,7 +33,7 @@ type IBackupStorage interface { ConvertFrom(srcPath string, format qemuimg.TImageFormat, backupId string) (int, error) InstancePack(packageName string, backupIds []string, metadata *api.InstanceBackupPackMetadata) error InstanceUnpack(packageName string) ([]string, *api.InstanceBackupPackMetadata, error) - IsOnline() (bool, error) + IsOnline() (bool, string, error) } var backupStoragePool *sync.Map = &sync.Map{} diff --git a/pkg/hostman/storageman/backupstorage/backup_storage_nfs.go b/pkg/hostman/storageman/backupstorage/backup_storage_nfs.go index fe45a0af8e..dc2a636b1c 100644 --- a/pkg/hostman/storageman/backupstorage/backup_storage_nfs.go +++ b/pkg/hostman/storageman/backupstorage/backup_storage_nfs.go @@ -85,7 +85,7 @@ func (s *SNFSBackupStorage) checkAndMount() error { err := procutils.NewRemoteCommandContextAsFarAsPossible(ctx, "mount", "-t", "nfs", fmt.Sprintf("%s:%s", s.NfsHost, s.NfsSharedDir), s.Path).Run() if err != nil { - return ErrorBackupStorageOffline + return errors.Wrap(ErrorBackupStorageOffline, err.Error()) } backupDir := s.getBackupDir() if !fileutils2.Exists(backupDir) { @@ -462,14 +462,14 @@ func (s *SNFSBackupStorage) IsExists(backupId string) (bool, error) { return fileutils2.Exists(filename), nil } -func (s *SNFSBackupStorage) IsOnline() (bool, error) { +func (s *SNFSBackupStorage) IsOnline() (bool, string, error) { err := s.checkAndMount() if errors.Cause(err) == ErrorBackupStorageOffline { - return false, nil + return false, err.Error(), nil } if err != nil { - return false, err + return false, "", err } s.unMount() - return true, nil + return true, "", nil } diff --git a/pkg/hostman/storageman/storagehandler/storagehandler.go b/pkg/hostman/storageman/storagehandler/storagehandler.go index ec272159f7..29fb15f5cc 100644 --- a/pkg/hostman/storageman/storagehandler/storagehandler.go +++ b/pkg/hostman/storageman/storagehandler/storagehandler.go @@ -260,7 +260,7 @@ func storageSyncBackupStorage(ctx context.Context, w http.ResponseWriter, r *htt hostutils.Response(ctx, w, err) return } - exist, err := backupStorage.IsOnline() + exist, reason, err := backupStorage.IsOnline() if err != nil { hostutils.Response(ctx, w, err) return @@ -275,6 +275,7 @@ func storageSyncBackupStorage(ctx context.Context, w http.ResponseWriter, r *htt status = compute.BACKUPSTORAGE_STATUS_OFFLINE } ret.Set("status", jsonutils.NewString(status)) + ret.Set("reason", jsonutils.NewString(reason)) hostutils.Response(ctx, w, ret) }