docs: public Version putVersionedWithCustomTimeout(CompositeVoldemortRequest<K, V> requestWrapper)
              throws ObsoleteVersionException {
          validateTimeout(requestWrapper.getRoutingTimeoutInMs());
          for(int attempts = 0; attempts < this.metadataRefreshAttempts; attempts++) {
              try {
                  String keyHexString = "";
                  long startTimeInMs = System.currentTimeMillis();
                  if(logger.isDebugEnabled()) {
                      ByteArray key = (ByteArray) requestWrapper.getKey();
                      keyHexString = RestUtils.getKeyHexString(key);
                      debugLogStart("PUT_VERSION",
                                    requestWrapper.getRequestOriginTimeInMs(),
                                    startTimeInMs,
                                    keyHexString);
                  }
                  store.put(requestWrapper);
                  if(logger.isDebugEnabled()) {
                      debugLogEnd("PUT_VERSION",
                                  requestWrapper.getRequestOriginTimeInMs(),
                                  startTimeInMs,
                                  System.currentTimeMillis(),
                                  keyHexString,
                                  0);
                  }
                  return requestWrapper.getValue().getVersion();
              } catch(InvalidMetadataException e) {
                  logger.info("Received invalid metadata exception during put [  " + e.getMessage()
                              + " ] on store '" + storeName + "'. Rebootstrapping");
                  bootStrap();
              }
          }
          throw new VoldemortException(this.metadataRefreshAttempts
                                       + " metadata refresh attempts failed.");
      }