summaryrefslogtreecommitdiffstats
path: root/xlators/mgmt/glusterd/src
diff options
context:
space:
mode:
Diffstat (limited to 'xlators/mgmt/glusterd/src')
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-peer-utils.c22
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-peer-utils.h3
-rw-r--r--xlators/mgmt/glusterd/src/glusterd.c11
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;