root/dmtcpmessagetypes.cpp

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. currentState
  2. setCurrentState
  3. theCheckpointInterval
  4. assertValid
  5. isValid
  6. poison
  7. value
  8. toString

   1 /****************************************************************************
   2  *   Copyright (C) 2006-2010 by Jason Ansel, Kapil Arya, and Gene Cooperman *
   3  *   jansel@csail.mit.edu, kapil@ccs.neu.edu, gene@ccs.neu.edu              *
   4  *                                                                          *
   5  *  This file is part of DMTCP.                                             *
   6  *                                                                          *
   7  *  DMTCP is free software: you can redistribute it and/or                  *
   8  *  modify it under the terms of the GNU Lesser General Public License as   *
   9  *  published by the Free Software Foundation, either version 3 of the      *
  10  *  License, or (at your option) any later version.                         *
  11  *                                                                          *
  12  *  DMTCP is distributed in the hope that it will be useful,                *
  13  *  but WITHOUT ANY WARRANTY; without even the implied warranty of          *
  14  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           *
  15  *  GNU Lesser General Public License for more details.                     *
  16  *                                                                          *
  17  *  You should have received a copy of the GNU Lesser General Public        *
  18  *  License along with DMTCP:dmtcp/src.  If not, see                        *
  19  *  <http://www.gnu.org/licenses/>.                                         *
  20  ****************************************************************************/
  21 
  22 #include "dmtcpmessagetypes.h"
  23 
  24 using namespace dmtcp;
  25 
  26 static WorkerState theState ( WorkerState::RUNNING );
  27 
  28 WorkerState WorkerState::currentState()
  29 {
  30   return theState;
  31 }
  32 
  33 void WorkerState::setCurrentState ( const WorkerState& theValue )
  34 {
  35   theState = theValue;
  36 }
  37 
  38 DmtcpMessage::DmtcpMessage ( DmtcpMessageType t /*= DMT_NULL*/ )
  39     :_msgSize ( sizeof ( DmtcpMessage ) )
  40     ,extraBytes ( 0 )
  41     ,type ( t )
  42     ,state ( WorkerState::currentState() )
  43     ,from ( UniquePid::ThisProcess() )
  44     ,virtualPid ( -1 )
  45     ,realPid ( -1 )
  46     ,keyLen ( 0 )
  47     ,valLen ( 0 )
  48     ,numPeers(0)
  49     ,isRunning(0)
  50     ,coordCmd('\0')
  51     ,coordCmdStatus(CoordCmdStatus::NOERROR)
  52     ,coordTimeStamp(0)
  53     ,theCheckpointInterval ( DMTCPMESSAGE_SAME_CKPT_INTERVAL )
  54 {
  55 //     struct sockaddr_storage _addr;
  56 //         socklen_t _addrlen;
  57   memset(&compGroup, 0, sizeof(compGroup));
  58   memset(&ipAddr, 0, sizeof ipAddr);
  59   memset(nsid, 0, sizeof nsid);
  60   strncpy ( _magicBits,DMTCP_MAGIC_STRING,sizeof ( _magicBits ) );
  61 }
  62 
  63 void DmtcpMessage::assertValid() const
  64 {
  65   JASSERT ( strcmp ( DMTCP_MAGIC_STRING,_magicBits ) == 0 )( _magicBits )
  66           .Text ( "read invalid message, _magicBits mismatch."
  67                   "  Did DMTCP coordinator die uncleanly?" );
  68   JASSERT ( _msgSize == sizeof ( DmtcpMessage ) ) ( _msgSize ) ( sizeof ( DmtcpMessage ) )
  69           .Text ( "read invalid message, size mismatch." );
  70 }
  71 
  72 bool DmtcpMessage::isValid() const
  73 {
  74   if (strcmp(DMTCP_MAGIC_STRING, _magicBits) == 0) {
  75     JNOTE("read invalid message, _magicBits mismatch."
  76           " Closing remote connection.") (_magicBits);
  77     return false;
  78   }
  79   if (_msgSize == sizeof(DmtcpMessage)) {
  80     JNOTE("read invalid message, size mismatch. Closing remote connection.")
  81       (_msgSize) (sizeof(DmtcpMessage));
  82     return false;
  83   }
  84   return true;
  85 }
  86 
  87 void DmtcpMessage::poison() { memset ( _magicBits,0,sizeof ( _magicBits ) ); }
  88 
  89 
  90 WorkerState::eWorkerState WorkerState::value() const
  91 {
  92   JASSERT(_state < _MAX) (_state);
  93   return (eWorkerState) _state;
  94 }
  95 
  96 ostream& dmtcp::operator << ( dmtcp::ostream& o, const WorkerState& s )
  97 {
  98   o << "WorkerState::";
  99   switch ( s.value() )
 100   {
 101 #define OSHIFTPRINTF(name) case WorkerState::name: o << #name; break;
 102 
 103       OSHIFTPRINTF ( UNKNOWN )
 104       OSHIFTPRINTF ( RUNNING )
 105       OSHIFTPRINTF ( SUSPENDED )
 106       OSHIFTPRINTF ( FD_LEADER_ELECTION )
 107       OSHIFTPRINTF ( NAME_SERVICE_DATA_REGISTERED)
 108       OSHIFTPRINTF ( DONE_QUERYING)
 109       OSHIFTPRINTF ( DRAINED )
 110       OSHIFTPRINTF ( RESTARTING )
 111       OSHIFTPRINTF ( CHECKPOINTED )
 112       OSHIFTPRINTF ( REFILLED )
 113     default:
 114       JASSERT ( false ) .Text ( "Invalid WorkerState" );
 115       o << (int)s.value();
 116   }
 117   return o;
 118 }
 119 
 120 const char* WorkerState::toString() const{
 121   switch(_state){
 122   case UNKNOWN:      return "UNKNOWN";
 123   case RUNNING:      return "RUNNING";
 124   case SUSPENDED:    return "SUSPENDED";
 125   case FD_LEADER_ELECTION:  return "FD_LEADER_ELECTION";
 126   case NAME_SERVICE_DATA_REGISTERED: return "NAME_SERVICE_DATA_REGISTERED";
 127   case DONE_QUERYING: return "DONE_QUERYING";
 128   case DRAINED:      return "DRAINED";
 129   case RESTARTING:   return "RESTARTING";
 130   case CHECKPOINTED: return "CHECKPOINTED";
 131   case REFILLED:     return "REFILLED";
 132   default:           return "???";
 133   }
 134 }
 135 
 136 ostream& dmtcp::operator << ( dmtcp::ostream& o, const DmtcpMessageType & s )
 137 {
 138   // o << "DmtcpMessageType: ";
 139   switch ( s )
 140   {
 141 #undef OSHIFTPRINTF
 142 #define OSHIFTPRINTF(name) case name: o << #name; break;
 143 
 144       OSHIFTPRINTF ( DMT_NULL )
 145       OSHIFTPRINTF ( DMT_NEW_WORKER )
 146       OSHIFTPRINTF ( DMT_NAME_SERVICE_WORKER )
 147       OSHIFTPRINTF ( DMT_RESTART_WORKER )
 148       OSHIFTPRINTF ( DMT_ACCEPT )
 149       OSHIFTPRINTF ( DMT_REJECT_NOT_RESTARTING )
 150       OSHIFTPRINTF ( DMT_REJECT_WRONG_COMP )
 151       OSHIFTPRINTF ( DMT_REJECT_NOT_RUNNING )
 152 
 153       OSHIFTPRINTF ( DMT_UPDATE_PROCESS_INFO_AFTER_FORK )
 154       OSHIFTPRINTF ( DMT_UPDATE_PROCESS_INFO_AFTER_INIT_OR_EXEC )
 155       OSHIFTPRINTF ( DMT_GET_CKPT_DIR )
 156       OSHIFTPRINTF ( DMT_GET_CKPT_DIR_RESULT )
 157       OSHIFTPRINTF ( DMT_UPDATE_CKPT_DIR )
 158 
 159       OSHIFTPRINTF ( DMT_USER_CMD )
 160       OSHIFTPRINTF ( DMT_USER_CMD_RESULT )
 161       OSHIFTPRINTF ( DMT_CKPT_FILENAME )
 162       OSHIFTPRINTF ( DMT_UNIQUE_CKPT_FILENAME )
 163 
 164       //OSHIFTPRINTF ( DMT_RESTART_PROCESS )
 165       //OSHIFTPRINTF ( DMT_RESTART_PROCESS_REPLY )
 166 
 167       OSHIFTPRINTF ( DMT_DO_SUSPEND )
 168       OSHIFTPRINTF ( DMT_DO_FD_LEADER_ELECTION )
 169       OSHIFTPRINTF ( DMT_DO_DRAIN )
 170       OSHIFTPRINTF ( DMT_DO_CHECKPOINT )
 171 #ifdef COORD_NAMESERVICE
 172       OSHIFTPRINTF ( DMT_DO_REGISTER_NAME_SERVICE_DATA )
 173       OSHIFTPRINTF ( DMT_DO_SEND_QUERIES )
 174 #endif
 175       OSHIFTPRINTF ( DMT_DO_REFILL )
 176       OSHIFTPRINTF ( DMT_DO_RESUME )
 177       OSHIFTPRINTF ( DMT_KILL_PEER )
 178 
 179 #ifdef COORD_NAMESERVICE
 180       OSHIFTPRINTF ( DMT_REGISTER_NAME_SERVICE_DATA )
 181       OSHIFTPRINTF ( DMT_REGISTER_NAME_SERVICE_DATA_SYNC )
 182       OSHIFTPRINTF ( DMT_REGISTER_NAME_SERVICE_DATA_SYNC_RESPONSE )
 183       OSHIFTPRINTF ( DMT_NAME_SERVICE_QUERY )
 184       OSHIFTPRINTF ( DMT_NAME_SERVICE_QUERY_RESPONSE )
 185 #endif
 186 
 187       OSHIFTPRINTF ( DMT_OK )
 188 
 189     default:
 190       JASSERT ( false ) ( s ) .Text ( "Invalid Message Type" );
 191       //o << s;
 192   }
 193   return o;
 194 }
 195 

/* [<][>][^][v][top][bottom][index][help] */