Merge "Provide hints when nova-manage db sync fails to sync cell0" into stable/pike

This commit is contained in:
Jenkins 2017-09-15 22:19:41 +00:00 committed by Gerrit Code Review
commit b21e6dee48
2 changed files with 31 additions and 3 deletions

View File

@ -71,6 +71,7 @@ from oslo_utils import importutils
from oslo_utils import uuidutils
import prettytable
import six
import six.moves.urllib.parse as urlparse
from sqlalchemy.engine import url as sqla_url
@ -697,9 +698,15 @@ class DbCommands(object):
except exception.CellMappingNotFound:
print(_('WARNING: cell0 mapping not found - not'
' syncing cell0.'))
except Exception:
print(_('ERROR: could not access cell mapping database - has'
' api db been created?'))
except Exception as e:
print(_("""ERROR: Could not access cell0.
Has the nova_api database been created?
Has the nova_cell0 database been created?
Has "nova-manage api_db sync" been run?
Has "nova-manage cell_v2 map_cell0" been run?
Is [api_database]/connection set in nova.conf?
Is the cell0 database connection URL correct?
Error: %s""") % six.text_type(e))
return migration.db_sync(version)
def version(self):

View File

@ -567,6 +567,27 @@ Archiving.....stopped
]
mock_db_sync.assert_has_calls(db_sync_calls)
@mock.patch.object(objects.CellMapping, 'get_by_uuid',
side_effect=test.TestingException('invalid connection'))
def test_sync_cell0_unknown_error(self, mock_get_by_uuid):
"""Asserts that a detailed error message is given when an unknown
error occurs trying to get the cell0 cell mapping.
"""
self.commands.sync()
mock_get_by_uuid.assert_called_once_with(
test.MatchType(context.RequestContext),
objects.CellMapping.CELL0_UUID)
expected = """ERROR: Could not access cell0.
Has the nova_api database been created?
Has the nova_cell0 database been created?
Has "nova-manage api_db sync" been run?
Has "nova-manage cell_v2 map_cell0" been run?
Is [api_database]/connection set in nova.conf?
Is the cell0 database connection URL correct?
Error: invalid connection
"""
self.assertEqual(expected, self.output.getvalue())
def _fake_db_command(self, migrations=None):
if migrations is None:
mock_mig_1 = mock.MagicMock(__name__="mock_mig_1")