-----Original Message-----
From: vdsm-devel-bounces(a)lists.fedorahosted.org
[mailto:vdsm-devel-bounces@lists.fedorahosted.org] On
Behalf Of Adam Litke
Sent: Tuesday, September 27, 2011 19:25 PM
To: vdsm-devel(a)lists.fedorahosted.org
Subject: fileSD: Fix remotePath in SD metadata (V2)
Changes since V1:
- Derive the remotePath from self.mountpoint instead of using the
metadata
Any reason the patches are being sent here, rather than to vdsm-patches?
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(a)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.
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):
+ """
+ Get the remote path based on the storage mountpoint.
+ Handle symlinks and mounts.
+ """
+ if os.path.islink(self.mountpoint):
+ return os.readlink(self.mountpoint)
+ 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(a)us.ibm.com>
IBM Linux Technology Center
_______________________________________________
vdsm-devel mailing list
vdsm-devel(a)lists.fedorahosted.org
https://fedorahosted.org/mailman/listinfo/vdsm-devel