fileSD: Fix remotePath in SD metadata (V2)

Ayal Baron abaron at redhat.com
Tue Sep 27 21:05:08 UTC 2011



----- Original Message -----
> Changes since V1:
>  - Derive the remotePath from self.mountpoint instead of using the
>  metadata
> 
> The current method for gathering a LOCALFS Storage Domain's
> remotePath property
> does not work because these domains are connected with a symlink, not
> a mount.
> Fix up the current code so that it handles links and mountpoints.
> 
> In the code I have noticed some sentiments that path information
> should be
> removed from the storage domain metadata.  I strongly disagree with
> this idea.
> The path is a critical piece of information.  End users will care a
> lot about
> the path because it is where their images are located.  This
> informaton is also
> useful for calling connectStorageServer() and
> disconnectStorageServer().
> 
> Signed-off-by: Adam Litke <agl at us.ibm.com>
> 
> diff --git a/vdsm/storage/fileSD.py b/vdsm/storage/fileSD.py
> index 35f7ab3..e904bfe 100644
> --- a/vdsm/storage/fileSD.py
> +++ b/vdsm/storage/fileSD.py
> @@ -38,7 +38,9 @@ import time
>  REMOTE_PATH = "REMOTE_PATH"
>  
>  FILE_SD_MD_FIELDS = sd.SD_MD_FIELDS.copy()
> -# TBD: Do we really need this key?
> +# Do we really need this key?
> +# Answer: Yes.  The path is an important part of the SD metadata and
> is useful
> +# information for end-users.  It can also be used to manage storage
> connections.

Comment is incorrect.  We still do not want this key in the metadata

>  FILE_SD_MD_FIELDS[REMOTE_PATH] = (str, str)
>  
>  def getDomUuidFromMetafilePath(metafile):
> @@ -224,6 +226,19 @@ class FileStorageDomain(sd.StorageDomain):
>      def getRemotePath(self):
>          return self.remotePath
>  
> +    def mountToRemotePath(self):

I'm not clear on the name seeing as in a local storage scenario this wouldn't be a mount

> +        """
> +        Get the remote path based on the storage mountpoint.

Again, not a mountpoint

> +        Handle symlinks and mounts.
> +        """
> +        if os.path.islink(self.mountpoint):
> +            return os.readlink(self.mountpoint)
doesn't self.remotePath already contain the info you're looking for in this case?

seeing as we have separate classes for localFsSD and nfsSD, why not implement this function in each file separately? (getInfo would call self.getRemotePath())

> +        elif os.path.isdir(self.mountpoint):
> +            for mount in fileUtils.getMounts():
> +                if self.mountpoint == mount[1]:
> +                    return mount[0]
> +        return ''
> +
>      def getInfo(self):
>          """
>          Get storage domain info
> @@ -232,13 +247,7 @@ class FileStorageDomain(sd.StorageDomain):
>          # First call parent getInfo() - it fills in all the common
>          details
>          info = sd.StorageDomain.getInfo(self)
>          # Now add fileSD specific data
> -        info['remotePath'] = ''
> -        mounts = fileUtils.getMounts()
> -        for mount in mounts:
> -            if self.mountpoint == mount[1]:
> -                info['remotePath'] = mount[0]
> -                break
> -
> +        info['remotePath'] = self.mountToRemotePath()
>          return info
>  
>      def getStats(self):
> --
> Adam Litke <agl at us.ibm.com>
> IBM Linux Technology Center
> 
> _______________________________________________
> vdsm-patches mailing list
> vdsm-patches at lists.fedorahosted.org
> https://fedorahosted.org/mailman/listinfo/vdsm-patches
> 


More information about the vdsm-patches mailing list