Sun Microsystems
Products & Services
 
Support & Training
 
 

Previous Previous     Contents     Index     Next Next

Retrieving Information About Any Node

The cmm_member_getinfo() and cmm_potential_getinfo() functions retrieve information about a specified node as explained in Identifying the Properties of a Node. The node must be identified by the nodeid argument . These functions return the cmm_member_t structure. For more information, see Using the cmm_member_t Structure for Information About Member Nodes.

If the cmm_member_getinfo() function returns the CMM_ESRCH error, the node has the CMM_OUT_OF_CLUSTER membership role. This error information can also be obtained by using the cmm_potential_getinfo() function. For further information about return values, see Return Values of the CMM API.

For more information about these functions, see the cmm_member_getinfo(3CMM) and cmm_potential_getinfo(3CMM) man pages.

The following code example demonstrates how to retrieve information about the current node by using the cmm_member_getinfo() function:

Example 5-4 Retrieving Information About the Current Node Using the cmm_member_getinfo() Function

#include <cmm.h>
#include <stdio.h>
#include <stdlib.h>         /* for exit() */
#include "common.h"

/*******************************************************************/
void main(void)
{
    cmm_error_t  res;
    cmm_nodeid_t currnode;
    cmm_member_t currnode_info;

    /* get the current node id */
    if ((res = cmm_node_getid(&currnode))==CMM_OK)
        printf("Current node id is: %d\n", currnode);
    else {
        printf("Error getting id of local node: %s\n",
            cmm_strerror(res));
        exit(1) ;
    }
    /* get the current node info */
    res = cmm_member_getinfo(currnode, &currnode_info);
    switch(res) {
    case CMM_OK:
        printf("Current node is in cluster\n");
        break;
    case CMM_ESRCH:
        printf("Current node is *NOT* in any cluster\n");
        break;
    default:
        printf("Error getting info on local node: %s\n",
            cmm_strerror(res));
        break;
    }
}

The following code sample demonstrates how to retrieve information about a specific node by using the cmm_member_getinfo() function:

Example 5-5 Retrieving Information About a Specific Node in the Cluster Using the cmm_member_getinfo() Function

#include <cmm.h>
#include <stdio.h>
#include <sys/types.h>       /* for boolean_t */
#include <stdlib.h>          /* for exit(), atoi() */
#include "common.h"

/**************************************************************/
int get_id(cmm_nodeid_t *P_NodeId)
{
    int          success;
    char         str_node[10];
    boolean_t    go_on = B_TRUE;

    while (go_on == B_TRUE) {
        printf("Enter the node id 
        of the node you want information about [0 for abort]: ");
        success = (scanf("%9s", str_node) != 0);
        if (success) {
            *P_NodeId = atoi(str_node);
            if (*P_NodeId >= 0)
                go_on = FALSE;
        }
    }
    return (*P_NodeId==0)?B_FALSE:B_TRUE;
}

/**************************************************************/
void main(void)
{
    cmm_error_t  res;
    cmm_nodeid_t onenode;
    cmm_member_t onenode_info;
    

    if (!get_id(&onenode))
    {
        printf("abort\n");
        exit(0);
    }

    /* get the node info */
    res = cmm_member_getinfo(onenode, &onenode_info);
    switch(res) {
    case CMM_OK:
        printf("node %d is in cluster\n", onenode);
        break;

    case CMM_ESRCH:
        printf("node %d is *NOT* in cluster\n", onenode);
        res = cmm_potential_getinfo(onenode, &onenode_info);
        if (res==CMM_OK)
            printf("node %d is member of the cluster\n",onenode);
        else
        if (res==CMM_ESRCH)
            printf("node %d is *NOT* member of the cluster\n",
                                onenode);
        else printf("Error getting info on node %d: %s",
                        onenode,cmm_strerror(res));
        break;

    default:
        printf("Error getting info on node %d: %s\n",
            onenode,
            cmm_strerror(res));
        break;
    }
}

Previous Previous     Contents     Index     Next Next