code: private Retryer<Void> buildRetryer(State state) {
      RetryerBuilder<Void> builder = null;
      if (writer instanceof Retriable) {
        builder = ((Retriable) writer).getRetryerBuilder();
      } else {
        builder = createRetryBuilder(state);
      }
  
      if (GobblinMetrics.isEnabled(state)) {
        final Optional<Meter> retryMeter = Optional.of(Instrumented.getMetricContext(state, getClass()).meter(FAILED_RETRY_WRITES_METER));
  
        builder.withRetryListener(new RetryListener() {
          @Override
          public <V> void onRetry(Attempt<V> attempt) {
            if (attempt.hasException()) {
              LOG.warn("Caught exception. This may be retried.", attempt.getExceptionCause());
              Instrumented.markMeter(retryMeter);
              failedWrites++;
            }
          }
        });
      }
      return builder.build();
    }
docs: Build Retryer.
  - If Writer implements Retriable, it will use the RetryerBuilder from the writer.
  - Otherwise, it will use DEFAULT writer builder.
  
  - If Gobblin metrics is enabled, it will emit all failure count in to metrics.
  
  @param state
  @return