Skip to content
This repository has been archived by the owner on Jul 22, 2024. It is now read-only.

Commit

Permalink
Merge pull request #76 from IBM/ubiquity-rest-refactoring-merge
Browse files Browse the repository at this point in the history
Ubiquity rest refactoring merge
  • Loading branch information
midoblgsm committed Aug 28, 2017
2 parents d79f1af + 6686803 commit bb59782
Show file tree
Hide file tree
Showing 6 changed files with 343 additions and 245 deletions.
2 changes: 2 additions & 0 deletions local/spectrumscale/connectors/connectors.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@ type SpectrumScaleConnector interface {
const (
UserSpecifiedFilesetType string = "fileset-type"
UserSpecifiedInodeLimit string = "inode-limit"
UserSpecifiedUid string = "uid"
UserSpecifiedGid string = "gid"
)

func GetSpectrumScaleConnector(logger *log.Logger, config resources.SpectrumScaleConfig) (SpectrumScaleConnector, error) {
Expand Down
4 changes: 2 additions & 2 deletions local/spectrumscale/connectors/resources.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@ type ClusterSummary struct {
ClusterName string `json:"clusterName,omitempty"`
PrimaryServer string `json:"primaryServer,omitempty"`
RcpPath string `json:"rcpPath,omitempty"`
RcpSudoWrapper string `json:"rcpSudoWrapper,omitempty"`
RepositoryType string `json:"repositoryType,omitempty"`
RshPath string `json:"rshPath,omitempty"`
SecondaryServer string `json:"secondaryServer,omitempty"`
Expand Down Expand Up @@ -499,6 +498,7 @@ type SetQuotaRequest_v2 struct {
FilesSoftLimit string `json:"filesSoftLimit,omitempty"`
OperationType string `json:"operationType,omitempty"`
QuotaType string `json:"quotaType,omitempty"`
ObjectName string `json:"objectName,omitempty"`
}

type LinkFilesetRequest struct {
Expand All @@ -515,7 +515,7 @@ type CreateFilesetRequest struct {
Owner string `json:"owner,omitempty"`
Permissions string `json:"permissions,omitempty"`
InodeSpace string `json:"inodeSpace,omitempty"`
MaxNumInodes string `json:"maxNumInode,omitempty"`
MaxNumInodes string `json:"maxNumInodes,omitempty"`
AllocInodes string `json:"allocInodes,omitempty"`
PermissionChangeMode string `json:"permissionChangeMode,omitempty"`
Comment string `json:"comment,omitempty"`
Expand Down
71 changes: 36 additions & 35 deletions local/spectrumscale/connectors/rest_v2.go
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ func (s *spectrumRestV2) AsyncJobCompletion(jobURL string) error {
}

if jobQueryResponse.Jobs[0].Status == "RUNNING" {
time.Sleep(5000 * time.Millisecond)
time.Sleep(2000 * time.Millisecond)
continue
}
break
Expand All @@ -117,7 +117,7 @@ func (s *spectrumRestV2) AsyncJobCompletion(jobURL string) error {
s.logger.Printf("Job %v Completed Successfully: %v\n",jobURL,jobQueryResponse.Jobs[0].Result)
return nil
} else {
return fmt.Errorf("Job %v Failed to Complete:\n %v",jobURL,jobQueryResponse.Jobs[0].Result)
return fmt.Errorf("%v",jobQueryResponse.Jobs[0].Result.Stderr)
}
}

Expand Down Expand Up @@ -160,7 +160,7 @@ func (s *spectrumRestV2) GetClusterId() (string, error) {
err := s.doHTTP(getClusterURL, "GET", &getClusterResponse, nil)
if err != nil {
s.logger.Printf("error in executing remote call: %v", err)
return "", err
return "", fmt.Errorf("Unable to get cluster id. Please refer Ubiquity server logs for more details")
}
cid_str := fmt.Sprintf("%v", getClusterResponse.Cluster.ClusterSummary.ClusterID)
return cid_str, nil
Expand All @@ -180,7 +180,7 @@ func (s *spectrumRestV2) IsFilesystemMounted(filesystemName string) (bool, error
err := s.doHTTP(getNodesURL, "GET", &getNodesResponse, nil)
if err != nil {
s.logger.Printf("error in executing remote call: %v", err)
return false, err
return false, fmt.Errorf("Unable to fetch nodes for %v. Please refer Ubiquity server logs for more details",filesystemName)
}

if s.hostname != "" {
Expand Down Expand Up @@ -222,7 +222,7 @@ func (s *spectrumRestV2) ListFilesystems() ([]string, error) {
err := s.doHTTP(listFilesystemsURL, "GET", &getFilesystemResponse, nil)
if err != nil {
s.logger.Printf("error in executing remote call: %v", err)
return nil, err
return nil, fmt.Errorf("Unable to list filesystems. Please refer Ubiquity server logs for more details")
}
fsNumber := len(getFilesystemResponse.FileSystems)
filesystems := make([]string, fsNumber)
Expand All @@ -245,13 +245,13 @@ func (s *spectrumRestV2) GetFilesystemMountpoint(filesystemName string) (string,
err := s.doHTTP(getFilesystemURL, "GET", &getFilesystemResponse, nil)
if err != nil {
s.logger.Printf("error in executing remote call: %v", err)
return "", err
return "", fmt.Errorf("Unable to fetch mount point for %v. Please refer Ubiquity server logs for more details",filesystemName)
}

if len(getFilesystemResponse.FileSystems) > 0 {
return getFilesystemResponse.FileSystems[0].Mount.MountPoint, nil
} else {
return "", fmt.Errorf("Unable to get Filesystem")
return "", fmt.Errorf("Unable to fetch mount point for %v. Please refer Ubiquity server logs for more details",filesystemName)
}
}

Expand All @@ -263,16 +263,19 @@ func (s *spectrumRestV2) CreateFileset(filesystemName string, filesetName string
filesetreq := CreateFilesetRequest{}
filesetreq.FilesetName = filesetName
filesetreq.Comment = "fileset for container volume"

filesetType, filesetTypeSpecified := opts[UserSpecifiedFilesetType]
inodeLimit, inodeLimitSpecified := opts[UserSpecifiedInodeLimit]
if filesetTypeSpecified && filesetType.(string) == "independent" {
filesetreq.InodeSpace = "new"
if inodeLimitSpecified {
filesetreq.MaxNumInodes = inodeLimit.(string)
filesetreq.AllocInodes = inodeLimit.(string)
}
} else {
filesetreq.InodeSpace = "root"
}

s.logger.Printf("filesetreq %v\n", filesetreq)
createFilesetURL := utils.FormatURL(s.endpoint, fmt.Sprintf("scalemgmt/v2/filesystems/%s/filesets", filesystemName))
createFilesetResponse := GenericResponse{}
Expand All @@ -282,7 +285,7 @@ func (s *spectrumRestV2) CreateFileset(filesystemName string, filesetName string
err := s.doHTTP(createFilesetURL, "POST", &createFilesetResponse, filesetreq)
if err != nil {
s.logger.Printf("error in remote call %v", err)
return err
return fmt.Errorf("Unable to create fileset %v. Please refer Ubiquity server logs for more details",filesetName)
}

err = s.isRequestAccepted(createFilesetResponse, createFilesetURL)
Expand All @@ -292,7 +295,7 @@ func (s *spectrumRestV2) CreateFileset(filesystemName string, filesetName string

err = s.waitForJobCompletion(createFilesetResponse.Status.Code, createFilesetResponse.Jobs[0].JobID)
if err != nil {
return fmt.Errorf("Unable to create fileset %v. Please refer Ubiquity server logs for more details",filesetName)
return fmt.Errorf("Unable to create fileset %v:%v Please refer Ubiquity server logs for more details",filesetName,err)
}
return nil
}
Expand All @@ -310,7 +313,7 @@ func (s *spectrumRestV2) DeleteFileset(filesystemName string, filesetName string
err := s.doHTTP(deleteFilesetURL, "DELETE", &deleteFilesetResponse, nil)
if err != nil {
s.logger.Printf("Error in delete remote call")
return err
return fmt.Errorf("Unable to delete fileset %v. Please refer Ubiquity server logs for more details",filesetName)
}

err = s.isRequestAccepted(deleteFilesetResponse, deleteFilesetURL)
Expand All @@ -320,7 +323,7 @@ func (s *spectrumRestV2) DeleteFileset(filesystemName string, filesetName string

err = s.waitForJobCompletion(deleteFilesetResponse.Status.Code, deleteFilesetResponse.Jobs[0].JobID)
if err != nil {
return fmt.Errorf("Unable to delete fileset %v. Please refer Ubiquity server logs for more details",filesetName)
return fmt.Errorf("Unable to delete fileset %v:%v. Please refer Ubiquity server logs for more details",filesetName, err)
}

return nil
Expand All @@ -347,7 +350,7 @@ func (s *spectrumRestV2) LinkFileset(filesystemName string, filesetName string)
err = s.doHTTP(linkFilesetURL, "POST", &linkFilesetResponse, linkReq)
if err != nil {
s.logger.Printf("error in remote call %v", err)
return err
return fmt.Errorf("Unable to link fileset %v. Please refer Ubiquity server logs for more details",filesetName)
}

err = s.isRequestAccepted(linkFilesetResponse, linkFilesetURL)
Expand All @@ -357,7 +360,7 @@ func (s *spectrumRestV2) LinkFileset(filesystemName string, filesetName string)

err = s.waitForJobCompletion(linkFilesetResponse.Status.Code, linkFilesetResponse.Jobs[0].JobID)
if err != nil {
return fmt.Errorf("Unable to link fileset %v. Please refer Ubiquity server logs for more details",filesetName)
return fmt.Errorf("Unable to link fileset %v:%v. Please refer Ubiquity server logs for more details",filesetName, err)
}
return nil
}
Expand All @@ -367,19 +370,16 @@ func (s *spectrumRestV2) UnlinkFileset(filesystemName string, filesetName string
s.logger.Println("spectrumRestConnector: UnlinkFileset")
defer s.logger.Println("spectrumRestConnector: UnlinkFileset end")

UnlinkReq := UnlinkFilesetRequest{}
UnlinkReq.Force = true

unlinkFilesetURL := utils.FormatURL(s.endpoint, fmt.Sprintf("scalemgmt/v2/filesystems/%s/filesets/%s/link", filesystemName, filesetName))
unlinkFilesetURL := utils.FormatURL(s.endpoint, fmt.Sprintf("scalemgmt/v2/filesystems/%s/filesets/%s/link?force=True", filesystemName, filesetName))
unlinkFilesetResponse := GenericResponse{}

s.logger.Println("Unlink Fileset URL: ", unlinkFilesetURL)

err := s.doHTTP(unlinkFilesetURL, "DELETE", &unlinkFilesetResponse, UnlinkReq)
err := s.doHTTP(unlinkFilesetURL, "DELETE", &unlinkFilesetResponse, nil)

if err != nil {
s.logger.Printf("error in remote call %v", err)
return err
return fmt.Errorf("Unable to unlink fileset %v. Please refer Ubiquity server logs for more details",filesetName)
}

err = s.isRequestAccepted(unlinkFilesetResponse, unlinkFilesetURL)
Expand All @@ -389,7 +389,7 @@ func (s *spectrumRestV2) UnlinkFileset(filesystemName string, filesetName string

err = s.waitForJobCompletion(unlinkFilesetResponse.Status.Code, unlinkFilesetResponse.Jobs[0].JobID)
if err != nil {
return fmt.Errorf("Unable to unlink fileset %v. Please refer Ubiquity server logs for more details",filesetName)
return fmt.Errorf("Unable to unlink fileset %v:%v. Please refer Ubiquity server logs for more details",filesetName, err)
}

return nil
Expand All @@ -408,11 +408,11 @@ func (s *spectrumRestV2) ListFileset(filesystemName string, filesetName string)
err := s.doHTTP(getFilesetURL, "GET", &getFilesetResponse, nil)
if err != nil {
s.logger.Printf("error in processing remote call %v", err)
return resources.Volume{}, err
return resources.Volume{}, fmt.Errorf("Unable to list fileset %v. Please refer Ubiquity server logs for more details",filesetName)
}

if len(getFilesetResponse.Filesets) == 0 {
return resources.Volume{}, fmt.Errorf("Unable to get fileset %v", getFilesetURL)
return resources.Volume{}, fmt.Errorf("Unable to list fileset %v. Please refer Ubiquity server logs for more details",filesetName)
}

name := getFilesetResponse.Filesets[0].Config.FilesetName
Expand All @@ -437,7 +437,7 @@ func (s *spectrumRestV2) ListFilesets(filesystemName string) ([]resources.Volume
err := s.doHTTP(listFilesetURL, "GET", &listFilesetResponse, nil)
if err != nil {
s.logger.Printf("error in processing remote call %v", err)
return nil, err
return nil, fmt.Errorf("Unable to list filesets for %v. Please refer Ubiquity server logs for more details",filesystemName)
}
responseSize = len(listFilesetResponse.Filesets)

Expand Down Expand Up @@ -487,13 +487,14 @@ func (s *spectrumRestV2) SetFilesetQuota(filesystemName string, filesetName stri
quotaRequest.BlockSoftLimit = quota
quotaRequest.OperationType = "setQuota"
quotaRequest.QuotaType = "fileset"
quotaRequest.ObjectName = filesetName

setQuotaResponse := GenericResponse{}

err := s.doHTTP(setQuotaURL, "POST", &setQuotaResponse, quotaRequest)
if err != nil {
s.logger.Printf("error setting quota for fileset %v", err)
return err
return fmt.Errorf("Unable to set quota for fileset %v. Please refer Ubiquity server logs for more details",filesetName)
}

err = s.isRequestAccepted(setQuotaResponse, setQuotaURL)
Expand All @@ -503,7 +504,7 @@ func (s *spectrumRestV2) SetFilesetQuota(filesystemName string, filesetName stri

err = s.waitForJobCompletion(setQuotaResponse.Status.Code, setQuotaResponse.Jobs[0].JobID)
if err != nil {
return fmt.Errorf("Unable to set quota for fileset %v. Please refer Ubiquity server logs for more details",filesetName)
return fmt.Errorf("Unable to set quota for fileset %v:%v. Please refer Ubiquity server logs for more details",filesetName, err)
}
return nil
}
Expand All @@ -513,22 +514,22 @@ func (s *spectrumRestV2) ListFilesetQuota(filesystemName string, filesetName str
s.logger.Println("spectrumRestConnector: ListFilesetQuota")
defer s.logger.Println("spectrumRestConnector: ListFilesetQuota end")

listQuotaURL := utils.FormatURL(s.endpoint, fmt.Sprintf("scalemgmt/v2/filesystems/%s/filesets/%s/quotas", filesystemName, filesetName))
listQuotaURL := utils.FormatURL(s.endpoint, fmt.Sprintf("scalemgmt/v2/filesystems/%s/quotas?filter=objectName=%s", filesystemName, filesetName))
listQuotaResponse := GetQuotaResponse_v2{}

s.logger.Println("List Quota URL: ", listQuotaURL)

err := s.doHTTP(listQuotaURL, "GET", &listQuotaResponse, nil)
if err != nil {
s.logger.Printf("error in processing remote call %v", err)
return "", err
return "", fmt.Errorf("Unable to fetch quota information %v. Please refer Ubiquity server logs for more details", filesystemName)
}

//TODO check which quota in quotas[] and which attribute
if len(listQuotaResponse.Quotas) > 0 {
return fmt.Sprintf("%d", listQuotaResponse.Quotas[0].BlockQuota), nil
return fmt.Sprintf("%dK", listQuotaResponse.Quotas[0].BlockQuota), nil
} else {
return "", fmt.Errorf("Unable to get Quota information")
return "", fmt.Errorf("Unable to fetch quota information %v. Please refer Ubiquity server logs for more details", filesystemName)
}
}

Expand All @@ -549,7 +550,7 @@ func (s *spectrumRestV2) ExportNfs(volumeMountpoint string, clientConfig string)
err := s.doHTTP(exportNfsURL, "POST", &nfsExportResp, nfsExportReq)
if err != nil {
s.logger.Printf("error during NFS export %v", err)
return err
return fmt.Errorf("Unable to export %v. Please refer Ubiquity server logs for more details",volumeMountpoint)
}

err = s.isRequestAccepted(nfsExportResp, exportNfsURL)
Expand All @@ -559,7 +560,7 @@ func (s *spectrumRestV2) ExportNfs(volumeMountpoint string, clientConfig string)

err = s.waitForJobCompletion(nfsExportResp.Status.Code, nfsExportResp.Jobs[0].JobID)
if err != nil {
return fmt.Errorf("Unable to export %v. Please refer Ubiquity server logs for more details",volumeMountpoint)
return fmt.Errorf("Unable to export %v:%v. Please refer Ubiquity server logs for more details",volumeMountpoint, err)
}
return nil
}
Expand All @@ -578,7 +579,7 @@ func (s *spectrumRestV2) UnexportNfs(volumeMountpoint string) error {
err := s.doHTTP(unexportNfsURL, "DELETE", &unexportNfsResp, nil)
if err != nil {
s.logger.Printf("Error while deleting NFS export %v", err)
return err
return fmt.Errorf("Unable to remove export %v. Please refer Ubiquity server logs for more details",volumeMountpoint)
}

err = s.isRequestAccepted(unexportNfsResp, unexportNfsURL)
Expand All @@ -589,7 +590,7 @@ func (s *spectrumRestV2) UnexportNfs(volumeMountpoint string) error {
err = s.waitForJobCompletion(unexportNfsResp.Status.Code, unexportNfsResp.Jobs[0].JobID)

if err != nil {
return fmt.Errorf("Unable to remove export %v. Please refer Ubiquity server logs for more details",volumeMountpoint)
return fmt.Errorf("Unable to remove export %v:%v. Please refer Ubiquity server logs for more details",volumeMountpoint, err)
}
return nil
}
Expand All @@ -603,8 +604,8 @@ func (s *spectrumRestV2) doHTTP(endpoint string, method string, responseObject i
}

if !s.isStatusOK(response.StatusCode) {
s.logger.Printf("Error in get filesystem remote call %#v\n", response)
return utils.ExtractErrorResponse(response)
s.logger.Printf("Remote call completed with error %#v\n", response)
return fmt.Errorf("Remote call completed with error")
}
err = utils.UnmarshalResponse(response, responseObject)
if err != nil {
Expand Down
Loading

0 comments on commit bb59782

Please sign in to comment.