in aws_advanced_python_wrapper/writer_failover_handler.py [0:0]
def reconnect_to_writer(self, initial_writer_host: HostInfo):
"""
Task A: Attempt to reconnect to the writer that originally failed.
:param initial_writer_host: the writer host that originally failed.
:return: the :py:class:`WriterFailoverResult` of the failover process.
"""
logger.debug("WriterFailoverHandler.TaskAAttemptReconnectToWriterInstance", initial_writer_host.url,
PropertiesUtils.mask_properties(self._initial_connection_properties))
conn: Optional[Connection] = None
latest_topology: Optional[Tuple[HostInfo, ...]] = None
success: bool = False
try:
while not self._timeout_event.is_set() and (latest_topology is None or len(latest_topology) == 0):
try:
if conn is not None:
conn.close()
conn = self._plugin_service.force_connect(initial_writer_host, self._initial_connection_properties, self._timeout_event)
self._plugin_service.force_refresh_host_list(conn)
latest_topology = self._plugin_service.all_hosts
except Exception as ex:
if not self._plugin_service.is_network_exception(ex):
logger.debug("WriterFailoverHandler.TaskAEncounteredException", ex)
return WriterFailoverResult(False, False, None, None, "TaskA", ex)
if latest_topology is None or len(latest_topology) == 0:
sleep(self._reconnect_writer_interval_sec)
else:
success = self.is_current_host_writer(latest_topology, initial_writer_host)
self._plugin_service.set_availability(initial_writer_host.as_aliases(), HostAvailability.AVAILABLE)
return WriterFailoverResult(success, False, latest_topology, conn if success else None, "TaskA", None)
except Exception as ex:
logger.error("WriterFailoverHandler.TaskAEncounteredException", ex)
return WriterFailoverResult(False, False, None, None, "TaskA", None)
finally:
try:
if conn is not None and not success:
conn.close()
except Exception:
pass
logger.debug("WriterFailoverHandler.TaskAFinished")