Revision c417e115
b/lib/backend.py | ||
---|---|---|
1492 | 1492 |
return result |
1493 | 1493 |
|
1494 | 1494 |
|
1495 |
def BlockdevAssemble(disk, owner, as_primary): |
|
1495 |
def BlockdevAssemble(disk, owner, as_primary, idx):
|
|
1496 | 1496 |
"""Activate a block device for an instance. |
1497 | 1497 |
|
1498 | 1498 |
This is a wrapper over _RecursiveAssembleBD. |
... | ... | |
1507 | 1507 |
if isinstance(result, bdev.BlockDev): |
1508 | 1508 |
# pylint: disable-msg=E1103 |
1509 | 1509 |
result = result.dev_path |
1510 |
if as_primary: |
|
1511 |
_SymlinkBlockDev(owner, result, idx) |
|
1510 | 1512 |
except errors.BlockDeviceError, err: |
1511 | 1513 |
_Fail("Error while assembling disk: %s", err, exc=True) |
1514 |
except OSError, err: |
|
1515 |
_Fail("Error while symlinking disk: %s", err, exc=True) |
|
1512 | 1516 |
|
1513 | 1517 |
return result |
1514 | 1518 |
|
b/lib/cmdlib.py | ||
---|---|---|
4783 | 4783 |
# SyncSource, etc.) |
4784 | 4784 |
|
4785 | 4785 |
# 1st pass, assemble on all nodes in secondary mode |
4786 |
for inst_disk in disks:
|
|
4786 |
for idx, inst_disk in enumerate(disks):
|
|
4787 | 4787 |
for node, node_disk in inst_disk.ComputeNodeTree(instance.primary_node): |
4788 | 4788 |
if ignore_size: |
4789 | 4789 |
node_disk = node_disk.Copy() |
4790 | 4790 |
node_disk.UnsetSize() |
4791 | 4791 |
lu.cfg.SetDiskID(node_disk, node) |
4792 |
result = lu.rpc.call_blockdev_assemble(node, node_disk, iname, False) |
|
4792 |
result = lu.rpc.call_blockdev_assemble(node, node_disk, iname, False, idx)
|
|
4793 | 4793 |
msg = result.fail_msg |
4794 | 4794 |
if msg: |
4795 | 4795 |
lu.proc.LogWarning("Could not prepare block device %s on node %s" |
... | ... | |
4801 | 4801 |
# FIXME: race condition on drbd migration to primary |
4802 | 4802 |
|
4803 | 4803 |
# 2nd pass, do only the primary node |
4804 |
for inst_disk in disks:
|
|
4804 |
for idx, inst_disk in enumerate(disks):
|
|
4805 | 4805 |
dev_path = None |
4806 | 4806 |
|
4807 | 4807 |
for node, node_disk in inst_disk.ComputeNodeTree(instance.primary_node): |
... | ... | |
4811 | 4811 |
node_disk = node_disk.Copy() |
4812 | 4812 |
node_disk.UnsetSize() |
4813 | 4813 |
lu.cfg.SetDiskID(node_disk, node) |
4814 |
result = lu.rpc.call_blockdev_assemble(node, node_disk, iname, True) |
|
4814 |
result = lu.rpc.call_blockdev_assemble(node, node_disk, iname, True, idx)
|
|
4815 | 4815 |
msg = result.fail_msg |
4816 | 4816 |
if msg: |
4817 | 4817 |
lu.proc.LogWarning("Could not prepare block device %s on node %s" |
... | ... | |
5949 | 5949 |
for idx, disk in enumerate(instance.disks): |
5950 | 5950 |
self.LogInfo("Copying data for disk %d", idx) |
5951 | 5951 |
result = self.rpc.call_blockdev_assemble(target_node, disk, |
5952 |
instance.name, True) |
|
5952 |
instance.name, True, idx)
|
|
5953 | 5953 |
if result.fail_msg: |
5954 | 5954 |
self.LogWarning("Can't assemble newly created disk %d: %s", |
5955 | 5955 |
idx, result.fail_msg) |
b/lib/rpc.py | ||
---|---|---|
999 | 999 |
[[bdev.ToDict() for bdev in disks], pause]) |
1000 | 1000 |
|
1001 | 1001 |
@_RpcTimeout(_TMO_NORMAL) |
1002 |
def call_blockdev_assemble(self, node, disk, owner, on_primary): |
|
1002 |
def call_blockdev_assemble(self, node, disk, owner, on_primary, idx):
|
|
1003 | 1003 |
"""Request assembling of a given block device. |
1004 | 1004 |
|
1005 | 1005 |
This is a single-node call. |
1006 | 1006 |
|
1007 | 1007 |
""" |
1008 | 1008 |
return self._SingleNodeCall(node, "blockdev_assemble", |
1009 |
[disk.ToDict(), owner, on_primary]) |
|
1009 |
[disk.ToDict(), owner, on_primary, idx])
|
|
1010 | 1010 |
|
1011 | 1011 |
@_RpcTimeout(_TMO_NORMAL) |
1012 | 1012 |
def call_blockdev_shutdown(self, node, disk): |
b/lib/server/noded.py | ||
---|---|---|
1 | 1 |
# |
2 | 2 |
# |
3 | 3 |
|
4 |
# Copyright (C) 2006, 2007, 2010 Google Inc. |
|
4 |
# Copyright (C) 2006, 2007, 2010, 2011 Google Inc.
|
|
5 | 5 |
# |
6 | 6 |
# This program is free software; you can redistribute it and/or modify |
7 | 7 |
# it under the terms of the GNU General Public License as published by |
... | ... | |
223 | 223 |
"""Assemble a block device. |
224 | 224 |
|
225 | 225 |
""" |
226 |
bdev_s, owner, on_primary = params |
|
226 |
bdev_s, owner, on_primary, idx = params
|
|
227 | 227 |
bdev = objects.Disk.FromDict(bdev_s) |
228 | 228 |
if bdev is None: |
229 | 229 |
raise ValueError("can't unserialize data!") |
230 |
return backend.BlockdevAssemble(bdev, owner, on_primary) |
|
230 |
return backend.BlockdevAssemble(bdev, owner, on_primary, idx)
|
|
231 | 231 |
|
232 | 232 |
@staticmethod |
233 | 233 |
def perspective_blockdev_shutdown(params): |
Also available in: Unified diff