Send Linux-ha-cvs mailing list submissions to
[email protected]
To subscribe or unsubscribe via the World Wide Web, visit
http://lists.community.tummy.com/mailman/listinfo/linux-ha-cvs
or, via email, send a message with subject or body 'help' to
[EMAIL PROTECTED]
You can reach the person managing the list at
[EMAIL PROTECTED]
When replying, please edit your Subject line so it is more specific
than "Re: Contents of Linux-ha-cvs digest..."
Today's Topics:
1. Linux-HA CVS: cim by panjiam from
([email protected])
----------------------------------------------------------------------
Message: 1
Date: Sun, 19 Mar 2006 20:27:23 -0700 (MST)
From: [email protected]
Subject: [Linux-ha-cvs] Linux-HA CVS: cim by panjiam from
To: [EMAIL PROTECTED]
Message-ID: <[EMAIL PROTECTED]>
linux-ha CVS committal
Author : panjiam
Host :
Project : linux-ha
Module : cim
Dir : linux-ha/cim
Modified Files:
cluster_node_provider.c
Log Message:
added more properties to node class
===================================================================
RCS file: /home/cvs/linux-ha/linux-ha/cim/cluster_node_provider.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- cluster_node_provider.c 22 Dec 2005 06:11:48 -0000 1.2
+++ cluster_node_provider.c 20 Mar 2006 03:27:22 -0000 1.3
@@ -37,201 +37,171 @@
#include "cmpi_utils.h"
#include "cluster_info.h"
-static const char * PROVIDER_ID = "cim-node";
-static CMPIBroker * G_broker = NULL;
-static char G_classname [] = "HA_ClusterNode";
+static const char * PROVIDER_ID = "cim-node";
+static CMPIBroker * Broker = NULL;
+static char ClassName [] = "HA_ClusterNode";
+static const mapping_t NodeMap [] = { MAPPING_HA_ClusterNode };
+
+static CMPIInstance * make_instance(CMPIObjectPath * op, char * uname,
+ CMPIStatus * rc);
+static int get_node(CMPIContext * ctx, CMPIResult * rslt,
+ CMPIObjectPath * cop, char ** properties,
+ CMPIStatus * rc);
+static int enumerate_node(CMPIInstanceMI * mi, CMPIContext * ctx,
+ CMPIResult * rslt, CMPIObjectPath * ref,
+ int EnumInst, CMPIStatus * rc);
+static int cleanup_node(void);
-static CMPIInstance *
-make_node_instance(CMPIObjectPath * op, char * uname, CMPIStatus * rc);
-static int
-get_inst_node(CMPIContext * ctx, CMPIResult * rslt, CMPIObjectPath * cop,
- char ** properties, CMPIStatus * rc);
-static int
-enum_inst_node(CMPIInstanceMI * mi, CMPIContext * ctx, CMPIResult * rslt,
- CMPIObjectPath * ref, int enum_inst, CMPIStatus * rc);
-static int cleanup_node(void);
DeclareInstanceFunctions(ClusterNode);
static CMPIInstance *
-make_node_instance(CMPIObjectPath * op, char * uname, CMPIStatus * rc)
+make_instance(CMPIObjectPath * op, char * uname, CMPIStatus * rc)
{
- struct ci_table * nodeinfo = NULL;
+ CIMTable * nodeinfo = NULL;
CMPIInstance * ci = NULL;
- char * active_status, * dc = NULL, * uuid = NULL;
- char caption [256];
+ char caption[MAXLEN];
- ci = CMNewInstance(G_broker, op, rc);
+ DEBUG_ENTER();
+ ci = CMNewInstance(Broker, op, rc);
if ( CMIsNullObject(ci) ) {
- CMSetStatusWithChars(G_broker, rc, CMPI_RC_ERR_FAILED,
+ CMSetStatusWithChars(Broker, rc, CMPI_RC_ERR_FAILED,
"Create instance failed");
-
- return NULL;
- }
-
- if ( ( nodeinfo = ci_get_nodeinfo(uname))== NULL ) {
- cl_log(LOG_ERR, "%s: could not get node info", __FUNCTION__);
- CMSetStatusWithChars(G_broker, rc, CMPI_RC_ERR_FAILED,
- "Could not get node information");
return NULL;
- }
-
- active_status = CITableGet(nodeinfo, "active_status").value.string;
- if(active_status) {
- CMSetProperty(ci, "ActiveStatus", active_status, CMPI_chars);
}
- if ( active_status && strcmp (active_status, "True") == 0) {
- char * standby, * unclean, * shutdown, * expected_up, *
node_ping;
- standby = CITableGet(nodeinfo, "standby").value.string;
- unclean = CITableGet(nodeinfo, "unclean").value.string;
- shutdown = CITableGet(nodeinfo, "shutdown").value.string;
- expected_up = CITableGet(nodeinfo, "expected_up").value.string;
- node_ping = CITableGet(nodeinfo, "node_ping").value.string;
- if (standby) {
- CMSetProperty(ci, "Standby", standby, CMPI_chars);
- }
- if (unclean) {
- CMSetProperty(ci, "Unclean", unclean, CMPI_chars);
- }
- if (shutdown) {
- CMSetProperty(ci, "Shutdown", shutdown, CMPI_chars);
- }
- if (expected_up) {
- CMSetProperty(ci, "ExpectedUp", expected_up,
CMPI_chars);
- }
- if (node_ping) {
- CMSetProperty(ci, "NodePing", node_ping, CMPI_chars);
- }
- }
- dc = ci_get_cluster_dc();
- uuid = CIM_STRDUP("N/A");
-
- sprintf(caption, "Node.%s", uname);
- /* setting properties */
- CMSetProperty(ci, "CreationClassName", G_classname, CMPI_chars);
+ snprintf(caption, MAXLEN, "Node.%s", uname);
+ CMSetProperty(ci, "CreationClassName", ClassName, CMPI_chars);
CMSetProperty(ci, "Name", uname, CMPI_chars);
- CMSetProperty(ci, "UUID", uuid, CMPI_chars);
CMSetProperty(ci, "Caption", caption, CMPI_chars);
- if ( dc ) {
+ nodeinfo = cim_get_table(GET_NODE_INFO, uname, NULL);
+ if(nodeinfo){
+ cmpi_set_properties(Broker, ci, nodeinfo, NodeMap,
+ MAPDIM(NodeMap),rc);
+ }
+ /*
+ if ( (dc = cim_get_str(GET_DC, NULL, NULL)) ) {
if ( strncmp(dc, uname, strlen(uname)) == 0){
- char dc_status[] = "True";
+ char dc_status[] = "true";
CMSetProperty(ci, "IsDC", dc_status, CMPI_chars);
} else {
- char dc_status[] = "False";
+ char dc_status[] = "false";
CMSetProperty(ci, "IsDC", dc_status, CMPI_chars);
}
- }
- if ( dc ) {
- CIM_FREE(dc);
- }
- CIM_FREE(uuid);
+ cim_free(dc);
+ }
+ */
+ if (nodeinfo) {
+ cim_table_free(nodeinfo);
+ }
+ DEBUG_LEAVE();
return ci;
-
}
static int
-get_inst_node(CMPIContext * ctx, CMPIResult * rslt, CMPIObjectPath * cop,
+get_node(CMPIContext * ctx, CMPIResult * rslt, CMPIObjectPath * cop,
char ** properties, CMPIStatus * rc)
{
CMPIObjectPath * op = NULL;
- CMPIData data_uname;
+ CMPIString * tmp;
char * uname = NULL;
CMPIInstance * ci = NULL;
- int ret = 0;
-
- data_uname = CMGetKey(cop, "Name", rc);
- uname = CMGetCharPtr(data_uname.value.string);
- op = CMNewObjectPath(G_broker,
- CMGetCharPtr(CMGetNameSpace(cop, rc)), G_classname, rc);
+ tmp = CMGetKey(cop, "Name", rc).value.string;
+ if ( tmp == NULL ) {
+ cl_log(LOG_ERR, "get_node: Failed to get key:Name");
+ return HA_FAIL;
+ }
+ uname = CMGetCharPtr(tmp);
+ op = CMNewObjectPath(Broker, CMGetCharPtr(CMGetNameSpace(cop, rc)),
+ ClassName, rc);
if ( CMIsNullObject(op) ){
- ret = HA_FAIL;
- goto out;
- }
+ cl_log(LOG_ERR, "get_node: Alloc ObjectPath failed.");
+ return HA_FAIL;
+ }
- ci = make_node_instance(op, uname, rc);
+ ci = make_instance(op, uname, rc);
if ( CMIsNullObject(ci) ) {
- ret = HA_FAIL;
- goto out;
- }
+ return HA_FAIL;
+ }
CMReturnInstance(rslt, ci);
CMReturnDone(rslt);
-
- ret = HA_OK;
-
-out:
- return ret;
+ return HA_OK;
}
static int
-enum_inst_node(CMPIInstanceMI * mi, CMPIContext * ctx, CMPIResult * rslt,
- CMPIObjectPath * ref, int enum_inst, CMPIStatus * rc)
+enumerate_node(CMPIInstanceMI * mi, CMPIContext * ctx, CMPIResult * rslt,
+ CMPIObjectPath * ref, int EnumInst, CMPIStatus * rc)
{
CMPIObjectPath * op = NULL;
- GPtrArray * nodeinfo_table = NULL;
-
+ int hbstatus;
int i = 0;
+ CIMArray* nodes;
- nodeinfo_table = ci_get_node_name_table ();
-
- if ( nodeinfo_table == NULL ) {
- cl_log(LOG_ERR,
- "%s: could not get node information",
- __FUNCTION__);
-
- CMSetStatusWithChars(G_broker, rc,
+ DEBUG_ENTER();
+ if ((hbstatus = cim_get_hb_status()) != HB_RUNNING ) {
+ CMReturnDone(rslt);
+ DEBUG_LEAVE();
+ return HA_OK;
+ }
+
+ nodes = cim_get_array(GET_NODE_LIST, NULL, NULL);
+ if ( nodes == NULL ) {
+ cl_log(LOG_ERR, "Can not get node information");
+ CMSetStatusWithChars(Broker, rc,
CMPI_RC_ERR_FAILED, "Could not get node information");
-
+ DEBUG_LEAVE();
return HA_FAIL;
}
- for (i = 0; i < nodeinfo_table->len; i++) {
+ for (i = 0; i < cim_array_len(nodes); i++) {
char * uname = NULL;
char * space = NULL;
- uname = (char *) g_ptr_array_index(nodeinfo_table, i);
-
+ if ((uname = cim_array_index_v(nodes,i).v.str)==NULL){
+ continue;
+ }
space = CMGetCharPtr(CMGetNameSpace(ref, rc));
if ( space == NULL ) {
- ci_free_ptr_array(nodeinfo_table, CIM_FREE);
+ cim_array_free(nodes);
return HA_FAIL;
}
/* create an object */
- op = CMNewObjectPath(G_broker, space, G_classname, rc);
- if ( enum_inst ) {
+ op = CMNewObjectPath(Broker, space, ClassName, rc);
+ if (op == NULL ){
+ cim_array_free(nodes);
+ return HA_FAIL;
+ }
+ if ( EnumInst ) {
/* enumerate instances */
CMPIInstance * ci = NULL;
- ci = make_node_instance(op, uname, rc);
- if ( CMIsNullObject(ci) ) {
- ci_free_ptr_array(nodeinfo_table, CIM_FREE);
+ if ((ci = make_instance(op, uname, rc))==NULL) {
+ cim_array_free(nodes);
+ rc->rc = CMPI_RC_ERR_FAILED;
+ DEBUG_LEAVE();
return HA_FAIL;
}
-
CMReturnInstance(rslt, ci);
-
} else { /* enumerate instance names */
- CMAddKey(op, "CreationClassName", G_classname,
CMPI_chars);
+ CMAddKey(op, "CreationClassName", ClassName,
CMPI_chars);
CMAddKey(op, "Name", uname, CMPI_chars);
- /* add object path to rslt */
CMReturnObjectPath(rslt, op);
}
-
}
CMReturnDone(rslt);
- ci_free_ptr_array(nodeinfo_table, CIM_FREE);
-
+ cim_array_free(nodes);
+ DEBUG_LEAVE();
return HA_OK;
}
static int
-cleanup_node () {
-
+cleanup_node ()
+{
cl_log(LOG_INFO, "%s: clean up", __FUNCTION__);
return HA_OK;
}
@@ -243,7 +213,6 @@
static CMPIStatus
ClusterNodeCleanup(CMPIInstanceMI * mi, CMPIContext * ctx)
{
-
cleanup_node();
CMReturn(CMPI_RC_OK);
}
@@ -253,13 +222,9 @@
CMPIResult * rslt, CMPIObjectPath * ref)
{
CMPIStatus rc = {CMPI_RC_OK, NULL};
-
- init_logger( PROVIDER_ID );
- if ( enum_inst_node(mi, ctx, rslt, ref, 0, &rc) == HA_OK ) {
- CMReturn(CMPI_RC_OK);
- } else {
- return rc;
- }
+ PROVIDER_INIT_LOGGER();
+ enumerate_node(mi, ctx, rslt, ref, FALSE, &rc);
+ return rc;
}
@@ -269,13 +234,9 @@
char ** properties)
{
CMPIStatus rc = {CMPI_RC_OK, NULL};
-
- init_logger( PROVIDER_ID );
- if ( enum_inst_node(mi, ctx, rslt, ref, 1, &rc) == HA_OK ) {
- CMReturn(CMPI_RC_OK);
- } else {
- return rc;
- }
+ PROVIDER_INIT_LOGGER();
+ enumerate_node(mi, ctx, rslt, ref, TRUE, &rc);
+ return rc;
}
static CMPIStatus
@@ -284,13 +245,9 @@
char ** properties)
{
CMPIStatus rc = {CMPI_RC_OK, NULL};
- init_logger( PROVIDER_ID );
-
- if ( get_inst_node(ctx, rslt, cop, properties, &rc) != HA_OK ) {
- cl_log(LOG_WARNING, "%s: NULL instance", __FUNCTION__);
- return rc;
- }
- CMReturn(CMPI_RC_OK);
+ PROVIDER_INIT_LOGGER();
+ get_node(ctx, rslt, cop, properties, &rc);
+ return rc;
}
static CMPIStatus
@@ -299,7 +256,7 @@
CMPIInstance * ci)
{
CMPIStatus rc = {CMPI_RC_OK, NULL};
- CMSetStatusWithChars(G_broker, &rc, CMPI_RC_ERR_NOT_SUPPORTED,
+ CMSetStatusWithChars(Broker, &rc, CMPI_RC_ERR_NOT_SUPPORTED,
"CIM_ERR_NOT_SUPPORTED");
return rc;
}
@@ -311,7 +268,7 @@
CMPIInstance * ci, char ** properties)
{
CMPIStatus rc = {CMPI_RC_OK, NULL};
- CMSetStatusWithChars(G_broker, &rc, CMPI_RC_ERR_NOT_SUPPORTED,
+ CMSetStatusWithChars(Broker, &rc, CMPI_RC_ERR_NOT_SUPPORTED,
"CIM_ERR_NOT_SUPPORTED");
return rc;
}
@@ -322,7 +279,7 @@
CMPIResult * rslt, CMPIObjectPath * cop)
{
CMPIStatus rc = {CMPI_RC_OK, NULL};
- CMSetStatusWithChars(G_broker, &rc, CMPI_RC_ERR_NOT_SUPPORTED,
+ CMSetStatusWithChars(Broker, &rc, CMPI_RC_ERR_NOT_SUPPORTED,
"CIM_ERR_NOT_SUPPORTED");
return rc;
}
@@ -333,38 +290,13 @@
char * lang, char * query)
{
CMPIStatus rc = {CMPI_RC_OK, NULL};
- CMSetStatusWithChars(G_broker, &rc, CMPI_RC_ERR_NOT_SUPPORTED,
+ CMSetStatusWithChars(Broker, &rc, CMPI_RC_ERR_NOT_SUPPORTED,
"CIM_ERR_NOT_SUPPORTED");
return rc;
}
-
-/**************************************************
- * Method Provider
- *************************************************/
-static CMPIStatus
-ClusterNodeInvokeMethod(CMPIMethodMI * mi, CMPIContext * ctx,
- CMPIResult * rslt, CMPIObjectPath * ref,
- const char * method, CMPIArgs * in, CMPIArgs * out)
-{
- CMPIStatus rc = {CMPI_RC_OK, NULL};
- CMSetStatusWithChars(G_broker, &rc, CMPI_RC_ERR_NOT_SUPPORTED,
- "CIM_ERR_NOT_SUPPORTED");
- return rc;
-}
-
-
-static CMPIStatus
-ClusterNodeMethodCleanup(CMPIMethodMI * mi, CMPIContext * ctx)
-{
- CMReturn(CMPI_RC_OK);
-}
-
-
/*****************************************************
* install provider
****************************************************/
-DeclareInstanceMI(ClusterNode, HA_ClusterNodeProvider, G_broker);
-DeclareMethodMI(ClusterNode, HA_ClusterNodeProvider, G_broker);
-
+DeclareInstanceMI(ClusterNode, HA_ClusterNodeProvider, Broker);
------------------------------
_______________________________________________
Linux-ha-cvs mailing list
[email protected]
http://lists.community.tummy.com/mailman/listinfo/linux-ha-cvs
End of Linux-ha-cvs Digest, Vol 28, Issue 49
********************************************