Commit 28041105 authored by Alberto Miranda's avatar Alberto Miranda
Browse files

Merge branch '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 and !74.

Closes #94

See merge request !60
parents f59fe8fd ff0c5dc1
Pipeline #1524 passed with stages
in 12 minutes and 26 seconds
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment