Merge lp:~billy-olsen/nova/kilo+lp1374999 into lp:~ubuntu-server-dev/nova/kilo

Proposed by Billy Olsen
Status: Merged
Merge reported by: Michael Terry
Merged at revision: not available
Proposed branch: lp:~billy-olsen/nova/kilo+lp1374999
Merge into: lp:~ubuntu-server-dev/nova/kilo
Diff against target: 157 lines (+137/-0)
3 files modified
debian/changelog (+8/-0)
debian/patches/fix-iscsi-detach.patch (+128/-0)
debian/patches/series (+1/-0)
To merge this branch: bzr merge lp:~billy-olsen/nova/kilo+lp1374999
Reviewer Review Type Date Requested Status
Ubuntu Server Developers Pending
Review via email: mp+290930@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Michael Terry (mterry) wrote :

Looks like this already landed in r791. Marking as merged.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'debian/changelog'
2--- debian/changelog 2016-03-18 19:57:29 +0000
3+++ debian/changelog 2016-04-04 22:41:39 +0000
4@@ -1,3 +1,11 @@
5+nova (1:2015.1.3-0ubuntu1~cloud1) trusty-kilo; urgency=medium
6+
7+ * d/p/fix-iscsi-detach.patch (LP: #1374999)
8+ - Clear latest path for last remaining iscsi disk to ensure
9+ disk is properly removed.
10+
11+ -- Billy Olsen <billy.olsen@canonical.com> Mon, 04 Apr 2016 14:28:40 -0700
12+
13 nova (1:2015.1.3-0ubuntu1) trusty-kilo; urgency=medium
14
15 * New upstream stable release (LP: #1559215).
16
17=== added file 'debian/patches/fix-iscsi-detach.patch'
18--- debian/patches/fix-iscsi-detach.patch 1970-01-01 00:00:00 +0000
19+++ debian/patches/fix-iscsi-detach.patch 2016-04-04 22:41:39 +0000
20@@ -0,0 +1,128 @@
21+From 768da20fab6f84a8c34a089767b87924045c905a Mon Sep 17 00:00:00 2001
22+From: Rafael David Tinoco <rafael.tinoco@canonical.com>
23+Date: Tue, 18 Nov 2014 18:03:00 +0000
24+Reviewed-By: Billy Olsen <billy.olsen@canonical.com>,
25+ Jorge Niedbalski <jorge.niedbalski@canonical.com>,
26+ Felipe Reyes <felipe.reyes@canonical.com>
27+Forwarded: https://review.openstack.org/#/c/135382/
28+Bug: https://bugs.launchpad.net/nova/+bug/1374999
29+Subject: [PATCH 1/1] Detach iSCSI latest path for latest disk
30+
31+The logic responsible to disconnect iscsi volumes wasn't clearing
32+latest path for the latest remaining disk. With this change,
33+latest disk path is removed right before iscsi disk is disconnected.
34+
35+Also, the device descriptor was not removed if the iqn are different
36+and multipath is enabled.
37+
38+Change-Id: Ib6f6cea40cc3a14a3a443b157d0decba5602bf13
39+Closes-Bug: 1374999
40+Closes-Bug: 1452032
41+---
42+ nova/tests/unit/virt/libvirt/test_volume.py | 54 +++++++++++++++++++++++++----
43+ nova/virt/libvirt/volume.py | 2 +-
44+ 2 files changed, 49 insertions(+), 7 deletions(-)
45+
46+diff --git a/nova/tests/unit/virt/libvirt/test_volume.py b/nova/tests/unit/virt/libvirt/test_volume.py
47+index c677fab..1db05d1 100644
48+--- a/nova/tests/unit/virt/libvirt/test_volume.py
49++++ b/nova/tests/unit/virt/libvirt/test_volume.py
50+@@ -523,13 +523,10 @@ Setting up iSCSI targets: unused
51+ self.stubs.Set(libvirt_driver, '_get_multipath_device_name',
52+ lambda x: fake_multipath_device)
53+
54+- def fake_disconnect_volume_multipath_iscsi(iscsi_properties,
55+- multipath_device):
56+- if fake_multipath_device != multipath_device:
57+- raise Exception('Invalid multipath_device.')
58++ fake_rm_mp_dev_desc = mock.MagicMock()
59+
60+- self.stubs.Set(libvirt_driver, '_disconnect_volume_multipath_iscsi',
61+- fake_disconnect_volume_multipath_iscsi)
62++ self.stubs.Set(libvirt_driver, '_remove_multipath_device_descriptor',
63++ fake_rm_mp_dev_desc)
64+ with mock.patch.object(os.path, 'exists', return_value=True):
65+ vol = {'id': 1, 'name': self.name}
66+ connection_info = self.iscsi_connection(vol, self.location,
67+@@ -539,6 +536,50 @@ Setting up iSCSI targets: unused
68+ self.assertEqual(fake_multipath_id,
69+ connection_info['data']['multipath_id'])
70+ libvirt_driver.disconnect_volume(connection_info, "fake")
71++ fake_rm_mp_dev_desc.assert_called_with(fake_multipath_device)
72++
73++ def test_disconnect_volume_multipath_iscsi_not_in_use(self):
74++ libvirt_driver = volume.LibvirtISCSIVolumeDriver(self.fake_conn)
75++ libvirt_driver.use_multipath = True
76++ self.stubs.Set(libvirt_driver, '_run_iscsiadm_bare',
77++ lambda x, check_exit_code: ('',))
78++ self.stubs.Set(libvirt_driver, '_rescan_iscsi', lambda: None)
79++ self.stubs.Set(libvirt_driver, '_get_host_device', lambda x: None)
80++ self.stubs.Set(libvirt_driver, '_rescan_multipath', lambda: None)
81++
82++ fake_multipath_id = 'fake_multipath_id'
83++ fake_multipath_device = '/dev/mapper/%s' % fake_multipath_id
84++
85++ fake_remove_multipath_device_descriptor = mock.MagicMock()
86++ fake_disconnect_mpath = mock.MagicMock()
87++
88++ self.stubs.Set(libvirt_driver, '_get_multipath_device_name',
89++ lambda x: fake_multipath_device)
90++
91++ self.stubs.Set(libvirt_driver,
92++ '_remove_multipath_device_descriptor',
93++ fake_remove_multipath_device_descriptor)
94++
95++ self.stubs.Set(libvirt_driver,
96++ '_disconnect_mpath', fake_disconnect_mpath)
97++
98++ self.stubs.Set(libvirt_driver,
99++ '_get_target_portals_from_iscsiadm_output',
100++ lambda x: [[self.location, self.iqn]])
101++
102++ with contextlib.nested(
103++ mock.patch.object(os.path, 'exists', return_value=True),
104++ mock.patch.object(libvirt_driver, '_connect_to_iscsi_portal')
105++ ):
106++ vol = {'id': 1, 'name': self.name}
107++ connection_info = self.iscsi_connection(vol, self.location,
108++ self.iqn)
109++ libvirt_driver.connect_volume(connection_info,
110++ self.disk_info)
111++ libvirt_driver.disconnect_volume(connection_info, "fake")
112++
113++ fake_remove_multipath_device_descriptor.assert_called_with(
114++ fake_multipath_device)
115+
116+ def test_sanitize_log_run_iscsiadm(self):
117+ # Tests that the parameters to the _run_iscsiadm function are sanitized
118+@@ -774,6 +815,7 @@ Setting up iSCSI targets: unused
119+ ('iscsiadm', '-m', 'discoverydb',
120+ '-t', 'sendtargets',
121+ '-p', self.location, '--discover'),
122++ ('multipath', '-f', 'foo'),
123+ ('multipath', '-r')]
124+ self.assertEqual(self.executes, expected_commands)
125+
126+diff --git a/nova/virt/libvirt/volume.py b/nova/virt/libvirt/volume.py
127+index 59e3835..aeed097 100644
128+--- a/nova/virt/libvirt/volume.py
129++++ b/nova/virt/libvirt/volume.py
130+@@ -642,6 +642,7 @@ class LibvirtISCSIVolumeDriver(LibvirtBaseVolumeDriver):
131+
132+ if not devices:
133+ # disconnect if no other multipath devices
134++ self._remove_multipath_device_descriptor(multipath_device)
135+ self._disconnect_mpath(iscsi_properties, ips_iqns)
136+ return
137+
138+@@ -662,7 +663,6 @@ class LibvirtISCSIVolumeDriver(LibvirtBaseVolumeDriver):
139+ if not in_use:
140+ # disconnect if no other multipath devices with same iqn
141+ self._disconnect_mpath(iscsi_properties, ips_iqns)
142+- return
143+ elif multipath_device not in devices:
144+ # delete the devices associated w/ the unused multipath
145+ self._delete_mpath(iscsi_properties, multipath_device, ips_iqns)
146+--
147+2.7.4
148+
149
150=== modified file 'debian/patches/series'
151--- debian/patches/series 2015-11-05 18:24:48 +0000
152+++ debian/patches/series 2016-04-04 22:41:39 +0000
153@@ -7,3 +7,4 @@
154 #rate-limit-power-syncs.patch
155 skip-ubuntu-tests.patch
156 skip-proxy-test.patch
157+fix-iscsi-detach.patch

Subscribers

People subscribed via source and target branches