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

📄 apitest.c

📁 在LINUX下实现HA的源代码
💻 C
字号:
/* * Test program for Local Resource Manager  API. * * Copyright (C) 2004 Huang Zhen <zhenh@cn.ibm.com> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser 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 library 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 * Lesser General Public License for more details. *  * You should have received a copy of the GNU Lesser 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 <unistd.h>#include <stdio.h>#include <sys/poll.h>#include <string.h>#include <glib.h>#include <lrm/lrm_api.h>void lrm_op_done_callback (lrm_op_t* op);void lrm_monitor_callback (lrm_mon_t* monitor);void printf_rsc(lrm_rsc_t* rsc);void printf_op(lrm_op_t* op);void printf_mon(lrm_mon_t* mon);void printf_hash_table(GHashTable* hash_table);void get_all_rsc(ll_lrm_t* lrm);void get_cur_state(lrm_rsc_t* rsc);int main (int argc, char* argv[]){	ll_lrm_t* lrm;	rsc_id_t rid;	lrm_rsc_t* rsc = NULL;	lrm_mon_t* mon = NULL;	lrm_op_t* op = NULL;	lrm = ll_lrm_new("lrm");		if (NULL == lrm)	{		printf("lrm==NULL\n");		return 1;	}	puts("sigon...");	lrm->lrm_ops->signon(lrm,"apitest");	puts("set_lrm_callback...");	lrm->lrm_ops->set_lrm_callback(lrm, lrm_op_done_callback,					lrm_monitor_callback);		puts("add_rsc...");	uuid_generate(rid);	lrm->lrm_ops->add_rsc(lrm, rid, "lsb", "lsb_initscript_sim.sh", NULL);	puts("get_rsc...");	rsc = lrm->lrm_ops->get_rsc(lrm, rid);	printf_rsc(rsc);		puts("set_monitor...");	mon = g_new(lrm_mon_t, 1);	mon->op_type = "status";	mon->params = NULL;	mon->timeout = 0;	mon->user_data = NULL;	mon->mode = LRM_MONITOR_SET;	mon->interval = 2;	mon->target = 1;	rsc->ops->set_monitor(rsc,mon);	printf_mon(mon);	mon = g_new(lrm_mon_t, 1);	mon->op_type = "status";	mon->params = NULL;	mon->timeout = 0;	mon->user_data = NULL;	mon->mode = LRM_MONITOR_CHANGE;	mon->interval = 2;	mon->target = 1;	rsc->ops->set_monitor(rsc,mon);	printf_mon(mon);	puts("perform_op...");	op = g_new(lrm_op_t, 1);	op->op_type = "start";	op->params = NULL;	op->timeout = 0;	op->user_data = strdup("It is a start op!");	rsc->ops->perform_op(rsc,op);	printf_op(op);	sleep(10);		op = g_new(lrm_op_t, 1);	op->op_type = "stop";	op->params = NULL;	op->timeout = 0;	op->user_data = strdup("It is a stop op!");	rsc->ops->perform_op(rsc,op);	printf_op(op);	sleep(10);	puts("rcvmsg...");	while (TRUE) {		lrm->lrm_ops->rcvmsg(lrm,TRUE);	}	puts("signoff...");	lrm->lrm_ops->signoff(lrm);	return 0;}void lrm_op_done_callback(lrm_op_t* op){	puts("lrm_op_done_callback...");	printf_op(op);}void lrm_monitor_callback(lrm_mon_t* monitor){	static int n = 0;	printf("*****************rcvmsg:%d*******************\n",n++);	printf("lrm_monitor_callback is called\n");	printf_mon(monitor);}void printf_rsc(lrm_rsc_t* rsc){	char buf[37];	printf("print resource\n");	if (NULL == rsc) {		printf("resource is null\n");		printf("print end\n");		return;	}	uuid_unparse(rsc->id, buf);	printf("\tresource of id:%s\n", buf);	printf("\tname:%s\n", rsc->name);	printf("\ttype:%s\n", rsc->ra_type);	printf("\tparams:\n");	printf_hash_table(rsc->params);	printf("print end\n");}void printf_op(lrm_op_t* op){	printf("print op\n");	if (NULL == op) {		printf("op is null\n");		printf("print end\n");		return;	}	if (NULL == op->rsc) {		printf("\tresource is null\n");	} else {		char buf[37];		uuid_unparse(op->rsc->id, buf);		printf("\trsc->id:%s\n", buf);	}	printf("\top_type:%s\n",op->op_type?op->op_type:"null");	printf("\tparams:\n");	printf_hash_table(op->params);	printf("\ttimeout:%d\n",op->timeout);	printf("\tuser_data:%s\n",op->user_data?(char*)op->user_data:"null");	printf("\tstatus:%d\n",op->status);	printf("\tapp_name:%s\n",op->app_name?op->app_name:"null");	printf("\tdata:%s\n",op->data?op->data:"null");	printf("\trc:%d\n",op->rc);	printf("\tcall_id:%d\n",op->call_id);	printf("print end\n");}void printf_mon(lrm_mon_t* mon){		printf("print mon\n");	if (NULL == mon) {		printf("mon is null\n");		printf("print end\n");		return;	}	if (NULL == mon->rsc) {		printf("\tresource is null\n");	} else {		char buf[37];		uuid_unparse(mon->rsc->id, buf);		printf("\trsc->id:%s\n", buf);	}	switch(mon->mode)	{		case LRM_MONITOR_SET:			printf("\tmode:%s\n","LRM_MONITOR_SET");			break;					case LRM_MONITOR_CHANGE:			printf("\tmode:%s\n","LRM_MONITOR_CHANGE");			break;		case LRM_MONITOR_CLEAR:			printf("\tmode:%s\n","LRM_MONITOR_CLEAR");			break;	}	printf("\tinterval:%d\n",mon->interval);	printf("\ttarget:%d\n",mon->target);	printf("\top_type:%s\n",mon->op_type?mon->op_type:"null");	printf("\tparams:\n");	printf_hash_table(mon->params);	printf("\ttimeout:%d\n",mon->timeout);	printf("\tuser_data:%s\n",mon->user_data?(char*)mon->user_data:"null");	printf("\tstatus:%d\n",mon->status);	printf("\trc:%d\n",mon->rc);	printf("\tcall_id:%d\n",mon->call_id);	printf("print end\n");}static voidprintf_pair(gpointer key, gpointer value, gpointer user_data){	printf("\t\t%s=%s\n",(char*)key,(char*)value);}voidprintf_hash_table(GHashTable* hash_table){	if (NULL == hash_table) {		printf("\t\tnull\n");		return;	}	g_hash_table_foreach(hash_table, printf_pair, NULL);}voidget_all_rsc(ll_lrm_t* lrm){	GList* rid_list = NULL;	puts("get_all_rscs...");	rid_list = lrm->lrm_ops->get_all_rscs(lrm);	if (NULL != rid_list) {		char buf[37];		rsc_id_t rid;		GList* element = g_list_first(rid_list);		while (NULL != element) {			uuid_copy(rid,element->data);			uuid_unparse(rid, buf);			printf("\tid:%s\n",buf);			element = g_list_next(element);		}	} else {		puts("\tnone.");	}}voidget_cur_state(lrm_rsc_t* rsc){	state_flag_t state;	GList* op_list = NULL;	GList* node = NULL;	puts("get_cur_state...");	op_list = rsc->ops->get_cur_state(rsc, &state);	printf("\tcurrent state:%s\n",state==LRM_RSC_IDLE?"Idel":"Busy");	for(node = g_list_first(op_list); NULL != node; node = g_list_next(node)) {		lrm_op_t* op = (lrm_op_t*)node->data;		printf_op(op);	}}

⌨️ 快捷键说明

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