示例#1
0
int doDisableService(ncMetadata *ccMeta) {
  int i, rc, ret=0;

  rc = initialize(ccMeta);
  if (rc) {
    return(1);
  }

  logprintfl(EUCAINFO, "DisableService(): called\n");
  logprintfl(EUCADEBUG, "DisableService(): params: userId=%s\n", SP(ccMeta ? ccMeta->userId : "UNSET"));

  sem_mywait(CONFIG);
  if (config->ccState == SHUTDOWNCC) {
    logprintfl(EUCAWARN, "DisableService(): attempt to disable a shutdown CC, skipping.\n");
    ret++;
  } else if (ccCheckState(0)) {
    logprintfl(EUCAWARN, "DisableService(): ccCheckState() returned failures, skipping.\n");
    ret++;
  } else {
    logprintfl(EUCADEBUG, "DisableService(): disabling service\n");
    ret=0;
    config->kick_enabled = 0;
    ccChangeState(DISABLED);
  }
  sem_mypost(CONFIG);

  logprintfl(EUCAINFO, "DisableService(): done\n");

  return(ret);
}
示例#2
0
//!
//!
//!
//! @param[in] pMeta a pointer to the node controller (NC) metadata structure
//! @param[in] serviceIds
//! @param[in] serviceIdsLen
//!
//! @return
//!
//! @pre
//!
//! @note
//!
int doStartService(ncMetadata * pMeta, serviceInfoType * serviceIds, int serviceIdsLen)
{
    int rc = 0;
    int ret = 0;

    rc = initialize(pMeta, FALSE);
    if (rc) {
        return (1);
    }

    LOGDEBUG("invoked: userId=%s\n", SP(pMeta ? pMeta->userId : "UNKNOWN"));

    int start_cc = 0;
    for (int i = 0; i < serviceIdsLen; i++) {
        if (strcmp(serviceIds[i].type, "cluster") == 0) {
            start_cc = 1;
        } else if (strcmp(serviceIds[i].type, "node") == 0) {
            //GRZE: This is currently a NOOP; also "enabled" would not be right
            //ret = doModifyNode(pMeta, serviceIds[i].name, "enabled");
        }
    }
    if (serviceIdsLen < 1) {
        start_cc = 1;
    }
    if (start_cc != 1)
        goto done;

    // this is actually a NOP
    sem_mywait(CONFIG);
    {
        if (config->ccState == SHUTDOWNCC) {
            LOGWARN("attempt to start a shutdown CC, skipping.\n");
            ret++;
        } else if (ccCheckState(0)) {
            LOGWARN("ccCheckState() returned failures, skipping.\n");
            ret++;
        } else {
            LOGINFO("starting service\n");
            ret = 0;
            config->kick_enabled = 0;
            ccChangeState(DISABLED);
        }
    }
    sem_mypost(CONFIG);

done:
    LOGTRACE("done\n");

    return (ret);
}
示例#3
0
int doEnableService(ncMetadata *ccMeta) {
  int i, rc, ret=0, done=0;

  rc = initialize(ccMeta);
  if (rc) {
    return(1);
  }

  logprintfl(EUCAINFO, "EnableService(): called\n");
  logprintfl(EUCADEBUG, "EnableService(): params: userId=%s\n", SP(ccMeta ? ccMeta->userId : "UNSET"));

  sem_mywait(CONFIG);
  if (config->ccState == SHUTDOWNCC) {
    logprintfl(EUCAWARN, "EnableService(): attempt to enable a shutdown CC, skipping.\n");
    ret++;
  } else if (ccCheckState(0)) {
    logprintfl(EUCAWARN, "EnableService(): ccCheckState() returned failures, skipping.\n");
    ret++;
  } else if (config->ccState != ENABLED) {
    logprintfl(EUCADEBUG, "EnableService(): enabling service\n");
    ret=0;
    // tell monitor thread to (re)enable  
    config->kick_monitor_running = 0;
    config->kick_network = 1;
    config->kick_dhcp = 1;
    config->kick_enabled = 1;
    ccChangeState(ENABLED);
  }
  sem_mypost(CONFIG);  

  if (config->ccState == ENABLED) {
    // wait for a minute to make sure CC is running again
    done=0;
    for (i=0; i<60 && !done; i++) {
      sem_mywait(CONFIG);
      if (config->kick_monitor_running) {
	done++;
      }
      sem_mypost(CONFIG);
      if (!done) {
	logprintfl(EUCADEBUG, "EnableService(): waiting for monitor to re-initialize (%d/60)\n", i);
	sleep(1);
      }
    }
  }

  logprintfl(EUCAINFO, "EnableService(): done\n");
  
  return(ret);
}
示例#4
0
//!
//!
//!
//! @param[in] pMeta a pointer to the node controller (NC) metadata structure
//! @param[in] serviceIds
//! @param[in] serviceIdsLen
//!
//! @return
//!
//! @pre
//!
//! @note
//!
int doStopService(ncMetadata * pMeta, serviceInfoType * serviceIds, int serviceIdsLen)
{
    int rc = 0;
    int ret = 0;

    rc = initialize(pMeta, FALSE);
    if (rc) {
        return (1);
    }

    LOGDEBUG("invoked: userId=%s\n", SP(pMeta ? pMeta->userId : "UNKNOWN"));

    int stop_cc = 0;
    for (int i = 0; i < serviceIdsLen; i++) {
        if (strcmp(serviceIds[i].type, "cluster") == 0) {
            stop_cc = 1;
        } else if (strcmp(serviceIds[i].type, "node") == 0) {
            //GRZE: map stop operation to modifyNode("disabled") here
            ret = doModifyNode(pMeta, serviceIds[i].name, "disabled");
        }
    }
    if (serviceIdsLen < 1) {
        stop_cc = 1;
    }
    if (stop_cc != 1)
        goto done;

    sem_mywait(CONFIG);
    {
        if (config->ccState == SHUTDOWNCC) {
            LOGWARN("attempt to stop a shutdown CC, skipping.\n");
            ret++;
        } else if (ccCheckState(0)) {
            LOGWARN("ccCheckState() returned failures, skipping.\n");
            ret++;
        } else {
            LOGINFO("stopping service\n");
            ret = 0;
            config->kick_enabled = 0;
            ccChangeState(STOPPED);
        }
    }
    sem_mypost(CONFIG);

done:
    LOGTRACE("done\n");

    return (ret);
}
示例#5
0
//!
//!
//!
//! @param[in] pMeta a pointer to the node controller (NC) metadata structure
//! @param[in] serviceIds
//! @param[in] serviceIdsLen
//!
//! @return
//!
//! @pre
//!
//! @note
//!
int doEnableService(ncMetadata * pMeta, serviceInfoType * serviceIds, int serviceIdsLen)
{
    int i = 0;
    int rc = 0;
    int ret = 0;
    int done = 0;

    rc = initialize(pMeta, FALSE);
    if (rc) {
        return (1);
    }

    LOGDEBUG("invoked: userId=%s\n", SP(pMeta ? pMeta->userId : "UNKNOWN"));

    int enable_cc = 0;
    for (int i = 0; i < serviceIdsLen; i++) {
        if (strcmp(serviceIds[i].type, "cluster") == 0) {
            enable_cc = 1;
        } else if (strcmp(serviceIds[i].type, "node") == 0) {
            ret = doModifyNode(pMeta, serviceIds[i].name, "enabled");
        }
    }
    if (serviceIdsLen < 1) {
        enable_cc = 1;
    }
    if (enable_cc != 1)
        goto done;

    sem_mywait(CONFIG);
    {
        if (config->ccState == SHUTDOWNCC) {
            LOGWARN("attempt to enable a shutdown CC, skipping.\n");
            ret++;
        } else if (ccCheckState(0)) {
            LOGWARN("ccCheckState() returned failures, skipping.\n");
            ret++;
        } else if (config->ccState != ENABLED) {
            LOGINFO("enabling service\n");
            ret = 0;
            // tell monitor thread to (re)enable
            config->kick_monitor_running = 0;
            config->kick_network = 1;
            config->kick_dhcp = 1;
            config->kick_enabled = 1;
            ccChangeState(ENABLED);
        }
    }
    sem_mypost(CONFIG);

    if (config->ccState == ENABLED) {
        // wait for a minute to make sure CC is running again
        done = 0;
        for (i = 0; i < 60 && !done; i++) {
            sem_mywait(CONFIG);
            {
                if (config->kick_monitor_running) {
                    done++;
                }
            }
            sem_mypost(CONFIG);

            if (!done) {
                LOGDEBUG("waiting for monitor to re-initialize (%d/60)\n", i);
                sleep(1);
            }
        }
    }

done:
    LOGTRACE("done\n");
    return (ret);
}