/[Apache-SVN]
ViewVC logotype

Revision 1857435


Jump to revision: Previous Next
Author: kotkov
Date: Fri Apr 12 21:28:17 2019 UTC (5 years ago)
Changed paths: 18
Log Message:
Reimplement fsfs private operations required by `svnfsfs` (stats, dump index,
load index) as "ioctls".

Technically we achieve this by introducing the new svn_fs_ioctl() API that
adds a generic way of performing backend-specific I/O operations.

This change serves two purposes:

- It allows us to properly expose FS-specific details and invoke FS-specific
  operations everywhere without necessarily promoting them into a proper
  public API (the ioctl code itself may be made either public or private,
  depending on the requirements).

- It solves a potential dependency/linking problem where tools like `svnfsfs`
  work through the libsvn_fs's loader, but also have to load and call private
  APIs from libsvn_fs_fs thus ignoring the loader.  The latter part may
  potentially cause issues with the global shared state, etc.  With the
  patch, all such operations always go through the FS loader.


* subversion/include/svn_fs.h
  (svn_fs_ioctl, SVN_FS_DECLARE_IOCTL_CODE, svn_fs_ioctl_code_t): New.

* subversion/include/svn_error_codes.h
  (SVN_ERR_FS_UNRECOGNIZED_IOCTL_CODE): New error code.

* subversion/include/private/svn_fs_fs_private.h
  (svn_fs_fs__get_stats, svn_fs_fs__dump_index, svn_fs_fs__load_index):
   These functions are now implemented as...
  (SVN_FS_FS__IOCTL_GET_STATS, SVN_FS_FS__IOCTL_DUMP_INDEX,
   SVN_FS_FS__IOCTL_LOAD_INDEX): ...these new ioctls, which ...
  (svn_fs_fs__ioctl_get_stats_input_t, svn_fs_fs__ioctl_get_stats_output_t,
   svn_fs_fs__ioctl_dump_index_input_t, svn_fs_fs__ioctl_load_index_input_t):
   ...use these new structures.

* subversion/libsvn_fs/fs-loader.h
  (fs_library_vtable_t.ioctl, fs_vtable_t.ioctl): New vtable members.

* subversion/libsvn_fs/fs-loader.c
  (svn_fs_ioctl): Implement the new API by forwarding it to an appropriate
   vtable member.

* subversion/libsvn_fs_fs/fs_fs.h
  (svn_fs_fs__get_stats, svn_fs_fs__dump_index, svn_fs_fs__load_index):
   These functions are now declared here.

* subversion/libsvn_fs_fs/fs.c
  (): Include `svn_fs_fs_private.h`.
  (fs_ioctl): Implement the ioctl dispatcher for three current fsfs-specific
   operations.
  (fs_vtable): Initialize the `ioctl` field.
  (library_vtable): Initialize the `ioctl` field to NULL.

* subversion/libsvn_fs_fs/dump-index.c,
  subversion/libsvn_fs_fs/load-index.c,
  subversion/libsvn_fs_fs/stats.c
  (): Tweak includes.

* subversion/libsvn_fs_base/fs.c
  (library_vtable, fs_vtable): Initialize the `ioctl` field to NULL.

* subversion/libsvn_fs_x/fs.c
  (library_vtable, fs_vtable): Initialize the `ioctl` field to NULL.

* subversion/svnfsfs/dump-index-cmd.c
  (dump_index): Invoke an appropriate svn_fs_ioctl().

* subversion/svnfsfs/load-index-cmd.c
  (load_index): Invoke an appropriate svn_fs_ioctl().

* subversion/svnfsfs/stats-cmd.c
  (subcommand__stats): Invoke an appropriate svn_fs_ioctl().

* subversion/tests/libsvn_fs/fs-test.c
  (test_unrecognized_ioctl): New test.
  (test_funcs): Run the new test.

* subversion/tests/libsvn_fs_fs/fs-fs-private-test.c
  (get_repo_stats, dump_index, load_index): Switch to svn_fs_ioctl().

* build.conf
  (svnfsfs, fs-fs-private-test): Don't link to libsvn_fs_fs.


Changed paths

Path Details
Directorysubversion/trunk/build.conf modified , text changed
Directorysubversion/trunk/subversion/include/private/svn_fs_fs_private.h modified , text changed
Directorysubversion/trunk/subversion/include/svn_error_codes.h modified , text changed
Directorysubversion/trunk/subversion/include/svn_fs.h modified , text changed
Directorysubversion/trunk/subversion/libsvn_fs/fs-loader.c modified , text changed
Directorysubversion/trunk/subversion/libsvn_fs/fs-loader.h modified , text changed
Directorysubversion/trunk/subversion/libsvn_fs_base/fs.c modified , text changed
Directorysubversion/trunk/subversion/libsvn_fs_fs/dump-index.c modified , text changed
Directorysubversion/trunk/subversion/libsvn_fs_fs/fs.c modified , text changed
Directorysubversion/trunk/subversion/libsvn_fs_fs/fs_fs.h modified , text changed
Directorysubversion/trunk/subversion/libsvn_fs_fs/load-index.c modified , text changed
Directorysubversion/trunk/subversion/libsvn_fs_fs/stats.c modified , text changed
Directorysubversion/trunk/subversion/libsvn_fs_x/fs.c modified , text changed
Directorysubversion/trunk/subversion/svnfsfs/dump-index-cmd.c modified , text changed
Directorysubversion/trunk/subversion/svnfsfs/load-index-cmd.c modified , text changed
Directorysubversion/trunk/subversion/svnfsfs/stats-cmd.c modified , text changed
Directorysubversion/trunk/subversion/tests/libsvn_fs/fs-test.c modified , text changed
Directorysubversion/trunk/subversion/tests/libsvn_fs_fs/fs-fs-private-test.c modified , text changed

infrastructure at apache.org
ViewVC Help
Powered by ViewVC 1.1.26