[prev in list] [next in list] [prev in thread] [next in thread]
List: linux-ha-dev
Subject: Re: [Linux-ha-dev] How to display the RAs to end users when we have
From: Huang Zhen <zhenhltc () cn ! ibm ! com>
Date: 2004-11-09 10:46:39
Message-ID: 4190A00F.5020201 () cn ! ibm ! com
[Download RAW message or body]
Hi, Andrew,
I have made a patch to change the API of LRM as lmb suggestion.
Could you please review it and change CRM according to the new API?
Thank you very much!
Lars Marowsky-Bree wrote:
> On 2004-11-03T09:22:35, Huang Zhen <zhenhltc@cn.ibm.com> wrote:
>
>
>>>key. I was just pointing out on IRC that from the point of the code,
>>>that doesn't make sense.
>>
>>And the get_provider_list() came to the code with your agreement.
>>(http://lists.community.tummy.com/pipermail/linux-ha-dev/2004-August/008739.html)
>
>
> Oops. I have to correct myself. Must have missed the extra
> "/Filesystem/" in there, that's not what the OCF RA API specifies.
>
> /ocf/resource.d/{heartbeat,steeleye,suse,...}/Filesystem would be
> correct.
>
>
>>>(Where the logical hierarchy _is_ class -> provider -> type.)
>>
>>Please refer to the lrm_api.h which has been there for a long time and
>>asked for review several times.
>
>
> Yes, that's what I was referring to, and I simply missed this in the
> past.
>
>
>>GList* (*get_rsc_class_supported)(ll_lrm_t*);
>>GList* (*get_rsc_type_supported)(ll_lrm_t*, const char* rsc_class);
>>GList* (*get_rsc_provider_supported)(ll_lrm_t*,const char* rsc_class,
>> const char* rsc_type);
>>
>>Through these three functions we can find the logical hierarchy in it is
>>class->type->provider.
>
>
> Yeah, but this doesn't match the OCF RA API spec. I must have corrected
> this in my mind automatically when reading it, sorry about that.
>
>
> (Actually, exporting all of the LRM API as function pointers (even those
> which are not provided by plugins, but by the library directly) may not be
> the best way of doing things, as Alan has pointed out wrt the fencing
> API recently. But that's another issue, and one maybe Alan wants to
> comment on it. I don't have to write that code and thus don't care ;-)
>
>
>>Of cause, we should modify it if it is really wrong. So maybe it should
>>be changed to this:
>>
>>GList* (*get_rsc_class_supported)(ll_lrm_t*);
>>GList* (*get_rsc_provider_supported)(ll_lrm_t*,const char* rsc_class);
>>GList* (*get_rsc_type_supported)(ll_lrm_t*, const char* rsc_class,
>> const char* provider);
>
>
> Yes, that's what I'd expect, and also what I _thought_ I had read in the
> past. ;-) Sorry about that.
>
>
>>One small issue is for the lsb and heartbeat classes, they don't have
>>the concept of provider. Maybe we can let it just return NULL.
>
>
> NULL would probably be bad (and error prone). Returning a default value
> like "system" for LSB scripts, or "heartbeat" for the heartbeat class
> seems better.
>
> (Note to the fancy: For the LSB scripts you could even try and go ask
> rpm (or dpkg) which package owns that script and report that. But I'm
> thinking I shouldn't even have mentioned that. ;-)
>
>
>>It will not take much time to do it.
>>Is this ok for CRM? If so, I will change it.
>
>
> Seems fine with me.
>
> Alan, Andrew?
>
>
> Sincerely,
> Lars Marowsky-Brée <lmb@suse.de>
>
--
Best Regards,
Huang Zhen
LTC and pLinux Testing
IBM China Software Development Lab, Beijing
Telno: (8610)82782244-2845
["provider.patch" (text/plain)]
Index: include/lrm/lrm_api.h
===================================================================
RCS file: /home/cvs/linux-ha/linux-ha/include/lrm/lrm_api.h,v
retrieving revision 1.16
diff -u -r1.16 lrm_api.h
--- include/lrm/lrm_api.h 24 Oct 2004 13:00:12 -0000 1.16
+++ include/lrm/lrm_api.h 9 Nov 2004 10:14:02 -0000
@@ -220,27 +220,27 @@
GList* (*get_rsc_class_supported)(ll_lrm_t*);
/*
- *get_rsc_type_supported:
- * Returns the resource types supported of class rsc_class.
- * e.g. drdb, apache,IPaddr...
+ *get_rsc_provider_supported:
+ * Returns the provider list of the given resource class
+ * e.g. suse, failsafe...
*
- *return: a list of the names of supported resource types.
+ *return: a list of the names of providers.
*
*/
- GList* (*get_rsc_type_supported)(ll_lrm_t*, const char* rsc_class);
-
+ GList* (*get_rsc_provider_supported)(ll_lrm_t*,const char* rsc_class);
+
/*
- *get_rsc_provider_supported:
- * Returns the provider list of the given resource types
- * e.g. heartbeat, failsafe...
*
- *rsc_provider: if it is null, the default one will used.
+ *get_rsc_type_supported:
+ * Returns the resource types provided by the given provider
+ * of the given class
+ * e.g. drdb, apache,IPaddr...
*
- *return: a list of the names of supported resource provider.
+ *return: a list of the names of supported resource types.
*
*/
- GList* (*get_rsc_provider_supported)(ll_lrm_t*,
- const char* rsc_class, const char* rsc_type);
+ GList* (*get_rsc_type_supported)(ll_lrm_t*, const char* rsc_class,
+ const char* provider);
/*
*get_rsc_type_metadata:
@@ -253,17 +253,6 @@
*/
char* (*get_rsc_type_metadata)(ll_lrm_t*, const char* rsc_class,
const char* rsc_type, const char* rsc_provider);
-
-/*
- *get_all_type_metadatas:
- * Returns all the metadata of the resource type of the class
- *
- *return: A GHashtable, the key is the RA type,
- * the value is the metadata.
- * Now only default RA's metadata will be returned.
- *
- */
- GHashTable* (*get_all_type_metadata)(ll_lrm_t*, const char* rsc_class);
/*
*get_all_rscs:
Index: include/lrm/raexec.h
===================================================================
RCS file: /home/cvs/linux-ha/linux-ha/include/lrm/raexec.h,v
retrieving revision 1.10
diff -u -r1.10 raexec.h
--- include/lrm/raexec.h 3 Nov 2004 00:12:31 -0000 1.10
+++ include/lrm/raexec.h 9 Nov 2004 10:14:02 -0000
@@ -104,20 +104,20 @@
* List all resource info of this class
*
* Parameters:
- * rsc_info: a GList which item data type is rsc_info_t as
- * defined above, containing all resource info of
- * this class in the local machine.
+ * rsc_info: a GList which item data type is string as
+ * resource type, containing all resource type of
+ * this class and this provider in the local machine.
*
* Return Value:
* >=0 : succeed. the RA type number of this RA class
* -1: failed due to invalid RA directory such as not existing.
* -2: failed due to other factors
*/
- int (*get_resource_list)(GList ** rsc_info);
+ int (*get_resource_list)(const char* provider, GList ** rsc_info);
/*
* Description:
- * List all providers of this type
+ * List all providers
*
* Parameters:
* providers: a GList which item data type is string.
@@ -128,7 +128,7 @@
* -1: failed due to invalid RA directory such as not existing.
* -2: failed due to other factors
*/
- int (*get_provider_list)(const char* ra_type, GList ** providers);
+ int (*get_provider_list)(GList ** providers);
/*
* Description:
Index: lib/lrm/clientlib.c
===================================================================
RCS file: /home/cvs/linux-ha/linux-ha/lib/lrm/clientlib.c,v
retrieving revision 1.26
diff -u -r1.26 clientlib.c
--- lib/lrm/clientlib.c 22 Oct 2004 02:44:55 -0000 1.26
+++ lib/lrm/clientlib.c 9 Nov 2004 10:14:05 -0000
@@ -44,12 +44,11 @@
static int lrm_set_lrm_callback (ll_lrm_t* lrm,
lrm_op_done_callback_t op_done_callback_func);
static GList* lrm_get_rsc_class_supported (ll_lrm_t* lrm);
-static GList* lrm_get_rsc_type_supported (ll_lrm_t* lrm, const char* class);
-static GList* lrm_get_rsc_provider_supported (ll_lrm_t* lrm
- ,const char* class, const char* type);
+static GList* lrm_get_rsc_provider_supported (ll_lrm_t* lrm,const char* class);
+static GList* lrm_get_rsc_type_supported (ll_lrm_t* lrm, const char* class
+ ,const char* provider);
static char* lrm_get_rsc_type_metadata(ll_lrm_t* lrm, const char* class
,const char* type, const char* provider);
-static GHashTable* lrm_get_all_type_metadata(ll_lrm_t*, const char* class);
static GList* lrm_get_all_rscs (ll_lrm_t* lrm);
static lrm_rsc_t* lrm_get_rsc (ll_lrm_t* lrm, const char* rsc_id);
static int lrm_add_rsc (ll_lrm_t*, const char* id, const char* class
@@ -66,10 +65,9 @@
lrm_delete,
lrm_set_lrm_callback,
lrm_get_rsc_class_supported,
- lrm_get_rsc_type_supported,
lrm_get_rsc_provider_supported,
+ lrm_get_rsc_type_supported,
lrm_get_rsc_type_metadata,
- lrm_get_all_type_metadata,
lrm_get_all_rscs,
lrm_get_rsc,
lrm_add_rsc,
@@ -377,7 +375,8 @@
return class_list;
}
static GList*
-lrm_get_rsc_type_supported (ll_lrm_t* lrm, const char* rclass)
+lrm_get_rsc_type_supported (ll_lrm_t* lrm, const char* rclass
+ , const char* provider)
{
struct ha_msg* msg;
struct ha_msg* ret;
@@ -397,13 +396,13 @@
"lrm_get_rsc_type_supported: can not create types msg");
return NULL;
}
- if ( HA_OK != ha_msg_add(msg, F_LRM_RCLASS, rclass)) {
+ if ( HA_OK != ha_msg_add(msg, F_LRM_RCLASS, rclass)
+ || HA_OK != ha_msg_add(msg, F_LRM_RPROVIDER, provider)) {
ha_msg_del(msg);
client_log(LOG_ERR,
"lrm_get_rsc_type_supported: can not add field to msg");
return NULL;
}
-
/* send the msg to lrmd */
if (HA_OK != msg2ipcchan(msg,ch_cmd)) {
ha_msg_del(msg);
@@ -435,7 +434,7 @@
return type_list;
}
static GList*
-lrm_get_rsc_provider_supported (ll_lrm_t* lrm, const char* class, const char* type)
+lrm_get_rsc_provider_supported (ll_lrm_t* lrm, const char* class)
{
struct ha_msg* msg;
struct ha_msg* ret;
@@ -455,8 +454,8 @@
"lrm_get_rsc_provider_supported: can not create types msg");
return NULL;
}
- if (HA_OK != ha_msg_add(msg, F_LRM_RCLASS, class)
- || HA_OK != ha_msg_add(msg, F_LRM_RTYPE, type)) {
+
+ if (HA_OK != ha_msg_add(msg, F_LRM_RCLASS, class)) {
ha_msg_del(msg);
client_log(LOG_ERR,
"lrm_get_rsc_provider_supported: can not add field to msg");
@@ -471,6 +470,7 @@
return NULL;
}
ha_msg_del(msg);
+
/* get the return message */
ret = msgfromIPC_noauth(ch_cmd);
if (NULL == ret) {
@@ -478,6 +478,7 @@
"lrm_get_rsc_provider_supported: can not recieve ret msg");
return NULL;
}
+
/* get the rc of the message */
if (HA_OK != get_rc_from_msg(ret)) {
ha_msg_del(ret);
@@ -485,7 +486,8 @@
"lrm_get_rsc_provider_supported: rc from msg is fail");
return NULL;
}
- /* get the ra provider list from message */
+
+ /* get the ra provider list from message */
provider_list = ha_msg_value_str_list(ret,F_LRM_RPROVIDERS);
ha_msg_del(ret);
@@ -494,32 +496,6 @@
return provider_list;
}
-/*
- * lrm_get_all_type_metadatas():
- * For OCF RAs, they may have more than one providers so they may have more than
- * one metadata. The hash table is not suitable for this. Fix Me
- */
-static GHashTable*
-lrm_get_all_type_metadata (ll_lrm_t* lrm, const char* rclass)
-{
- GHashTable* metas = g_hash_table_new(g_str_hash, g_str_equal);
- GList* types = lrm_get_rsc_type_supported (lrm, rclass);
- GList* node = NULL;
- const char* meta;
-
- client_log(LOG_INFO,"lrm_get_all_type_metadatas: start.");
- for (node = g_list_first(types); NULL!=node; node=g_list_next(node)) {
- meta = lrm_get_rsc_type_metadata(lrm,rclass,node->data,NULL);
- if (NULL == meta) {
- continue;
- }
- g_hash_table_insert(metas, node->data,strdup(meta));
- }
- g_list_free(types);
-
- client_log(LOG_INFO,"lrm_get_all_type_metadatas: end.");
- return metas;
-}
static char*
lrm_get_rsc_type_metadata (ll_lrm_t* lrm, const char* rclass, const char* rtype,
Index: lib/lrm/lrm_msg.c
===================================================================
RCS file: /home/cvs/linux-ha/linux-ha/lib/lrm/lrm_msg.c,v
retrieving revision 1.18
diff -u -r1.18 lrm_msg.c
--- lib/lrm/lrm_msg.c 27 Sep 2004 08:33:55 -0000 1.18
+++ lib/lrm/lrm_msg.c 9 Nov 2004 10:14:09 -0000
@@ -306,7 +306,7 @@
return NULL;
}
- ret = ha_msg_new(1);
+ ret = ha_msg_new(10);
if (HA_OK != ha_msg_add(ret, F_LRM_TYPE, msg)) {
ha_msg_del(ret);
cl_log(LOG_ERR, "ha_msg_add in create_lrm_msg failed");
Index: lib/plugins/lrm/racommon.c
===================================================================
RCS file: /home/cvs/linux-ha/linux-ha/lib/plugins/lrm/racommon.c,v
retrieving revision 1.8
diff -u -r1.8 racommon.c
--- lib/plugins/lrm/racommon.c 10 Sep 2004 10:23:54 -0000 1.8
+++ lib/plugins/lrm/racommon.c 9 Nov 2004 10:14:09 -0000
@@ -84,7 +84,7 @@
"will cause memory leak.");
*rsc_info = NULL;
}
-
+ cl_log(LOG_ERR, "class_path:%s",class_path);
file_num = scandir(class_path, &namelist, 0, alphasort);
if (file_num < 0) {
cl_log(LOG_ERR, "scandir failed in RA plugin");
Index: lib/plugins/lrm/raexechb.c
===================================================================
RCS file: /home/cvs/linux-ha/linux-ha/lib/plugins/lrm/raexechb.c,v
retrieving revision 1.26
diff -u -r1.26 raexechb.c
--- lib/plugins/lrm/raexechb.c 3 Nov 2004 00:51:35 -0000 1.26
+++ lib/plugins/lrm/raexechb.c 9 Nov 2004 10:14:09 -0000
@@ -55,9 +55,9 @@
GHashTable * params);
static uniform_ret_execra_t map_ra_retvalue(int ret_execra, const char * op_type);
-static int get_resource_list(GList ** rsc_info);
static char* get_resource_meta(const char* rsc_type, const char* provider);
-static int get_provider_list(const char* ra_type, GList ** providers);
+static int get_provider_list(GList ** providers);
+static int get_resource_list(const char* provider,GList ** rsc_info);
/* The end of exported function list */
@@ -232,7 +232,7 @@
}
static int
-get_resource_list(GList ** rsc_info)
+get_resource_list(const char* provider, GList ** rsc_info)
{
return get_runnable_list(RA_PATH, rsc_info);
}
@@ -243,8 +243,19 @@
return g_strndup(rsc_type, strnlen(rsc_type, MAX_LENGTH_OF_RSCNAME));
}
static int
-get_provider_list(const char* ra_type, GList ** providers)
+get_provider_list(GList ** providers)
{
- *providers = NULL;
- return 0;
+ if ( providers == NULL ) {
+ cl_log(LOG_ERR, "Parameter error: get_providers");
+ return -2;
+ }
+
+ if ( *providers != NULL ) {
+ cl_log(LOG_ERR, "Parameter error: get_providers."\
+ "will cause memory leak.");
+ *providers = NULL;
+ }
+ *providers = g_list_append(*providers,g_strdup("heartbeat"));
+ return 1;
}
+
Index: lib/plugins/lrm/raexeclsb.c
===================================================================
RCS file: /home/cvs/linux-ha/linux-ha/lib/plugins/lrm/raexeclsb.c,v
retrieving revision 1.27
diff -u -r1.27 raexeclsb.c
--- lib/plugins/lrm/raexeclsb.c 3 Nov 2004 00:51:22 -0000 1.27
+++ lib/plugins/lrm/raexeclsb.c 9 Nov 2004 10:14:09 -0000
@@ -61,8 +61,8 @@
static uniform_ret_execra_t map_ra_retvalue(int ret_execra, const char * op_type);
static char* get_resource_meta(const char* rsc_type, const char* provider);
-static int get_resource_list(GList ** rsc_info);
-static int get_provider_list(const char* ra_type, GList ** providers);
+static int get_resource_list(const char* provider, GList ** rsc_info);
+static int get_provider_list(GList ** providers);
/* The end of exported function list */
@@ -189,7 +189,7 @@
}
static int
-get_resource_list(GList ** rsc_info)
+get_resource_list(const char* provider, GList ** rsc_info)
{
return get_runnable_list(RA_PATH, rsc_info);
}
@@ -268,8 +268,18 @@
}
static int
-get_provider_list(const char* ra_type, GList ** providers)
+get_provider_list(GList ** providers)
{
- *providers = NULL;
- return 0;
+ if ( providers == NULL ) {
+ cl_log(LOG_ERR, "Parameter error: get_providers");
+ return -2;
+ }
+
+ if ( *providers != NULL ) {
+ cl_log(LOG_ERR, "Parameter error: get_providers."\
+ "will cause memory leak.");
+ *providers = NULL;
+ }
+ *providers = g_list_append(*providers,g_strdup("system"));
+ return 1;
}
Index: lib/plugins/lrm/raexecocf.c
===================================================================
RCS file: /home/cvs/linux-ha/linux-ha/lib/plugins/lrm/raexecocf.c,v
retrieving revision 1.38
diff -u -r1.38 raexecocf.c
--- lib/plugins/lrm/raexecocf.c 3 Nov 2004 00:51:04 -0000 1.38
+++ lib/plugins/lrm/raexecocf.c 9 Nov 2004 10:14:09 -0000
@@ -73,9 +73,9 @@
GHashTable * params);
static uniform_ret_execra_t map_ra_retvalue(int ret_execra,
const char * op_type);
-static int get_resource_list(GList ** rsc_info);
static char* get_resource_meta(const char* rsc_type, const char* provider);
-static int get_provider_list(const char* ra_type, GList ** providers);
+static int get_resource_list(const char* provider, GList ** rsc_info);
+static int get_provider_list(GList ** providers);
/* The end of exported function list */
@@ -90,10 +90,7 @@
static gboolean let_remove_eachitem(gpointer key, gpointer value,
gpointer user_data);
-static int get_providers(const char* class_path, const char* op_type,
- GList ** providers);
-static void merge_string_list(GList** old, GList* new);
-static gint compare_str(gconstpointer a, gconstpointer b);
+static int get_providers(const char* class_path, GList ** providers);
/* The end of internal function & data list */
@@ -185,80 +182,20 @@
return ret_execra;
}
-static gint
-compare_str(gconstpointer a, gconstpointer b)
-{
- return strncmp(a,b,RA_MAX_NAME_LENGTH);
-}
static int
-get_resource_list(GList ** rsc_info)
+get_resource_list(const char* provider,GList ** rsc_info)
{
- struct dirent **namelist;
- GList* item;
- int file_num;
char subdir[FILENAME_MAX+1];
-
- if ( rsc_info == NULL ) {
- cl_log(LOG_ERR, "Parameter error: get_resource_list");
- return -2;
- }
-
- if ( *rsc_info != NULL ) {
- cl_log(LOG_ERR, "Parameter error: get_resource_list."\
- "will cause memory leak.");
- *rsc_info = NULL;
- }
- file_num = scandir(RA_PATH, &namelist, 0, alphasort);
- if (file_num < 0) {
- return -2;
- }
- while (file_num--) {
- GList* ra_subdir = NULL;
- if ((DT_DIR != namelist[file_num]->d_type) ||
- ('.' == namelist[file_num]->d_name[0])) {
- free(namelist[file_num]);
- continue;
- }
-
- snprintf(subdir,FILENAME_MAX,"%s/%s",
- RA_PATH, namelist[file_num]->d_name);
-
- get_runnable_list(subdir,&ra_subdir);
-
- merge_string_list(rsc_info,ra_subdir);
-
- while (NULL != (item = g_list_first(ra_subdir))) {
- ra_subdir = g_list_remove_link(ra_subdir, item);
- g_free(item->data);
- g_list_free_1(item);
- }
-
- free(namelist[file_num]);
- }
- free(namelist);
-
- return 0;
-}
-
-static void
-merge_string_list(GList** old, GList* new)
-{
- GList* item = NULL;
- char* newitem;
- for( item=g_list_first(new); NULL!=item; item=g_list_next(item)){
- if (!g_list_find_custom(*old, item->data,compare_str)){
- newitem = strndup(item->data,RA_MAX_NAME_LENGTH);
- *old = g_list_append(*old, newitem);
- }
- }
+ snprintf(subdir,FILENAME_MAX,"%s/%s",RA_PATH, provider);
+ return get_runnable_list(subdir, rsc_info);
}
static int
-get_provider_list(const char* ra_type, GList ** providers)
+get_provider_list(GList ** providers)
{
int ret;
- ret = get_providers(RA_PATH, ra_type, providers);
+ ret = get_providers(RA_PATH, providers);
if (0>ret) {
cl_log(LOG_ERR, "scandir failed in OCF RA plugin");
}
@@ -367,7 +304,7 @@
}
static int
-get_providers(const char* class_path, const char* ra_type, GList ** providers)
+get_providers(const char* class_path, GList ** providers)
{
struct dirent **namelist;
int file_num;
@@ -387,7 +324,6 @@
if (file_num < 0) {
return -2;
}else{
- char tmp_buffer[FILENAME_MAX+1];
while (file_num--) {
if ((DT_DIR != namelist[file_num]->d_type) ||
('.' == namelist[file_num]->d_name[0])) {
@@ -395,13 +331,8 @@
continue;
}
- snprintf(tmp_buffer,FILENAME_MAX,"%s/%s/%s",
- class_path, namelist[file_num]->d_name, ra_type);
-
- if ( filtered(tmp_buffer) == TRUE ) {
- *providers = g_list_append(*providers,
+ *providers = g_list_append(*providers,
g_strdup(namelist[file_num]->d_name));
- }
free(namelist[file_num]);
}
free(namelist);
Index: lrm/admin/lrmadmin.c
===================================================================
RCS file: /home/cvs/linux-ha/linux-ha/lrm/admin/lrmadmin.c,v
retrieving revision 1.22
diff -u -r1.22 lrmadmin.c
--- lrm/admin/lrmadmin.c 24 Oct 2004 12:38:33 -0000 1.22
+++ lrm/admin/lrmadmin.c 9 Nov 2004 10:14:12 -0000
@@ -102,7 +102,7 @@
const char * simple_help_screen =
"lrmadmin {-d|--deamon}\n"
-" {-A|--add} <rscid> <raclass> <ratype> <provider|NULL> \
[<rsc_params_list>]\n" +" {-A|--add} <rscid> <raclass> <ratype> <provider> \
[<rsc_params_list>]\n" " {-D|--delete} <rscid>\n"
" {-F|--flush} <rscid>\n"
" {-E|--execute} <rscid> <operator> <timeout> <interval> \
<target_rc|EVERYTIME|CHANGED> [<operator_parameters_list>]\n" @@ -110,9 +110,9 @@
" {-L|--listall}\n"
" {-I|--information} <rsc_id>\n"
" {-C|--raclass_supported}\n"
-" {-T|--ratype_supported} <raclss>\n"
-" {-M|--metadata} <raclss> <ratype> <provider|NULL>\n"
-" {-P|--provider} <raclss> <ratype>\n"
+" {-P|--provider} <raclss> \n"
+" {-T|--ratype_supported} <raclss> <provider>\n"
+" {-M|--metadata} <raclss> <ratype> <provider>\n"
" {-h|--help}\n";
#define OPTION_OBSCURE_CHECK \
@@ -128,7 +128,6 @@
static int transfer_cmd_params(int amount, int start, char * argv[],
const char * class, GHashTable ** params_ht);
static void g_print_stringitem(gpointer data, gpointer user_data);
-static void g_print_rainfo_item(gpointer data, gpointer user_data);
static void g_print_ops(gpointer data, gpointer user_data);
static void g_get_rsc_description(gpointer data, gpointer user_data);
static void print_rsc_inf(lrm_rsc_t * lrmrsc);
@@ -143,6 +142,7 @@
static int ra_metadata(ll_lrm_t * lrmd, int argc, int optind, char * argv[]);
static int ra_provider(ll_lrm_t * lrmd, int argc, int optind, char * argv[]);
+static int ra_type(ll_lrm_t * lrmd, int argc, int optind, char * argv[]);
/* the end of the internal used function list */
@@ -156,7 +156,6 @@
ll_lrm_t* lrmd;
lrm_rsc_t * lrm_rsc;
GList *raclass_list = 0,
- *ratype_list = 0,
*rscid_list;
char raclass[20];
@@ -167,7 +166,7 @@
printf("%s",simple_help_screen);
return 0;
}
-
+
cl_log_set_entity(lrmadmin_name);
cl_log_enable_stderr(FALSE);
cl_log_set_facility(LOG_USER);
@@ -210,9 +209,6 @@
case 'T':
OPTION_OBSCURE_CHECK
lrmadmin_cmd = RATYPE_SUPPORTED;
- if (optarg) {
- strncpy(raclass, optarg, 19);
- }
break;
case 'F':
@@ -403,18 +399,7 @@
break;
case RATYPE_SUPPORTED:
- ratype_list = lrmd->lrm_ops->
- get_rsc_type_supported(lrmd, raclass);
- printf("List size: %d\n", g_list_length(ratype_list));
- if (ratype_list) {
- g_list_foreach(ratype_list, g_print_rainfo_item,
- NULL);
- /* g_list_free(ratype_list); */
- } else {
- printf("For this RA class, no any RA type is "
- "supported\n");
- }
-
+ ra_type(lrmd, argc, optind, argv);
ASYN_OPS = FALSE;
break;
@@ -588,26 +573,50 @@
ra_provider(ll_lrm_t * lrmd, int argc, int optind, char * argv[])
{
const char * class = argv[optind-1];
- const char * type = argv[optind];
GList* providers = NULL;
GList* provider = NULL;
- if(argc < 4) {
+ if(argc < 3) {
cl_log(LOG_ERR,"No enough parameters.");
return -2;
}
- providers = lrmd->lrm_ops->get_rsc_provider_supported(lrmd,class,type);
+ providers = lrmd->lrm_ops->get_rsc_provider_supported(lrmd,class);
while (NULL != (provider = g_list_first(providers))) {
- printf("%s\n",(char*)provider->data);
- providers = g_list_remove(providers, provider->data);
- g_free(provider->data);
+ char* name = (char*)provider->data;
+ printf("%s\n",name);
+ providers = g_list_remove(providers,name);
+ g_free(name);
}
g_list_free(providers);
return 0;
}
+static int
+ra_type(ll_lrm_t * lrmd, int argc, int optind, char * argv[])
+{
+ const char * class = argv[optind - 1];
+ const char * provider = argv[optind];
+ GList* types = NULL;
+ GList* type = NULL;
+ if(argc < 4) {
+ cl_log(LOG_ERR,"No enough parameters.");
+ return -2;
+ }
+
+ types = lrmd->lrm_ops->get_rsc_type_supported(lrmd,class,provider);
+
+ while (NULL != (type = g_list_first(types))) {
+ char* name = (char*)type->data;
+ printf("%s\n",name);
+ types = g_list_remove(types, name);
+ g_free(name);
+ }
+ g_list_free(types);
+ return 0;
+}
+
static int
add_resource(ll_lrm_t * lrmd, int argc, int optind, char * argv[])
{
@@ -760,18 +769,6 @@
{
printf("%s\n", (char*)data);
g_free(data); /* ? */
-}
-
-static void
-g_print_rainfo_item(gpointer data, gpointer user_data)
-{
-/* rsc_info_t * rsc_info = (rsc_info_t *) data; */
- printf("RA type name: %s\n", (char *)data);
-/*
- printf("RA type name: %s Version: %s\n",
- rsc_info->rsc_type, rsc_info->version);
-*/
- g_free(data); /* ? */
}
static void
Index: lrm/lrmd/lrmd.c
===================================================================
RCS file: /home/cvs/linux-ha/linux-ha/lrm/lrmd/lrmd.c,v
retrieving revision 1.47
diff -u -r1.47 lrmd.c
--- lrm/lrmd/lrmd.c 22 Oct 2004 02:47:16 -0000 1.47
+++ lrm/lrmd/lrmd.c 9 Nov 2004 10:14:14 -0000
@@ -185,7 +185,7 @@
{REGISTER, TRUE, on_msg_register},
{GETRSCCLASSES, FALSE, on_msg_get_rsc_classes},
{GETRSCTYPES, FALSE, on_msg_get_rsc_types},
- {GETPROVIDERS, FALSE, on_msg_get_rsc_providers},
+ {GETPROVIDERS, FALSE, on_msg_get_rsc_providers},
{ADDRSC, TRUE, on_msg_add_rsc},
{GETRSC, FALSE, on_msg_get_rsc},
{GETALLRCSES, FALSE, on_msg_get_all},
@@ -920,13 +920,16 @@
GList* types = NULL;
GList* type;
const char* rclass = NULL;
+ const char* provider = NULL;
lrmd_log(LOG_DEBUG, "on_msg_get_rsc_types: start.");
- ret = create_lrm_ret(HA_OK,5);
rclass = ha_msg_value(msg, F_LRM_RCLASS);
- RAExec = g_hash_table_lookup(RAExecFuncs,rclass);
+ provider = ha_msg_value(msg, F_LRM_RPROVIDER);
+ ret = create_lrm_ret(HA_OK,5);
+
+ RAExec = g_hash_table_lookup(RAExecFuncs,rclass);
if (NULL == RAExec) {
lrmd_log(LOG_DEBUG,"on_msg_get_rsc_types: can not find class");
@@ -937,7 +940,7 @@
"on_msg_get_rsc_types: can not create msg.");
return HA_FAIL;
}
- if (0 <= RAExec->get_resource_list(&types)) {
+ if (0 <= RAExec->get_resource_list(provider,&types)) {
ha_msg_add_str_list(ret, F_LRM_RTYPES, types);
while (NULL != (type = g_list_first(types))) {
types = g_list_remove_link(types, type);
@@ -966,14 +969,12 @@
GList* providers = NULL;
GList* provider = NULL;
const char* rclass = NULL;
- const char* rtype = NULL;
lrmd_log(LOG_DEBUG, "on_msg_get_rsc_providers: start.");
ret = create_lrm_ret(HA_OK,5);
rclass = ha_msg_value(msg, F_LRM_RCLASS);
- rtype = ha_msg_value(msg, F_LRM_RTYPE);
RAExec = g_hash_table_lookup(RAExecFuncs,rclass);
@@ -981,7 +982,7 @@
lrmd_log(LOG_DEBUG,"on_msg_get_rsc_providers: can not find class");
}
else {
- if (0 <= RAExec->get_provider_list(rtype, &providers)) {
+ if (0 <= RAExec->get_provider_list(&providers)) {
ha_msg_add_str_list(ret, F_LRM_RPROVIDERS, providers);
while (NULL != (provider = g_list_first(providers))) {
providers = g_list_remove_link(providers, provider);
Index: lrm/test/apitest.c
===================================================================
RCS file: /home/cvs/linux-ha/linux-ha/lrm/test/apitest.c,v
retrieving revision 1.12
diff -u -r1.12 apitest.c
--- lrm/test/apitest.c 22 Oct 2004 02:49:04 -0000 1.12
+++ lrm/test/apitest.c 9 Nov 2004 10:14:14 -0000
@@ -60,7 +60,7 @@
param = g_hash_table_new(g_str_hash,g_str_equal);
g_hash_table_insert(param, strdup("1"), strdup("3ffe:ffff:0:f101::3"));
puts("add_rsc...");
- lrm->lrm_ops->add_rsc(lrm, rid, "heartbeat", "IPv6addr", NULL, param);
+ lrm->lrm_ops->add_rsc(lrm, rid, "heartbeat", "IPv6addr", "heartbeat", param);
puts("get_rsc...");
rsc = lrm->lrm_ops->get_rsc(lrm, rid);
printf_rsc(rsc);
Index: lrm/test/plugintest.c
===================================================================
RCS file: /home/cvs/linux-ha/linux-ha/lrm/test/plugintest.c,v
retrieving revision 1.8
diff -u -r1.8 plugintest.c
--- lrm/test/plugintest.c 9 Sep 2004 03:31:23 -0000 1.8
+++ lrm/test/plugintest.c 9 Nov 2004 10:14:14 -0000
@@ -57,7 +57,7 @@
PILLoadPlugin(PluginLoadingSystem , "RAExec", "ocf", NULL);
RAExec = g_hash_table_lookup(RAExecFuncs,"ocf");
- ret = RAExec->get_resource_list(&ratype_list);
+ ret = RAExec->get_resource_list("heartbeat", &ratype_list);
printf("length=%d\n", g_list_length(ratype_list));
if (ret >= 0) {
g_list_foreach(ratype_list, g_print_item, NULL);
Index: lrm/test/ra_info
===================================================================
RCS file: /home/cvs/linux-ha/linux-ha/lrm/test/ra_info,v
retrieving revision 1.3
diff -u -r1.3 ra_info
--- lrm/test/ra_info 13 Sep 2004 09:28:08 -0000 1.3
+++ lrm/test/ra_info 9 Nov 2004 10:14:14 -0000
@@ -1,11 +1,13 @@
#!/bin/bash
../admin/lrmadmin -d
../admin/lrmadmin -C
-../admin/lrmadmin -T lsb
-../admin/lrmadmin -T ocf
-../admin/lrmadmin -T heartbeat
+../admin/lrmadmin -P ocf
+../admin/lrmadmin -P lsb
+../admin/lrmadmin -P heartbeat
+../admin/lrmadmin -T lsb system
+../admin/lrmadmin -T heartbeat heartbeat
+../admin/lrmadmin -T ocf heartbeat
../admin/lrmadmin -M lsb sshd NULL
../admin/lrmadmin -M heartbeat IPv6addr NULL
../admin/lrmadmin -M ocf IPaddr NULL
../admin/lrmadmin -M ocf IPaddr heartbeat
-../admin/lrmadmin -P ocf IPaddr
Index: lrm/test/test_target_rc
===================================================================
RCS file: /home/cvs/linux-ha/linux-ha/lrm/test/test_target_rc,v
retrieving revision 1.3
diff -u -r1.3 test_target_rc
--- lrm/test/test_target_rc 14 Sep 2004 08:10:11 -0000 1.3
+++ lrm/test/test_target_rc 9 Nov 2004 10:14:14 -0000
@@ -1,5 +1,5 @@
#!/bin/bash
-echo "../admin/lrmadmin -A ip heartbeat IPaddr NULL 192.168.58.4"
+echo "../admin/lrmadmin -A ip heartbeat IPaddr heartbeat 192.168.58.4"
../admin/lrmadmin -A ip heartbeat IPaddr NULL 192.168.58.4
echo "../admin/lrmadmin -E ip status 0 0 13"
Index: lrm/test/test_target_rc_changed
===================================================================
RCS file: /home/cvs/linux-ha/linux-ha/lrm/test/test_target_rc_changed,v
retrieving revision 1.2
diff -u -r1.2 test_target_rc_changed
--- lrm/test/test_target_rc_changed 3 Sep 2004 01:46:20 -0000 1.2
+++ lrm/test/test_target_rc_changed 9 Nov 2004 10:14:14 -0000
@@ -1,5 +1,5 @@
#!/bin/bash
-echo "../admin/lrmadmin -A ip heartbeat NULL IPaddr 192.168.58.4"
+echo "../admin/lrmadmin -A ip heartbeat IPaddr heartbeat 192.168.58.4"
../admin/lrmadmin -A ip heartbeat IPaddr NULL 192.168.58.4
echo "../admin/lrmadmin -E ip status 0 1000 CHANGED &"
Index: lrm/test/test_target_rc_everytime
===================================================================
RCS file: /home/cvs/linux-ha/linux-ha/lrm/test/test_target_rc_everytime,v
retrieving revision 1.2
diff -u -r1.2 test_target_rc_everytime
--- lrm/test/test_target_rc_everytime 3 Sep 2004 01:46:20 -0000 1.2
+++ lrm/test/test_target_rc_everytime 9 Nov 2004 10:14:14 -0000
@@ -1,5 +1,5 @@
#!/bin/bash
-echo "../admin/lrmadmin -A ip heartbeat IPaddr NULL 192.168.58.4"
+echo "../admin/lrmadmin -A ip heartbeat IPaddr heartbeat 192.168.58.4"
../admin/lrmadmin -A ip heartbeat IPaddr NULL 192.168.58.4
echo "../admin/lrmadmin -E ip status 0 0 EVERYTIME"
_______________________________________________________
Linux-HA-Dev: Linux-HA-Dev@lists.linux-ha.org
http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
Home Page: http://linux-ha.org/
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic