Merge lp:~newell-jensen/maas/2.0-fix-1614659 into lp:maas/2.0

Proposed by Newell Jensen
Status: Merged
Approved by: Newell Jensen
Approved revision: no longer in the source branch.
Merged at revision: 5195
Proposed branch: lp:~newell-jensen/maas/2.0-fix-1614659
Merge into: lp:maas/2.0
Diff against target: 135 lines (+31/-9)
4 files modified
src/maasserver/api/tests/test_machines.py (+2/-1)
src/maasserver/models/node.py (+8/-1)
src/maasserver/models/tests/test_node.py (+15/-7)
src/maasserver/node_status.py (+6/-0)
To merge this branch: bzr merge lp:~newell-jensen/maas/2.0-fix-1614659
Reviewer Review Type Date Requested Status
Newell Jensen (community) Approve
Review via email: mp+307752@code.launchpad.net

Commit message

Backport trunk r5447: Revert to previous status when error during 'Releasing'

To post a comment you must log in.
Revision history for this message
Newell Jensen (newell-jensen) wrote :

Self approve backport.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'src/maasserver/api/tests/test_machines.py'
--- src/maasserver/api/tests/test_machines.py 2016-06-09 23:39:53 +0000
+++ src/maasserver/api/tests/test_machines.py 2016-10-05 19:12:06 +0000
@@ -1391,7 +1391,8 @@
13911391
1392 def test_POST_release_returns_modified_machines(self):1392 def test_POST_release_returns_modified_machines(self):
1393 owner = self.user1393 owner = self.user
1394 self.patch(Machine, "_stop").return_value = None1394 self.patch(Machine, '_stop')
1395 self.patch(Machine, '_set_status')
1395 acceptable_states = [NODE_STATUS.READY] + RELEASABLE_STATUSES1396 acceptable_states = [NODE_STATUS.READY] + RELEASABLE_STATUSES
1396 machines = [1397 machines = [
1397 factory.make_Node_with_Interface_on_Subnet(1398 factory.make_Node_with_Interface_on_Subnet(
13981399
=== modified file 'src/maasserver/models/node.py'
--- src/maasserver/models/node.py 2016-07-25 23:25:53 +0000
+++ src/maasserver/models/node.py 2016-10-05 19:12:06 +0000
@@ -2187,7 +2187,14 @@
2187 # the issue this will cause.2187 # the issue this will cause.
2188 if self.power_state != POWER_STATE.OFF:2188 if self.power_state != POWER_STATE.OFF:
2189 try:2189 try:
2190 self._stop(self.owner)2190 # Node.stop() has synchronous and asynchronous parts, so catch
2191 # exceptions arising synchronously, and chain callbacks to the
2192 # Deferred it returns for the asynchronous (post-commit) bits.
2193 stopping = self._stop(self.owner)
2194 # If there's an error, reset the node's status.
2195 stopping.addErrback(
2196 callOutToDatabase, Node._set_status, self.system_id,
2197 status=self.status)
2191 except Exception as ex:2198 except Exception as ex:
2192 maaslog.error(2199 maaslog.error(
2193 "%s: Unable to shut node down: %s", self.hostname,2200 "%s: Unable to shut node down: %s", self.hostname,
21942201
=== modified file 'src/maasserver/models/tests/test_node.py'
--- src/maasserver/models/tests/test_node.py 2016-07-25 23:25:53 +0000
+++ src/maasserver/models/tests/test_node.py 2016-10-05 19:12:06 +0000
@@ -1536,7 +1536,8 @@
1536 node = factory.make_Node(1536 node = factory.make_Node(
1537 status=NODE_STATUS.ALLOCATED, owner=owner, agent_name=agent_name)1537 status=NODE_STATUS.ALLOCATED, owner=owner, agent_name=agent_name)
1538 self.patch(Node, '_set_status_expires')1538 self.patch(Node, '_set_status_expires')
1539 self.patch(node, '_stop').return_value = None1539 self.patch(node, '_stop')
1540 self.patch(node, '_set_status')
1540 node_result = factory.make_NodeResult_for_installation(node=node)1541 node_result = factory.make_NodeResult_for_installation(node=node)
1541 self.assertEqual(1542 self.assertEqual(
1542 [node_result], list(NodeResult.objects.filter(1543 [node_result], list(NodeResult.objects.filter(
@@ -1704,7 +1705,8 @@
1704 def test_release_turns_on_netboot(self):1705 def test_release_turns_on_netboot(self):
1705 node = factory.make_Node(1706 node = factory.make_Node(
1706 status=NODE_STATUS.ALLOCATED, owner=factory.make_User())1707 status=NODE_STATUS.ALLOCATED, owner=factory.make_User())
1707 self.patch(node, '_stop').return_value = None1708 self.patch(node, '_stop')
1709 self.patch(node, '_set_status')
1708 node.set_netboot(on=False)1710 node.set_netboot(on=False)
1709 with post_commit_hooks:1711 with post_commit_hooks:
1710 node.release()1712 node.release()
@@ -1713,7 +1715,8 @@
1713 def test_release_logs_user_request(self):1715 def test_release_logs_user_request(self):
1714 owner = factory.make_User()1716 owner = factory.make_User()
1715 node = factory.make_Node(status=NODE_STATUS.ALLOCATED, owner=owner)1717 node = factory.make_Node(status=NODE_STATUS.ALLOCATED, owner=owner)
1716 self.patch(node, "_stop").return_value = None1718 self.patch(node, '_stop')
1719 self.patch(node, '_set_status')
1717 register_event = self.patch(node, '_register_request_event')1720 register_event = self.patch(node, '_register_request_event')
1718 with post_commit_hooks:1721 with post_commit_hooks:
1719 node.release(owner)1722 node.release(owner)
@@ -1726,7 +1729,8 @@
1726 status=NODE_STATUS.ALLOCATED, owner=factory.make_User())1729 status=NODE_STATUS.ALLOCATED, owner=factory.make_User())
1727 node.osystem = factory.make_name('os')1730 node.osystem = factory.make_name('os')
1728 node.distro_series = factory.make_name('series')1731 node.distro_series = factory.make_name('series')
1729 self.patch(node, "_stop").return_value = None1732 self.patch(node, '_stop')
1733 self.patch(node, '_set_status')
1730 with post_commit_hooks:1734 with post_commit_hooks:
1731 node.release()1735 node.release()
1732 self.assertEqual("", node.osystem)1736 self.assertEqual("", node.osystem)
@@ -1777,6 +1781,8 @@
1777 release_auto_ips = self.patch_autospec(1781 release_auto_ips = self.patch_autospec(
1778 node, "release_auto_ips")1782 node, "release_auto_ips")
1779 self.patch(Node, '_set_status_expires')1783 self.patch(Node, '_set_status_expires')
1784 self.patch(node, '_stop')
1785 self.patch(node, '_set_status')
1780 with post_commit_hooks:1786 with post_commit_hooks:
1781 node.release()1787 node.release()
1782 self.assertThat(release_auto_ips, MockCalledOnceWith())1788 self.assertThat(release_auto_ips, MockCalledOnceWith())
@@ -1818,7 +1824,7 @@
1818 node_stop.side_effect = factory.make_exception()1824 node_stop.side_effect = factory.make_exception()
18191825
1820 try:1826 try:
1821 with transaction.atomic():1827 with post_commit_hooks:
1822 node.release()1828 node.release()
1823 except node_stop.side_effect.__class__:1829 except node_stop.side_effect.__class__:
1824 # We don't care about the error here, so suppress it. It1830 # We don't care about the error here, so suppress it. It
@@ -1832,7 +1838,8 @@
1832 node = factory.make_Node(1838 node = factory.make_Node(
1833 status=NODE_STATUS.ALLOCATED, owner=factory.make_User())1839 status=NODE_STATUS.ALLOCATED, owner=factory.make_User())
1834 mock_clear = self.patch(node, "_clear_acquired_filesystems")1840 mock_clear = self.patch(node, "_clear_acquired_filesystems")
1835 self.patch(node, "_stop").return_value = None1841 self.patch(node, '_stop')
1842 self.patch(node, '_set_status')
1836 with post_commit_hooks:1843 with post_commit_hooks:
1837 node.release()1844 node.release()
1838 self.assertThat(mock_clear, MockCalledOnceWith())1845 self.assertThat(mock_clear, MockCalledOnceWith())
@@ -3611,7 +3618,8 @@
3611 self.assertItemsEqual(other_nodes, Node.objects.all())3618 self.assertItemsEqual(other_nodes, Node.objects.all())
36123619
3613 def test_children_get_deleted_when_parent_is_released(self):3620 def test_children_get_deleted_when_parent_is_released(self):
3614 self.patch(Node, "_stop").return_value = None3621 self.patch(Node, '_stop')
3622 self.patch(Node, '_set_status')
3615 owner = factory.make_User()3623 owner = factory.make_User()
3616 # Create children.3624 # Create children.
3617 parent = factory.make_Node(status=NODE_STATUS.ALLOCATED, owner=owner)3625 parent = factory.make_Node(status=NODE_STATUS.ALLOCATED, owner=owner)
36183626
=== modified file 'src/maasserver/node_status.py'
--- src/maasserver/node_status.py 2016-07-22 16:11:04 +0000
+++ src/maasserver/node_status.py 2016-10-05 19:12:06 +0000
@@ -80,9 +80,15 @@
80 NODE_STATUS.RELEASING,80 NODE_STATUS.RELEASING,
81 ],81 ],
82 NODE_STATUS.RELEASING: [82 NODE_STATUS.RELEASING: [
83 NODE_STATUS.ALLOCATED,
84 NODE_STATUS.RESERVED,
85 NODE_STATUS.DEPLOYING,
86 NODE_STATUS.DEPLOYED,
83 NODE_STATUS.READY,87 NODE_STATUS.READY,
84 NODE_STATUS.BROKEN,88 NODE_STATUS.BROKEN,
85 NODE_STATUS.MISSING,89 NODE_STATUS.MISSING,
90 NODE_STATUS.FAILED_DEPLOYMENT,
91 NODE_STATUS.FAILED_DISK_ERASING,
86 NODE_STATUS.FAILED_RELEASING,92 NODE_STATUS.FAILED_RELEASING,
87 ],93 ],
88 NODE_STATUS.DEPLOYING: [94 NODE_STATUS.DEPLOYING: [

Subscribers

People subscribed via source and target branches

to all changes: