1
0
mirror of https://github.com/mariadb-corporation/mariadb-columnstore-engine.git synced 2025-07-30 19:23:07 +03:00

change how the fstab to setup on other modules

This commit is contained in:
david hill
2016-04-22 13:50:26 -05:00
parent 670631293e
commit ba78610a8e
5 changed files with 50 additions and 47 deletions

View File

@ -57,12 +57,12 @@ cloud=`$INFINIDB_INSTALL_DIR/bin/getConfig Installation Cloud`
if [ $cloud = "amazon-ec2" ] || [ $cloud = "amazon-vpc" ]; then if [ $cloud = "amazon-ec2" ] || [ $cloud = "amazon-vpc" ]; then
cp $INFINIDB_INSTALL_DIR/local/etc/*.pem /root/. > /dev/null 2>&1 cp $INFINIDB_INSTALL_DIR/local/etc/*.pem /root/. > /dev/null 2>&1
if test -f $INFINIDB_INSTALL_DIR/local/fstab ; then if test -f $INFINIDB_INSTALL_DIR/local/pm1/fstab ; then
echo "Setup fstab on Module" echo "Setup fstab on Module"
touch /etc/fstab touch /etc/fstab
rm -f /etc/fstab.calpontSave rm -f /etc/fstab.calpontSave
mv /etc/fstab /etc/fstab.calpontSave mv /etc/fstab /etc/fstab.calpontSave
cp $INFINIDB_INSTALL_DIR/local/fstab /etc/fstab cat $INFINIDB_INSTALL_DIR/local/pm1/fstab >> /etc/fstab
fi fi
fi fi

View File

@ -8477,7 +8477,7 @@ namespace oam
******************************************************************************************/ ******************************************************************************************/
std::string Oam::updateFstab(std::string device, std::string dbrootID) std::string Oam::updateFstab(std::string device, std::string dbrootID)
{ {
writeLog("updateFstab called: " + device + ":" + dbrootID, LOG_TYPE_INFO ); writeLog("updateFstab called: " + device + ":" + dbrootID, LOG_TYPE_DEBUG );
//check if entry already exist //check if entry already exist
string cmd = "grep /data" + dbrootID + " /etc/fstab /dev/null 2>&1"; string cmd = "grep /data" + dbrootID + " /etc/fstab /dev/null 2>&1";
@ -8493,7 +8493,7 @@ namespace oam
system(cmd.c_str()); system(cmd.c_str());
//use from addmodule later //use from addmodule later
cmd = "echo " + entry + " >> " + InstallDir + "/local/etc/pm1/fstab"; cmd = "touch " + InstallDir + "/local/etc/pm1/fstab;echo " + entry + " >> " + InstallDir + "/local/etc/pm1/fstab";
system(cmd.c_str()); system(cmd.c_str());
return entry; return entry;

View File

@ -559,11 +559,11 @@ int main(int argc, char *argv[])
// setup storage // setup storage
if (!singleServerDBrootSetup()) if (!singleServerDBrootSetup())
{ {
cout << "ERROR: Problem setting up dbroot IDs" << endl; cout << "ERROR: Problem setting up DBRoot IDs" << endl;
exit(1); exit(1);
} }
//set system dbroot count and check 'files per parition' with number of dbroots //set system DBRoot count and check 'files per parition' with number of dbroots
try { try {
sysConfig->setConfig(SystemSection, "DBRootCount", oam.itoa(DBRootCount)); sysConfig->setConfig(SystemSection, "DBRootCount", oam.itoa(DBRootCount));
} }
@ -2076,9 +2076,9 @@ int main(int argc, char *argv[])
cout << "makeRClocal error" << endl; cout << "makeRClocal error" << endl;
//if cloud, copy fstab in module tmp dir //if cloud, copy fstab in module tmp dir
if ( cloud == "amazon" && moduleType == "pm") // if ( cloud == "amazon" && moduleType == "pm")
if( !copyFstab(newModuleName) ) // if( !copyFstab(newModuleName) )
cout << "copyFstab error" << endl; // cout << "copyFstab error" << endl;
//setup DBRM Processes //setup DBRM Processes
if ( newModuleName == parentOAMModuleName ) if ( newModuleName == parentOAMModuleName )
@ -2143,7 +2143,7 @@ int main(int argc, char *argv[])
callFree(pcommand); callFree(pcommand);
} }
//get device name based on dbroot ID //get device name based on DBRoot ID
deviceName = "/dev/sdf" + oam.itoa(moduleID); deviceName = "/dev/sdf" + oam.itoa(moduleID);
} }
else else
@ -2205,7 +2205,7 @@ int main(int argc, char *argv[])
} }
catch(...) catch(...)
{ {
cout << "ERROR: Problem setting dbroot count in the InfiniDB System Configuration file" << endl; cout << "ERROR: Problem setting DBRoot count in the InfiniDB System Configuration file" << endl;
exit(1); exit(1);
} }
@ -2245,7 +2245,7 @@ int main(int argc, char *argv[])
dbroots.clear(); dbroots.clear();
bool matchFound = false; bool matchFound = false;
prompt = "Enter the list (Nx,Ny,Nz) or range (Nx-Nz) of dbroot IDs assigned to module '" + newModuleName + "' (" + dbrootList + ") > "; prompt = "Enter the list (Nx,Ny,Nz) or range (Nx-Nz) of DBRoot IDs assigned to module '" + newModuleName + "' (" + dbrootList + ") > ";
pcommand = callReadline(prompt.c_str()); pcommand = callReadline(prompt.c_str());
if (pcommand) if (pcommand)
{ {
@ -2301,7 +2301,7 @@ int main(int argc, char *argv[])
} }
} }
//if pm1, make sure dbroot #1 is in the list //if pm1, make sure DBRoot #1 is in the list
if ( newModuleName == "pm1" ) if ( newModuleName == "pm1" )
{ {
bool found = false; bool found = false;
@ -2317,14 +2317,14 @@ int main(int argc, char *argv[])
if ( !found ) if ( !found )
{ {
cout << endl << "Invalid Entry, Module pm1 has to have dbroot #1 assigned to it, please re-enter" << endl; cout << endl << "Invalid Entry, Module pm1 has to have DBRoot #1 assigned to it, please re-enter" << endl;
if ( noPrompting ) if ( noPrompting )
exit(1); exit(1);
continue; continue;
} }
} }
//check and see if dbroot ID already used //check and see if DBRoot ID already used
std::vector<std::string>::iterator list = dbroots.begin(); std::vector<std::string>::iterator list = dbroots.begin();
for (; list != dbroots.end() ; list++) for (; list != dbroots.end() ; list++)
{ {
@ -2345,7 +2345,7 @@ int main(int argc, char *argv[])
if ( inUse) if ( inUse)
break; break;
else else
{ // if upgrade, dont allow a new dbroot id to be entered { // if upgrade, dont allow a new DBRoot id to be entered
if ( reuseConfig == "y" ) if ( reuseConfig == "y" )
{ {
DBRootConfigList::iterator pt = dbrootConfigList.begin(); DBRootConfigList::iterator pt = dbrootConfigList.begin();
@ -2403,7 +2403,7 @@ int main(int argc, char *argv[])
dbrootmodule.dbrootID = *it; dbrootmodule.dbrootID = *it;
dbrootlist.push_back(dbrootmodule); dbrootlist.push_back(dbrootmodule);
//store dbroot ID //store DBRoot ID
string moduledbrootid = "ModuleDBRootID" + oam.itoa(moduleID) + "-" + oam.itoa(id) + "-" + oam.itoa(i+1); string moduledbrootid = "ModuleDBRootID" + oam.itoa(moduleID) + "-" + oam.itoa(id) + "-" + oam.itoa(i+1);
try { try {
sysConfig->setConfig(ModuleSection, moduledbrootid, *it); sysConfig->setConfig(ModuleSection, moduledbrootid, *it);
@ -2434,7 +2434,7 @@ int main(int argc, char *argv[])
//get EC2 volume name and info //get EC2 volume name and info
if ( DBRootStorageType == "external" && cloud == "amazon") { if ( DBRootStorageType == "external" && cloud == "amazon") {
cout << endl << "*** Setup External EBS Volume for dbroot #" << *it << " ***" << endl; cout << endl << "*** Setup External EBS Volume for DBRoot #" << *it << " ***" << endl;
cout << "*** NOTE: You can either have postConfigure create a new EBS volume or you can provide an existing Volume ID to use" << endl << endl; cout << "*** NOTE: You can either have postConfigure create a new EBS volume or you can provide an existing Volume ID to use" << endl << endl;
string volumeNameID = "PMVolumeName" + *it; string volumeNameID = "PMVolumeName" + *it;
@ -2457,7 +2457,7 @@ int main(int argc, char *argv[])
while(true) while(true)
{ {
pcommand = callReadline("Create a new EBS volume for dbroot #" + *it + " ? [y,n] (y) > "); pcommand = callReadline("Create a new EBS volume for DBRoot #" + *it + " ? [y,n] (y) > ");
if (pcommand) if (pcommand)
{ {
if (strlen(pcommand) > 0) create = pcommand; if (strlen(pcommand) > 0) create = pcommand;
@ -2481,7 +2481,7 @@ int main(int argc, char *argv[])
callFree(pcommand); callFree(pcommand);
} }
//get device name based on dbroot ID //get device name based on DBRoot ID
oam::storageID_t st; oam::storageID_t st;
try { try {
st = oam.getAWSdeviceName( atoi((*it).c_str()) ); st = oam.getAWSdeviceName( atoi((*it).c_str()) );
@ -2491,12 +2491,12 @@ int main(int argc, char *argv[])
deviceName = boost::get<0>(st); deviceName = boost::get<0>(st);
amazondeviceName = boost::get<1>(st); amazondeviceName = boost::get<1>(st);
// fstabs // update fstabs
string entry = oam.updateFstab( amazondeviceName, *it); string entry = oam.updateFstab( amazondeviceName, *it);
} }
else else
{ {
// create amazon ebs dbroot // create amazon ebs DBRoot
try try
{ {
DBRootConfigList dbrootlist; DBRootConfigList dbrootlist;
@ -2530,7 +2530,7 @@ int main(int argc, char *argv[])
callFree(pcommand); callFree(pcommand);
} }
// fstabs // update fstabs
string entry = oam.updateFstab( amazondeviceName, *it); string entry = oam.updateFstab( amazondeviceName, *it);
} }
@ -2567,7 +2567,7 @@ int main(int argc, char *argv[])
} }
catch(...) catch(...)
{ {
cout << "ERROR: Problem setting dbroot count in the InfiniDB System Configuration file" << endl; cout << "ERROR: Problem setting DBRoot count in the InfiniDB System Configuration file" << endl;
exit(1); exit(1);
} }
//total dbroots on the system //total dbroots on the system
@ -4461,21 +4461,21 @@ bool storageSetup(string cloud)
prompt = "Select the type of Data Storage [1=internal, 2=external, 3=GlusterFS, 4=hdfs] (" + storageType + ") > "; prompt = "Select the type of Data Storage [1=internal, 2=external, 3=GlusterFS, 4=hdfs] (" + storageType + ") > ";
} }
cout << " 'internal' - This is specified when a local disk is used for the dbroot storage." << endl; cout << " 'internal' - This is specified when a local disk is used for the DBRoot storage." << endl;
cout << " High Availability Server Failover is not Supported in this mode" << endl << endl; cout << " High Availability Server Failover is not Supported in this mode" << endl << endl;
cout << " 'external' - This is specified when the dbroot directories are mounted." << endl; cout << " 'external' - This is specified when the DBRoot directories are mounted." << endl;
cout << " High Availability Server Failover is Supported in this mode." << endl << endl; cout << " High Availability Server Failover is Supported in this mode." << endl << endl;
if ( glusterInstalled == "y" ) if ( glusterInstalled == "y" )
{ {
cout << " 'GlusterFS' - This is specified when GlusterFS Data Redundancy is installed" << endl; cout << " 'GlusterFS' - This is specified when GlusterFS Data Redundancy is installed" << endl;
cout << " and you want the dbroot directories to be controlled by glusterfs." << endl; cout << " and you want the DBRoot directories to be controlled by glusterfs." << endl;
cout << " High Availability Server Failover is Supported in this mode." << endl << endl; cout << " High Availability Server Failover is Supported in this mode." << endl << endl;
} }
if ( hadoopInstalled == "y" ) if ( hadoopInstalled == "y" )
{ {
cout << " 'hdfs' - This is specified when hadoop is installed and you want the dbroot" << endl; cout << " 'hdfs' - This is specified when hadoop is installed and you want the DBRoot" << endl;
cout << " directories to be controlled by the Hadoop Distributed File System (HDFS)." << endl; cout << " directories to be controlled by the Hadoop Distributed File System (HDFS)." << endl;
cout << " High Availability Server Failover is Supported in this mode." << endl << endl; cout << " High Availability Server Failover is Supported in this mode." << endl << endl;
} }
@ -5067,7 +5067,7 @@ bool attachVolume(string instanceName, string volumeName, string deviceName, str
string status = oam.getEC2VolumeStatus(volumeName); string status = oam.getEC2VolumeStatus(volumeName);
if ( status == "attached" ) { if ( status == "attached" ) {
cout << "Volume " << volumeName << " is attached " << endl; cout << "Volume " << volumeName << " is attached " << endl;
cout << "Make sure it's device " << deviceName << " is mounted to dbroot directory " << dbrootPath << endl; cout << "Make sure it's device " << deviceName << " is mounted to DBRoot directory " << dbrootPath << endl;
return true; return true;
} }
@ -5102,7 +5102,7 @@ bool attachVolume(string instanceName, string volumeName, string deviceName, str
cout << "Attaching, please wait..." << endl; cout << "Attaching, please wait..." << endl;
if(oam.attachEC2Volume(volumeName, deviceName, instanceName)) { if(oam.attachEC2Volume(volumeName, deviceName, instanceName)) {
cout << "Volume " << volumeName << " is now attached " << endl; cout << "Volume " << volumeName << " is now attached " << endl;
cout << "Make sure it's device " << deviceName << " is mounted to dbroot directory " << dbrootPath << endl; cout << "Make sure it's device " << deviceName << " is mounted to DBRoot directory " << dbrootPath << endl;
return true; return true;
} }
else else
@ -5135,7 +5135,7 @@ bool singleServerDBrootSetup()
} }
catch(...) catch(...)
{ {
cout << "ERROR: Problem setting dbroot count in the InfiniDB System Configuration file" << endl; cout << "ERROR: Problem setting DBRoot count in the InfiniDB System Configuration file" << endl;
exit(1); exit(1);
} }
@ -5170,7 +5170,7 @@ bool singleServerDBrootSetup()
{ {
dbroots.clear(); dbroots.clear();
prompt = "Enter the list (Nx,Ny,Nz) or range (Nx-Nz) of dbroot IDs assigned to module 'pm1' (" + dbrootList + ") > "; prompt = "Enter the list (Nx,Ny,Nz) or range (Nx-Nz) of DBRoot IDs assigned to module 'pm1' (" + dbrootList + ") > ";
pcommand = callReadline(prompt.c_str()); pcommand = callReadline(prompt.c_str());
if (pcommand) if (pcommand)
{ {
@ -5225,7 +5225,7 @@ bool singleServerDBrootSetup()
std::vector<std::string>::iterator it = dbroots.begin(); std::vector<std::string>::iterator it = dbroots.begin();
for (; it != dbroots.end() ; it++, ++id) for (; it != dbroots.end() ; it++, ++id)
{ {
//store dbroot ID //store DBRoot ID
string moduledbrootid = "ModuleDBRootID1-" + oam.itoa(id) + "-3"; string moduledbrootid = "ModuleDBRootID1-" + oam.itoa(id) + "-3";
try { try {
sysConfig->setConfig(ModuleSection, moduledbrootid, *it); sysConfig->setConfig(ModuleSection, moduledbrootid, *it);
@ -5256,7 +5256,7 @@ bool singleServerDBrootSetup()
} }
catch(...) catch(...)
{ {
cout << "ERROR: Problem setting dbroot count in the InfiniDB System Configuration file" << endl; cout << "ERROR: Problem setting DBRoot count in the InfiniDB System Configuration file" << endl;
exit(1); exit(1);
} }

View File

@ -2495,7 +2495,7 @@ void processMSG(messageqcpp::IOSocket* cfIos)
if ( target == "system" ) if ( target == "system" )
{ {
//send out to all pms //send out to all pms except local module
for( unsigned int i = 0 ; i < systemmoduletypeconfig.moduletypeconfig.size(); i++) for( unsigned int i = 0 ; i < systemmoduletypeconfig.moduletypeconfig.size(); i++)
{ {
if ( systemmoduletypeconfig.moduletypeconfig[i].ModuleType != "pm" ) if ( systemmoduletypeconfig.moduletypeconfig[i].ModuleType != "pm" )
@ -2508,6 +2508,9 @@ void processMSG(messageqcpp::IOSocket* cfIos)
DeviceNetworkList::iterator pt = systemmoduletypeconfig.moduletypeconfig[i].ModuleNetworkList.begin(); DeviceNetworkList::iterator pt = systemmoduletypeconfig.moduletypeconfig[i].ModuleNetworkList.begin();
for (;pt != systemmoduletypeconfig.moduletypeconfig[i].ModuleNetworkList.end(); pt++) for (;pt != systemmoduletypeconfig.moduletypeconfig[i].ModuleNetworkList.end(); pt++)
{ {
if ( (*pt).DeviceName == config.moduleName() )
continue;
int retStatus = processManager.updateFstab((*pt).DeviceName, entry); int retStatus = processManager.updateFstab((*pt).DeviceName, entry);
if (retStatus != API_SUCCESS) if (retStatus != API_SUCCESS)
status = retStatus; status = retStatus;

View File

@ -981,7 +981,7 @@ void ProcessMonitor::processMessage(messageqcpp::ByteStream msg, messageqcpp::IO
if( config.moduleType() == "pm" ) if( config.moduleType() == "pm" )
{ {
//setup dbroot mounts //setup DBRoot mounts
createDataDirs(cloud); createDataDirs(cloud);
int ret = checkDataMount(); int ret = checkDataMount();
if (ret != oam::API_SUCCESS) if (ret != oam::API_SUCCESS)
@ -1592,7 +1592,7 @@ void ProcessMonitor::processMessage(messageqcpp::ByteStream msg, messageqcpp::IO
string dbrootID; string dbrootID;
msg >> dbrootID; msg >> dbrootID;
log.writeLog(__LINE__, "MSG RECEIVED: Unmount dbroot: " + dbrootID); log.writeLog(__LINE__, "MSG RECEIVED: Unmount DBRoot: " + dbrootID);
//Flush the cache //Flush the cache
cacheutils::flushPrimProcCache(); cacheutils::flushPrimProcCache();
@ -1636,7 +1636,7 @@ void ProcessMonitor::processMessage(messageqcpp::ByteStream msg, messageqcpp::IO
if ( retry >= 5 ) if ( retry >= 5 )
{ {
log.writeLog(__LINE__, "unmount failed, device busy, dbroot: " + dbrootID, LOG_TYPE_ERROR); log.writeLog(__LINE__, "unmount failed, device busy, DBRoot: " + dbrootID, LOG_TYPE_ERROR);
return_status = API_FAILURE; return_status = API_FAILURE;
system("mv -f /tmp/umount.txt /tmp/umount_failed.txt"); system("mv -f /tmp/umount.txt /tmp/umount_failed.txt");
} }
@ -1671,7 +1671,7 @@ void ProcessMonitor::processMessage(messageqcpp::ByteStream msg, messageqcpp::IO
string dbrootID; string dbrootID;
msg >> dbrootID; msg >> dbrootID;
log.writeLog(__LINE__, "MSG RECEIVED: Mount dbroot: " + dbrootID);; log.writeLog(__LINE__, "MSG RECEIVED: Mount DBRoot: " + dbrootID);;
int return_status = API_SUCCESS; int return_status = API_SUCCESS;
if (GlusterConfig == "n") if (GlusterConfig == "n")
@ -1692,7 +1692,7 @@ void ProcessMonitor::processMessage(messageqcpp::ByteStream msg, messageqcpp::IO
if ( size != 0 ) if ( size != 0 )
{ {
if (!oam.checkLogStatus("/tmp/mount.txt", "already")) { if (!oam.checkLogStatus("/tmp/mount.txt", "already")) {
log.writeLog(__LINE__, "mount failed, dbroot: " + dbrootID, LOG_TYPE_ERROR); log.writeLog(__LINE__, "mount failed, DBRoot: " + dbrootID, LOG_TYPE_ERROR);
return_status = API_FAILURE; return_status = API_FAILURE;
system("mv -f /tmp/mount.txt /tmp/mount_failed.txt"); system("mv -f /tmp/mount.txt /tmp/mount_failed.txt");
} }
@ -3596,7 +3596,7 @@ int ProcessMonitor::reconfigureModule(std::string reconfigureModuleName)
system(cmd.c_str()); system(cmd.c_str());
} }
//copy and apply new rc.local.calpont from dm1 //copy and apply new rc.local.calpont from pm1
cmd = "rm -f " + installDir + "/local/rc.local.calpont"; cmd = "rm -f " + installDir + "/local/rc.local.calpont";
system(cmd.c_str()); system(cmd.c_str());
cmd = "cp " + installDir + "/local/etc/" + reconfigureModuleName + "/rc.local.calpont " + installDir + "/local/."; cmd = "cp " + installDir + "/local/etc/" + reconfigureModuleName + "/rc.local.calpont " + installDir + "/local/.";
@ -5612,7 +5612,7 @@ bool ProcessMonitor::amazonVolumeCheck(int dbrootID)
} }
else else
{ {
log.writeLog(__LINE__, "amazonVolumeCheck function called for dbroot" + oam.itoa(dbrootID), LOG_TYPE_DEBUG); log.writeLog(__LINE__, "amazonVolumeCheck function called for DBRoot" + oam.itoa(dbrootID), LOG_TYPE_DEBUG);
string volumeNameID = "PMVolumeName" + oam.itoa(dbrootID); string volumeNameID = "PMVolumeName" + oam.itoa(dbrootID);
string volumeName = oam::UnassignedName; string volumeName = oam::UnassignedName;
@ -5626,7 +5626,7 @@ bool ProcessMonitor::amazonVolumeCheck(int dbrootID)
{} {}
if ( volumeName.empty() || volumeName == oam::UnassignedName ) { if ( volumeName.empty() || volumeName == oam::UnassignedName ) {
log.writeLog(__LINE__, "amazonVolumeCheck function exiting, no volume assigned to dbroot " + oam.itoa(dbrootID), LOG_TYPE_WARNING); log.writeLog(__LINE__, "amazonVolumeCheck function exiting, no volume assigned to DBRoot " + oam.itoa(dbrootID), LOG_TYPE_WARNING);
return false; return false;
} }
@ -5837,7 +5837,7 @@ int ProcessMonitor::checkDataMount()
} }
catch(...) {} catch(...) {}
//asign dbroot is gluster //asign DBRoot is gluster
if (GlusterConfig == "y") if (GlusterConfig == "y")
{ {
vector<string>::iterator p = dbrootList.begin(); vector<string>::iterator p = dbrootList.begin();
@ -5872,7 +5872,7 @@ int ProcessMonitor::checkDataMount()
string fileName = dbroot + "/OAMdbrootCheck"; string fileName = dbroot + "/OAMdbrootCheck";
ofstream fout(fileName.c_str()); ofstream fout(fileName.c_str());
if (!fout) { if (!fout) {
log.writeLog(__LINE__, "ERROR: Failed test write to dbroot: " + dbroot, LOG_TYPE_ERROR); log.writeLog(__LINE__, "ERROR: Failed test write to DBRoot: " + dbroot, LOG_TYPE_ERROR);
return API_FAILURE; return API_FAILURE;
} }
@ -5919,7 +5919,7 @@ int ProcessMonitor::checkDataMount()
if ( size != 0 ) if ( size != 0 )
{ {
if (!oam.checkLogStatus("/tmp/mount.txt", "already")) { if (!oam.checkLogStatus("/tmp/mount.txt", "already")) {
log.writeLog(__LINE__, "checkDataMount: mount failed, dbroot: " + dbroot, LOG_TYPE_ERROR); log.writeLog(__LINE__, "checkDataMount: mount failed, DBRoot: " + dbroot, LOG_TYPE_ERROR);
try{ try{
oam.setDbrootStatus(*p, oam::AUTO_OFFLINE); oam.setDbrootStatus(*p, oam::AUTO_OFFLINE);
@ -5943,7 +5943,7 @@ int ProcessMonitor::checkDataMount()
//create OAM-Test-Flag check rw mount //create OAM-Test-Flag check rw mount
ofstream fout(fileName.c_str()); ofstream fout(fileName.c_str());
if (!fout) { if (!fout) {
log.writeLog(__LINE__, "ERROR: Failed test write to dbroot: " + dbroot, LOG_TYPE_ERROR); log.writeLog(__LINE__, "ERROR: Failed test write to DBRoot: " + dbroot, LOG_TYPE_ERROR);
try{ try{
oam.setDbrootStatus(*p, oam::AUTO_OFFLINE); oam.setDbrootStatus(*p, oam::AUTO_OFFLINE);