FAQ Search Today's Posts Mark Forums Read
» Video Reviews

» Linux Archive

Linux-archive is a website aiming to archive linux email lists and to make them easily accessible for linux users/developers.


» Sponsor

» Partners

» Sponsor

Go Back   Linux Archive > Redhat > Cluster Development

 
 
LinkBack Thread Tools
 
Old 01-12-2011, 01:59 PM
Lon Hohberger
 
Default cman: Make qdiskd exit if removed from configuration

If qdiskd was previously configured and a configuration
update removes the device & label fields, qdiskd will
now set its votes to 0, unregister from CMAN, and exit.

Correct logging about device registration and
configuration errors is also required in order for
users to understand what is going on when this happens
since the current logging from CMAN is a bit unclear.

This is a clean cherry-pick to the RHEL6 branch.

Resolves: rhbz#620679

Signed-off-by: Lon Hohberger <lhh@redhat.com>
---
cman/qdisk/main.c | 33 +++++++++++++++++++++++++++++++--
1 files changed, 31 insertions(+), 2 deletions(-)

diff --git a/cman/qdisk/main.c b/cman/qdisk/main.c
index 78dc3f0..4bb2b16 100644
--- a/cman/qdisk/main.c
+++ b/cman/qdisk/main.c
@@ -1430,13 +1430,36 @@ get_dynamic_config_data(qd_ctx *ctx, int ccsfd)
{
char *val = NULL;
char query[256];
- int old_votes = 0;
+ int old_votes = 0, found = 0;

if (ccsfd < 0)
return -1;

logt_print(LOG_DEBUG, "Loading dynamic configuration
");

+ /* Check label / device presence. If it disappeared, we need to exit */
+ if (ctx->qc_config) {
+ val = NULL;
+ snprintf(query, sizeof(query), "/cluster/quorumd/@device");
+ found = ccs_get(ccsfd, query, &val);
+ if (found != 0) {
+ val = NULL;
+ snprintf(query, sizeof(query), "/cluster/quorumd/@label");
+ found = ccs_get(ccsfd, query, &val);
+ free(val);
+ }
+
+ if (found != 0) {
+ logt_print(LOG_NOTICE,
+ "Quorum device removed from the configuration."
+ " Shutting down.
");
+ ctx->qc_votes = 0;
+ register_device(ctx);
+ _running = 0;
+ return -1;
+ }
+ }
+
/* Get status file */
snprintf(query, sizeof(query), "/cluster/quorumd/@status_file");
if (ccs_get(ccsfd, query, &val) == 0) {
@@ -1724,6 +1747,12 @@ get_static_config_data(qd_ctx *ctx, int ccsfd)
ctx->qc_label = val;
}

+ if (!ctx->qc_device && !ctx->qc_label) {
+ logt_print(LOG_ERR, "No device or label specified; cannot "
+ "run QDisk services.
");
+ return -1;
+ }
+
/* Get min score */
snprintf(query, sizeof(query), "/cluster/quorumd/@min_score");
if (ccs_get(ccsfd, query, &val) == 0) {
@@ -1765,7 +1794,6 @@ get_static_config_data(qd_ctx *ctx, int ccsfd)
free(val);
}

-
return 0;
}

@@ -2049,6 +2077,7 @@ main(int argc, char **argv)

if (quorum_loop(&ctx, ni, MAX_NODES_DISK) == 0) {
/* Only clean up if we're exiting w/o error) */
+ logt_print(LOG_NOTICE, "Unregistering quorum device.
");
cman_unregister_quorum_device(ctx.qc_cman_admin);
quorum_logout(&ctx);
}
--
1.7.1.1
 
Old 01-12-2011, 02:08 PM
Lon Hohberger
 
Default cman: Make qdiskd exit if removed from configuration

If qdiskd was previously configured and a configuration
update removes the device & label fields, qdiskd will
now set its votes to 0, unregister from CMAN, and exit.

Correct logging about device registration and
configuration errors is also required in order for
users to understand what is going on when this happens
since the current logging from CMAN is a bit unclear.

This is a clean cherry-pick to the RHEL6 branch.

Resolves: rhbz#620679

Signed-off-by: Lon Hohberger <lhh@redhat.com>
---
cman/qdisk/main.c | 33 +++++++++++++++++++++++++++++++--
1 files changed, 31 insertions(+), 2 deletions(-)

diff --git a/cman/qdisk/main.c b/cman/qdisk/main.c
index 78dc3f0..4bb2b16 100644
--- a/cman/qdisk/main.c
+++ b/cman/qdisk/main.c
@@ -1430,13 +1430,36 @@ get_dynamic_config_data(qd_ctx *ctx, int ccsfd)
{
char *val = NULL;
char query[256];
- int old_votes = 0;
+ int old_votes = 0, found = 0;

if (ccsfd < 0)
return -1;

logt_print(LOG_DEBUG, "Loading dynamic configuration
");

+ /* Check label / device presence. If it disappeared, we need to exit */
+ if (ctx->qc_config) {
+ val = NULL;
+ snprintf(query, sizeof(query), "/cluster/quorumd/@device");
+ found = ccs_get(ccsfd, query, &val);
+ if (found != 0) {
+ val = NULL;
+ snprintf(query, sizeof(query), "/cluster/quorumd/@label");
+ found = ccs_get(ccsfd, query, &val);
+ free(val);
+ }
+
+ if (found != 0) {
+ logt_print(LOG_NOTICE,
+ "Quorum device removed from the configuration."
+ " Shutting down.
");
+ ctx->qc_votes = 0;
+ register_device(ctx);
+ _running = 0;
+ return -1;
+ }
+ }
+
/* Get status file */
snprintf(query, sizeof(query), "/cluster/quorumd/@status_file");
if (ccs_get(ccsfd, query, &val) == 0) {
@@ -1724,6 +1747,12 @@ get_static_config_data(qd_ctx *ctx, int ccsfd)
ctx->qc_label = val;
}

+ if (!ctx->qc_device && !ctx->qc_label) {
+ logt_print(LOG_ERR, "No device or label specified; cannot "
+ "run QDisk services.
");
+ return -1;
+ }
+
/* Get min score */
snprintf(query, sizeof(query), "/cluster/quorumd/@min_score");
if (ccs_get(ccsfd, query, &val) == 0) {
@@ -1765,7 +1794,6 @@ get_static_config_data(qd_ctx *ctx, int ccsfd)
free(val);
}

-
return 0;
}

@@ -2049,6 +2077,7 @@ main(int argc, char **argv)

if (quorum_loop(&ctx, ni, MAX_NODES_DISK) == 0) {
/* Only clean up if we're exiting w/o error) */
+ logt_print(LOG_NOTICE, "Unregistering quorum device.
");
cman_unregister_quorum_device(ctx.qc_cman_admin);
quorum_logout(&ctx);
}
--
1.7.1.1
 

Thread Tools




All times are GMT. The time now is 11:13 AM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.
Copyright 2007 - 2008, www.linux-archive.org