diff --git a/procmgr/processmanager.cpp b/procmgr/processmanager.cpp index 2fab09452..987dbee44 100644 --- a/procmgr/processmanager.cpp +++ b/procmgr/processmanager.cpp @@ -1331,11 +1331,27 @@ void processMSG(messageqcpp::IOSocket* cfIos) } else { + /* XXXPAT: saveBRM requires StorageManager being up at the time. + A couple options. 1) start/stop SM around saveBRM(). Will work but it means SM would go + down-up-down for this single operation. 2) add a special path to stopModule() + to NOT stop SM in the first call, then after saveBRM(), stop SM. + + Neither option is great. The least invasive is option 1, so going with that + for now. + */ + //now stop local module processManager.stopModule(config.moduleName(), graceful, manualFlag ); //run save brm script + string storageType = Config::makeConfig()->getConfig("Installation", "DBRootStorageType"); + if (storageType == "storagemanager") + processManager.startProcess(config.moduleName(), "StorageManager", FORCEFUL); + processManager.saveBRM(false); + + if (storageType == "storagemanager") + processManager.stopProcess(config.moduleName(), "StorageManager", GRACEFUL, false); log.writeLog(__LINE__, "Stop System Completed Success", LOG_TYPE_INFO); @@ -1766,7 +1782,15 @@ void processMSG(messageqcpp::IOSocket* cfIos) processManager.stopModule(config.moduleName(), graceful, manualFlag ); //run save.brm script + string storageType = Config::makeConfig()->getConfig("Installation", "DBRootStorageType"); + if (storageType == "storagemanager") + processManager.startProcess(config.moduleName(), "StorageManager", FORCEFUL); + processManager.saveBRM(false); + + if (storageType == "storagemanager") + processManager.stopProcess(config.moduleName(), "StorageManager", GRACEFUL, false); + log.writeLog(__LINE__, "RESTARTSYSTEM: ACK received from Process-Monitor for stopModule requests, return status = " + oam.itoa(status)); @@ -7049,7 +7073,7 @@ void ProcessManager::saveBRM(bool skipSession, bool clearshm) string cmd = startup::StartUp::installDir() + "/bin/reset_locks " + skip + " > " + logdir + "/reset_locks.log1 2>&1"; int rtnCode = system(cmd.c_str()); log.writeLog(__LINE__, "Ran reset_locks", LOG_TYPE_DEBUG); - + log.writeLog(__LINE__, "Running DBRM save_brm", LOG_TYPE_DEBUG); cmd = startup::StartUp::installDir() + "/bin/save_brm > " + logdir + "/save_brm.log1 2>&1"; @@ -7061,7 +7085,7 @@ void ProcessManager::saveBRM(bool skipSession, bool clearshm) } else log.writeLog(__LINE__, "Error running DBRM save_brm", LOG_TYPE_ERROR); - + if ( clearshm ) { cmd = startup::StartUp::installDir() + "/bin/clearShm -c > /dev/null 2>&1"; diff --git a/utils/cloudio/SocketPool.cpp b/utils/cloudio/SocketPool.cpp index e3f469bba..f6074c593 100644 --- a/utils/cloudio/SocketPool.cpp +++ b/utils/cloudio/SocketPool.cpp @@ -92,13 +92,14 @@ int SocketPool::send_recv(messageqcpp::ByteStream &in, messageqcpp::ByteStream * const uint8_t *inbuf = in.buf(); ssize_t err = 0; + /* should there be a retry limit here... */ while (sock < 0) { sock = getSocket(); if (sock < 0) { - log(logging::LOG_TYPE_ERROR, "SocketPool::send_recv(): retrying in 5 sec..."); - sleep(5); + //log(logging::LOG_TYPE_ERROR, "SocketPool::send_recv(): retrying in 5 sec..."); + sleep(1); } } @@ -214,10 +215,12 @@ int SocketPool::getSocket() int saved_errno = errno; ostringstream os; char buf[80]; - os << "SocketPool::getSocket() failed to connect; got '" << strerror_r(saved_errno, buf, 80); + os << "SocketPool::getSocket() failed to connect; got '" << strerror_r(saved_errno, buf, 80) << "'"; cout << os.str() << endl; log(logging::LOG_TYPE_ERROR, os.str()); + close(clientSocket); errno = saved_errno; + return -1; } return clientSocket; }