summaryrefslogtreecommitdiffstats
path: root/xlators/mgmt/glusterd/src/glusterd-server-quorum.c
diff options
context:
space:
mode:
authorAtin Mukherjee <amukherj@redhat.com>2016-01-14 11:11:45 +0530
committerAtin Mukherjee <amukherj@redhat.com>2016-02-17 01:46:31 -0800
commitd132a4704d9b1df55c4c4e56a8389078b80897bd (patch)
treef0b974eaa200b3e6179e42969fd78b137b6a82fc /xlators/mgmt/glusterd/src/glusterd-server-quorum.c
parentdcd1db157479bf9f9ac3c39fd3fd8cb0359c0779 (diff)
glusterd: check quorum on restart bricks
Backport of http://review.gluster.org/#/c/13236/ While spawning bricks on a glusterd restart the quorum should be checked and brick shouldn't be started if the volume doesn't meet quorum. Change-Id: I21bf9055bdf38c53c81138cc204ba05a9ff6444f BUG: 1305256 Signed-off-by: Atin Mukherjee <amukherj@redhat.com> Reviewed-on: http://review.gluster.org/13236 Smoke: Gluster Build System <jenkins@build.gluster.com> NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org> CentOS-regression: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Jeff Darcy <jdarcy@redhat.com> Reviewed-on: http://review.gluster.org/13390 Reviewed-by: Gaurav Kumar Garg <ggarg@redhat.com>
Diffstat (limited to 'xlators/mgmt/glusterd/src/glusterd-server-quorum.c')
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-server-quorum.c29
1 files changed, 25 insertions, 4 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-server-quorum.c b/xlators/mgmt/glusterd/src/glusterd-server-quorum.c
index 8fa68cf3434..dbe13621638 100644
--- a/xlators/mgmt/glusterd/src/glusterd-server-quorum.c
+++ b/xlators/mgmt/glusterd/src/glusterd-server-quorum.c
@@ -189,8 +189,8 @@ _is_contributing_to_quorum (gd_quorum_contrib_t contrib)
return _gf_false;
}
-static gf_boolean_t
-_does_quorum_meet (int active_count, int quorum_count)
+gf_boolean_t
+does_quorum_meet (int active_count, int quorum_count)
{
return (active_count >= quorum_count);
}
@@ -291,7 +291,7 @@ does_gd_meet_server_quorum (xlator_t *this)
if (ret)
goto out;
- if (!_does_quorum_meet (active_count, quorum_count)) {
+ if (!does_quorum_meet (active_count, quorum_count)) {
goto out;
}
@@ -389,7 +389,7 @@ glusterd_do_quorum_action ()
if (ret)
goto unlock;
- if (_does_quorum_meet (active_count, quorum_count))
+ if (does_quorum_meet (active_count, quorum_count))
meets = _gf_true;
list_for_each_entry (volinfo, &conf->volumes, vol_list) {
glusterd_do_volume_quorum_action (this, volinfo, meets);
@@ -401,3 +401,24 @@ unlock:
out:
return ret;
}
+
+/* ret = 1 represents quorum is met or quorum not applicable,
+ ret = 0 represents quorum is not met
+*/
+int
+check_quorum_for_brick_start (glusterd_volinfo_t *volinfo,
+ gf_boolean_t node_quorum)
+{
+ gf_boolean_t volume_quorum = _gf_false;
+ int ret = 0;
+
+ volume_quorum = glusterd_is_volume_in_server_quorum (volinfo);
+ if (volume_quorum) {
+ if (node_quorum)
+ ret = 1;
+ } else {
+ ret = 1;
+ }
+ return ret;
+}
+