@VisibleForTesting
  void writeVersionHint(FileSystem fs, Integer versionToWrite) throws IOException {
    Path versionHintFile = versionHintFile();
    Path tempVersionHintFile = metadataPath(UUID.randomUUID() + "-version-hint.temp");
    try {
      writeVersionToPath(fs, tempVersionHintFile, versionToWrite);
      fs.rename(tempVersionHintFile, versionHintFile);
    } catch (IOException e) {
      // Cleaning up temporary files.
      if (fs.exists(tempVersionHintFile)) {
        io().deleteFile(tempVersionHintFile.toString());
      }
      throw e;
    }
  }
TableOperations implementation for file systems.

<p>For normal file-system(support atomic non-overwriting rename). Users can use it directly
without configuring additional lockManager.

<p>For object storage(not support atomic non-overwriting rename), user should choose a suitable
lockManager implementation.

<p>This maintains metadata in a "metadata" folder under the table location.
iceberg/patched-iceberg-core/src/main/java/org/apache/iceberg/hadoop/HadoopTableOperations.java