code: @Nullable
    protected GoogleCloudStorageItemInfo getInitialMetadata() throws IOException {
      if (!readOptions.getFastFailOnNotFound()) {
        return null;
      }
      StorageObject object;
      try {
        object =
            ResilientOperation.retry(
                ResilientOperation.getGoogleRequestCallable(createRequest()),
                readBackOff.get(),
                RetryDeterminer.SOCKET_ERRORS,
                IOException.class,
                sleeper);
      } catch (IOException e) {
        throw errorExtractor.itemNotFound(e)
            ? GoogleCloudStorageExceptions.getFileNotFoundException(bucketName, objectName)
            : new IOException("Error reading " + resourceIdString, e);
      } catch (InterruptedException e) { // From the sleep
        throw new IOException("Thread interrupt received.", e);
      }
      return createItemInfoForStorageObject(new StorageResourceId(bucketName, objectName), object);
    }
docs: Returns {@link GoogleCloudStorageItemInfo} used to initialize metadata in constructor. By
  default returns {@code null} which means that metadata will be lazily initialized during first
  read.