code: protected void updateBucketAndReturn(final String id, final RateLimiterBucket bucket,
              final RateLimitResponse rlr, final long version, final String bucketId,
              final RateBucketPeriod period, final long limit, final long increment,
              final IAsyncResultHandler<RateLimitResponse> handler) {
  
      	Index.Builder builder = new Index.Builder(bucket).refresh(false).index(getIndexName());
      	if (version>0) {
      		builder.setParameter(Parameters.VERSION, String.valueOf(version));
          }
      	Index index = builder.setParameter(Parameters.OP_TYPE, "index") //$NON-NLS-1$
      			             .type("rateBucket").id(id).build(); //$NON-NLS-1$          
          try {
              getClient().execute(index);
              handler.handle(AsyncResultImpl.create(rlr));
          } catch (Throwable e) {
              // FIXME need to fix this now that we've switched to jest!
  //            if (ESUtils.rootCause(e) instanceof VersionConflictEngineException) {
  //                // If we got a version conflict, then it means some other request
  //                // managed to update the ES document since we retrieved it.  Therefore
  //                // everything we've done is out of date, so we should do it all
  //                // over again.
  //                accept(bucketId, period, limit, increment, handler);
  //            } else {
                  handler.handle(AsyncResultImpl.<RateLimitResponse>create(e));
  //            }
          }
      }
docs: Update the bucket in ES and then return the rate limit response to the
  original handler.  If the update fails because we have a stale version,
  then try the whole thing again (because we conflicted with another
  request).
  @param id
  @param bucket
  @param rlr
  @param version
  @param limit
  @param period
  @param bucketId
  @param increment
  @param handler