code: protected void tryUpdateTimestampsForParentDirectories(
        final List<URI> modifiedObjects, final List<URI> excludedParents) {
      logger.atFine().log(
          "tryUpdateTimestampsForParentDirectories(%s, %s)", modifiedObjects, excludedParents);
  
      // If we're calling tryUpdateTimestamps, we don't actually care about the results. Submit
      // these requests via a background thread and continue on.
      try {
        @SuppressWarnings("unused") // go/futurereturn-lsc
        Future<?> possiblyIgnoredError =
            updateTimestampsExecutor.submit(
                () -> {
                  try {
                    updateTimestampsForParentDirectories(modifiedObjects, excludedParents);
                  } catch (IOException ioe) {
                    logger.atFine().withCause(ioe).log(
                        "Exception caught when trying to update parent directory timestamps.");
                  }
                });
      } catch (RejectedExecutionException ree) {
        logger.atFine().withCause(ree).log(
            "Exhausted thread pool and queue space while updating parent timestamps");
      }
    }
docs: For each listed modified object, attempt to update the modification time of the parent
  directory.
  
  <p>This method will log & swallow exceptions thrown by the GCSIO layer.
  
  @param modifiedObjects The objects that have been modified
  @param excludedParents A list of parent directories that we shouldn't attempt to update.