⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ccm_epoche.c

📁 linux集群服务器软件代码包
💻 C
字号:
/* $Id: ccm_epoche.c,v 1.1 2005/02/20 14:38:54 andrew Exp $ *//*  * Copyright (C) 2004 Andrew Beekhof <andrew@beekhof.net> *  * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. *  * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * General Public License for more details. *  * You should have received a copy of the GNU General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */#include <sys/param.h>#include <stdio.h>#include <sys/types.h>#include <unistd.h>#include <stdlib.h>#include <errno.h>#include <fcntl.h>#include <clplumbing/cl_log.h>#include <clplumbing/cl_signal.h>#include <clplumbing/lsb_exitcodes.h>#include <portability.h>#include <ocf/oc_event.h>#include <ocf/oc_membership.h>#include <crm/crm.h>#include <crm/dmalloc_wrapper.h>const char* crm_system_name = "ccm_age";oc_ev_t *ccm_token = NULL;#define OPTARGS	"hV"void oc_ev_special(const oc_ev_t *, oc_ev_class_t , int );static void ccm_age_callback(	oc_ed_t event, void *cookie, size_t size, const void *data);gboolean ccm_age_connect(int *ccm_fd);void usage(const char* cmd, int exit_status);char *lookup_host = NULL;intmain(int argc, char ** argv){	int flag;	int argerr = 0;	int ccm_fd = 0;	fd_set rset;		oc_ev_t *ccm_token = NULL;		crm_log_init(crm_system_name);	while ((flag = getopt(argc, argv, OPTARGS)) != EOF) {		switch(flag) {			case 'V':				cl_log_enable_stderr(TRUE);				alter_debug(DEBUG_INC);				break;			case 'h':		/* Help message */				usage(crm_system_name, LSB_EXIT_OK);				break;			default:				++argerr;				break;		}	}    	if (optind > argc) {		++argerr;	}    	if (argerr) {		usage(crm_system_name,LSB_EXIT_GENERIC);	}	if(ccm_age_connect(&ccm_fd)) {		for (;;) {			FD_ZERO(&rset);			FD_SET(ccm_fd, &rset);			if(select(ccm_fd + 1, &rset, NULL,NULL,NULL) == -1){				perror("select");				return(1);			}			if(oc_ev_handle_event(ccm_token)){				crm_err("terminating");				return(1);			}		}	}	return(1);    }voidusage(const char* cmd, int exit_status){	FILE* stream;	stream = exit_status ? stderr : stdout;	fprintf(stream, "usage: %s [-V]\n", cmd);	fflush(stream);	exit(exit_status);}gbooleanccm_age_connect(int *ccm_fd) {	gboolean did_fail = FALSE;	int ret = 0;		crm_debug("Registering with CCM");	ret = oc_ev_register(&ccm_token);	if (ret != 0) {		crm_warn("CCM registration failed");		did_fail = TRUE;	}		if(did_fail == FALSE) {		crm_debug("Setting up CCM callbacks");		ret = oc_ev_set_callback(ccm_token, OC_EV_MEMB_CLASS,					 ccm_age_callback, NULL);		if (ret != 0) {			crm_warn("CCM callback not set");			did_fail = TRUE;		}	}	if(did_fail == FALSE) {		oc_ev_special(ccm_token, OC_EV_MEMB_CLASS, 0/*don't care*/);				crm_debug("Activating CCM token");		ret = oc_ev_activate(ccm_token, ccm_fd);		if (ret != 0){			crm_warn("CCM Activation failed");			did_fail = TRUE;		}	}		return !did_fail;}static void ccm_age_callback(oc_ed_t event, void *cookie, size_t size, const void *data){	int lpc;	int node_list_size;	const oc_ev_membership_t *oc = (const oc_ev_membership_t *)data;	crm_devel("-----------------------");	crm_devel("trans=%d, nodes=%d, new=%d, lost=%d n_idx=%d, "		  "new_idx=%d, old_idx=%d",		  oc->m_instance,		  oc->m_n_member, oc->m_n_in, oc->m_n_out,		  oc->m_memb_idx, oc->m_in_idx, oc->m_out_idx);	if(crm_log_level >= LOG_DEV) {		node_list_size = oc->m_n_member;		for(lpc=0; lpc<node_list_size; lpc++) {			crm_devel("\tCURRENT: %s [nodeid=%d, born=%d]",				  oc->m_array[oc->m_memb_idx+lpc].node_uname,				  oc->m_array[oc->m_memb_idx+lpc].node_id,				  oc->m_array[oc->m_memb_idx+lpc].node_born_on);		}			for(lpc=0; lpc<oc->m_n_in; lpc++) {			crm_devel("\tNEW:     %s [nodeid=%d, born=%d]",				 oc->m_array[oc->m_in_idx+lpc].node_uname,				 oc->m_array[oc->m_in_idx+lpc].node_id,				 oc->m_array[oc->m_in_idx+lpc].node_born_on);		}				for(lpc=0; lpc<oc->m_n_out; lpc++) {			crm_devel("\tLOST:    %s [nodeid=%d, born=%d]",				 oc->m_array[oc->m_out_idx+lpc].node_uname,				 oc->m_array[oc->m_out_idx+lpc].node_id,				 oc->m_array[oc->m_out_idx+lpc].node_born_on);		}	}	crm_devel("-----------------------");		crm_debug("Searching %d members for our birth", oc->m_n_member);	for(lpc = 0; lpc < oc->m_n_member; lpc++) {		if(oc_ev_is_my_nodeid(ccm_token, &(oc->m_array[lpc]))){			crm_debug("MATCH: nodeid=%d, uname=%s, born=%d",				  oc->m_array[oc->m_memb_idx+lpc].node_id,				  oc->m_array[oc->m_memb_idx+lpc].node_uname,				  oc->m_array[oc->m_memb_idx+lpc].node_born_on);			fprintf(stdout, "%d\n",				oc->m_array[oc->m_memb_idx+lpc].node_born_on);			fflush(stdout);			exit(0);		}	}	oc_ev_callback_done(cookie);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -