BlobProperties getPropertiesForRouterUpload(BlobInfo blobInfoFromRequest) {
      BlobProperties properties;
      if (blobInfoFromRequest.getBlobProperties().getTimeToLiveInSeconds() == Utils.Infinite_Time) {
        properties = new BlobProperties(blobInfoFromRequest.getBlobProperties());
        // For blob with infinite time, the procedure is putBlob with a TTL, record insert to database with
        // infinite TTL, and ttlUpdate.
        properties.setTimeToLiveInSeconds(frontendConfig.permanentNamedBlobInitialPutTtl);
      } else {
        properties = blobInfoFromRequest.getBlobProperties();
      }
      return properties;
    }
Create a {@link BlobProperties} for the router upload (putBlob or stitchBlob) with a finite TTL such that
orphaned blobs will not be created if the write to the named blob metadata DB fails.
@param blobInfoFromRequest the {@link BlobInfo} parsed from the request.
@return a {@link BlobProperties} for a TTL-ed initial router call.
ambry-frontend/src/main/java/com/github/ambry/frontend/NamedBlobPutHandler.java