in aws_advanced_python_wrapper/failover_plugin.py [0:0]
def _failover_reader(self, failed_host: Optional[HostInfo]):
telemetry_factory = self._plugin_service.get_telemetry_factory()
context = telemetry_factory.open_telemetry_context("failover to replica", TelemetryTraceLevel.NESTED)
self._failover_reader_triggered_counter.inc()
try:
logger.info("FailoverPlugin.StartReaderFailover")
old_aliases = None
if self._plugin_service.current_host_info is not None:
old_aliases = self._plugin_service.current_host_info.aliases
if failed_host is not None and failed_host.get_raw_availability() != HostAvailability.AVAILABLE:
failed_host = None
result: ReaderFailoverResult = self._reader_failover_handler.failover(self._plugin_service.hosts,
failed_host)
if result is None or not result.is_connected:
raise FailoverFailedError(Messages.get("FailoverPlugin.UnableToConnectToReader"))
else:
if result.exception is not None:
raise result.exception
if result.connection is not None and result.new_host is not None:
self._plugin_service.set_current_connection(result.connection, result.new_host)
if self._plugin_service.current_host_info is not None and old_aliases is not None and len(old_aliases) > 0:
self._plugin_service.current_host_info.remove_alias(old_aliases)
self._update_topology(True)
logger.info("FailoverPlugin.EstablishedConnection", self._plugin_service.current_host_info)
self._failover_reader_success_counter.inc()
except FailoverSuccessError as fse:
context.set_success(True)
context.set_exception(fse)
self._failover_reader_success_counter.inc()
raise fse
except Exception as ex:
context.set_success(False)
context.set_exception(ex)
self._failover_reader_failed_counter.inc()
raise ex
finally:
context.close_context()
if self._telemetry_failover_additional_top_trace_setting:
telemetry_factory.post_copy(context, TelemetryTraceLevel.FORCE_TOP_LEVEL)