Exemplo n.º 1
0
NABoolean ComRtGetCpuStatus(char *nodeName, short cpuNum)
{
  NABoolean retval = FALSE;   // assume cpu is down
  MS_Mon_Node_Info_Type nodeInfo;
  memset(&nodeInfo, 0, sizeof(nodeInfo));
  Int32 error = msg_mon_get_node_info_detail(cpuNum, &nodeInfo);
  if ( XZFIL_ERR_OK == error ) {
        if ( MS_Mon_State_Up == nodeInfo.node[0].state ) retval = TRUE;
  }
  return retval;
}
Exemplo n.º 2
0
void node_cycle() {
    int                       count;
    int                       ferr;
    MS_Mon_Node_Info_Type     ninfo;
    bool                      pp;
    MS_Mon_Process_Info_Type *ppinfo1;
    MS_Mon_Process_Info_Type  pinfo1[2];

    do {
        pp = false;
        do {
            ferr = msg_mon_get_process_info_type(MS_ProcessType_TSE,     // ptype
                                                 &count,                 // count
                                                 2,                      // max
                                                 pinfo1);                // info
            myassert(ferr == XZFIL_ERR_OK); // oops
            if (count == 0) {
                sleep(1);
                printf("count is 0\n");
            }
        } while (count == 0);

        myassert(count > 0);
        if (count == 2)
            pp = true;
        else {
            printf("server is not up yet\n");
            usleep(10000); // 1/100 sec
        }
    } while (!pp);
    // pick primary
    if (pinfo1[0].backup)
        ppinfo1 = &pinfo1[1];
    else
        ppinfo1 = &pinfo1[0];
    assert(ferr == XZFIL_ERR_OK);
    ferr = msg_mon_get_node_info_detail(ppinfo1->nid, &ninfo);
    assert(ferr == XZFIL_ERR_OK);
    if (gverbose)
        printf("node-down(%d)\n", pinfo1->nid);
    msg_mon_node_down(pinfo1->nid);
    usleep(100000);
//  wait_node_notice();
    if (gverbose)
        printf("node-up(%d)\n", pinfo1->nid);
    msg_mon_node_up(pinfo1->nid);
    usleep(100000);
//  wait_node_notice();
}
Exemplo n.º 3
0
bool pp_is_backup() {
    bool                     backup;
    int                      disable;
    int                      ferr;
    MS_Mon_Node_Info_Type    node_info;
    MS_Mon_Process_Info_Type proc_info;

    ferr = msg_mon_get_process_info_detail(gname, &proc_info);
    TEST_CHK_FEOK(ferr);
    gnid = proc_info.nid;
    gpid = proc_info.pid;
    backup = proc_info.backup ? true : false;
    if (backup) {
        gpeer_nid = proc_info.parent_nid;
        gpeer_pid = proc_info.parent_pid;
        // set this up in case register fails
        strcpy(gdisplay_name, gname);
        sprintf(&gdisplay_name[strlen(gdisplay_name)],
                "-%d-%d-%d-B", gnid, gpid, getpid());
        if (gverbosepp)
            pp_printf("we are the backup process.\n");
        disable = msg_test_assert_disable();
        ferr = msg_mon_register_death_notification(gpeer_nid, gpeer_pid);
        if (ferr != XZFIL_ERR_OK) {
            if (gverbosepp)
                pp_printf("msg_mon_register_death_notification FAILED ferr=%d.\n", ferr);
            ferr = msg_mon_get_node_info_detail(gpeer_nid, &node_info);
            myassert(ferr == XZFIL_ERR_OK);
            if (gverbosepp)
                pp_printf("node-state=%d.\n", node_info.node[0].state);
            if (node_info.node[0].state == MS_Mon_State_Shutdown)
                gshutdown = true;
        }
        msg_test_assert_enable(disable);
    }
    return backup;
}
Exemplo n.º 4
0
void kill_server() {
    int                       count;
    int                       err;
    int                       ferr;
    char                      killcmd[100];
    MS_Mon_Node_Info_Type     ninfo;
    bool                      pp;
    MS_Mon_Process_Info_Type *ppinfo1;
    MS_Mon_Process_Info_Type  pinfo1[2];
    MS_Mon_Process_Info_Type  pinfo2;

    do {
        pp = false;
        ferr = msg_mon_get_process_info_type(MS_ProcessType_TSE,     // ptype
                                             &count,                 // count
                                             2,                      // max
                                             pinfo1);                // info
        myassert(ferr == XZFIL_ERR_OK); // oops
        myassert(count > 0);
        if (count == 2)
            pp = true;
        else {
            printf("server is not up yet\n");
            usleep(10000); // 1/100 sec
        }
    } while (!pp);
    // pick primary
    if (pinfo1[0].backup)
        ppinfo1 = &pinfo1[1];
    else
        ppinfo1 = &pinfo1[0];
    assert(ferr == XZFIL_ERR_OK);
    ferr = msg_mon_get_node_info_detail(ppinfo1->nid, &ninfo);
    assert(ferr == XZFIL_ERR_OK);
    usleep(gksleep);
    if (gvirtual || (ppinfo1->nid == gcnid)) {
        do {
            if (gverbose)
                printf("kc=kill(%d, SIGURG)\n", pinfo1->pid);
            kill(ppinfo1->pid, SIGURG);
            usleep(1000);
            err = kill(ppinfo1->pid, 0);
            if (err == 0)
                sleep(1);
        } while (err == 0);
    } else {
        assert(ninfo.num_returned == 1);
        sprintf(killcmd, "pdsh -w %s kill -s URG %d",
                ninfo.node[0].node_name, ppinfo1->pid);
        do {
            if (gverbose)
                printf("kc=%s\n", killcmd);
            system(killcmd);
            ferr = msg_mon_get_process_info_detail((char *) "$srv", &pinfo2);
            if (ferr == XZFIL_ERR_OK) {
                if ((pinfo2.nid != ppinfo1->nid) && (pinfo2.pid != ppinfo1->pid))
                    ferr = XZFIL_ERR_NOSUCHDEV;
                else
                    sleep(1);
            }
        } while (ferr == XZFIL_ERR_OK);
    }
}