⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 checkpointserverproto.c

📁 Path MPICH-V for MPICH the MPI Implementation
💻 C
📖 第 1 页 / 共 2 页
字号:
      }      else if(ret == 0)      {        printi("CS_proto", "Data channel connection closed for checkpoint %d:%d(%d) : %d data bytes read %d", group, rank, seq, dataread);        close(sdata);        sdata = -1;        continue;      }      if(datawriteCheckpointFile(f, protosize, dataread, buff, ret) != ret)      {        printw("Writting to checkpoint file %d:%d(%d) failed", group, rank, seq);        discardCheckpointFile(f, group, rank, seq);        printq("Aborting due to internat write failure");      }      dataread += ret;    }  }  if(read(sproto, buff, 1) != 1)  {    printe("Failure reading confirm message from %d:%d(%d)", group, rank, seq);    discardCheckpointFile(f, group, rank, seq);    printq("Aborting due to read failure (probably client failure)");  }  if(*buff == 'C')  {    if(read(sproto, buff, sizeof(int)) != sizeof(int))    {      printe("Failure reading confirm message from %d:%d(%d)", group, rank, seq);      discardCheckpointFile(f, group, rank, seq);      printq("Aborting due to read failure (probably client failure)");    }    datasize = ntohl(*((int *)buff));    while(dataread < datasize)    {      if(sdata == -1)      {        printw("Not enough data were available in data channel to finish reception of checkpoint %d:%d(%d) (read %d of %d)", group, rank, seq, dataread, datasize);        discardCheckpointFile(f, group, rank, seq);        printq("Aborting due to incomplete data (probably client or network failure)");      }      if((ret = read(sdata, buff, BUFFSIZE)) < 0)      {        printe("Read failed on data channel during reception of checkpoint %d:%d(%d)", group, rank, seq);        discardCheckpointFile(f, group, rank, seq);        printq("Aborting due to read failure (probably client failure)");      }      else if(ret == 0)      {        printi("CS_proto", "Data channel connection closed for checkpoint %d:%d(%d) : %d data bytes read %d", group, rank, seq, dataread);        close(sdata);        sdata = -1;        continue;      }      if(datawriteCheckpointFile(f, protosize, dataread, buff, ret) != ret)      {        printw("Writting to checkpoint file %d:%d(%d) failed", group, rank, seq);        discardCheckpointFile(f, group, rank, seq);        printq("Aborting due to internat write failure");      }      dataread += ret;      if(dataread > datasize)      {        printw("To much data were read from client %d:%d(%d) (read %d waited %d)", group, rank, seq, dataread, datasize);        discardCheckpointFile(f, group, rank, seq);        printq("Aborting due to inconsistancy in data size");      }    }    if(datasizewriteCheckpointFile(f, protosize, datasize) < 0)    {      printw("Could not write datasize=%d to image file %d:%d(%d)", datasize, group, rank, seq);      discardCheckpointFile(f, group, rank, seq);      printq("Aborting due to internal write failure");    }    confirmCheckpointFile(f, group, rank, seq);    printi("CS", "Sending bak confirmation ACK to client %d:%d(%d)", group, rank, seq);    if(write(sproto, &c, 1) != 1)    {      qerror("Failure sending confirmation ACK to client %d:%d(%d) (probably due to client failure), checkpoint saved", group, rank, seq);    }  }  else if(*buff == 'T')  {    printw("Client %d:%d(%d) is requesting a Third party confirm, not implemented", group, rank, seq);    discardCheckpointFile(f, group, rank, seq);    printq("Aborting due to call to non implemented failure");  }  else  {    printw("Client %d:%d(%d) sent an invalid confirm message \"%d\"", group, rank, seq, *buff);    discardCheckpointFile(f, group, rank, seq);    printq("Aborting due to invalid confirm message");  }  printi("CS", "Checkpoint %d finished for client %d:%d (protosize=%d datasize=%d)", seq, group, rank, protosize, datasize);  return 0;}static int del_checkpoint(int sproto, int sdata){  int group, rank, seq;  int minseq, maxseq;  switch(recv_del_ids(sproto, &group, &rank, &seq))  {    case DEL_UPTO :       printi("CS_del", "removing checkpoint files from repository up to %d:%d#%d %s", group, rank, seq);      if(delCheckpointFileUpto(group, rank, seq) < 0)      {        printi("CS_del", "Failure notification to client : files up to %d:d#%d deletion failed", group, rank, seq);        *buff = 'F';      }      else      {        printi("CS_del", "Success notification to client : files up to %d:%d#%d deleted", group, rank, seq);        *buff = 'A';      }      *((int *) (buff + sizeof(char))) = htonl(minseq);      *((int *) (buff + sizeof(char) + sizeof(int))) = htonl(maxseq);      if(write(sproto, buff, sizeof(char) + 2 * sizeof(int)) != (sizeof(char) + 2 * sizeof(int))) qerror("Sending del notification to client %d:%d#%d", group, rank, seq);      return 0;    case DEL_EXACT :       if(delCheckpointFileExact(group, rank, seq) < 0)       {        printi("CS_del", "Failure notification to client : file %d:%d#%d still exists", group, rank, seq);        *buff = 'F';      }      else      {        printi("CS_del", "Success notification to client : files up %d:%d#%d deleted", group, rank, seq);        *buff = 'A';      }      *((int *) (buff + sizeof(char))) = htonl(minseq);      *((int *) (buff + sizeof(char) + sizeof(int))) = htonl(maxseq);      if(write(sproto, buff, sizeof(char) + 2 * sizeof(int)) != (sizeof(char) + 2 * sizeof(int))) qerror("Sending del notification to client %d:%d#%d", group, rank, seq);      return 0;         default :       return -1;  }}/*int send_memory_channel_ack(char *memserv,int wid,int rankid){  int s;  struct sockaddr_in addr;  socklen_t saddr;  struct hostent *he;  int msg[2];  if((s = socket(AF_INET,SOCK_STREAM,0)) == -1) {printe("socket");return -1;}  if((he = gethostbyname(memserv)) == NULL) {herror("resolving channel memory server name");return -1;}  addr.sin_family = AF_INET;  memcpy(&addr.sin_addr.s_addr,he->h_addr,he->h_length);  addr.sin_port = htons(CHANNEL_MEM_PORT);  if(connect(s,(struct sockaddr *) &addr,sizeof(addr)) == -1) {printe("contacting channel memory server");return -1;}  wid = htonl(wid);  rankid = htonl(rankid);  msg[0]=wid;  msg[1]=rankid;  if(write(s,msg,sizeof(int) * 2) != (sizeof(int) * 2)) {printe("Sending wid and rankid info to memory server");return -1;}  if(read(s,msg,sizeof(int)) == -1) {printe("Receiving ACK from memory server");return -1;}  if(! msg[0]) {printi("CS-proto","Memory server sent failure notification");return -1;}  close(s);  return 0;}*/static int recv_type_message(int s){  int c = 0;  switch(read(s, &c, 1))  {    case 0 :      printi("CS_proto", "Request is empty, aborting");      return ERROR_SYNTAX;    case -1 :      printe("Request failed during type determination");      return ERROR_CO;  }  switch(c)  {    case 'G' :      printi("CS_proto", "Request is a GET");      return GET;    case 'P' :      printi("CS_proto", "Request is a PUT");      return PUT;    case 'D' :      printi("CS_proto", "Request is a DELETE");      return DEL;    default :      printi("CS_proto", "Type of request %c is invalid", c);      return ERROR_SYNTAX;  }}static int recv_get_ids(int s, int *wid, int *rankid, int *seq){  if(read(s, buff, sizeof(int) * 3) != (sizeof(int) * 3))  {    printe("error reading group, rank");    return -1;  }  *wid = ntohl(*((int *) buff));  *rankid = ntohl(*((int *) (buff + sizeof(int))));  *seq = ntohl(*((int *) (buff + 2 * sizeof(int))));  printi("CS_get", "Client wants %d:%d#%d checkpoint image", *wid, *rankid, *seq);  return 2;}static int recv_put_ids(int s,int *wid,int *rankid, int *seq, int *protosize){  if(read(s, buff, sizeof(int) * 4) != (sizeof(int) * 4))  {    printe("error reading group, rank, seq, protosize");    return -1;  }  *wid = ntohl(*((int *) buff));  *rankid = ntohl(*((int *)(buff + sizeof(int))));  *seq = ntohl(*((int *)(buff + 2 * sizeof(int))));  *protosize = ntohl(*((int *)(buff + 3 * sizeof(int))));  printi("CS", "Client %d:%d is sending checkpoint #%d, protocol implementation data is size %d", *wid, *rankid, *seq, *protosize);  return 0;}static char recv_del_ids(int s, int *group, int *rank, int *seq){  if(read(s, buff, sizeof(char) + 3 * sizeof(int)) != (sizeof(char) + 3 * sizeof(int)))  {    printe("error reading group, rank");    return -1;  }  *group = ntohl(*((int *) (buff + sizeof(char))));  *rank = ntohl(*((int *) (buff + sizeof(char) + sizeof(int))));  *seq = ntohl(*((int *) (buff + sizeof(char) + 2 * sizeof(int))));  if((*buff != DEL_EXACT) && (*buff != DEL_UPTO))   {    printw("Invalid protocol literal %c", *buff);    return -1;  }  printi("CS_del", "Client wants to delete %s %d:%d#%d checkpoint image", "U", *group, *rank, *seq);  return *buff;}static int qsend_protofailure(int s, int group, int rank){  char c = 'F';  if(write(s, &c, 1) != 1) qerror("Failed sending failure notification to client %d:%d", group, rank);  close(s);  printq("Failure notification sent to client %d:%d : aborting", group, rank);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -