diff options
Diffstat (limited to 'xlators')
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-peer-utils.c | 22 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-peer-utils.h | 3 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd.c | 11 |
3 files changed, 30 insertions, 6 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-peer-utils.c b/xlators/mgmt/glusterd/src/glusterd-peer-utils.c index 4131296ef12..1a97111d0f5 100644 --- a/xlators/mgmt/glusterd/src/glusterd-peer-utils.c +++ b/xlators/mgmt/glusterd/src/glusterd-peer-utils.c @@ -1034,3 +1034,25 @@ glusterd_peerinfo_find_by_generation (uint32_t generation) { generation); return found; } + +int +glusterd_get_peers_count () { + int count = 0; + xlator_t *this = NULL; + glusterd_conf_t *conf = NULL; + glusterd_peerinfo_t *peer = NULL; + + this = THIS; + GF_VALIDATE_OR_GOTO ("glusterd", this, out); + + conf = this->private; + GF_VALIDATE_OR_GOTO (this->name, conf, out); + + rcu_read_lock (); + cds_list_for_each_entry_rcu (peer, &conf->peers, uuid_list) + count++; + rcu_read_unlock (); + +out: + return count; +} diff --git a/xlators/mgmt/glusterd/src/glusterd-peer-utils.h b/xlators/mgmt/glusterd/src/glusterd-peer-utils.h index 9332cf2ea02..e74d1ed9536 100644 --- a/xlators/mgmt/glusterd/src/glusterd-peer-utils.h +++ b/xlators/mgmt/glusterd/src/glusterd-peer-utils.h @@ -87,4 +87,7 @@ gd_add_peer_detail_to_dict (glusterd_peerinfo_t *peerinfo, dict_t *friends, int count); glusterd_peerinfo_t * glusterd_peerinfo_find_by_generation (uint32_t generation); + +int +glusterd_get_peers_count (); #endif /* _GLUSTERD_PEER_UTILS_H */ diff --git a/xlators/mgmt/glusterd/src/glusterd.c b/xlators/mgmt/glusterd/src/glusterd.c index d35ca8dda09..d5002dfe1f1 100644 --- a/xlators/mgmt/glusterd/src/glusterd.c +++ b/xlators/mgmt/glusterd/src/glusterd.c @@ -1743,13 +1743,12 @@ init (xlator_t *this) if (ret < 0) goto out; - /* If there are no 'friends', this would be the best time to - * spawn process/bricks that may need (re)starting since last - * time (this) glusterd was up.*/ - - if (cds_list_empty (&conf->peers)) { + /* If the peer count is less than 2 then this would be the best time to + * spawn process/bricks that may need (re)starting since last time + * (this) glusterd was up. */ + if (glusterd_get_peers_count () < 2) glusterd_launch_synctask (glusterd_spawn_daemons, NULL); - } + ret = glusterd_options_init (this); if (ret < 0) goto out; |