def _failover_reader()

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)