diff --git a/procmgr/processmanager.cpp b/procmgr/processmanager.cpp index f05a7dcbf..f32a6f51b 100644 --- a/procmgr/processmanager.cpp +++ b/procmgr/processmanager.cpp @@ -9210,7 +9210,7 @@ int ProcessManager::getDBRMData(messageqcpp::IOSocket fIos, std::string moduleNa } catch (...) { - log.writeLog(__LINE__, "EXCEPTION ERROR on cfIos.write: Unknow exception", LOG_TYPE_ERROR); + log.writeLog(__LINE__, "EXCEPTION ERROR on cfIos.write: Unknown exception", LOG_TYPE_ERROR); returnStatus = oam::API_FAILURE; } @@ -9281,7 +9281,7 @@ int ProcessManager::getDBRMData(messageqcpp::IOSocket fIos, std::string moduleNa } catch (...) { - log.writeLog(__LINE__, "EXCEPTION ERROR on cfIos.write: Unknow exception", LOG_TYPE_ERROR); + log.writeLog(__LINE__, "EXCEPTION ERROR on cfIos.write: Unknown exception", LOG_TYPE_ERROR); returnStatus = oam::API_FAILURE; } @@ -9316,7 +9316,7 @@ int ProcessManager::getDBRMData(messageqcpp::IOSocket fIos, std::string moduleNa } catch (...) { - log.writeLog(__LINE__, "EXCEPTION ERROR on cfIos.write: Unknow exception", LOG_TYPE_ERROR); + log.writeLog(__LINE__, "EXCEPTION ERROR on cfIos.write: Unknown exception", LOG_TYPE_ERROR); pthread_mutex_unlock(&THREAD_LOCK); return oam::API_FAILURE; } @@ -9391,7 +9391,7 @@ int ProcessManager::getDBRMData(messageqcpp::IOSocket fIos, std::string moduleNa } catch (...) { - log.writeLog(__LINE__, "EXCEPTION ERROR on cfIos.write: Unknow exception", LOG_TYPE_ERROR); + log.writeLog(__LINE__, "EXCEPTION ERROR on cfIos.write: Unknown exception", LOG_TYPE_ERROR); pthread_mutex_unlock(&THREAD_LOCK); return oam::API_FAILURE; } @@ -9411,7 +9411,7 @@ int ProcessManager::getDBRMData(messageqcpp::IOSocket fIos, std::string moduleNa } catch (...) { - log.writeLog(__LINE__, "EXCEPTION ERROR on cfIos.write: Unknow exception", LOG_TYPE_ERROR); + log.writeLog(__LINE__, "EXCEPTION ERROR on cfIos.write: Unknown exception", LOG_TYPE_ERROR); pthread_mutex_unlock(&THREAD_LOCK); return oam::API_FAILURE; } @@ -9428,7 +9428,7 @@ int ProcessManager::getDBRMData(messageqcpp::IOSocket fIos, std::string moduleNa } catch (...) { - log.writeLog(__LINE__, "EXCEPTION ERROR on cfIos.write: Unknow exception", LOG_TYPE_ERROR); + log.writeLog(__LINE__, "EXCEPTION ERROR on cfIos.write: Unknown exception", LOG_TYPE_ERROR); returnStatus = oam::API_FAILURE; } diff --git a/procmon/processmonitor.cpp b/procmon/processmonitor.cpp index f22be1b87..5380a32f2 100644 --- a/procmon/processmonitor.cpp +++ b/procmon/processmonitor.cpp @@ -22,6 +22,10 @@ ***************************************************************************/ #include +#include +#include +#include +#include #include "columnstoreversion.h" #include "IDBDataFile.h" @@ -40,6 +44,7 @@ using namespace logging; using namespace config; using namespace idbdatafile; +namespace bf = boost::filesystem; extern string systemOAM; extern string dm_server; @@ -505,7 +510,6 @@ void ProcessMonitor::processMessage(messageqcpp::ByteStream msg, messageqcpp::IO break; } - processList::iterator listPtr; processList* aPtr = config.monitoredListPtr(); listPtr = aPtr->begin(); @@ -2526,7 +2530,7 @@ pid_t ProcessMonitor::startProcess(string processModuleType, string processName, system(cmd.c_str()); // if Non Parent OAM Module, get the dbmr data from Parent OAM Module - if ( !gOAMParentModuleFlag && !HDFS ) + if ( !gOAMParentModuleFlag && !HDFS && DBRootStorageType != "storagemanager") { //create temp dbrm directory @@ -2551,18 +2555,24 @@ pid_t ProcessMonitor::startProcess(string processModuleType, string processName, // system(cmd.c_str()); // go request files from parent OAM module - if ( getDBRMdata() != oam::API_SUCCESS ) + if ( getDBRMdata(&DBRMDir) != oam::API_SUCCESS ) { log.writeLog(__LINE__, "Error: getDBRMdata failed", LOG_TYPE_ERROR); sendAlarm("DBRM", DBRM_LOAD_DATA_ERROR, SET); return oam::API_MINOR_FAILURE; } + // DBRMDir might have changed, so need to change DBRMroot + bf::path tmp(DBRMroot); + tmp = tmp.filename(); + DBRMroot = (bf::path(DBRMDir) / tmp).string(); + sendAlarm("DBRM", DBRM_LOAD_DATA_ERROR, CLEAR); // change DBRMroot to temp DBRMDir path // DBRMroot = tempDBRMDir + "/BRM_saves"; } + // // run the 'load_brm' script first if files exist // @@ -2634,9 +2644,15 @@ pid_t ProcessMonitor::startProcess(string processModuleType, string processName, // now delete the dbrm data from local disk if ( !gOAMParentModuleFlag && !HDFS && DataRedundancyConfig == "n") { + IDBFileSystem &fs = IDBPolicy::getFs(DBRMDir); + fs.remove(DBRMDir.c_str()); + log.writeLog(__LINE__, "removed downloaded DBRM files at " + DBRMDir, LOG_TYPE_DEBUG); + + #if 0 string cmd = "rm -f " + DBRMDir + "/*"; system(cmd.c_str()); log.writeLog(__LINE__, "removed DBRM file with command: " + cmd, LOG_TYPE_DEBUG); + #endif } } else @@ -4267,7 +4283,7 @@ int ProcessMonitor::processRestarted( std::string processName, bool manual) * * ******************************************************************************************/ -int ProcessMonitor::getDBRMdata() +int ProcessMonitor::getDBRMdata(string *path) { MonitorLog log; @@ -4350,6 +4366,11 @@ int ProcessMonitor::getDBRMdata() bool journalFile = false; + boost::uuids::uuid u = boost::uuids::random_generator()(); + bf::path pTmp = bf::path(*path) / boost::uuids::to_string(u); + *path = pTmp.string(); + log.writeLog(__LINE__, "Downloading DBRM files to " + *path, LOG_TYPE_DEBUG); + for ( int i = 0 ; i < numFiles ; i ++ ) { string fileName; @@ -4391,10 +4412,14 @@ int ProcessMonitor::getDBRMdata() // fileName = temp1; // } + bf::path pFilename(fileName); + pFilename = pTmp / pFilename.filename(); + const char *cFilename = pFilename.string().c_str(); + boost::scoped_ptr out(IDBDataFile::open( - IDBPolicy::getType(fileName.c_str(), + IDBPolicy::getType(cFilename, IDBPolicy::WRITEENG), - fileName.c_str(), "w", 0)); + cFilename, "w", 0)); // read file data try @@ -6279,7 +6304,6 @@ int ProcessMonitor::checkDataMount() return API_SUCCESS; } - //go unmount disk NOT assigned to this pm unmountExtraDBroots(); diff --git a/procmon/processmonitor.h b/procmon/processmonitor.h index e8c458006..6203fa218 100644 --- a/procmon/processmonitor.h +++ b/procmon/processmonitor.h @@ -478,7 +478,7 @@ public: */ int updateConfigFile(messageqcpp::ByteStream msg); - int getDBRMdata(); + int getDBRMdata(std::string *path); /** *@brief Send Msg to Process Monitor