[Cluster-devel] cluster/fence agents/xvm/fence_xvmd.c agents/x ...
lhh at sourceware.org
lhh at sourceware.org
Wed Nov 14 18:41:27 UTC 2007
CVSROOT: /cvs/cluster
Module name: cluster
Branch: RHEL5
Changes by: lhh at sourceware.org 2007-11-14 18:41:27
Modified files:
fence/agents/xvm: fence_xvmd.c options.c options.h
fence/man : fence_xvmd.8
Log message:
Fix #362351 - make fence_xvmd work in no-cluster mode
Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/xvm/fence_xvmd.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.4.2.7&r2=1.4.2.8
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/xvm/options.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.2.2.1&r2=1.2.2.2
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/xvm/options.h.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.1&r2=1.1.2.2
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/man/fence_xvmd.8.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.1&r2=1.1.2.2
--- cluster/fence/agents/xvm/fence_xvmd.c 2007/10/17 18:21:29 1.4.2.7
+++ cluster/fence/agents/xvm/fence_xvmd.c 2007/11/14 18:41:27 1.4.2.8
@@ -221,7 +221,7 @@
do_fence_request_tcp(fence_req_t *req, fence_auth_type_t auth,
void *key, size_t key_len, virConnectPtr vp)
{
- int fd, ret = -1;
+ int fd = -1, ret = -1;
virDomainPtr vdp;
char response = 1;
char *domain_desc, *domain_desc_sanitized;
@@ -534,10 +534,10 @@
struct sockaddr_in sin;
int len;
int n;
- int my_id;
+ int my_id = 1;
socklen_t slen;
fence_req_t data;
- virConnectPtr vp;
+ virConnectPtr vp = NULL;
virt_list_t *vl = NULL;
virt_state_t *dom = NULL;
@@ -545,7 +545,9 @@
if (!vp)
perror("virConnectOpen");
- get_cman_ids(ch, &my_id, NULL);
+ if (!(args->flags & F_NOCLUSTER))
+ get_cman_ids(ch, &my_id, NULL);
+
printf("My Node ID = %d\n", my_id);
if (vp) {
@@ -585,11 +587,14 @@
/* Update list of VMs from libvirt. */
virt_list_update(vp, &vl, my_id);
vl_print(vl);
+
/* Store information here */
- if (args->flags & F_USE_UUID)
- store_domains_by_uuid(h, vl);
- else
- store_domains_by_name(h, vl);
+ if (!(args->flags & F_NOCLUSTER)) {
+ if (args->flags & F_USE_UUID)
+ store_domains_by_uuid(h, vl);
+ else
+ store_domains_by_name(h, vl);
+ }
/*
* If no requests, we're done
@@ -631,7 +636,7 @@
dom = vl_find_uuid(vl, (char *)data.domain);
else
dom = vl_find_name(vl, (char *)data.domain);
- if (!dom) {
+ if (!dom && !(args->flags & F_NOCLUSTER)) {
handle_remote_domain(ch, h, &data, args->auth,
key, key_len, my_id);
continue;
@@ -682,9 +687,9 @@
int mc_sock;
char key[4096];
int key_len = 0, x;
- char *my_options = "dfi:a:p:C:c:k:u?hV";
- cman_handle_t ch;
- void *h;
+ char *my_options = "dfi:a:p:C:c:k:u?hLXV";
+ cman_handle_t ch = NULL;
+ void *h = NULL;
args_init(&args);
args_get_getopt(argc, argv, my_options, &args);
@@ -745,32 +750,34 @@
return 1;
}
- /* Wait for cman to start. */
- x = 0;
- while ((ch = cman_init(NULL)) == NULL) {
- if (!x) {
- printf("Could not connect to CMAN; retrying...\n");
- x = 1;
- }
- sleep(3);
- }
- if (x)
- printf("Connected to CMAN\n");
- /* Wait for quorum */
- while (!cman_is_quorate(ch))
- sleep(3);
-
- /* Wait for openais checkpointing to become available */
- x = 0;
- while ((h = ckpt_init("vm_states", 262144, 4096, 64, 10)) == NULL) {
- if (!x) {
- printf("Could not initialize saCkPt; retrying...\n");
- x = 1;
+ if (!(args.flags & F_NOCLUSTER)) {
+ /* Wait for cman to start. */
+ x = 0;
+ while ((ch = cman_init(NULL)) == NULL) {
+ if (!x) {
+ printf("Could not connect to CMAN; retrying...\n");
+ x = 1;
+ }
+ sleep(3);
+ }
+ if (x)
+ printf("Connected to CMAN\n");
+ /* Wait for quorum */
+ while (!cman_is_quorate(ch))
+ sleep(3);
+
+ /* Wait for openais checkpointing to become available */
+ x = 0;
+ while ((h = ckpt_init("vm_states", 262144, 4096, 64, 10)) == NULL) {
+ if (!x) {
+ printf("Could not initialize saCkPt; retrying...\n");
+ x = 1;
+ }
+ sleep(3);
}
- sleep(3);
+ if (x)
+ printf("Checkpoint initialized\n");
}
- if (x)
- printf("Checkpoint initialized\n");
if (args.family == PF_INET)
mc_sock = ipv4_recv_sk(args.addr, args.port);
--- cluster/fence/agents/xvm/options.c 2006/11/13 16:14:06 1.2.2.1
+++ cluster/fence/agents/xvm/options.c 2007/11/14 18:41:27 1.2.2.2
@@ -253,6 +253,13 @@
}
+static inline void
+assign_nocluster(fence_xvm_args_t *args, struct arg_info *arg, char *value)
+{
+ args->flags |= F_NOCLUSTER;
+}
+
+
/** ALL valid command line and stdin arguments for this fencing agent */
static struct arg_info _arg_info[] = {
{ '\xff', NULL, "agent",
@@ -326,6 +333,10 @@
{ 'X', "-X", NULL,
"Do not connect to CCS for configuration",
assign_noccs },
+
+ { 'L', "-L", NULL,
+ "Local mode only (no cluster)",
+ assign_nocluster },
{ 'V', "-V", NULL,
"Display version and exit",
--- cluster/fence/agents/xvm/options.h 2006/11/13 16:14:06 1.1.2.1
+++ cluster/fence/agents/xvm/options.h 2007/11/14 18:41:27 1.1.2.2
@@ -27,7 +27,8 @@
F_USE_UUID = 0x10,
F_VERSION = 0x20,
F_CCSERR = 0x40,
- F_CCSFAIL = 0x80
+ F_CCSFAIL = 0x80,
+ F_NOCLUSTER = 0x100
} arg_flags_t;
--- cluster/fence/man/fence_xvmd.8 2006/11/13 16:14:08 1.1.2.1
+++ cluster/fence/man/fence_xvmd.8 2007/11/14 18:41:27 1.1.2.2
@@ -81,6 +81,13 @@
override a configuration option contained in CCS, you must specify
this parameter.
\fB-V\fP
+.TP
+\fB-L\fP
+Local-only / non-cluster mode. When used with -X, this this option
+prevents fence_xvmd from operating as a clustered service, obviating
+the need to configure/run CMAN on the host domain.
+.TP
+\fB-V\fP
Print out a version message, then exit.
.SH CCS PARAMETERS
More information about the Cluster-devel
mailing list