@VisibleForTesting
  int findVersion() {
    Path versionHintFile = versionHintFile();
    FileSystem fs = getFileSystem(versionHintFile, conf);
    try {
      return fs.exists(versionHintFile) ?
            findVersionByUsingVersionHint(fs, versionHintFile) :
            findVersionWithOutVersionHint(fs);
    } catch (Exception e) {
      // try one last time
      return findVersionWithOutVersionHint(fs);
    }
  }
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