http://git-wip-us.apache.org/repos/asf/trafodion/blob/abf3c429/core/sqf/monitor/linux/reqnotify.cxx ---------------------------------------------------------------------- diff --git a/core/sqf/monitor/linux/reqnotify.cxx b/core/sqf/monitor/linux/reqnotify.cxx index f5f7579..6dc43fc 100644 --- a/core/sqf/monitor/linux/reqnotify.cxx +++ b/core/sqf/monitor/linux/reqnotify.cxx @@ -28,10 +28,15 @@ #include "montrace.h" #include "monsonar.h" #include "monlogging.h" +#include "ptpclient.h" extern CMonStats *MonStats; extern CNode *MyNode; extern CNodeContainer *Nodes; +extern bool NameServerEnabled; +extern CPtpClient *PtpClient; + +extern _TM_Txid_External invalid_trans( void ); CExtNotifyReq::CExtNotifyReq (reqQueueMsg_t msgType, int pid, struct message_def *msg ) @@ -125,35 +130,31 @@ void CExtNotifyReq::performRequest() if ( requester ) { - CProcess *sourceProcess = NULL; - - if ( processName_.size() ) - { // find by name (check node state, don't check process state, not backup) - if (trace_settings & TRACE_REQUEST) - trace_printf("%s@%d" " - Finding sourceProcess (name,verifier)" "\n", method_name, __LINE__); - sourceProcess = Nodes->GetProcess( processName_.c_str() - , verifier_ - , true, false, false ); - } - else - { // find by nid (check node state, don't check process state, backup is Ok) - if (trace_settings & TRACE_REQUEST) - trace_printf("%s@%d" " - Finding sourceProcess (nid,pid,verifier)" "\n", method_name, __LINE__); - sourceProcess = Nodes->GetProcess( nid_ - , pid - , verifier_ - , true, false, true ); - } - + CProcess *sourceProcess = requester; if ( sourceProcess ) { if (trace_settings & TRACE_REQUEST) - trace_printf("%s@%d - Found sourceProcess" "\n", method_name, __LINE__); + { + trace_printf( "%s@%d - Found sourceProcess %s (%d,%d:%d), clone=%d\n" + , method_name, __LINE__ + , sourceProcess->GetName() + , sourceProcess->GetNid() + , sourceProcess->GetPid() + , sourceProcess->GetVerifier() + , sourceProcess->IsClone() ); + } } else { if (trace_settings & TRACE_REQUEST) - trace_printf("%s@%d - Can't find sourceProcess\n", method_name, __LINE__); + { + trace_printf( "%s@%d - Can't find sourceProcess %s (%d,%d:%d)\n" + , method_name, __LINE__ + , processName_.c_str() + , nid_ + , pid + , verifier_ ); + } } if ( msg_->u.request.u.notify.cancel ) @@ -170,14 +171,15 @@ void CExtNotifyReq::performRequest() { CProcess *targetProcess = NULL; - if ( target_process_name.size() ) { // find by name (check node state, don't check process state, not backup) if (trace_settings & TRACE_REQUEST) + { trace_printf( "%s@%d" " - Finding targetProcess (%s:%d)" "\n" , method_name, __LINE__ , target_process_name.c_str() , target_verifier ); + } targetProcess = Nodes->GetProcess( target_process_name.c_str() , target_verifier , true, false, false ); @@ -185,11 +187,13 @@ void CExtNotifyReq::performRequest() else { // find by nid (check node state, don't check process state, backup is Ok) if (trace_settings & TRACE_REQUEST) + { trace_printf( "%s@%d" " - Finding targetProcess (%d,%d:%d)\n" , method_name, __LINE__ , target_nid , target_pid , target_verifier ); + } targetProcess = Nodes->GetProcess( target_nid , target_pid , target_verifier @@ -199,12 +203,73 @@ void CExtNotifyReq::performRequest() if ( targetProcess ) { if (trace_settings & TRACE_REQUEST) - trace_printf("%s@%d" " - Found targetProcess" "\n", method_name, __LINE__); + { + trace_printf( "%s@%d - Found targetProcess %s (%d,%d:%d), clone=%d\n" + , method_name, __LINE__ + , targetProcess->GetName() + , targetProcess->GetNid() + , targetProcess->GetPid() + , targetProcess->GetVerifier() + , targetProcess->IsClone() ); + } } else { - if (trace_settings & TRACE_REQUEST) - trace_printf("%s@%d - Can't find targetProcess\n", method_name, __LINE__); + if (!NameServerEnabled) + { + if (trace_settings & TRACE_REQUEST) + { + trace_printf("%s@%d - Can't find targetProcess\n", method_name, __LINE__); + } + } + else + { + if ( target_process_name.size() ) + { // Name Server find by name:verifier + if (trace_settings & TRACE_REQUEST) + { + trace_printf( "%s@%d" " - Getting targetProcess from Name Server (%s:%d)" "\n" + , method_name, __LINE__ + , target_process_name.c_str() + , target_verifier ); + } + targetProcess = Nodes->GetProcessNs( target_process_name.c_str() + , target_verifier ); + } + else + { // Name Server find by nid,pid:verifier + if (trace_settings & TRACE_REQUEST) + { + trace_printf( "%s@%d" " - Getting targetProcess from Name Server (%d,%d:%d)\n" + , method_name, __LINE__ + , target_nid + , target_pid + , target_verifier ); + } + targetProcess = Nodes->GetProcessNs( target_nid + , target_pid + , target_verifier ); + } + if (targetProcess) + { + if (trace_settings & TRACE_REQUEST) + trace_printf( "%s@%d - Found targetProcess %s (%d,%d:%d), clone=%d\n" + , method_name, __LINE__ + , targetProcess->GetName() + , targetProcess->GetNid() + , targetProcess->GetPid() + , targetProcess->GetVerifier() + , targetProcess->IsClone() ); + } + else + { + trace_printf( "%s@%d" " - Can't find targetProcess (%d,%d:%d)\n" + , method_name, __LINE__ + , target_nid + , target_pid + , target_verifier ); + } + } } if ( targetProcess ) @@ -221,8 +286,10 @@ void CExtNotifyReq::performRequest() target_verifier, targetProcess->GetVerifier()); } - } else + } + else { +#if 0 if ( msg_->u.request.u.notify.cancel ) { // Unregister interest in death of target process status = targetProcess->CancelDeathNotification( nid_ @@ -230,8 +297,32 @@ void CExtNotifyReq::performRequest() , verifier_ , msg_->u.request.u.notify.trans_id); } - else if ( sourceProcess) + else if (sourceProcess) +#endif + if (sourceProcess) { // Register interest in death of target process + if (NameServerEnabled && targetProcess->IsClone()) + { + CLNode *targetLNode = Nodes->GetLNode( targetProcess->GetNid() ); + + _TM_Txid_External transId = msg_->u.request.u.notify.trans_id; + int rc = -1; + + // Forward the process cancel death notification to the target node + rc = PtpClient->ProcessNotify( sourceProcess->GetNid() + , sourceProcess->GetPid() + , sourceProcess->GetVerifier() + , transId + , false + , targetProcess + , targetLNode->GetNid() + , targetLNode->GetNode()->GetName() ); + if (rc) + { + // TODO: Error handling + } + } + sourceProcess->procExitReg( targetProcess, msg_->u.request.u.notify.trans_id); status = SUCCESS; @@ -241,7 +332,9 @@ void CExtNotifyReq::performRequest() else { if (trace_settings & TRACE_REQUEST) + { trace_printf("%s@%d" " - Can't find targerProcess" "\n", method_name, __LINE__); + } } } @@ -254,13 +347,17 @@ void CExtNotifyReq::performRequest() { msg_->u.reply.u.generic.return_code = MPI_SUCCESS; if (trace_settings & TRACE_REQUEST) + { trace_printf("%s@%d" " - Successful" "\n", method_name, __LINE__); + } } else { msg_->u.reply.u.generic.return_code = MPI_ERR_NAME; if (trace_settings & TRACE_REQUEST) + { trace_printf("%s@%d" " - Unsuccessful" "\n", method_name, __LINE__); + } } // Send reply to requester @@ -270,7 +367,9 @@ void CExtNotifyReq::performRequest() { // Reply to requester so it can release the buffer. // We don't know about this process. if (trace_settings & (TRACE_REQUEST | TRACE_PROCESS)) + { trace_printf("%s@%d - Can't find requester, rc=%d\n", method_name, __LINE__, MPI_ERR_NAME); + } errorReply( MPI_ERR_EXITED ); }
http://git-wip-us.apache.org/repos/asf/trafodion/blob/abf3c429/core/sqf/monitor/linux/reqopen.cxx ---------------------------------------------------------------------- diff --git a/core/sqf/monitor/linux/reqopen.cxx b/core/sqf/monitor/linux/reqopen.cxx index 7a0ac04..88022b9 100644 --- a/core/sqf/monitor/linux/reqopen.cxx +++ b/core/sqf/monitor/linux/reqopen.cxx @@ -78,6 +78,10 @@ void CExtOpenReq::performRequest() const char method_name[] = "CExtOpenReq::performRequest"; TRACE_ENTRY; + int target_nid = -1; + int target_pid = -1; + Verifier_t target_verifier = -1; + string target_process_name; // Record statistics (sonar counters) if (sonar_verify_state(SONAR_ENABLED | SONAR_MONITOR_ENABLED)) @@ -103,20 +107,63 @@ void CExtOpenReq::performRequest() bool status; CProcess *opener = ((CReqResourceProc *) resources_[0])->getProcess(); CProcess *opened = ((CReqResourceProc *) resources_[1])->getProcess(); - -//TRK-TODO + // check for the process object as it could have been deleted by the time this request gets to perform. if (opened == NULL) { - if (trace_settings & (TRACE_REQUEST | TRACE_PROCESS)) + if (!NameServerEnabled) { - trace_printf("%s@%d request #%ld: Open process failed. Process already exited.", - method_name, __LINE__, id_); + if (trace_settings & (TRACE_REQUEST | TRACE_PROCESS)) + { + trace_printf("%s@%d request #%ld: Open process failed. Process already exited.", + method_name, __LINE__, id_); + } + errorReply( MPI_ERR_NAME ); + TRACE_EXIT; + return; + } + else + { + target_nid = msg_->u.request.u.open.target_nid; + target_pid = msg_->u.request.u.open.target_pid; + target_verifier = msg_->u.request.u.open.target_verifier; + target_process_name = (const char *) msg_->u.request.u.open.target_process_name; + + if ( target_process_name.size() ) + { // Name Server find by name:verifier + if (trace_settings & TRACE_REQUEST) + trace_printf( "%s@%d" " - Getting targetProcess from Name Server (%s:%d)" "\n" + , method_name, __LINE__ + , target_process_name.c_str() + , target_verifier ); + opened = Nodes->GetProcessNs( target_process_name.c_str() + , target_verifier ); + } + else + { // Name Server find by nid,pid:verifier + if (trace_settings & TRACE_REQUEST) + trace_printf( "%s@%d" " - Getting targetProcess from Name Server (%d,%d:%d)\n" + , method_name, __LINE__ + , target_nid + , target_pid + , target_verifier ); + opened = Nodes->GetProcessNs( target_nid + , target_pid + , target_verifier ); + } + if (opened == NULL) + { + if (trace_settings & (TRACE_REQUEST | TRACE_PROCESS)) + { + trace_printf("%s@%d request #%ld: Open process failed. Process already exited.", + method_name, __LINE__, id_); + } + errorReply( MPI_ERR_NAME ); + TRACE_EXIT; + return; + } } - errorReply( MPI_ERR_NAME ); - TRACE_EXIT; - return; } // check the verifier @@ -155,7 +202,16 @@ void CExtOpenReq::performRequest() msg_->u.reply.u.open.type = opened->GetType(); msg_->u.reply.u.open.return_code = MPI_SUCCESS; if (trace_settings & (TRACE_REQUEST | TRACE_PROCESS)) - trace_printf("%s@%d - Successful\n", method_name, __LINE__); + { + trace_printf( "%s@%d - Open successful, opened %s (%d, %d:%d), " + "port=%s\n" + , method_name, __LINE__ + , opened->GetName() + , msg_->u.reply.u.open.nid + , msg_->u.reply.u.open.pid + , msg_->u.reply.u.open.verifier + , msg_->u.reply.u.open.port ); + } // Send reply to requester lioreply(msg_, pid_); http://git-wip-us.apache.org/repos/asf/trafodion/blob/abf3c429/core/sqf/monitor/linux/reqprocinfo.cxx ---------------------------------------------------------------------- diff --git a/core/sqf/monitor/linux/reqprocinfo.cxx b/core/sqf/monitor/linux/reqprocinfo.cxx index 8ff457c..22392bf 100644 --- a/core/sqf/monitor/linux/reqprocinfo.cxx +++ b/core/sqf/monitor/linux/reqprocinfo.cxx @@ -293,12 +293,19 @@ void CExtProcInfoReq::performRequest() TRACE_ENTRY; #ifndef NAMESERVER_PROCESS - if ( NameServerEnabled ) + bool getMonitorInfo = false; + if (strcasecmp(msg_->u.request.u.process_info.target_process_name, "MONITOR") == 0) + { + getMonitorInfo = true; + msg_->u.request.u.process_info.target_process_name[0] = 0; + } + + if ( NameServerEnabled && !getMonitorInfo ) NameServer->ProcessInfo(msg_); // in reqQueue thread (CExternalReq) #endif #ifndef NAMESERVER_PROCESS - if ( NameServerEnabled ) + if ( NameServerEnabled && !getMonitorInfo ) { // Send reply to requester lioreply(msg_, pid_); @@ -359,7 +366,11 @@ void CExtProcInfoReq::performRequest() } #endif +#ifdef NAMESERVER_PROCESS + if ( requester || ( nid_ == -1 && pid_ == -1 && verifier_ == -1 ) ) +#else if ( requester ) +#endif { msg_->u.reply.u.process_info.more_data = false; @@ -371,16 +382,16 @@ void CExtProcInfoReq::performRequest() trace_printf( "%s@%d request #%ld: ProcessInfo from %s (%d, %d:%d) " "by name for %s:%d, process type=%d\n" , method_name, __LINE__, id_ - , requester->GetName() - , requester->GetNid() - , requester->GetPid() - , requester->GetVerifier() + , requester?requester->GetName():"" + , requester?requester->GetNid():-1 + , requester?requester->GetPid():-1 + , requester?requester->GetVerifier():-1 , target_process_name.c_str(), target_verifier , msg_->u.request.u.process_info.type); } //if requester is requesting info for itself, return local process info - if ( strcmp( requester->GetName() + if ( requester && strcmp( requester->GetName() , msg_->u.request.u.process_info.target_process_name) == 0 ) { ProcessInfo_CopyData(requester, @@ -464,7 +475,8 @@ void CExtProcInfoReq::performRequest() else { // get info for single process in node - if ((requester->GetType() == ProcessType_TSE || + if (requester && + (requester->GetType() == ProcessType_TSE || requester->GetType() == ProcessType_ASE || requester->GetType() == ProcessType_AMP) && (requester->GetNid() == target_nid && http://git-wip-us.apache.org/repos/asf/trafodion/blob/abf3c429/core/sqf/monitor/linux/reqqueue.cxx ---------------------------------------------------------------------- diff --git a/core/sqf/monitor/linux/reqqueue.cxx b/core/sqf/monitor/linux/reqqueue.cxx index 12e1f8e..5c0c77f 100644 --- a/core/sqf/monitor/linux/reqqueue.cxx +++ b/core/sqf/monitor/linux/reqqueue.cxx @@ -42,7 +42,6 @@ #ifndef NAMESERVER_PROCESS #include "nameserver.h" #include "ptpclient.h" -extern CPtpClient *PtpClient; #endif extern int MyPNID; @@ -61,6 +60,7 @@ extern CHealthCheck HealthCheck; extern char *ErrorMsg (int error_code); #else extern bool NameServerEnabled; +extern CPtpClient *PtpClient; extern CNameServer *NameServer; extern CNameServerConfigContainer *NameServerConfig; #endif @@ -369,7 +369,7 @@ void CRequest::evalReqPerformance( void ) "time=%ld.%06ld, total time=%ld.%06ld {%s}\n", method_name, performTime.tv_sec, performTime.tv_nsec, totalTime.tv_sec, totalTime.tv_nsec, requestString()); - mon_log_write(MON_REQQUEUE_PREP_EXT_REQ_1, SQ_LOG_ERR, buf); + mon_log_write(MON_REQ_EVALREQ_PERFORMANCE_1, SQ_LOG_ERR, buf); } } @@ -580,6 +580,7 @@ void CInternalReq::errorReply( int ) { } +#ifndef NAMESERVER_PROCESS CIntCloneProcReq::CIntCloneProcReq( bool backup, bool unhooked, bool eventMessages, bool systemMessages, int nid, PROCESSTYPE type, int priority, int parentNid, int parentPid, int parentVerifier, int osPid, int verifier, pid_t priorPid, int persistentRetries, int argc, struct timespec creationTime, strId_t pathStrId, strId_t ldpathStrId, strId_t programStrId, int nameLen, int portLen, int infileLen, int outfileLen, int argvLen, const char * stringData, int origPNidNs) : CInternalReq(), backup_( backup ), @@ -733,7 +734,7 @@ void CIntCloneProcReq::performRequest() "startup successfully.\n", method_name, process->GetName(), process->GetNid(), process->GetPid()); - mon_log_write(MON_PROCESSCONT_EXITPROCESS_2, SQ_LOG_ERR, buf); + mon_log_write(MON_INTREQ_CLONEPROC_1, SQ_LOG_ERR, buf); } if (parent && process->IsBackup()) @@ -793,7 +794,187 @@ void CIntCloneProcReq::performRequest() TRACE_EXIT; } +#endif + + +#ifdef NAMESERVER_PROCESS +CIntCloneProcNsReq::CIntCloneProcNsReq( bool backup + , bool unhooked + , bool eventMessages + , bool systemMessages + , int nid + , PROCESSTYPE type + , int priority + , int parentNid + , int parentPid + , int parentVerifier + , int osPid + , int verifier + , pid_t priorPid + , int persistentRetries + , int argc + , struct timespec creationTime + , strId_t pathStrId + , strId_t ldpathStrId + , strId_t programStrId + , int nameLen + , int portLen + , int infileLen + , int outfileLen + , int argvLen + , const char * stringData + , int origPNidNs) + : CInternalReq() + , backup_( backup ) + , unhooked_( unhooked ) + , eventMessages_( eventMessages ) + , systemMessages_( systemMessages ) + , nid_( nid ) + , type_( type ) + , priority_( priority ) + , parentNid_( parentNid ) + , parentPid_( parentPid ) + , parentVerifier_( parentVerifier ) + , osPid_( osPid ) + , verifier_( verifier ) + , priorPid_( priorPid ) + , persistentRetries_( persistentRetries ) + , argc_( argc ) + , pathStrId_( pathStrId ) + , ldpathStrId_( ldpathStrId ) + , programStrId_( programStrId ) + , nameLen_( nameLen ) + , portLen_( portLen ) + , infileLen_( infileLen ) + , outfileLen_( outfileLen ) + , argvLen_( argvLen ) + , origPNidNs_( origPNidNs ) +{ + // Add eyecatcher sequence as a debugging aid + memcpy(&eyecatcher_, "RQIL", 4); + + creationTime_.tv_sec = creationTime.tv_sec; + creationTime_.tv_nsec = creationTime.tv_nsec; + + int stringDataLen = nameLen_ + portLen_+ infileLen_ + outfileLen_ + + argvLen_; + stringData_ = new char [stringDataLen]; + memcpy ( stringData_, stringData, stringDataLen ); +} + +void CIntCloneProcNsReq::populateRequestString( void ) +{ + char strBuf[MON_STRING_BUF_SIZE/2]; + sprintf( strBuf, "IntReq(%s) req #=%ld (name=%s/nid=%d/pid=%d) parent(nid=%d/pid=%d)" + , CReqQueue::intReqType[InternalType_Clone] + , getId(), + &stringData_[0], // process name + nid_, osPid_, parentNid_, parentPid_ ); + requestString_.assign( strBuf ); +} +CIntCloneProcNsReq::~CIntCloneProcNsReq() +{ + // Alter eyecatcher sequence as a debugging aid to identify deleted object + memcpy(&eyecatcher_, "rqil", 4); + + delete [] stringData_; +} + +void CIntCloneProcNsReq::performRequest() +{ + const char method_name[] = "CIntCloneProcNsReq::performRequest"; + TRACE_ENTRY; + + CProcess *process; + + // Trace info about request + if (trace_settings & (TRACE_REQUEST | TRACE_PROCESS)) + trace_printf("%s@%d \n", method_name, __LINE__); + + // check to see if we pre-cloned this process for startup in a remote node + process = Nodes->GetLNode (nid_)-> + CompleteProcessStartup(&stringData_[0], // process name + &stringData_[nameLen_], // port, + osPid_, + eventMessages_, + systemMessages_, + &creationTime_, + origPNidNs_); + if (process) + { + if (trace_settings & (TRACE_REQUEST | TRACE_PROCESS)) + { + trace_printf("%s@%d - Registered process %s (%d, %d:%d), " + "port=%s, origPNidNs=%d, MyPNID=%d\n", method_name, __LINE__, + process->GetName(), process->GetNid(), + process->GetPid(), process->GetVerifier(), + process->GetPort(), process->GetOrigPNidNs(), MyPNID ); + } + + process->SetVerifier(verifier_); + process->SetParentVerifier(parentVerifier_); + + // Send reply to originating monitor + if ( MyPNID == process->GetOrigPNidNs() ) + { + struct message_def *msg = process->GetMonContext(); + msg->u.reply.type = ReplyType_NewProcessNs; + msg->noreply = false; + msg->reply_tag = process->GetReplyTag(); + msg->u.reply.u.new_process_ns.nid = process->GetNid(); + msg->u.reply.u.new_process_ns.pid = process->GetPid(); + msg->u.reply.u.new_process_ns.verifier = process->GetReplyTag(); + strncpy(msg->u.reply.u.new_process_ns.process_name, process->GetName(), MAX_PROCESS_NAME); + msg->u.reply.u.new_process_ns.return_code = MPI_SUCCESS; + + int sockFd = process->GetMonSockFd(); + // Send reply to requester + monreply( msg, sockFd ); + } + + // There might be a request waiting for the process creation to + // complete so have worker check pending request queue. + ReqQueue.nudgeWorker(); + } + else + { + // This is a new clone process that needs to be created + // mirroring another node + CNode * node = Nodes->GetLNode (nid_)->GetNode(); + CProcess * process; + process = node->CloneProcess (nid_, + type_, + priority_, + backup_, + unhooked_, + &stringData_[0], // process name + &stringData_[nameLen_], // port + osPid_, + verifier_, + parentNid_, + parentPid_, + parentVerifier_, + eventMessages_, + systemMessages_, + pathStrId_, + ldpathStrId_, + programStrId_, + &stringData_[nameLen_ + portLen_], // infile + &stringData_[nameLen_ + portLen_ + infileLen_], // outfile + &creationTime_, + origPNidNs_); + if ( process ) + { + process->userArgs ( argc_, argvLen_, + &stringData_[nameLen_ + portLen_ + +infileLen_ + outfileLen_] ); + } + } + + TRACE_EXIT; +} +#endif #ifndef NAMESERVER_PROCESS @@ -921,7 +1102,9 @@ void CIntExitReq::performRequest() lnode->GetNode()->DelFromNameMap ( process ); lnode->GetNode()->DelFromPidMap ( process ); -#ifndef NAMESERVER_PROCESS +#ifdef NAMESERVER_PROCESS + lnode->GetNode()->DeleteFromList( process ); +#else lnode->GetNode()->Exit_Process (process, abended_, -1); #endif } @@ -931,7 +1114,7 @@ void CIntExitReq::performRequest() char buf[MON_STRING_BUF_SIZE]; sprintf(buf, "[%s], Can't find process %s (%d, %d) for processing " "exit.\n", method_name, name_, nid_, pid_); - mon_log_write(MON_CLUSTER_HANDLEOTHERNODE_5, SQ_LOG_ERR, buf); + mon_log_write(MON_INTREQ_EXIT_1, SQ_LOG_ERR, buf); } TRACE_EXIT; @@ -1162,6 +1345,23 @@ void CIntNewProcReq::performRequest() } } } +#ifndef NAMESERVER_PROCESS + else + { + if (NameServerEnabled) + { // Name Server find by nid,pid:verifier + if (trace_settings & TRACE_REQUEST) + trace_printf( "%s@%d" " - Getting parent process from Name Server (%d,%d:%d)\n" + , method_name, __LINE__ + , parentNid_ + , parentPid_ + , parentVerifier_ ); + parentProcess = Nodes->GetProcessNs( parentNid_ + , parentPid_ + , parentVerifier_ ); + } + } +#endif } if (parentProcess || unhooked_ ) @@ -1208,16 +1408,18 @@ void CIntNewProcReq::performRequest() MyNode->AddToNameMap( newProcess ); MyNode->AddToPidMap( newProcess->GetPid(), newProcess ); - // Successfully forked process. Replicate actual process - // id and process name. - -//TRK-TODO - /* if (NameServerEnabled) + // Successfully forked process + if (NameServerEnabled) { - PtpClient->ProcessInit(newProcess, reqTag_, 0, parentNid_, lnode->GetNode()->GetName()); + // Send actual pid and process name back to parent + PtpClient->ProcessInit( newProcess + , reqTag_ + , 0 + , parentNid_ ); } else - */ { + { + // Replicate actual pid and process name CReplProcInit *repl = new CReplProcInit(newProcess, reqTag_, 0, parentNid_); Replicator.addItem(repl); @@ -1230,14 +1432,23 @@ void CIntNewProcReq::performRequest() } } -//TRK-TODO if ( newProcess == NULL ) { // Process creation failure, relay error code to node // that requested process creation. - CReplProcInit *repl = new CReplProcInit(newProcess, reqTag_, - result, parentNid_); - Replicator.addItem(repl); + if (NameServerEnabled) + { + PtpClient->ProcessInit( newProcess + , reqTag_ + , result + , parentNid_ ); + } + else + { + CReplProcInit *repl = new CReplProcInit(newProcess, reqTag_, + result, parentNid_); + Replicator.addItem(repl); + } } #endif } @@ -1248,13 +1459,300 @@ void CIntNewProcReq::performRequest() sprintf(buf, "[%s], Can't find parent process nid=%d, pid=%d " "for process create.\n", method_name, parentNid_, parentPid_ ); - mon_log_write(MON_CLUSTER_HANDLEOTHERNODE_10, SQ_LOG_ERR, buf); + mon_log_write(MON_INTREQ_NEWPROC_1, SQ_LOG_ERR, buf); } TRACE_EXIT; } #ifndef NAMESERVER_PROCESS +CIntNotifyReq::CIntNotifyReq( struct notify_def *notifyDef ) + : CInternalReq() + , nid_( notifyDef->nid ) + , pid_( notifyDef->pid ) + , verifier_( notifyDef->verifier ) + , canceled_( notifyDef->canceled ) + , targetNid_( notifyDef->target_nid ) + , targetPid_( notifyDef->target_pid ) + , targetVerifier_( notifyDef->target_verifier ) + , transId_( notifyDef->trans_id ) +{ + // Add eyecatcher sequence as a debugging aid + memcpy(&eyecatcher_, "RQI1", 4); +} + +CIntNotifyReq::~CIntNotifyReq() +{ + // Alter eyecatcher sequence as a debugging aid to identify deleted object + memcpy(&eyecatcher_, "rqi1", 4); +} + +void CIntNotifyReq::populateRequestString( void ) +{ + char strBuf[MON_STRING_BUF_SIZE/2]; + sprintf( strBuf, "IntReq(%s) req #=%ld notify(nid=%d/pid=%d/verifier=%d) death target(nid=%d/pid=%d/verifier=%d), canceled=%d, transId=%lld.%lld.%lld.%lld" + , CReqQueue::intReqType[InternalType_Notify] + , getId() + , nid_ + , pid_ + , verifier_ + , targetNid_ + , targetPid_ + , targetVerifier_ + , canceled_ + , transId_.txid[0] + , transId_.txid[1] + , transId_.txid[2] + , transId_.txid[3] ); + requestString_.assign( strBuf ); +} + +void CIntNotifyReq::performRequest() +{ + const char method_name[] = "CIntNotifyReq::performRequest"; + TRACE_ENTRY; + + //CLNode *node; + //CLNode *targetNode; + CProcess *sourceProcess = NULL; + CProcess *targetProcess = NULL; + + if (trace_settings & TRACE_PROCESS_DETAIL) + { + trace_printf( "%s@%d - Process death notification, canceled=%d\n" + , method_name, __LINE__ + , canceled_ ); + } + + + if (trace_settings & TRACE_REQUEST) + { + trace_printf( "%s@%d" " - Finding targetProcess (%d,%d:%d)\n" + , method_name, __LINE__ + , nid_ + , pid_ + , verifier_ ); + } + + // find by nid,pid (check node state, don't check process state, backup is Ok) + sourceProcess = Nodes->GetProcess( nid_ + , pid_ + , verifier_ + , true, false, true ); + if ( sourceProcess ) + { + if (trace_settings & TRACE_REQUEST) + { + trace_printf( "%s@%d - Found sourceProcess %s (%d,%d:%d), clone=%d\n" + , method_name, __LINE__ + , sourceProcess->GetName() + , sourceProcess->GetNid() + , sourceProcess->GetPid() + , sourceProcess->GetVerifier() + , sourceProcess->IsClone() ); + } + } + else + { + if (!NameServerEnabled) + { + if (trace_settings & TRACE_REQUEST) + { + trace_printf("%s@%d - Can't find sourceProcess\n", method_name, __LINE__); + } + } + else + { // Name Server find by nid,pid:verifier + if (trace_settings & TRACE_REQUEST) + { + trace_printf( "%s@%d" " - Getting sourceProcess from Name Server (%d,%d:%d)\n" + , method_name, __LINE__ + , nid_ + , pid_ + , verifier_ ); + } + sourceProcess = Nodes->GetProcessNs( nid_ + , pid_ + , verifier_ ); + if (sourceProcess) + { + if (trace_settings & TRACE_REQUEST) + trace_printf( "%s@%d - Found sourceProcess %s (%d,%d:%d), clone=%d\n" + , method_name, __LINE__ + , sourceProcess->GetName() + , sourceProcess->GetNid() + , sourceProcess->GetPid() + , sourceProcess->GetVerifier() + , sourceProcess->IsClone() ); + } + else + { + trace_printf( "%s@%d" " - Can't find sourceProcess (%d,%d:%d)\n" + , method_name, __LINE__ + , nid_ + , pid_ + , verifier_ ); + } + } + } + + if ( sourceProcess ) + { + if (trace_settings & TRACE_REQUEST) + { + trace_printf( "%s@%d" " - Finding targetProcess (%d,%d:%d)\n" + , method_name, __LINE__ + , targetNid_ + , targetPid_ + , targetVerifier_ ); + } + + // find by nid,pid (check node state, don't check process state, backup is Ok) + targetProcess = Nodes->GetProcess( targetNid_ + , targetPid_ + , targetVerifier_ + , true, false, true ); + if ( targetProcess ) + { + if (trace_settings & TRACE_REQUEST) + { + trace_printf( "%s@%d - Found targetProcess %s (%d,%d:%d), clone=%d\n" + , method_name, __LINE__ + , targetProcess->GetName() + , targetProcess->GetNid() + , targetProcess->GetPid() + , targetProcess->GetVerifier() + , targetProcess->IsClone() ); + } + } + else + { + if (!NameServerEnabled) + { + if (trace_settings & TRACE_REQUEST) + { + trace_printf("%s@%d - Can't find targetProcess\n", method_name, __LINE__); + } + } + else + { // Name Server find by nid,pid:verifier + if (trace_settings & TRACE_REQUEST) + { + trace_printf( "%s@%d" " - Getting targetProcess from Name Server (%d,%d:%d)\n" + , method_name, __LINE__ + , targetNid_ + , targetPid_ + , targetVerifier_ ); + } + targetProcess = Nodes->GetProcessNs( targetNid_ + , targetPid_ + , targetVerifier_ ); + if (targetProcess) + { + if (trace_settings & TRACE_REQUEST) + trace_printf( "%s@%d - Found targetProcess %s (%d,%d:%d), clone=%d\n" + , method_name, __LINE__ + , targetProcess->GetName() + , targetProcess->GetNid() + , targetProcess->GetPid() + , targetProcess->GetVerifier() + , targetProcess->IsClone() ); + } + else + { + trace_printf( "%s@%d" " - Can't find targetProcess (%d,%d:%d)\n" + , method_name, __LINE__ + , targetNid_ + , targetPid_ + , targetVerifier_ ); + } + } + } + + if ( targetProcess ) + { + if (canceled_) + { + if (trace_settings & (TRACE_REQUEST | TRACE_PROCESS)) + { + trace_printf( "%s@%d - Process (%d, %d:%d) deleting death " + "notice interest for %s (%d, %d:%d), " + "trans_id=%lld.%lld.%lld.%lld\n" + , method_name, __LINE__ + , nid_ + , pid_ + , verifier_ + , targetProcess->GetName() + , targetNid_ + , targetPid_ + , targetVerifier_ + , transId_.txid[0] + , transId_.txid[1] + , transId_.txid[2] + , transId_.txid[3] ); + } + + // Remove death notice registration + targetProcess->CancelDeathNotification( nid_ + , pid_ + , verifier_ + , transId_ ); + } + else + { + if (trace_settings & (TRACE_REQUEST | TRACE_PROCESS)) + { + trace_printf("%s@%d - Process (%d, %d:%d) registering interest " + "in death of process %s (%d, %d:%d), " + "trans_id=%lld.%lld.%lld.%lld\n" + , method_name, __LINE__ + , nid_ + , pid_ + , verifier_ + , targetProcess->GetName() + , targetNid_ + , targetPid_ + , targetVerifier_ + , transId_.txid[0] + , transId_.txid[1] + , transId_.txid[2] + , transId_.txid[3] ); + } + // Register interest with the target process + sourceProcess->procExitReg( targetProcess, transId_); + } + } + else + { + char buf[MON_STRING_BUF_SIZE]; + sprintf( buf + , "[%s], Can't find target process nid=%d, pid=%d:%d for " + "processing process death notification.\n" + , method_name + , targetNid_ + , targetPid_ + , targetVerifier_ ); + mon_log_write(MON_INTREQ_NOTIFY_1, SQ_LOG_INFO, buf); + } + } + else + { + char buf[MON_STRING_BUF_SIZE]; + sprintf( buf + , "[%s], Can't find sourceProcess nid=%d, pid=%d:%d for " + "processing process death notification.\n" + , method_name + , nid_ + , pid_ + , verifier_ ); + mon_log_write(MON_INTREQ_NOTIFY_3, SQ_LOG_INFO, buf); + } + + TRACE_EXIT; +} +#endif + +#ifndef NAMESERVER_PROCESS CIntOpenReq::CIntOpenReq( struct open_def *openDef ) : CInternalReq() , openerNid_( openDef->nid ) @@ -1325,7 +1823,7 @@ void CIntOpenReq::performRequest() char buf[MON_STRING_BUF_SIZE]; sprintf(buf, "[%s], Can't find process nid=%d, pid=%d for " "processing open.\n", method_name, openedNid_, openedPid_ ); - mon_log_write(MON_CLUSTER_HANDLEOTHERNODE_11, SQ_LOG_ERR, buf); + mon_log_write(MON_INTREQ_OPEN_1, SQ_LOG_ERR, buf); } TRACE_EXIT; @@ -1416,41 +1914,6 @@ void CIntProcInitReq::performRequest() parent->SetParentPid ( process_->GetPid() ); } } - - -#ifdef QUICK_WAITED_NEWPROCESS_REPLY -// Following allows reply to a "waited" new process request before we -// get the "startup" message from the process. This make the process -// creation appear to complete more quickly. However there are potential -// problems if the requester immediately tries to open the new process -// because it is not ready yet. So need to handle quick "open" of this -// type before re-enabling this code section. - if (!process->IsNowait()) - { // new process request was a "waited" request - if (process->GetParentNid() == -1) - { - parent = NULL; - } - else - { - parent = - LNode[process->GetParentNid()]-> - GetProcessL(process->GetParentPid()); - } - - if (parent) - { - reply_msg = process->parentContext(); - if ( reply_msg ) - { - // the parent gets a new_process reply - parent->ReplyNewProcess ( reply_msg, process ); - - process->parentContext (NULL); - } - } - } -#endif } TRACE_EXIT; @@ -1574,13 +2037,6 @@ void CIntChildDeathReq::performRequest() if ( process_ != NULL) { -#ifndef NAMESERVER_PROCESS - if ( NameServerEnabled ) - NameServer->ProcessDelete(process_); // in reqQueue thread (CIntChildDeathReq) -#endif - MyNode->DelFromNameMap ( process_ ); - MyNode->DelFromPidMap ( process_ ); - if (trace_settings & TRACE_PROCESS) { trace_printf( "%s@%d Processing child death " @@ -1591,6 +2047,13 @@ void CIntChildDeathReq::performRequest() , process_->GetPid() , process_->GetVerifier() ); } +#ifndef NAMESERVER_PROCESS + if ( NameServerEnabled ) + NameServer->ProcessDelete(process_); // in reqQueue thread (CIntChildDeathReq) +#endif + MyNode->DelFromNameMap ( process_ ); + MyNode->DelFromPidMap ( process_ ); + // if state is still Up, then process has not called exit. bool abended = (process_->GetState() == State_Up); MyNode->SetProcessState(process_, State_Stopped, abended); @@ -2677,7 +3140,7 @@ void CIntSnapshotReq::performRequest() case CommType_Sockets: if (Monitor->getJoinSock() == -1) { - mem_log_write(MON_REQQUEUE_SNAPSHOT_2); + mem_log_write(MON_REQQUEUE_SNAPSHOT_3); char buf[MON_STRING_BUF_SIZE]; sprintf(buf, "[%s], Join socket is -1, aborting snapshot req.\n", method_name); @@ -2791,7 +3254,7 @@ void CIntSnapshotReq::performRequest() { char buf[MON_STRING_BUF_SIZE]; sprintf(buf, "Snapshot buffer compression error = %d, aborting node reintegration.\n", z_result); - mon_log_write (MON_REQQUEUE_SNAPSHOT_9, SQ_LOG_CRIT, buf); + mon_log_write (MON_REQQUEUE_SNAPSHOT_14, SQ_LOG_CRIT, buf); // send msg to new monitor so that it can exit header.compressedSize_ = -1; @@ -2816,7 +3279,7 @@ void CIntSnapshotReq::performRequest() } if (error) { sprintf(buf, "Unable to send exit msg to new monitor, error = %d\n", error); - mon_log_write(MON_REQQUEUE_SNAPSHOT_9, SQ_LOG_CRIT, buf); + mon_log_write(MON_REQQUEUE_SNAPSHOT_15, SQ_LOG_CRIT, buf); } sprintf(buf, "Node reintegration aborted due to buffer compression error."); @@ -3210,6 +3673,11 @@ CExternalReq *CReqQueue::prepExternalReq(CExternalReq::reqQueueMsg_t msgType, request->setConcurrent(reqConcurrent[msg->u.request.type]); break; + case ReqType_ProcessInfoNs: + request = new CExtProcInfoNsReq(msgType, nid, pid, sockFd, msg); + request->setConcurrent(reqConcurrent[msg->u.request.type]); + break; + case ReqType_ShutdownNs: request = new CExtShutdownNsReq(msgType, nid, pid, sockFd, msg); request->setConcurrent(reqConcurrent[msg->u.request.type]); @@ -3524,8 +3992,11 @@ void CReqQueue::enqueueCloneReq ( struct clone_def *cloneDef ) { CInternalReq * request; +#ifndef NAMESERVER_PROCESS request = new CIntCloneProcReq ( cloneDef->backup, cloneDef->unhooked, cloneDef->event_messages, cloneDef->system_messages, cloneDef->nid, cloneDef->type, cloneDef->priority, cloneDef->parent_nid, cloneDef->parent_pid, cloneDef->parent_verifier, cloneDef->os_pid, cloneDef->verifier, cloneDef->prior_pid, cloneDef->persistent_retries, cloneDef->argc, cloneDef->creation_time, cloneDef->pathStrId, cloneDef->ldpathStrId, cloneDef->programStrId, cloneDef->nameLen, cloneDef->portLen, cloneDef->infileLen, cloneDef->outfileLen, cloneDef->argvLen, &cloneDef->stringData, cloneDef->origPNidNs); - +#else + request = new CIntCloneProcNsReq ( cloneDef->backup, cloneDef->unhooked, cloneDef->event_messages, cloneDef->system_messages, cloneDef->nid, cloneDef->type, cloneDef->priority, cloneDef->parent_nid, cloneDef->parent_pid, cloneDef->parent_verifier, cloneDef->os_pid, cloneDef->verifier, cloneDef->prior_pid, cloneDef->persistent_retries, cloneDef->argc, cloneDef->creation_time, cloneDef->pathStrId, cloneDef->ldpathStrId, cloneDef->programStrId, cloneDef->nameLen, cloneDef->portLen, cloneDef->infileLen, cloneDef->outfileLen, cloneDef->argvLen, &cloneDef->stringData, cloneDef->origPNidNs); +#endif enqueueReq ( request ); } @@ -3797,6 +4268,17 @@ void CReqQueue::enqueueNewProcReq( struct process_def *procDef ) #ifndef NAMESERVER_PROCESS +void CReqQueue::enqueueNotifyReq( struct notify_def *notifyDef ) +{ + CIntNotifyReq * request; + + request = new CIntNotifyReq( notifyDef ); + + enqueueReq ( request ); +} +#endif + +#ifndef NAMESERVER_PROCESS void CReqQueue::enqueueOpenReq( struct open_def *openDef ) { CIntOpenReq * request; @@ -4365,13 +4847,14 @@ const bool CReqQueue::reqConcurrent[] = { false, // ReqType_PNodeInfo false, // ReqType_ProcessInfo false, // ReqType_ProcessInfoCont + false, // ReqType_ProcessInfoNs false, // ReqType_Set false, // ReqType_Shutdown false, // ReqType_ShutdownNs false, // ReqType_Startup false, // ReqType_Stfsd false, // ReqType_TmLeader - false, // ReqType_TmReady, + false, // ReqType_TmReady false, // ReqType_TmSync false, // ReqType_TransInfo false, // ReqType_ZoneInfo @@ -4380,89 +4863,91 @@ const bool CReqQueue::reqConcurrent[] = { // Request names used for trace output const char * CReqQueue::svcReqType[] = { - "", - "Close", - "DeleteNs", - "Dump", - "Event", - "Exit", - "Get", - "Kill", - "MonStats", - "Mount", - "NameServerAdd", - "NameServerDelete", - "NameServerStart", - "NameServerStop", - "NewProcess", - "NewProcessNs", - "NodeAdd", - "NodeDelete", - "NodeDown", - "NodeInfo", - "NodeName", - "NodeUp", - "Notice", - "Notify", - "Open", - "OpenInfo", - "PersistAdd", - "PersistDelete", - "PNodeInfo", - "ProcessInfo", - "ProcessInfoCont", - "Set", - "Shutdown", - "ShutdownNs", - "Startup", - "Stfsd", - "TmLeader", - "TmReady", - "TmSync", - "TransInfo", - "ZoneInfo" + "", // unused, request types start at 1 + "Close", // ReqType_Close + "DelProcessNs", // ReqType_DelProcessNs + "Dump", // ReqType_Dump + "Event", // ReqType_Event + "Exit", // ReqType_Exit + "Get", // ReqType_Get + "Kill", // ReqType_Kill + "MonStats", // ReqType_MonStats + "Mount", // ReqType_Mount + "NameServerAdd", // ReqType_NameServerAdd + "NameServerDelete", // ReqType_NameServerDelete + "NameServerStart", // ReqType_NameServerStart + "NameServerStop", // ReqType_NameServerStop + "NewProcess", // ReqType_NewProcess + "NewProcessNs", // ReqType_NewProcessNs + "NodeAdd", // ReqType_NodeAdd + "NodeDelete", // ReqType_NodeDelete + "NodeDown", // ReqType_NodeDown + "NodeInfo", // ReqType_NodeInfo + "NodeName", // ReqType_NodeName + "NodeUp", // ReqType_NodeUp + "Notice", // ReqType_Notice -- not an actual request + "Notify", // ReqType_Notify + "Open", // ReqType_Open + "OpenInfo", // ReqType_OpenInfo + "PersistAdd", // ReqType_PersistAdd + "PersistDelete", // ReqType_PersistDelete + "PNodeInfo", // ReqType_PNodeInfo + "ProcessInfo", // ReqType_ProcessInfo + "ProcessInfoCont", // ReqType_ProcessInfoCont + "ProcessInfoNs", // ReqType_ProcessInfoNs + "Set", // ReqType_Set + "Shutdown", // ReqType_Shutdown + "ShutdownNs", // ReqType_ShutdownNs + "Startup", // ReqType_Startup + "Stfsd", // ReqType_Stfsd + "TmLeader", // ReqType_TmLeader + "TmReady", // ReqType_TmReady + "TmSync", // ReqType_TmSync + "TransInfo", // ReqType_TransInfo + "ZoneInfo" // ReqType_ZoneInfo + "Invalid" // ReqType_Invalid }; // Must match internal.h:InternalType const char * CReqQueue::intReqType[] = { - "" - , "ActivateSpare" - , "Clone" - , "Device" - , "Down" - , "Dump" - , "DumpComplete" - , "Event" - , "Exit" - , "IoData" - , "Kill" - , "NameServerAdd" - , "NameServerDelete" - , "NodeAdd" - , "NodeAdded" - , "NodeDelete" - , "NodeDeleted" - , "NodeName" - , "Notify" - , "PersistAdd" - , "PersistDelete" - , "Process" - , "ProcessInit" - , "Open" - , "Set" - , "StdinReq" - , "Sync" - , "Up" - , "CreatePrimitives" - , "Quiesce" - , "PostQuiesce" - , "Revive" - , "Snapshot" - , "UniqStr" - , "TMReady" - , "Shutdown" - , "SchedData" - , "SoftNodeDown" - , "SoftNodeUp" + "" // InternalType_Null + , "ActivateSpare" // InternalType_ActivateSpare + , "Clone" // InternalType_Clone + , "Device" // InternalType_Device + , "Down" // InternalType_Down + , "Dump" // InternalType_Dump + , "DumpComplete" // InternalType_DumpComplete + , "Event" // InternalType_Event + , "Exit" // InternalType_Exit + , "IoData" // InternalType_IoData + , "Kill" // InternalType_Kill + , "NameServerAdd" // InternalType_NameServerAdd + , "NameServerDelete" // InternalType_NameServerDelete + , "NodeAdd" // InternalType_NodeAdd + , "NodeAdded" // InternalType_NodeAdded + , "NodeDelete" // InternalType_NodeDelete + , "NodeDeleted" // InternalType_NodeDeleted + , "NodeName" // InternalType_NodeName + , "Notify" // InternalType_Notify + , "PersistAdd" // InternalType_PersistAdd + , "PersistDelete" // InternalType_PersistDelete + , "Process" // InternalType_Process + , "ProcessInit" // InternalType_ProcessInit + , "Open" // InternalType_Open + , "Set" // InternalType_Set + , "StdinReq" // InternalType_StdinReq + , "Sync" // InternalType_Sync + , "Up" // InternalType_Up + , "CreatePrimitives" // InternalType_CreatePrimitives + , "Quiesce" // InternalType_Quiesce + , "PostQuiesce" // InternalType_PostQuiece + , "Revive" // InternalType_Revive + , "Snapshot" // InternalType_Snapshot + , "UniqStr" // InternalType_UniqStr + , "TMReady" // InternalType_TmReady + , "Shutdown" // InternalType_Shutdown + , "SchedData" // InternalType_SchedData + , "SoftNodeDown" // InternalType_SoftNodeDown + , "SoftNodeUp" // InternalType_SoftNodeUp }; http://git-wip-us.apache.org/repos/asf/trafodion/blob/abf3c429/core/sqf/monitor/linux/reqqueue.h ---------------------------------------------------------------------- diff --git a/core/sqf/monitor/linux/reqqueue.h b/core/sqf/monitor/linux/reqqueue.h index 5f59315..7fa69fd 100644 --- a/core/sqf/monitor/linux/reqqueue.h +++ b/core/sqf/monitor/linux/reqqueue.h @@ -659,6 +659,24 @@ private: void populateRequestString( void ); }; +#ifdef NAMESERVER_PROCESS + +class CExtProcInfoNsReq: public CExternalReq +{ +public: + CExtProcInfoNsReq( reqQueueMsg_t msgType, + int nid, int pid, int sockFd, + struct message_def *msg ); + virtual ~CExtProcInfoNsReq(); + + void performRequest(); + +private: + void copyInfo(CProcess *process, ProcessInfoNs_reply_def &procInfo); + void populateRequestString( void ); +}; +#endif + #ifndef NAMESERVER_PROCESS class CExtSetReq: public CExternalReq { @@ -810,6 +828,7 @@ private: }; +#ifndef NAMESERVER_PROCESS class CIntCloneProcReq: public CInternalReq { public: @@ -848,6 +867,48 @@ private: char * stringData_; int origPNidNs_; }; +#endif + +#ifdef NAMESERVER_PROCESS +class CIntCloneProcNsReq: public CInternalReq +{ +public: + CIntCloneProcNsReq( bool backup, bool unhooked, bool eventMessages, bool systemMessages, int nid, PROCESSTYPE type, int priority, int parentNid, int parentPid, int parentVerifier, int osPid, int verifier, pid_t priorPid, int persistentRetries, int argc, struct timespec creationTime, strId_t pathStrId, strId_t ldpathStrId, strId_t programStrId, int nameLen, int portLen, int infileLen, int outfileLen, int argvLen, const char * stringData, int origPNidNs); + virtual ~CIntCloneProcNsReq(); + + void performRequest(); + +private: + void populateRequestString( void ); + + bool backup_; + bool unhooked_; + bool eventMessages_; + bool systemMessages_; + int nid_; + PROCESSTYPE type_; + int priority_; + int parentNid_; + int parentPid_; + int parentVerifier_; + int osPid_; + int verifier_; + pid_t priorPid_; + int persistentRetries_; + int argc_; + struct timespec creationTime_; + strId_t pathStrId_; + strId_t ldpathStrId_; + strId_t programStrId_; + int nameLen_; + int portLen_; + int infileLen_; + int outfileLen_; + int argvLen_; + char * stringData_; + int origPNidNs_; +}; +#endif #ifndef NAMESERVER_PROCESS class CIntDeviceReq: public CInternalReq @@ -983,6 +1044,28 @@ private: char * stringData_; }; +class CIntNotifyReq: public CInternalReq +{ +public: + CIntNotifyReq( struct notify_def *notifyDef ); + virtual ~CIntNotifyReq( ); + + void performRequest(); + +private: + void populateRequestString( void ); + + int nid_; + int pid_; + Verifier_t verifier_; + bool canceled_; + int targetNid_; + int targetPid_; + Verifier_t targetVerifier_; + _TM_Txid_External transId_; +}; + + class CIntOpenReq: public CInternalReq { public: @@ -1397,6 +1480,7 @@ class CReqQueue #endif void enqueueNewProcReq( struct process_def *procDef ); #ifndef NAMESERVER_PROCESS + void enqueueNotifyReq( struct notify_def *notifyDef ); void enqueueOpenReq( struct open_def *openDef ); #endif void enqueueProcInitReq( struct process_init_def *procInitDef ); http://git-wip-us.apache.org/repos/asf/trafodion/blob/abf3c429/core/sqf/monitor/test/childExitChild.cxx ---------------------------------------------------------------------- diff --git a/core/sqf/monitor/test/childExitChild.cxx b/core/sqf/monitor/test/childExitChild.cxx index 2fea575..adc11f9 100755 --- a/core/sqf/monitor/test/childExitChild.cxx +++ b/core/sqf/monitor/test/childExitChild.cxx @@ -57,6 +57,7 @@ int main (int argc, char *argv[]) util.requestStartup (); for (int i=0; i<10; i++) +// while( 1 ) { if ( tracing ) printf ("[%s] delaying...\n", MyName); http://git-wip-us.apache.org/repos/asf/trafodion/blob/abf3c429/core/sqf/monitor/test/childExitParent.cxx ---------------------------------------------------------------------- diff --git a/core/sqf/monitor/test/childExitParent.cxx b/core/sqf/monitor/test/childExitParent.cxx index 96bcc84..702f6d0 100755 --- a/core/sqf/monitor/test/childExitParent.cxx +++ b/core/sqf/monitor/test/childExitParent.cxx @@ -142,6 +142,7 @@ int main (int argc, char *argv[]) printf ("[%s] children created, ready to be killed ...\n", MyName); for (int i=0; i<7; i++) +// while( 1 ) { // temp print printf ("[%s] delaying...\n", MyName); http://git-wip-us.apache.org/repos/asf/trafodion/blob/abf3c429/core/sqf/monitor/test/montestutil.cxx ---------------------------------------------------------------------- diff --git a/core/sqf/monitor/test/montestutil.cxx b/core/sqf/monitor/test/montestutil.cxx index 3376348..43e16c9 100644 --- a/core/sqf/monitor/test/montestutil.cxx +++ b/core/sqf/monitor/test/montestutil.cxx @@ -134,8 +134,8 @@ void MonTestUtil::processArgs( int argc, char *argv[] ) // enable tracing if trace flag supplied for (i=0; i<argc; i++) { - if ( strcmp(argv[i], "-t") == 0 ) gv_xmpi_trace = trace_ = true; -// if ( strcmp(argv[i], "-t") == 0 ) trace_ = true; +// if ( strcmp(argv[i], "-t") == 0 ) gv_xmpi_trace = trace_ = true; + if ( strcmp(argv[i], "-t") == 0 ) trace_ = true; if ( strcmp(argv[i], "-x") == 0 ) shutdownBeforeStartup_ = true; if ( strcmp(argv[i], "-y") == 0 ) nodedownBeforeStartup_ = true; } http://git-wip-us.apache.org/repos/asf/trafodion/blob/abf3c429/core/sqf/monitor/test/runtest ---------------------------------------------------------------------- diff --git a/core/sqf/monitor/test/runtest b/core/sqf/monitor/test/runtest index 8c1193b..1d7929e 100755 --- a/core/sqf/monitor/test/runtest +++ b/core/sqf/monitor/test/runtest @@ -60,6 +60,12 @@ function Usage echo } +function Cleanup +{ + ckillall + sqipcrm +} + if [ $# -lt 1 ]; then Usage exit 1 @@ -108,15 +114,26 @@ cd $TRAF_HOME/monitor/test echo $PWD if [ "$cluster" = "-cluster" ]; then - ckillall + echo ************ Executing test in cluster environment ************ else if [ "$virtual" = "-virtual" ]; then - ckillall + echo ************ Executing test in virtual environment ************ else Usage exit 1 fi fi +if [ "$cluster" = "-cluster" ]; then + pdsh $MY_NODES "rm -f $MPI_TMPDIR/monitor.port.*" + pdsh $MY_NODES "rm $PWD/core* $PWD/*.lst $PWD/stdout_*" +else + rm -f $MPI_TMPDIR/monitor.port.* + rm core* *.lst stdout_* + # Establish SQ virtual cluster parameters + export SQ_VIRTUAL_NODES=6 + export SQ_VIRTUAL_NID=0 +fi + if [ ! -z "$SQ_DTM_PERSISTENT_PROCESS" ]; then let dtm_persistent_process=`echo $SQ_DTM_PERSISTENT_PROCESS` else @@ -130,21 +147,6 @@ export SQ_SHELL_NOCWD=1 #export SQ_LOCAL_IO_SHELL_TRACE=1 # -# Cleanup -# -sqipcrm -if [ "$cluster" = "-cluster" ]; then - pdsh $MY_NODES "rm -f $MPI_TMPDIR/monitor.port.*" - pdsh $MY_NODES "rm $PWD/core* $PWD/*.lst $PWD/stdout_*" -else - rm -f $MPI_TMPDIR/monitor.port.* - rm core* *.lst stdout_* - # Establish SQ virtual cluster parameters - export SQ_VIRTUAL_NODES=6 - export SQ_VIRTUAL_NID=0 -fi - -# # Setup up monitor configuration # if [ "$nogen" = "-nogen" ]; then @@ -161,13 +163,23 @@ if ( [ $test '==' -1 ] || [ $test '==' 1 ] ); then echo "***" echo "*** Executing Child Exit test" echo "***" +Cleanup shell <<eof startup + delay 3 exec {name \$CTRLR, nid 0, out $TRAF_HOME/monitor/test/childExit.lst} childExitCtrl $trace + delay 3 + ps + !shutdown + exit +eof +if ( [ $test '==' -1 ] ); then +shell <<eof shutdown exit eof - sleep 1 +fi + sleep 5 cstat -h if [ "$cluster" = "-cluster" ]; then pdsh $MY_NODES grep PASSED $PWD/childExit.lst @@ -182,8 +194,10 @@ if ( [ $test '==' -1 ] || [ $test '==' 2 ] ); then echo "***" echo "*** Executing Multi-Node test" echo "***" +Cleanup shell <<eof startup + delay 3 ! General tests for monitor functionality. This includes ! Open, Close, NewProcess, ProcessInfo and sync node state ! between nodes. @@ -193,10 +207,18 @@ shell <<eof exec {nowait,pri 5,name \$SERV1} server $trace ps exec {pri 10,name \$CLIENT,nid 0, out $TRAF_HOME/monitor/test/multiNode.lst} client $trace + delay 3 + !shutdown + ps + exit +eof +if ( [ $test '==' -1 ] ); then +shell <<eof shutdown exit eof - sleep 1 +fi + sleep 5 cstat -h if [ "$cluster" = "-cluster" ]; then pdsh $MY_NODES grep PASSED $PWD/multiNode.lst @@ -211,13 +233,23 @@ fi echo "***" echo "*** Executing Registry test" echo "***" +Cleanup shell <<eof startup + delay 3 exec {name \$CTRLR, nid 0, out $TRAF_HOME/monitor/test/regTest.lst} regTestCtrl $trace + delay 3 + ps + !shutdown + exit +eof +if ( [ $test '==' -1 ] ); then +shell <<eof shutdown exit eof - sleep 1 +fi + sleep 5 cstat -h if [ "$cluster" = "-cluster" ]; then pdsh $MY_NODES grep PASSED $PWD/regTest.lst @@ -232,8 +264,10 @@ if ( [ $test '==' -1 ] || [ $test '==' 4 ] ); then echo "***" echo "*** Executing Death Notice test" echo "***" - shell <<eof +Cleanup +shell <<eof startup + delay 3 ! Test to register and cancel process death ! notices from non-parent process. ! @@ -246,10 +280,18 @@ if ( [ $test '==' -1 ] || [ $test '==' 4 ] ); then ! To enable tracing add "-t" argument to the end of the "exec" line ! exec {name \$DEATH, nid 0, out $TRAF_HOME/monitor/test/deathNotice.lst} deathNotice $trace + delay 3 + ps + !shutdown + exit +eof +if ( [ $test '==' -1 ] ); then +shell <<eof shutdown exit eof - sleep 1 +fi + sleep 5 cstat -h if [ "$cluster" = "-cluster" ]; then pdsh $MY_NODES grep PASSED $PWD/deathNotice.lst @@ -260,20 +302,31 @@ eof fi fi -if ( [ $test '==' -1 ] || [ $test '==' 5 ] ); then +#if ( [ $test '==' -1 ] || [ $test '==' 5 ] ); then +if ( [ $test '==' 5 ] ); then if [ "$cluster" = "-cluster" ]; then echo "***" echo "*** Executing Persistent Process cluster test" echo "***" +Cleanup shell <<eof startup + delay 3 down 2 ! delay 15 exec {name \$PPROC, nid 0, out $TRAF_HOME/monitor/test/persistentProc.lst} persistentProc $trace + delay 3 + ps + !shutdown + exit +eof +if ( [ $test '==' -1 ] ); then +shell <<eof shutdown exit eof - sleep 1 +fi + sleep 5 cstat -h pdsh $MY_NODES grep PASSED $PWD/persistentProc.lst pdsh $MY_NODES grep FAILED $PWD/persistentProc.lst @@ -281,31 +334,53 @@ eof echo "***" echo "*** Executing Persistent Process test" echo "***" +Cleanup shell <<eof startup + delay 3 exec {name \$PPROC, nid 0, out $TRAF_HOME/monitor/test/persistentProc.lst} persistentProc $trace + delay 3 + ps + !shutdown + exit +eof +if ( [ $test '==' -1 ] ); then +shell <<eof shutdown exit eof - sleep 1 +fi + sleep 5 cstat -h grep PASSED $PWD/persistentProc.lst grep FAILED $PWD/persistentProc.lst fi fi +#if ( [[ $dtm_persistent_process == "1" ]] && +# ([ $test '==' -1 ] || [ $test '==' 6 ]) ); then if ( [[ $dtm_persistent_process == "1" ]] && - ([ $test '==' -1 ] || [ $test '==' 6 ]) ); then + ([ $test '==' 6 ]) ); then echo "***" echo "*** Executing DTM Process test" echo "***" +Cleanup shell <<eof startup + delay 3 exec {name \$DTMCTRL, nid 0, out $TRAF_HOME/monitor/test/dtmTest.lst} dtmCtrl $trace + delay 3 + ps + !shutdown + exit +eof +if ( [ $test '==' -1 ] ); then +shell <<eof shutdown exit eof - sleep 1 +fi + sleep 5 cstat -h if [ "$cluster" = "-cluster" ]; then pdsh $MY_NODES grep PASSED $PWD/dtmTest.lst @@ -320,17 +395,28 @@ else fi fi -if ( [ $test '==' -1 ] || [ $test '==' 7 ] ); then +#if ( [ $test '==' -1 ] || [ $test '==' 7 ] ); then +if ( [ $test '==' 7 ] ); then echo "***" echo "*** Executing SPX Process test" echo "***" +Cleanup shell <<eof startup + delay 3 exec {name \$SPXCTRL, nid 0, out $TRAF_HOME/monitor/test/spxTest.lst} spxCtrl $trace + delay 3 + ps + !shutdown + exit +eof +if ( [ $test '==' -1 ] ); then +shell <<eof shutdown exit eof - sleep 1 +fi + sleep 5 cstat -h if [ "$cluster" = "-cluster" ]; then pdsh $MY_NODES grep PASSED $PWD/spxTest.lst @@ -345,12 +431,23 @@ if ( [ $test '==' -1 ] || [ $test '==' 8 ] ); then echo "***" echo "*** Executing Process Create test" echo "***" +Cleanup shell <<eof startup + delay 3 exec {name \$PCRE8, nid 0, out $TRAF_HOME/monitor/test/procCreate.lst} procCreate $trace -x + delay 3 + ps + !shutdown + exit +eof +if ( [ $test '==' -1 ] ); then +shell <<eof + shutdown exit eof - sleep 1 +fi + sleep 5 cstat -h if [ "$cluster" = "-cluster" ]; then pdsh $MY_NODES grep PASSED $PWD/procCreate.lst @@ -365,15 +462,24 @@ if ( [ $test '==' -1 ] || [ $test '==' 9 ] ); then echo "***" echo "*** Executing Process Creates Node down before startup test" echo "***" +Cleanup shell <<eof startup + delay 3 exec {nowait, name \$PCRE8, nid 0, out $TRAF_HOME/monitor/test/nodeDown.lst} procCreate $trace -y delay 3 down 1 ! delay 10 + ps + !shutdown + exit +eof +if ( [ $test '==' -1 ] ); then +shell <<eof shutdown exit eof +fi sleep 10 cstat -h if [ "$cluster" = "-cluster" ]; then @@ -386,50 +492,80 @@ eof fi -#if ( [ $test '==' -1 ] || [ $test '==' 9 ] ); then -if ( [ $test '==' 9 ] ); then +#if ( [ $test '==' -1 ] || [ $test '==' 10 ] ); then +if ( [ $test '==' 10 ] ); then if [ "$cluster" = "-cluster" ]; then echo "***" echo "*** Executing TmSync cluster test (subtest 7 disabled until it's fixed)" echo "***" +Cleanup shell <<eof startup + delay 3 exec {nowait, nid 0, name \$CTRLR, out $TRAF_HOME/monitor/test/tmSync.lst} tmSyncCtrl -n 1,3,4,5,6 $trace wait $CTRLR + delay 3 + ps + !shutdown + exit +eof +if ( [ $test '==' -1 ] ); then +shell <<eof shutdown exit eof - sleep 1 +fi + sleep 5 cstat -h pdsh $MY_NODES grep PASSED $PWD/tmSync.lst pdsh $MY_NODES grep FAILED $PWD/tmSync.lst echo "***" echo "*** Executing TmSync cluster test 10" echo "***" +Cleanup shell <<eof startup + delay 3 exec {nowait, nid 0, name \$CTRLR, out $TRAF_HOME/monitor/test/tmSync8.lst} tmSyncCtrl -n 8 $trace wait $CTRLR + delay 3 + ps + !shutdown + exit +eof +if ( [ $test '==' -1 ] ); then +shell <<eof shutdown exit eof - sleep 1 +fi + sleep 5 cstat -h pdsh $MY_NODES grep PASSED $PWD/tmSync9.lst pdsh $MY_NODES grep FAILED $PWD/tmSync9.lst echo "***" echo "*** Executing TmSync cluster test 10" echo "***" +Cleanup shell <<eof startup + delay 3 down 2 ! delay 15 exec {nowait, nid 0, name \$CTRLR, out $TRAF_HOME/monitor/test/tmSync10.lst} tmSyncCtrl -n 10 $trace wait $CTRLR + delay 3 + ps + !shutdown + exit +eof +if ( [ $test '==' -1 ] ); then +shell <<eof shutdown exit eof - sleep 1 +fi + sleep 5 cstat -h pdsh $MY_NODES grep PASSED $PWD/tmSync10.lst pdsh $MY_NODES grep FAILED $PWD/tmSync10.lst @@ -437,19 +573,29 @@ eof echo "***" echo "*** Executing TmSync test" echo "***" +Cleanup shell <<eof startup + delay 3 exec {nowait, nid 0, name \$CTRLR, out $TRAF_HOME/monitor/test/tmSync.lst} tmSyncCtrl -n 3,4,5,6,7 $trace wait $CTRLR + delay 3 + ps + !shutdown + exit +eof +if ( [ $test '==' -1 ] ); then +shell <<eof shutdown exit eof +fi # Reset SQ virtual cluster parameters unset SQ_VIRTUAL_NODES unset SQ_VIRTUAL_NID fi - sleep 1 + sleep 5 cstat -h if [ "$cluster" = "-cluster" ]; then pdsh $MY_NODES grep PASSED $PWD/tmSync.lst @@ -473,12 +619,12 @@ if ( [ $test '==' -1 ] ); then pdsh $MY_NODES grep FAILED $PWD/regTest.lst pdsh $MY_NODES grep PASSED $PWD/deathNotice.lst pdsh $MY_NODES grep FAILED $PWD/deathNotice.lst - pdsh $MY_NODES grep PASSED $PWD/persistentProc.lst - pdsh $MY_NODES grep FAILED $PWD/persistentProc.lst - pdsh $MY_NODES grep PASSED $PWD/dtmTest.lst - pdsh $MY_NODES grep FAILED $PWD/dtmTest.lst - pdsh $MY_NODES grep PASSED $PWD/spxTest.lst - pdsh $MY_NODES grep FAILED $PWD/spxTest.lst +# pdsh $MY_NODES grep PASSED $PWD/persistentProc.lst +# pdsh $MY_NODES grep FAILED $PWD/persistentProc.lst +# pdsh $MY_NODES grep PASSED $PWD/dtmTest.lst +# pdsh $MY_NODES grep FAILED $PWD/dtmTest.lst +# pdsh $MY_NODES grep PASSED $PWD/spxTest.lst +# pdsh $MY_NODES grep FAILED $PWD/spxTest.lst pdsh $MY_NODES grep PASSED $PWD/procCreate.lst pdsh $MY_NODES grep FAILED $PWD/procCreate.lst pdsh $MY_NODES grep PASSED $PWD/nodeDown.lst @@ -498,12 +644,12 @@ if ( [ $test '==' -1 ] ); then grep FAILED $PWD/regTest.lst grep PASSED $PWD/deathNotice.lst grep FAILED $PWD/deathNotice.lst - grep PASSED $PWD/persistentProc.lst - grep FAILED $PWD/persistentProc.lst - grep PASSED $PWD/dtmTest.lst - grep FAILED $PWD/dtmTest.lst - grep PASSED $PWD/spxTest.lst - grep FAILED $PWD/spxTest.lst +# grep PASSED $PWD/persistentProc.lst +# grep FAILED $PWD/persistentProc.lst +# grep PASSED $PWD/dtmTest.lst +# grep FAILED $PWD/dtmTest.lst +# grep PASSED $PWD/spxTest.lst +# grep FAILED $PWD/spxTest.lst grep PASSED $PWD/procCreate.lst grep FAILED $PWD/procCreate.lst grep PASSED $PWD/nodeDown.lst http://git-wip-us.apache.org/repos/asf/trafodion/blob/abf3c429/core/sqf/monitor/test/sqconfig.monitor.virtual ---------------------------------------------------------------------- diff --git a/core/sqf/monitor/test/sqconfig.monitor.virtual b/core/sqf/monitor/test/sqconfig.monitor.virtual index f589944..8f6750c 100644 --- a/core/sqf/monitor/test/sqconfig.monitor.virtual +++ b/core/sqf/monitor/test/sqconfig.monitor.virtual @@ -24,5 +24,6 @@ _virtualnodes 6 end node begin name-server -nodes=0,1 +nodes=0 +#nodes=0,1,2,3,4,5 end name-server http://git-wip-us.apache.org/repos/asf/trafodion/blob/abf3c429/core/sqf/sqenvcom.sh ---------------------------------------------------------------------- diff --git a/core/sqf/sqenvcom.sh b/core/sqf/sqenvcom.sh index d2713b6..b8f425c 100644 --- a/core/sqf/sqenvcom.sh +++ b/core/sqf/sqenvcom.sh @@ -686,16 +686,18 @@ export SQ_STARTUP=r # # Uncomment the next three environment variables #export SQ_MON_RUN_MODE=AGENT -#export MONITOR_COMM_PORT=23399 -#export MONITOR_SYNC_PORT=23398 +#export MONITOR_COMM_PORT=23390 +#export MONITOR_SYNC_PORT=23380 # # NAME-SERVER - to disable process replication and enable name-server # -# Uncomment the next four environment variables -#export NAMESERVER_ENABLE=1 -#export NS_COMM_PORT=23389 -#export NS_SYNC_PORT=23388 -#export NS_M2N_COMM_PORT=23379 +# Uncomment the next six environment variables +#export SQ_NAMESERVER_ENABLE=1 +#export NS_COMM_PORT=23370 +#export NS_SYNC_PORT=23360 +#export NS_M2N_COMM_PORT=23350 +#export MON2MON_COMM_PORT=23340 +#export MONITOR_COMM_PORT=23330 # Alternative logging capability in monitor export SQ_MON_ALTLOG=0 http://git-wip-us.apache.org/repos/asf/trafodion/blob/abf3c429/core/sqf/sql/scripts/monitor.env ---------------------------------------------------------------------- diff --git a/core/sqf/sql/scripts/monitor.env b/core/sqf/sql/scripts/monitor.env index bbf1ade..fc10c1f 100644 --- a/core/sqf/sql/scripts/monitor.env +++ b/core/sqf/sql/scripts/monitor.env @@ -21,20 +21,21 @@ # Uncomment MON_TRACE_ENABLE and specific tracing level to enable # Trafodion monitor process tracing -#MON_TRACE_ENABLE=1 -#MON_TRACE_EVLOG_MSG=1 -#MON_TRACE_INIT=1 -#MON_TRACE_RECOVERY=1 -#MON_TRACE_REQUEST=1 -#MON_TRACE_PROCESS=1 -#MON_TRACE_NOTICE=1 +MON_TRACE_ENABLE=1 +MON_TRACE_EVLOG_MSG=1 +MON_TRACE_INIT=1 +MON_TRACE_RECOVERY=1 +MON_TRACE_REQUEST=1 +MON_TRACE_PROCESS=1 +MON_TRACE_NOTICE=1 +MON_TRACE_NS=1 #MON_TRACE_SYNC=1 # Enable TC_TRACE_* along with MON_TRACE_TRAFCONFIG for more detail #MON_TRACE_TRAFCONFIG=1 #MON_TRACE_MLIO=1 -#MON_TRACE_REQUEST_DETAIL=1 -#MON_TRACE_PROCESS_DETAIL=1 +MON_TRACE_REQUEST_DETAIL=1 +MON_TRACE_PROCESS_DETAIL=1 #MON_TRACE_NOTICE_DETAIL=1 #MON_TRACE_SYNC_DETAIL=1 #MON_TRACE_MLIO_DETAIL=1 http://git-wip-us.apache.org/repos/asf/trafodion/blob/abf3c429/core/sqf/sql/scripts/pstat ---------------------------------------------------------------------- diff --git a/core/sqf/sql/scripts/pstat b/core/sqf/sql/scripts/pstat index 95daa3c..fe18a1b 100755 --- a/core/sqf/sql/scripts/pstat +++ b/core/sqf/sql/scripts/pstat @@ -51,7 +51,7 @@ process_metrics,pstartd,qpidd,qscom,qsmgr,qsmgr2,qsoffndr,qsrecev,\ qsrule,qssend,qsstats,qssync,se_metrics_aaa_delta,serevive,shell,\ snmp_protocol_adapter,sp_proxy,sp_wrapper,spqpid_p,sqcheck,sqlci,sqregck,\ sqstart,ssd_lun_metric_publish,ssd_lun_state_publish,ssd_metric_publish,\ -ssd_state_publish,tdm_arkcmp,tdm_arkesp,tdm_sqlc,tdm_udrserv,\ +ssd_state_publish,tdm_arkcmp,tdm_arkesp,tdm_sqlc,tdm_udrserv,trafns,\ textprotocoladapter,timer_pop_generator,tm,tmshutdown,universal_action_agent,\ universal_consumer,volrcov http://git-wip-us.apache.org/repos/asf/trafodion/blob/abf3c429/core/sqf/sql/scripts/sqconfig ---------------------------------------------------------------------- diff --git a/core/sqf/sql/scripts/sqconfig b/core/sqf/sql/scripts/sqconfig index 9d85ba6..a753549 100644 --- a/core/sqf/sql/scripts/sqconfig +++ b/core/sqf/sql/scripts/sqconfig @@ -23,6 +23,10 @@ begin node _virtualnodes 2 end node +#begin name-server +#nodes=0,1 +#end name-server + ############################################################################### # # Overflow directories for ssd and hdd.
