diff options
author | Srijan Sivakumar <ssivakum@redhat.com> | 2020-06-02 16:47:24 +0530 |
---|---|---|
committer | MOHIT AGRAWAL <moagrawa@redhat.com> | 2020-09-17 12:10:58 +0000 |
commit | 558fe62a28f05fab2a913e9e9ed1206ed2d28d71 (patch) | |
tree | 6384d7c0373da74454b1567b7cd8597aff244240 /build-aux/pkg-version | |
parent | 5348292bf0fd79035b5817915922133cee8eb785 (diff) |
glusterd:Reducing file operations when writing options into volfile.
Issue: The options to be written into the volfile are in form of
key-value pairs and the current approach taken to write them into
a file is to invoke the write syscall for each key-value pair.
This implies an increased number of system calls.
Code Changes:
1. Addition of a structure, glusterd_volinfo_data_store_t in
glusterd-store.h, containing a character buffer, a pointer to
gf_store_handle_t, the current length of data in the buffer as
well as a flag for checking key while storing in the buffer.
This is used for passing the required file descriptor as well
having a character buffer for storing multiple options before
being written into a file.
2. Modification of function, _storeopts in glusterd-store.c, which
now invokes the gf_store_save_items when buffer is to be emptied
into the volfile before further write into it. Also, it has
replaced the function _storeslaves, _gd_store_rebalance_dict
and _store_global_opts.
3. Modification of function, glusterd_store_volinfo_write in
glusterd-store.c, wherein a pointer of type
glusterd_volinfo_data_store_t is initialized for further
operation. Also, the buffer is emptied into the volfile before
it is freed.
4. Modification of function, glusterd_store_node_state_write in
glusterd-store.c, wherein the a pointer of type
glusterd_volinfo_data_store_t is initialized for further operations.
Also, the buffer is emptied into the volfile before it is freed.
5. Addition of enum into glusterd-mem-types.h
6. Modification of function, glusterd_store_options in
glusterd-store.c, wherein a pointer of type
glusterd_volinfo_data_store_t is initialized for further opertaions.
Also, the buffer is emptied into the volfile before it is freed.
Reasoning behind the approach:
1.Instead of a dynamic allocation of buffer or increasing the buffer
size with increased number of options, it, the current approach takes
a buffer of fixed size (VOLINFO_BUFFER_SIZE). Before any write into
the buffer, the size is checked and if it exceeds the available space,
the contents of the buffer are written to the file before copying new
contents. Dynamic allocation can lead to increased memory usage as one
doesn't know the number of options that could be added in time and may
go on to occupy more space than mandated.
2.The function dict_foreach is a generic function used across different
modules. It made sense not to change its implementation as it might
affect other Functionalities. Hence a structure was added which could
just be passed as one of the parameter to this function (as it takes
a void*).
3. Reduced number of system calls implies an increase in execution speed.
Also, these modified functions come into play whenever the volume is
started or modified.
4. The functions _storeslaves, _gd_store_rebalace_dict and
_store_global_opts were doing the same set of operations as that of
_storeopts except the checking for the key. This has been handled
with the help of a flag in the glusterd_volinfo_data_store_t structure.
This reduces the duplicate code present.
Signed-off-by: Srijan Sivakumar <ssivakum@redhat.com>
Change-Id: I22e6e91c78ed51e3a171482054d77bf793b9ab16
Fixes: #718
Diffstat (limited to 'build-aux/pkg-version')
0 files changed, 0 insertions, 0 deletions