diff --git a/src/lib/charm/openstack/mysql_router.py b/src/lib/charm/openstack/mysql_router.py index 7b24273..653e3d6 100644 --- a/src/lib/charm/openstack/mysql_router.py +++ b/src/lib/charm/openstack/mysql_router.py @@ -96,6 +96,10 @@ class MySQLRouterCharm(charms_openstack.charm.OpenStackCharm): # LP Bug #1915842 _waiting_for_initial_communication_packet_error = 2013 + # mysql.MySQLdb._exceptions.OperationalError error 2003 + # LP Bug #1973177 + _cannot_connect_via_ip = 2003 + @property def mysqlrouter_pid_file(self): """Determine the path for the mysqlrouter PID file. @@ -771,11 +775,28 @@ class MySQLRouterCharm(charms_openstack.charm.OpenStackCharm): ch_core.hookenv.log("Updating configuration parameters", "DEBUG") self.update_config_parameters(_parameters) - @tenacity.retry(wait=tenacity.wait_fixed(10), - retry=tenacity.retry_if_exception_type( - mysql.MySQLdb._exceptions.OperationalError), - reraise=True, - stop=tenacity.stop_after_attempt(5)) + @tenacity.retry( + wait=tenacity.wait_fixed(10), + retry=tenacity.retry_if_exception_type( + mysql.MySQLdb._exceptions.OperationalError), + reraise=True, + stop=tenacity.stop_after_attempt(5)) + def retry_conection_check(self): + """Retry database connection check.""" + ch_core.hookenv.log("Checking connection through router", "DEBUG") + # Only raise an exception if it matches + # mysql.MySQLdb._exceptions.OperationalError error 2003 or 2013 + # LP Bug #1915842 & #1973177 + self.check_mysql_connection( + reraise_on=[ + self._waiting_for_initial_communication_packet_error, + self._cannot_connect_via_ip]) + + @tenacity.retry( + retry=tenacity.retry_if_exception_type( + mysql.MySQLdb._exceptions.OperationalError), + reraise=True, + stop=tenacity.stop_after_attempt(5)) def custom_restart_function(self, service_name): """Tenacity retry custom restart function for restart_on_change @@ -791,8 +812,7 @@ class MySQLRouterCharm(charms_openstack.charm.OpenStackCharm): "Custom restart of {}".format(service_name), "DEBUG") self.service_stop(service_name) self.service_start(service_name) - # Only raise an exception if it matches - # mysql.MySQLdb._exceptions.OperationalError error 2013 - # LP Bug #1915842 - self.check_mysql_connection( - reraise_on=[self._waiting_for_initial_communication_packet_error]) + # In the case of the db-router service it reports itself as having + # started prior to being fully initialised. So when checking the + # connection retry a few times. + self.retry_conection_check() diff --git a/src/tests/bundles/focal-full.yaml b/src/tests/bundles/focal-full.yaml index 32b97db..ba14dcc 100644 --- a/src/tests/bundles/focal-full.yaml +++ b/src/tests/bundles/focal-full.yaml @@ -8,16 +8,28 @@ series: &series focal applications: keystone-mysql-router: charm: ../../../mysql-router.charm + options: + debug: True nova-mysql-router: charm: ../../../mysql-router.charm + options: + debug: True glance-mysql-router: charm: ../../../mysql-router.charm + options: + debug: True neutron-mysql-router: charm: ../../../mysql-router.charm + options: + debug: True placement-mysql-router: charm: ../../../mysql-router.charm + options: + debug: True vault-mysql-router: charm: ../../../mysql-router.charm + options: + debug: True mysql-innodb-cluster: charm: ch:mysql-innodb-cluster num_units: 3 diff --git a/src/tests/bundles/focal.yaml b/src/tests/bundles/focal.yaml index 46525e1..f497b62 100644 --- a/src/tests/bundles/focal.yaml +++ b/src/tests/bundles/focal.yaml @@ -5,9 +5,13 @@ applications: keystone-mysql-router: series: focal charm: ../../../mysql-router.charm + options: + debug: True vault-mysql-router: series: focal charm: ../../../mysql-router.charm + options: + debug: True mysql-innodb-cluster: charm: ch:mysql-innodb-cluster num_units: 3 diff --git a/src/tests/bundles/jammy-full.yaml b/src/tests/bundles/jammy-full.yaml index 22e8162..ea3b246 100644 --- a/src/tests/bundles/jammy-full.yaml +++ b/src/tests/bundles/jammy-full.yaml @@ -8,16 +8,28 @@ series: &series jammy applications: keystone-mysql-router: charm: ../../../mysql-router.charm + options: + debug: True nova-mysql-router: charm: ../../../mysql-router.charm + options: + debug: True glance-mysql-router: charm: ../../../mysql-router.charm + options: + debug: True neutron-mysql-router: charm: ../../../mysql-router.charm + options: + debug: True placement-mysql-router: charm: ../../../mysql-router.charm + options: + debug: True vault-mysql-router: charm: ../../../mysql-router.charm + options: + debug: True mysql-innodb-cluster: charm: ch:mysql-innodb-cluster num_units: 3 diff --git a/src/tests/bundles/jammy.yaml b/src/tests/bundles/jammy.yaml index b2bdd8a..6cdd7f7 100644 --- a/src/tests/bundles/jammy.yaml +++ b/src/tests/bundles/jammy.yaml @@ -4,8 +4,12 @@ series: jammy applications: keystone-mysql-router: charm: ../../../mysql-router.charm + options: + debug: True vault-mysql-router: charm: ../../../mysql-router.charm + options: + debug: True mysql-innodb-cluster: charm: ch:mysql-innodb-cluster num_units: 3