Hi all,

When I add my codes of mounting gluster storage directory in
CreateDisks function of lib/cmdlib/instance_storage.py file as follows.


---
 lib/cmdlib/instance_storage.py |   16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/lib/cmdlib/instance_storage.py b/lib/cmdlib/instance_storage.py
index 4c602ae..bfb7324 100644
--- a/lib/cmdlib/instance_storage.py
+++ b/lib/cmdlib/instance_storage.py
@@ -255,6 +255,22 @@ def CreateDisks(lu, instance, to_skip=None,
target_node_uuid=None, disks=None):
                  " node %s" % (file_storage_dir,
                                lu.cfg.GetNodeName(pnode_uuid)))

+    if instance.disk_template == constants.DT_GLUSTER_FILE:
+      gluster_storage_dir = lu.cfg.GetClusterInfo().gluster_file_storage_dir
+      if not os.path.ismount(gluster_storage_dir):

+        diskparams = lu.cfg.GetClusterInfo().diskparams
+        glusterparams = diskparams[constants.DT_GLUSTER_FILE]
+        gluster_volname = glusterparams[constants.LDP_VOLNAME]
+        gluster_hostname = glusterparams[constants.LDP_HOSTNAME]
+        result = lu.rpc.call_mount_gluster_storage_dir(pnode_uuid,
+                                                   gluster_hostname,
+                                                   gluster_volname,
+                                                   gluster_storage_dir)
+
+        result.Raise("Failed to mount directory '%s' on"
+                     " node %s" % (gluster_storage_dir,
+                                  lu.cfg.GetNodeName(pnode_uuid)))
+
   disks_created = []
   for idx, device in enumerate(disks):
     if to_skip and idx in to_skip:



And I run "gnt-instance add -n node0.harrycluster.com -o
debootstrap+default -t gluster -s 5G --file-storage-dir mysubdir
instance0.harrycluster.com" command. It happened to me the
errors as follows.


root@node0:~/workshop2/ganeti# gnt-instance add -n
node0.harrycluster.com -o debootstrap+default -t gluster -s 5G
--file-storage-dir mysubdir instance0.harrycluster.com
Sat Jul 27 11:50:07 2013 * disk 0, size 5.0G
Sat Jul 27 11:50:07 2013 * creating instance disks...
Sat Jul 27 11:50:12 2013  - WARNING: Device creation failed
Failure: command execution error:
Can't create block device <Disk(type=file, logical_id=('loop',
'/srv/ganeti/gluster-file-storage/mysubdir/instance0.harrycluster.com/disk0'),
physical_id=('loop',
'/srv/ganeti/gluster-file-storage/mysubdir/instance0.harrycluster.com/disk0'),
children=None, visible as /dev/disk/0, size=5120m)> on node
node0.harrycluster.com for instance instance0.harrycluster.com: Error
while executing backend function: incomplete format




The logs in the log file is as follows:


root@node0:/var/log/ganeti# cat master-daemon.log  | tail -40
2013-07-27 11:50:03,583: ganeti-masterd pid=9582/ClientReq13 INFO
Received job poll request for 3
2013-07-27 11:50:03,585: ganeti-masterd pid=9582/ClientReq14 INFO
Received job poll request for 3
2013-07-27 11:50:03,616: ganeti-masterd pid=9582/Jq3/Job3 INFO Op 1/1:
opcode INSTANCE_CREATE(instance0.harrycluster.com) waiting for locks
2013-07-27 11:50:03,718: ganeti-masterd pid=9582/ClientReq15 INFO
Received job poll request for 3
2013-07-27 11:50:07,790: ganeti-masterd pid=9582/ClientReq3 INFO
Received job poll request for 3
2013-07-27 11:50:12,044: ganeti-masterd pid=9582/Jq3/Job3/I_CREATE
INFO Creating disk 0 for instance 'instance0.harrycluster.com'
2013-07-27 11:50:12,148: ganeti-masterd pid=9582/Jq3/Job3/I_CREATE
WARNING Creating disk 0 for instance 'instance0.harrycluster.com'
failed
2013-07-27 11:50:12,148: ganeti-masterd pid=9582/Jq3/Job3/I_CREATE
WARNING Device creation failed
2013-07-27 11:50:12,201: ganeti-masterd pid=9582/Jq3/Job3 ERROR Op
1/1: Caught exception in INSTANCE_CREATE(instance0.harrycluster.com)
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/ganeti/jqueue.py", line
1115, in _ExecOpCodeUnlocked
    timeout=timeout)
  File "/usr/local/lib/python2.7/dist-packages/ganeti/jqueue.py", line
1426, in _WrapExecOpCode
    return execop_fn(op, *args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/ganeti/mcpu.py", line
517, in ExecOpCode
    calc_timeout)
  File "/usr/local/lib/python2.7/dist-packages/ganeti/mcpu.py", line
459, in _LockAndExecLU
    result = self._LockAndExecLU(lu, level + 1, calc_timeout)
  File "/usr/local/lib/python2.7/dist-packages/ganeti/mcpu.py", line
468, in _LockAndExecLU
    result = self._LockAndExecLU(lu, level + 1, calc_timeout)
  File "/usr/local/lib/python2.7/dist-packages/ganeti/mcpu.py", line
468, in _LockAndExecLU
    result = self._LockAndExecLU(lu, level + 1, calc_timeout)
  File "/usr/local/lib/python2.7/dist-packages/ganeti/mcpu.py", line
459, in _LockAndExecLU
    result = self._LockAndExecLU(lu, level + 1, calc_timeout)
  File "/usr/local/lib/python2.7/dist-packages/ganeti/mcpu.py", line
459, in _LockAndExecLU
    result = self._LockAndExecLU(lu, level + 1, calc_timeout)
  File "/usr/local/lib/python2.7/dist-packages/ganeti/mcpu.py", line
468, in _LockAndExecLU
    result = self._LockAndExecLU(lu, level + 1, calc_timeout)
  File "/usr/local/lib/python2.7/dist-packages/ganeti/mcpu.py", line
407, in _LockAndExecLU
    result = self._ExecLU(lu)
  File "/usr/local/lib/python2.7/dist-packages/ganeti/mcpu.py", line
374, in _ExecLU
    result = _ProcessResult(submit_mj_fn, lu.op, lu.Exec(self.Log))
  File "/usr/local/lib/python2.7/dist-packages/ganeti/cmdlib/instance.py",
line 1282, in Exec
    CreateDisks(self, iobj)
  File 
"/usr/local/lib/python2.7/dist-packages/ganeti/cmdlib/instance_storage.py",
line 291, in CreateDisks
    raise errors.OpExecError(e.message)
OpExecError: Can't create block device <Disk(type=file,
logical_id=('loop',
'/srv/ganeti/gluster-file-storage/mysubdir/instance0.harrycluster.com/disk0'),
physical_id=('loop',
'/srv/ganeti/gluster-file-storage/mysubdir/instance0.harrycluster.com/disk0'),
children=None, visible as /dev/disk/0, size=5120m)> on node
node0.harrycluster.com for instance instance0.harrycluster.com: Error
while executing backend function: incomplete format
2013-07-27 11:50:12,244: ganeti-masterd pid=9582/Jq3/Job3 INFO
Finished job 3, status = error
2013-07-27 11:50:12,306: ganeti-masterd pid=9582/ClientReq1 INFO
Received job poll request for 3
2013-07-27 11:50:12,308: ganeti-masterd pid=9582/ClientReq2 INFO
Received job query request for 3




root@node0:/var/log/ganeti# cat node-daemon.log | tail -20
2013-07-27 11:50:07,881: ganeti-noded pid=9732 INFO 999 storage dir is
/srv/ganeti/gluster-file-storage
2013-07-27 11:50:07,881: ganeti-noded pid=9732 INFO RunCmd mount -t
glusterfs node0:/ganeti /srv/ganeti/gluster-file-storage
2013-07-27 11:50:12,041: ganeti-noded pid=9732 INFO 999 After command executed
2013-07-27 11:50:12,042: ganeti-noded pid=9732 INFO
192.168.1.101:57611 POST /mount_gluster_storage_dir HTTP/1.1 200
2013-07-27 11:50:12,143: ganeti-noded pid=9767 ERROR Error in RPC call
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/ganeti/server/noded.py",
line 181, in HandleRequest
    result = (True, method(serializer.LoadJson(req.request_body)))
  File "/usr/local/lib/python2.7/dist-packages/ganeti/server/noded.py",
line 214, in perspective_blockdev_create
    excl_stor)
  File "/usr/local/lib/python2.7/dist-packages/ganeti/backend.py",
line 1981, in BlockdevCreate
    device = bdev.Create(disk, clist, excl_stor)
  File "/usr/local/lib/python2.7/dist-packages/ganeti/storage/bdev.py",
line 1804, in Create
    disk.spindles, disk.params, excl_stor)
  File "/usr/local/lib/python2.7/dist-packages/ganeti/storage/bdev.py",
line 866, in Create
    base.ThrowError("Error in file creation: %", str(err))
  File "/usr/local/lib/python2.7/dist-packages/ganeti/storage/base.py",
line 372, in ThrowError
    msg = msg % args
ValueError: incomplete format
2013-07-27 11:50:12,146: ganeti-noded pid=9767 INFO
192.168.1.101:57612 POST /blockdev_create HTTP/1.1 200




When I substitute gluster_storage_dir with file_storage_dir (Eg:
If gluster_storage_dir is /srv/ganeti/gluster-file-storage and file_storage_dir
would be /srv/ganeti/gluster-file-storage/instance0.harrycluster.com),
it works well for me. The patch would be as follows.

---
 lib/cmdlib/instance_storage.py |   16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/lib/cmdlib/instance_storage.py b/lib/cmdlib/instance_storage.py
index 4c602ae..bfb7324 100644
--- a/lib/cmdlib/instance_storage.py
+++ b/lib/cmdlib/instance_storage.py
@@ -255,6 +255,22 @@ def CreateDisks(lu, instance, to_skip=None,
target_node_uuid=None, disks=None):
                  " node %s" % (file_storage_dir,
                                lu.cfg.GetNodeName(pnode_uuid)))

+    if instance.disk_template == constants.DT_GLUSTER_FILE:
+      gluster_storage_dir = file_storage_dir
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+      if not os.path.ismount(gluster_storage_dir):

+        diskparams = lu.cfg.GetClusterInfo().diskparams
+        glusterparams = diskparams[constants.DT_GLUSTER_FILE]
+        gluster_volname = glusterparams[constants.LDP_VOLNAME]
+        gluster_hostname = glusterparams[constants.LDP_HOSTNAME]
+        result = lu.rpc.call_mount_gluster_storage_dir(pnode_uuid,
+                                                   gluster_hostname,
+                                                   gluster_volname,
+                                                   gluster_storage_dir)
+
+        result.Raise("Failed to mount directory '%s' on"
+                     " node %s" % (gluster_storage_dir,
+                                  lu.cfg.GetNodeName(pnode_uuid)))
+
   disks_created = []
   for idx, device in enumerate(disks):
     if to_skip and idx in to_skip:



Now, it seems the error is caused by lock error or something else
but I am not clear about how to fix it.

Would anyone please give me some suggestions? Thanks very much ;-)



--
Thanks
Weiwei  Jia (Harry Wei)

Reply via email to