public WriterFailoverResult call()

in wrapper/src/main/java/software/amazon/jdbc/plugin/failover/ClusterAwareWriterFailoverHandler.java [243:300]


    public WriterFailoverResult call() {
      LOGGER.fine(
          () -> Messages.get(
              "ClusterAwareWriterFailoverHandler.taskAAttemptReconnectToWriterInstance",
              new Object[] {this.originalWriterHost.getUrl(), PropertyUtils.maskProperties(initialConnectionProps)}));

      Connection conn = null;
      List<HostSpec> latestTopology = null;
      boolean success = false;

      try {
        while (Utils.isNullOrEmpty(latestTopology)) {
          try {
            if (conn != null && !conn.isClosed()) {
              conn.close();
            }

            conn = pluginService.forceConnect(this.originalWriterHost, initialConnectionProps);
            pluginService.forceRefreshHostList(conn);
            latestTopology = pluginService.getAllHosts();

          } catch (final SQLException exception) {
            // Propagate exceptions that are not caused by network errors.
            if (!pluginService.isNetworkException(exception)) {
              LOGGER.finer(
                  () -> Messages.get(
                      "ClusterAwareWriterFailoverHandler.taskAEncounteredException",
                      new Object[] {exception}));
              return new WriterFailoverResult(false, false, null, null, "TaskA", exception);
            }
          }

          if (Utils.isNullOrEmpty(latestTopology)) {
            TimeUnit.MILLISECONDS.sleep(reconnectWriterIntervalMs);
          }
        }

        success = isCurrentHostWriter(latestTopology);
        LOGGER.finest("[TaskA] success: " + success);
        pluginService.setAvailability(this.originalWriterHost.asAliases(), HostAvailability.AVAILABLE);
        return new WriterFailoverResult(success, false, latestTopology, success ? conn : null, "TaskA");
      } catch (final InterruptedException exception) {
        Thread.currentThread().interrupt();
        return new WriterFailoverResult(success, false, latestTopology, success ? conn : null, "TaskA");
      } catch (final Exception ex) {
        LOGGER.severe(() -> ex.getMessage());
        return new WriterFailoverResult(false, false, null, null, "TaskA");
      } finally {
        try {
          if (conn != null && !success && !conn.isClosed()) {
            conn.close();
          }
        } catch (final Exception ex) {
          // ignore
        }
        LOGGER.finer(Messages.get("ClusterAwareWriterFailoverHandler.taskAFinished"));
      }
    }