CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: [EMAIL PROTECTED] 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