diff options
author | Jeff Darcy <jdarcy@fb.com> | 2017-09-15 06:59:01 -0700 |
---|---|---|
committer | Jeff Darcy <jdarcy@fb.com> | 2017-09-15 13:47:01 -0700 |
commit | 8dfdecf220d1c9365e1f8d6af9ead5e48c61e2eb (patch) | |
tree | bccd5906be43cf81792248b06099006525ed0c27 /libglusterfs/src/dict.c | |
parent | e4b47b5d54644c398c424a99116a0cc37e4431d6 (diff) |
Replace namespace/io-stats/io-threads with 3.6-fb versions
This rolls up multiple patches related to namespace identificaton and
throttling/QoS. This primarily includes the following, all by Michael
Goulet <mgoulet@fb.com>.
io-threads: Add weighted round robin queueing by namespace
https://phabricator.facebook.com/D5615269
io-threads: Add per-namespaces queue sizes to IO_THREADS_QUEUE_SIZE_KEY
https://phabricator.facebook.com/D5683162
io-threads: Implement better slot allocation algorithm
https://phabricator.facebook.com/D5683186
io-threads: Only enable weighted queueing on bricks
https://phabricator.facebook.com/D5700062
io-threads: Update queue sizes on drain
https://phabricator.facebook.com/D5704832
Fix parsing (-1) as default NS weight
https://phabricator.facebook.com/D5723383
Parts of the following patches have also been applied to satisfy
dependencies.
io-throttling: Calculate moving averages and throttle offending hosts
https://phabricator.fb.com/D2516161
Shreyas Siravara <sshreyas@fb.com>
Hook up ODS logging for FUSE clients.
https://phabricator.facebook.com/D3963376
Kevin Vigor <kvigor@fb.com>
Add the flag --skip-nfsd-start to skip the NFS daemon stating, even if
it is enabled
https://phabricator.facebook.com/D4575368
Alex Lorca <alexlorca@fb.com>
There are also some "standard" changes: dealing with code that moved,
reindenting to comply with Gluster coding standards, gf_uuid_xxx, etc.
This patch *does* revert some changes which have occurred upstream since
3.6; these will be re-applied as apppropriate on top of this new base.
Change-Id: I69024115da7a60811e5b86beae781d602bdb558d
Signed-off-by: Jeff Darcy <jdarcy@fb.com>
Diffstat (limited to 'libglusterfs/src/dict.c')
-rw-r--r-- | libglusterfs/src/dict.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/libglusterfs/src/dict.c b/libglusterfs/src/dict.c index 6a61e641e19..82b9236e661 100644 --- a/libglusterfs/src/dict.c +++ b/libglusterfs/src/dict.c @@ -1258,6 +1258,38 @@ dict_foreach (dict_t *dict, return ret; } +int +dict_foreach_with_idx (dict_t *dict, + int (*fn)(dict_t *this, + char *key, + data_t *value, + void *data, uint64_t idx), + void *data) +{ + if (!dict) { + gf_log_callingfn ("dict", GF_LOG_WARNING, + "dict is NULL"); + return -1; + } + + uint64_t idx = 0; + int ret = -1; + data_pair_t *pairs = NULL; + data_pair_t *next = NULL; + + pairs = dict->members_list; + while (pairs) { + next = pairs->next; + ret = fn (dict, pairs->key, pairs->value, data, idx); + if (ret < 0) + return ret; + pairs = next; + idx++; + } + + return 0; +} + /* return values: -1 = failure, 0 = no matches found, @@ -2979,6 +3011,16 @@ dict_dump_to_str (dict_t *dict, char *dump, int dumpsize, char *format) return 0; } +/* This function converts a uint32 to a (string) key for use in a dictionary. + * Ensure that the key string buffer is at least DICT_UINT32_KEY_SIZE in + * length, since that's the maximum length of a uint32's string representation + * plus a NULL delimiter char. */ +void +dict_uint32_to_key (uint32_t num, char *key_buf) +{ + snprintf (key_buf, DICT_UINT32_KEY_SIZE, "%u", num); +} + void dict_dump_to_log (dict_t *dict) { |