Show error dialog in case of failed node network group deletion

Closes-Bug: #1519266

Change-Id: Id406f903e4b6f85bdc626afb4f3c80a0a0fb8834
This commit is contained in:
Julia Aranovich 2015-12-16 12:10:41 +03:00
parent 26c78e1c29
commit 56ed57dc01
7 changed files with 37 additions and 16 deletions

View File

@ -148,8 +148,8 @@ class ProviderHandler(BaseHandler):
if admin_nets != nm.get_admin_networks():
try:
task = UpdateDnsmasqTaskManager().execute()
except errors.TaskAlreadyRunning as exc:
raise self.http(409, six.text_type(exc))
except errors.TaskAlreadyRunning:
raise self.http(409, errors.UpdateDnsmasqTaskIsRunning.message)
if task.status == consts.TASK_STATUSES.error:
raise self.http(400, task.message)

View File

@ -18,7 +18,6 @@
Handlers dealing with node groups
"""
import six
import web
from nailgun.api.v1.handlers.base import CollectionHandler
@ -53,8 +52,8 @@ class NodeGroupHandler(SingleHandler):
db().flush()
try:
task = UpdateDnsmasqTaskManager().execute()
except errors.TaskAlreadyRunning as exc:
raise self.http(409, six.text_type(exc))
except errors.TaskAlreadyRunning:
raise self.http(409, errors.UpdateDnsmasqTaskIsRunning.message)
if task.status == consts.TASK_STATUSES.error:
raise self.http(400, task.message)
raise web.webapi.HTTPError(

View File

@ -87,6 +87,9 @@ default_messages = {
"NetworkTemplateMissingNetworkGroup": "Network group is missing",
"DuplicatedVIPNames": ("Cannot assign VIPs for the cluster due to "
"overlapping of names of the VIPs"),
"UpdateDnsmasqTaskIsRunning": ("update_dnsmasq task is not finished "
"after the previous configuration change. "
"Please try again after a few seconds."),
# RPC errors
"CannotFindTask": "Cannot find task",

View File

@ -435,7 +435,7 @@ class EnvironmentManager(object):
return ng
def delete_node_group(self, ng_id, api=True):
def delete_node_group(self, ng_id, status_code=200, api=True):
if api:
return self.app.delete(
reverse(
@ -443,7 +443,7 @@ class EnvironmentManager(object):
kwargs={'obj_id': ng_id}
),
headers=self.default_headers,
expect_errors=False
expect_errors=(status_code != 200)
)
else:
ng = db().query(NodeGroup).get(ng_id)

View File

@ -1169,3 +1169,20 @@ class TestUpdateDnsmasqTaskManagers(BaseIntegrationTest):
update_task = self.db.query(models.Task).filter_by(
name=consts.TASK_NAMES.update_dnsmasq).first()
self.assertEqual(update_task.status, consts.TASK_STATUSES.running)
@mock.patch('nailgun.task.task.rpc.cast')
def test_node_group_deletion_failed_while_previous_in_progress(self,
mocked_rpc):
ng1 = self.env.create_node_group(name='ng_1').json_body
ng2 = self.env.create_node_group(name='ng_2').json_body
self.assertEqual(mocked_rpc.call_count, 0)
self.env.delete_node_group(ng1['id'])
self.assertEqual(mocked_rpc.call_count, 1)
# delete other node group
# request should be rejected as previous update_dnsmasq task is still
# in progress
resp = self.env.delete_node_group(ng2['id'], status_code=409)
self.assertEqual(resp.status_code, 409)
# no more calls were made
self.assertEqual(mocked_rpc.call_count, 1)

View File

@ -647,6 +647,7 @@
"node_network_group_duplicate_error": "This node network group name is already taken",
"node_network_group_default_name": "This name is assigned to default node network group",
"node_network_group_creation_error": "Node Network Group Creation Error",
"node_network_group_deletion_error": "Node Network Group Deletion Error",
"default_node_network_group_info": "This node network group uses shared admin network and cannot be deleted",
"save_changes_warning": "It is necessary to save changes before creating a new node network group",
"verification_multirack_warning": "Network verification is disabled for environments containing more than one node network group",

View File

@ -804,16 +804,17 @@ function($, _, i18n, Backbone, React, models, dispatcher, utils, dialogs, compon
return fieldsWithVerificationErrors;
},
removeNodeNetworkGroup: function() {
var nodeNetworkGroup = this.nodeNetworkGroups.find({name: this.props.activeNetworkSectionName});
dialogs.RemoveNodeNetworkGroupDialog
.show({
showUnsavedChangesWarning: this.hasChanges()
})
.then(() => {
var currentNodeNetworkGroup = this.nodeNetworkGroups.findWhere({name: this.props.activeNetworkSectionName});
this.props.nodeNetworkGroups.remove(currentNodeNetworkGroup);
return currentNodeNetworkGroup.destroy();
})
.then(() => this.props.cluster.get('networkConfiguration').fetch())
.show({showUnsavedChangesWarning: this.hasChanges()})
.then(() => nodeNetworkGroup.destroy({wait: true}))
.then(
() => this.props.cluster.get('networkConfiguration').fetch(),
(response) => utils.showErrorDialog({
title: i18n(networkTabNS + 'node_network_group_deletion_error'),
response: response
})
)
.then(this.updateInitialConfiguration);
},
addNodeNetworkGroup: function(hasChanges) {