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); }
//! //! //! //! @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); }
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); }
//! //! //! //! @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); }
int doShutdownService(ncMetadata *ccMeta) { int i, rc, ret=0; rc = initialize(ccMeta); if (rc) { return(1); } logprintfl(EUCAINFO, "ShutdownService(): called\n"); logprintfl(EUCADEBUG, "ShutdownService(): params: userId=%s\n", SP(ccMeta ? ccMeta->userId : "UNSET")); sem_mywait(CONFIG); config->kick_enabled = 0; ccChangeState(SHUTDOWNCC); sem_mypost(CONFIG); logprintfl(EUCAINFO, "ShutdownService(): done\n"); return(ret); }
//! //! //! //! @param[in] pMeta a pointer to the node controller (NC) metadata structure //! //! @return //! //! @pre //! //! @note //! int doShutdownService(ncMetadata * pMeta) { int rc = 0; int ret = 0; rc = initialize(pMeta, FALSE); if (rc) { return (1); } LOGDEBUG("invoked: userId=%s\n", SP(pMeta ? pMeta->userId : "UNKNOWN")); sem_mywait(CONFIG); { config->kick_enabled = 0; ccChangeState(SHUTDOWNCC); } sem_mypost(CONFIG); LOGTRACE("done\n"); return (ret); }
//! //! //! //! @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); }