static
  skv_status_t
  Execute( skv_client_conn_manager_if_t * aConnMgrIF,
           skv_client_server_conn_t*      aConn, 
           skv_client_ccb_t*              aCCB )
  {
    char* RecvBuff = aCCB->GetRecvBuff();
    skv_server_to_client_cmd_hdr_t* Hdr = (skv_server_to_client_cmd_hdr_t *) RecvBuff;

    skv_client_command_state_t State = aCCB->mState;    
    skv_client_event_t  Event = Hdr->mEvent;

    BegLogLine( SKV_CLIENT_ACTIVE_BCAST_COMMAND_SM_LOG )
      << " skv_client_active_bcast_command_sm::Execute(): Entering... "
      << " State: " << skv_client_command_state_to_string( State )
      << " Event: " << skv_client_event_to_string( Event )
      << EndLogLine;

    skv_status_t status = SKV_SUCCESS;

    switch( State )
      {
      case SKV_CLIENT_COMMAND_STATE_IDLE:
      case SKV_CLIENT_COMMAND_STATE_DONE:
        {
          StrongAssertLogLine( 0 )
            << "skv_client_active_bcast_command_sm::Execute(): ERROR: Invalid State: "
            << " State: " << skv_client_command_state_to_string( State )
            << EndLogLine;

          break;
        }
      case SKV_CLIENT_COMMAND_STATE_WAITING_FOR_CMPL:
        {
          switch( Event )
            {
            case SKV_CLIENT_EVENT_CMD_COMPLETE:
              {
                skv_cmd_active_bcast_resp_t* Resp = 
                  (skv_cmd_active_bcast_resp_t *) RecvBuff;

                skv_c2s_active_broadcast_func_type_t FuncType = 
                  aCCB->mCommand.mCommandBundle.mCommandActiveBcast.mFuncType;

                int NodeId = 
                  aCCB->mCommand.mCommandBundle.mCommandActiveBcast.mNodeId;

                // Extract the handle to the appropriate index/cursor
                // manager

                switch( FuncType )
                  {
                  case SKV_ACTIVE_BCAST_DUMP_PERSISTENCE_IMAGE_FUNC_TYPE:
                    {
                      break;
                    }
                  default:
                    {
                      StrongAssertLogLine( 0 )
                        << "skv_client_active_bcast_command_sm::Execute(): ERROR: Invalid FuncType: "
                        << " FuncType: " << FuncType
                        << EndLogLine;

                      break;
                    }
                  }

                BegLogLine( SKV_CLIENT_ACTIVE_BCAST_COMMAND_SM_LOG )
                  << " skv_client_active_bcast_command_sm::Execute(): "
                  << " NodeId: " << NodeId
                  << " Resp->mServerCursorHandle: " << (void *) Resp->mServerHandle
                  << EndLogLine;                

                aCCB->mStatus = Resp->mStatus;

                BegLogLine( SKV_CLIENT_ACTIVE_BCAST_COMMAND_SM_LOG )
                  << "skv_client_active_bcast_command_sm::Execute(): In final action block"
                  << " status: " << skv_status_to_string( aCCB->mStatus )
                  << EndLogLine;

                Release( aConn, aCCB );

                aCCB->Transit( SKV_CLIENT_COMMAND_STATE_DONE );

                break;
              }
            case SKV_CLIENT_EVENT_ERROR:
              {
                // Server returned an error.
                skv_cmd_err_resp_t* ErrResp = (skv_cmd_err_resp_t *) RecvBuff;
                ErrResp->EndianConvert();

                BegLogLine( SKV_CLIENT_ACTIVE_BCAST_COMMAND_SM_LOG )
                  << "skv_client_active_bcast_command_sm::Execute(): ERROR: response from server: "
                  << " status: " << skv_status_to_string( ErrResp->mStatus )
                  << EndLogLine;

                aCCB->mStatus = ErrResp->mStatus;

                // Command is completed, release resources 
                int CommandOrd = aCCB->GetCmdOrd();
                aConn->ReleaseCmdOrdinal( CommandOrd );

                aCCB->Transit( SKV_CLIENT_COMMAND_STATE_DONE );

                break;
              }
            default:
              {
                StrongAssertLogLine( 0 )
                  << "skv_client_active_bcast_command_sm::Execute(): ERROR: Invalid Event: "
                  << " Event: " << skv_client_event_to_string( Event )
                  << EndLogLine;

                break;
              }
            }

          break;
        }
      default:
        {
          StrongAssertLogLine( 0 )
            << "skv_client_active_bcast_command_sm::Execute(): ERROR: Invalid State: "
            << " State: " << skv_client_command_state_to_string( State )
            << EndLogLine;

          break;
        }
      }

    BegLogLine( SKV_CLIENT_ACTIVE_BCAST_COMMAND_SM_LOG )
      << "skv_client_active_bcast_command_sm::Execute(): Leaving... "
      << EndLogLine;

    return status;	
  }
  static
  skv_status_t
  Execute( skv_client_conn_manager_if_t * aConnMgrIF,
           skv_client_server_conn_t*      aConn, 
           skv_client_ccb_t*              aCCB )
  {
    char* RecvBuff = aCCB->GetRecvBuff();
    skv_server_to_client_cmd_hdr_t* Hdr = (skv_server_to_client_cmd_hdr_t *) RecvBuff;

    skv_client_command_state_t State = aCCB->mState;    
    skv_client_event_t  Event = Hdr->mEvent;

    BegLogLine( SKV_CLIENT_RETRIEVE_COMMAND_SM_LOG )
      << "skv_client_retrieve_command_sm::Execute:: Entering... "
      << " State: " << skv_client_command_state_to_string( State )
      << " Event: " << skv_client_event_to_string( Event )
      << EndLogLine;

    skv_status_t status = SKV_SUCCESS;

    switch( State )
      {
      case SKV_CLIENT_COMMAND_STATE_IDLE:
      case SKV_CLIENT_COMMAND_STATE_DONE:
        {
          StrongAssertLogLine( 0 )
            << "skv_client_retrieve_command_sm::Execute:: ERROR:: Invalid State: "
            << " State: " << skv_client_command_state_to_string( State )
            << EndLogLine;

          break;
        }
      case SKV_CLIENT_COMMAND_STATE_WAITING_FOR_VALUE_TX_ACK:
        {
          switch( Event )
            {
            case SKV_CLIENT_EVENT_RDMA_WRITE_VALUE_ACK: 	      
              {
                // Operation has completed.
                skv_cmd_retrieve_value_rdma_write_ack_t* Ack = 
                  (skv_cmd_retrieve_value_rdma_write_ack_t *) RecvBuff;

                int retrievedSize = Ack->mValue.mValueSize;

                // if the server indicates that there's more data, then only get the amount that fits into user buffer!
                if( Ack->mStatus == SKV_ERRNO_VALUE_TOO_LARGE )
                  {
                  retrievedSize = aCCB->mCommand.mCommandBundle.mCommandRetrieve.mValueRequestedSize;
                  // Ack->mStatus = SKV_SUCCESS;
                  }

                // get value data out of response if flags indicate that it fit
                if( aCCB->mCommand.mCommandBundle.mCommandRetrieve.mFlags & SKV_COMMAND_RIU_RETRIEVE_VALUE_FIT_IN_CTL_MSG )
                  {
                    void* valueBuffer = aCCB->mCommand.mCommandBundle.mCommandRetrieve.mValueBufferRef.mValueAddr;

                    BegLogLine( SKV_CLIENT_RETRIEVE_COMMAND_SM_LOG )
                      << "skv_client_retrieve_command_sm::Execute(): about to copy retrieved data"
                      << " uBuf: " << (void*)valueBuffer
                      << " rBuf: " << (void*)Ack->mValue.mData
                      << " size: " << retrievedSize
                      << " CCB: " << (void*)aCCB
                      << " value: " << (void*)(*(uint64_t*)(Ack->mValue.mData))
#ifdef SKV_DEBUG_MSG_MARKER
                      << " msg: " << Ack->mHdr.mMarker
#endif
                      << EndLogLine;

                    memcpy( valueBuffer,
                            Ack->mValue.mData, 
                            retrievedSize );
                  }

                aCCB->mStatus = Ack->mStatus;

                // user wanted to know the actual retrieved size
                if( aCCB->mCommand.mCommandBundle.mCommandRetrieve.mValueRetrievedSize != NULL )
                  *aCCB->mCommand.mCommandBundle.mCommandRetrieve.mValueRetrievedSize = Ack->mValue.mValueSize;

                status = Release( aConn, aCCB );

                AssertLogLine( status == SKV_SUCCESS )
                  << "skv_client_retrieve_command_sm::Execute():: ERROR:: Release failed: "
                  << " status: " << status
                  << EndLogLine;

                aCCB->Transit( SKV_CLIENT_COMMAND_STATE_DONE );

                break;
              }
            case SKV_CLIENT_EVENT_ERROR:
              {
                // Server returned an error.
                skv_cmd_err_resp_t* ErrResp = (skv_cmd_err_resp_t *) RecvBuff;

                BegLogLine( SKV_CLIENT_RETRIEVE_COMMAND_SM_LOG )
                  << "skv_client_retrieve_command_sm::Execute:: ERROR response from server: "
                  << " status: " << ErrResp->mStatus
                  << EndLogLine;

                aCCB->mStatus = ErrResp->mStatus;

                status = Release( aConn, aCCB );

                AssertLogLine( status == SKV_SUCCESS )
                  << "skv_client_retrieve_command_sm::Execute():: ERROR:: Release failed: "
                  << " status: " << status
                  << EndLogLine;

                aCCB->Transit( SKV_CLIENT_COMMAND_STATE_DONE );

                break;
              }
            default:
              {
                StrongAssertLogLine( 0 )
                  << "skv_client_retrieve_command_sm::Execute:: ERROR:: Invalid State: "
                  << " State: " << skv_client_command_state_to_string( State )
                  << " Event: " << skv_client_event_to_string( Event )
                  << EndLogLine;

                break;
              }
            }

          break;
        }
      default:
        {
          StrongAssertLogLine( 0 )
            << "skv_client_retrieve_command_sm::ProcessCCB:: ERROR:: Invalid State: "
            << " State: " << skv_client_command_state_to_string( State )
            << EndLogLine;

          break;
        }
      }

    BegLogLine( SKV_CLIENT_RETRIEVE_COMMAND_SM_LOG )
      << "skv_client_retrieve_command_sm::Execute:: Leaving... "
      << EndLogLine;

    return status;
  }