Merge "BSN: Set inconsistency record on delete failure"

This commit is contained in:
Jenkins 2014-11-19 04:41:11 +00:00 committed by Gerrit Code Review
commit ee74e03db0
2 changed files with 20 additions and 0 deletions

View File

@ -473,6 +473,13 @@ class ServerPool(object):
'data': ret[3]})
active_server.failed = True
# A failure on a delete means the object is gone from Neutron but not
# from the controller. Set the consistency hash to a bad value to
# trigger a sync on the next check.
# NOTE: The hash must have a comma in it otherwise it will be ignored
# by the backend.
if action == 'DELETE':
hash_handler.put_hash('INCONSISTENT,INCONSISTENT')
# All servers failed, reset server list and try again next time
LOG.error(_('ServerProxy: %(action)s failure for all servers: '
'%(server)r'),

View File

@ -23,6 +23,7 @@ from oslo.serialization import jsonutils
from neutron import context
from neutron import manager
from neutron.openstack.common import importutils
from neutron.plugins.bigswitch.db import consistency_db as cdb
from neutron.plugins.bigswitch import servermanager
from neutron.tests.unit.bigswitch import test_restproxy_plugin as test_rp
@ -411,6 +412,18 @@ class ServerManagerTests(test_rp.BigSwitchProxyPluginV2TestCase):
sleep_call_count = rest_call_count - 1
tmock.assert_has_calls(sleep_call * sleep_call_count)
def test_delete_failure_sets_bad_hash(self):
pl = manager.NeutronManager.get_plugin()
hash_handler = cdb.HashHandler()
with mock.patch(
SERVERMANAGER + '.ServerProxy.rest_call',
return_value=(httplib.INTERNAL_SERVER_ERROR, 0, 0, 0)
):
# a failed delete call should put a bad hash in the DB
pl.servers.rest_call('DELETE', '/', '', None, [])
self.assertEqual('INCONSISTENT,INCONSISTENT',
hash_handler.read_for_update())
def test_conflict_triggers_sync(self):
pl = manager.NeutronManager.get_plugin()
with mock.patch(