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)