READY: Optimize create, stat, remove operations

Merged Marc Vef requested to merge 94-remove-exist-check-when-creating-a-file into master

Optimization of create, stat, and remove operations. The following changes have been made:

  • gkfs_open() logic refactored.
  • create: Previously a stat RPC was send before each create to make sure the file doesn't exist. This logic is now implicit in the create operation on the daemon side.
  • get_metadata() was used on the client for all stat operation, creating a shared_ptr for the Metadata object in the process which was not needed. A new function get_metadata_attr() was created to only return the metadata binary string, which will only create the metadata object if actually required.
  • Remove logic was separated into two operations: remove_metadata() and remove_data().
  • gkfs::config::metadata::implicit_data_removal setting: If true, will remove data on the same node during the remove_metadata() RPC. This is mainly an optimization, but will be useful for future asynchronous removal implementations.

Previously, the code path looked like this:

  1. stat() to get size and mode.
  2. Use these fields to determine if data needs to be removed or just metadata.
  3. remove() is called which, first, sends a single RPC to the daemon with the metadata. Afterwards, data is removed.
  4. The daemon used one handler for both cases.

It now looks like this:

  1. remove() is called which, first, sends a single RPC to the daemon with the metadata. Before, removing the metadata, the daemon fetches mode and size. If implicit_data_removal is set as a configuration, the data is removed in this RPC as well. mode and size are returned to the client.
  2. The client determines if data needs to be removed as well.
  3. If yes, sends a remove_data() RPC as it was previously.

Depends on !66 (merged) and !74 (merged).

Closes #94 (closed)

Edited by Alberto Miranda

Merge request reports