Source:
public void handlePut(RestRequest restRequest, RestResponseChannel restResponseChannel) { long processingStartTime = System.currentTimeMillis(); long preProcessingTime = 0; handlePrechecks(restRequest, restResponseChannel); try { logger.trace("Handling PUT request - {}", restRequest.getUri()); checkAvailable(); securityService.preProcessRequest(restRequest).get(); String operationOrBlobId = RestUtils.getOperationOrBlobIdFromUri(restRequest, null, frontendConfig.frontendPathPrefixesToRemove); if (operationOrBlobId.startsWith("/")) { operationOrBlobId = operationOrBlobId.substring(1); } if (operationOrBlobId.equalsIgnoreCase(Operations.UPDATE_TTL)) { ttlUpdateHandler.handle(restRequest, restResponseChannel, (r, e) -> { if (e != null && e instanceof RouterException && ((RouterException) e).getErrorCode() == RouterErrorCode.BlobUpdateNotAllowed) { try { restResponseChannel.setHeader(Headers.ALLOW, TTL_UPDATE_REJECTED_ALLOW_HEADER_VALUE); } catch (RestServiceException exp) { logger.error("Exception while setting {}", Headers.ALLOW, exp); } } submitResponse(restRequest, restResponseChannel, null, e); }); } else { submitResponse(restRequest, restResponseChannel, null, new RestServiceException("Unrecognized operation: " + operationOrBlobId, RestServiceErrorCode.BadRequest)); } preProcessingTime = System.currentTimeMillis() - processingStartTime; } catch (Exception e) { submitResponse(restRequest, restResponseChannel, null, extractExecutionExceptionCause(e)); } finally { frontendMetrics.putPreProcessingTimeInMs.update(preProcessingTime); } }

Target:
public void handlePut(RestRequest restRequest, RestResponseChannel restResponseChannel) { long processingStartTime = System.currentTimeMillis(); long preProcessingTime = 0; handlePrechecks(restRequest, restResponseChannel); ReadableStreamChannel response = null; Exception exception = null; try { logger.trace("Handling PUT request - {}", restRequest.getUri()); checkAvailable(); securityService.preProcessRequest(restRequest).get(); String operationOrBlobId = RestUtils.getOperationOrBlobIdFromUri(restRequest, null, frontendConfig.frontendPathPrefixesToRemove); if (operationOrBlobId.startsWith("/")) { operationOrBlobId = operationOrBlobId.substring(1); } if (operationOrBlobId.equalsIgnoreCase(Operations.UPDATE_TTL)) { ttlUpdateHandler.handle(restRequest, restResponseChannel, (r, e) -> { if (e != null && e instanceof RouterException && ((RouterException) e).getErrorCode() == RouterErrorCode.BlobUpdateNotAllowed) { try { restResponseChannel.setHeader(Headers.ALLOW, TTL_UPDATE_REJECTED_ALLOW_HEADER_VALUE); } catch (RestServiceException exc) { logger.error("Exception while setting {}", Headers.ALLOW, exc); } } submitResponse(restRequest, restResponseChannel, null, e); }); } else { exception = new RestServiceException("Unrecognized operation: " + operationOrBlobId, RestServiceErrorCode.BadRequest); } preProcessingTime = System.currentTimeMillis() - processingStartTime; } catch (Exception e) { exception = extractExecutionExceptionCause(e); } finally { frontendMetrics.putPreProcessingTimeInMs.update(preProcessingTime); if (exception != null) { submitResponse(restRequest, restResponseChannel, response, exception); } } }