From f8f09178bb890924a8050b466cc2e7a0a30e35a7 Mon Sep 17 00:00:00 2001 From: Mohit Agrawal Date: Fri, 17 May 2019 19:26:48 +0530 Subject: glusterd: Optimize code to copy dictionary in handshake code path Problem: While high no. of volumes are configured around 2000 glusterd has bottleneck during handshake at the time of copying dictionary Solution: To avoid the bottleneck serialize a dictionary instead of copying key-value pair one by one Change-Id: I9fb332f432e4f915bc3af8dcab38bed26bda2b9a fixes: bz#1711297 Signed-off-by: Mohit Agrawal --- libglusterfs/src/dict.c | 6 +----- libglusterfs/src/glusterfs/dict.h | 6 ++++++ libglusterfs/src/libglusterfs.sym | 1 + 3 files changed, 8 insertions(+), 5 deletions(-) (limited to 'libglusterfs') diff --git a/libglusterfs/src/dict.c b/libglusterfs/src/dict.c index 2374ab032d1..6648be123b7 100644 --- a/libglusterfs/src/dict.c +++ b/libglusterfs/src/dict.c @@ -2799,10 +2799,6 @@ dict_rename_key(dict_t *this, char *key, char *replace_key) * 4 4 4 */ -#define DICT_HDR_LEN 4 -#define DICT_DATA_HDR_KEY_LEN 4 -#define DICT_DATA_HDR_VAL_LEN 4 - /** * dict_serialized_length_lk - return the length of serialized dict. This * procedure has to be called with this->lock held. @@ -2812,7 +2808,7 @@ dict_rename_key(dict_t *this, char *key, char *replace_key) * : failure: -errno */ -static int +int dict_serialized_length_lk(dict_t *this) { int ret = -EINVAL; diff --git a/libglusterfs/src/glusterfs/dict.h b/libglusterfs/src/glusterfs/dict.h index 52b833fd559..022f564f62a 100644 --- a/libglusterfs/src/glusterfs/dict.h +++ b/libglusterfs/src/glusterfs/dict.h @@ -91,6 +91,9 @@ typedef struct _data_pair data_pair_t; #define DICT_MAX_FLAGS 256 #define DICT_FLAG_SET 1 #define DICT_FLAG_CLEAR 0 +#define DICT_HDR_LEN 4 +#define DICT_DATA_HDR_KEY_LEN 4 +#define DICT_DATA_HDR_VAL_LEN 4 struct _data { char *data; @@ -412,4 +415,7 @@ are_dicts_equal(dict_t *one, dict_t *two, gf_boolean_t (*value_ignore)(char *k)); int dict_has_key_from_array(dict_t *dict, char **strings, gf_boolean_t *result); + +int +dict_serialized_length_lk(dict_t *this); #endif diff --git a/libglusterfs/src/libglusterfs.sym b/libglusterfs/src/libglusterfs.sym index 93ab05f166a..188cda27bc5 100644 --- a/libglusterfs/src/libglusterfs.sym +++ b/libglusterfs/src/libglusterfs.sym @@ -400,6 +400,7 @@ dict_rename_key dict_reset dict_serialize dict_serialized_length +dict_serialized_length_lk dict_serialize_value_with_delim dict_set dict_setn -- cgit