Verified Commit 3271aebb authored by Marc Vef's avatar Marc Vef
Browse files

refactor resolve path

add BUILD flags and register new resolve fn

userlib for tests

path unit test

catch edgecase of relative paths, Changelog

active following symlinks for integration test
parent fc0f8dd1
Loading
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -23,6 +23,9 @@ replicas ([!166](https://storage.bsc.es/gitlab/hpc/gekkofs/-/merge_requests/141)

### New

- Rewrite of the resolve path function to improve performance by making the
  use of syscall for following symlinks optional
  ([!183](https://storage.bsc.es/gitlab/hpc/gekkofs/-/merge_requests/183)).
- Support for client-side per process logging, activated
  with `LIBGKFS_LOG_PER_PROCESS` ([!179](https://storage.bsc.es/gitlab/hpc/gekkofs/-/merge_requests/179)).
- Support mtime with option gkfs::config::metadata::
+16 −0
Original line number Diff line number Diff line
@@ -241,6 +241,14 @@ gkfs_define_option(
    DEFAULT_VALUE OFF
)


# use old resolve function
gkfs_define_option(
  GKFS_USE_LEGACY_PATH_RESOLVE
  HELP_TEXT "Use the old implementation of the resolve function"
  DEFAULT_VALUE OFF
)

cmake_dependent_option(GKFS_INSTALL_TESTS "Install GekkoFS self tests" OFF "GKFS_BUILD_TESTS" OFF)


@@ -272,6 +280,14 @@ gkfs_define_option(
  DESCRIPTION "Compile with support for rename ops (experimental)"
)

## external link support
gkfs_define_option(
  GKFS_FOLLOW_EXTERNAL_SYMLINKS
  HELP_TEXT "Enable support for following external links for resolving the path"
  DEFAULT_VALUE OFF
  DESCRIPTION "Compile with lstat usage in path resolve"
)


################################################################################
# Options and variables that control how GekkoFS behaves internally
+8 −0
Original line number Diff line number Diff line
@@ -271,6 +271,14 @@ if (GKFS_SYMLINK_SUPPORT)
    add_definitions(-DHAS_SYMLINKS)
endif ()

if (GKFS_USE_LEGACY_PATH_RESOLVE)
    add_definitions(-DGKFS_USE_LEGACY_PATH_RESOLVE)
endif ()

if (GKFS_FOLLOW_EXTERNAL_SYMLINKS)
    add_definitions(-DGKFS_FOLLOW_EXTERNAL_SYMLINKS)
endif ()

if (GKFS_RENAME_SUPPORT)
    # Rename depends on symlink support
    add_definitions(-DHAS_SYMLINKS)
+1 −0
Original line number Diff line number Diff line
@@ -77,6 +77,7 @@
        "GKFS_CHUNK_STATS": true,
        "GKFS_ENABLE_PROMETHEUS": true,
        "GKFS_RENAME_SUPPORT": true,
        "GKFS_FOLLOW_EXTERNAL_SYMLINKS": true,
        "GKFS_MAX_OPEN_FDS": "10000",
        "GKFS_MAX_INTERNAL_FDS": "1024"
      }
+10 −1
Original line number Diff line number Diff line
@@ -36,7 +36,16 @@ unsigned int
match_components(const std::string& path, unsigned int& path_components,
                 const std::vector<std::string>& components);

bool
/// @resolve_last_link is used only for the old implementation:
/// GKFS_USE_LEGACY_PATH_RESOLVE
std::pair<bool, std::string>
resolve(const std::string& path, bool resolve_last_link = true);

std::pair<bool, std::string>
resolve_new(const std::string& path);

[[deprecated(
        "Use GKFS_USE_LEGACY_PATH_RESOLVE to use old implementation")]] bool
resolve(const std::string& path, std::string& resolved,
        bool resolve_last_link = true);

Loading