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
committerJeff Darcy <jdarcy@redhat.com>2016-02-05 07:26:42 -0800
commit2fe4f758f4f32151ef22d644c4de1e58a508fc3e (patch)
treebe76e1d1b2a3aea6a6061dc28d120237554480f4 /xlators/mgmt/glusterd/src/glusterd-server-quorum.c
parent0aba36ab99fbf537ba2e5ceddfc950528506011f (diff)
glusterd: check quorum on restart bricks
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: 1298439 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>
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 9f60362b522..7b3f0b79921 100644
--- a/xlators/mgmt/glusterd/src/glusterd-server-quorum.c
+++ b/xlators/mgmt/glusterd/src/glusterd-server-quorum.c
@@ -184,8 +184,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);
}
@@ -286,7 +286,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;
}
@@ -384,7 +384,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);
@@ -396,3 +396,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;
+}
+