code: @Override
      public <R> OperationResult<R> executeWithFailover(Operation<CL, R> op, RetryPolicy retry)
              throws ConnectionException {
      	
      	//Tracing operation
      	OperationTracer opsTracer = config.getOperationTracer();
      	final AstyanaxContext context = opsTracer.getAstyanaxContext();
          if(context != null) {
          	opsTracer.onCall(context, op);
          }
      	
          retry.begin();
          ConnectionException lastException = null;
          do {
              try {
                  OperationResult<R> result = newExecuteWithFailover(op).tryOperation(op);
                  retry.success();
                  if(context != null)  
                  	opsTracer.onSuccess(context, op);
                  
                  return result;
              }
              catch (OperationException e) {
              	if(context != null)  
              		opsTracer.onException(context, op, e);
              	
                  retry.failure(e);
                  throw e;
              }
              catch (ConnectionException e) {
                  lastException = e;
              } 
              
              if (retry.allowRetry()) {
              	LOG.debug("Retry policy[" + retry.toString() + "] will allow a subsequent retry for operation [" + op.getClass() + 
              			  "] on keyspace [" + op.getKeyspace() + "] on pinned host[" + op.getPinnedHost() + "]");
              }
          } while (retry.allowRetry());
          
          if(context != null && lastException != null)  
          	opsTracer.onException(context, op, lastException);
          
          retry.failure(lastException);
          throw lastException;
      }
docs: Executes the operation using failover and retry strategy
  @param op
  @param retry
  @return {@link OperationResult}