protected Object executeOnServer(ServerLocation server, Op op, boolean accessed,
      boolean onlyUseExistingConnection) {
    boolean returnConnection = true;
    Connection connection = null;
    if (op instanceof PingOp.PingOpImpl) {
      // currently for pings we prefer to queue clientToServer cnx so that we will
      // not create a pooled cnx when all we have is queue connections.
      final ServerLocationAndMemberId serverLocationAndMemberId =
          new ServerLocationAndMemberId(server,
              ((PingOp.PingOpImpl) op).getServerID().getUniqueId());

      if (queueManager != null) {
        // see if our QueueManager has a connection to this server that we can send
        // the ping on.
        final Endpoint endpoint = endpointManager.getEndpointMap().get(serverLocationAndMemberId);
        if (endpoint != null) {
          QueueConnections queueConnections = queueManager.getAllConnectionsNoWait();
          connection = queueConnections.getConnection(endpoint);
          if (connection != null) {
            // we found one to do the ping on
            returnConnection = false;
          }
        }
      }
      if (connection == null) {
        ServerLocationExtension sle = new ServerLocationExtension(serverLocationAndMemberId);
        connection = connectionManager.borrowConnection(sle, singleServerTimeout,
            onlyUseExistingConnection);
      }
    } else {
      connection = connectionManager.borrowConnection(server, singleServerTimeout,
          onlyUseExistingConnection);
    }
    try {
      return executeWithPossibleReAuthentication(connection, op);
    } catch (final Exception e) {
      handleException(e, connection, 0, true);
      // this shouldn't actually be reached, handle exception will throw something
      throw new ServerConnectivityException("Received error connecting to server", e);
    } finally {
      if (serverAffinity.get() && affinityServerLocation.get() == null) {
        if (logger.isDebugEnabled()) {
          logger.debug("setting server affinity to {} server:{}",
              connection.getEndpoint().getMemberId(),
              connection.getServer());
        }
        affinityServerLocation.set(connection.getServer());
      }
      if (returnConnection) {
        connectionManager.returnConnection(connection, accessed);
      }
    }
  }
execute the given op on the given server. If the server cannot be reached, sends a
TXFailoverOp, then retries the given op

@param loc the server to execute the op on
@param op the op to execute
@return the result of execution
geode-core/src/main/java/org/apache/geode/cache/client/internal/OpExecutorImpl.java