void masterconn_connected(masterconn *eptr) { double now; now = monotonic_seconds(); tcpnodelay(eptr->sock); eptr->mode = DATA; eptr->lastread = now; eptr->lastwrite = now; eptr->input_bytesleft = 8; eptr->input_startptr = eptr->input_hdr; eptr->input_end = 0; eptr->input_packet = NULL; eptr->inputhead = NULL; eptr->inputtail = &(eptr->inputhead); eptr->outputhead = NULL; eptr->outputtail = &(eptr->outputhead); eptr->conncnt++; eptr->masterversion = 0; eptr->hlstatus = 0; eptr->gotrndblob = 0; memset(eptr->rndblob,0,32); eptr->registerstate = UNREGISTERED; masterconn_sendregister(eptr); }
void masterconn_connected(serventry *eptr) { tcpnodelay(eptr->sock); eptr->mode=HEADER; eptr->inputpacket.next = NULL; eptr->inputpacket.bytesleft = 8; eptr->inputpacket.startptr = eptr->hdrbuff; eptr->inputpacket.packet = NULL; eptr->outputtail = &(eptr->outputhead); masterconn_sendregister(eptr); eptr->lastread = eptr->lastwrite = get_current_time(); }
void masterconn_connected(masterconn *eptr) { tcpnodelay(eptr->sock); eptr->mode=HEADER; eptr->inputpacket.next = NULL; eptr->inputpacket.bytesleft = 8; eptr->inputpacket.startptr = eptr->hdrbuff; eptr->inputpacket.packet = NULL; eptr->outputhead = NULL; eptr->outputtail = &(eptr->outputhead); masterconn_sendregister(eptr); masterconn_metadownloadinit(); eptr->lastread = eptr->lastwrite = main_time(); }
//向Master注册,调用masterconn_sendregister()封装注册packet //调用:masterconn_initconnect() void masterconn_connected(masterconn *eptr) { #ifdef BGJOBS eptr->jpool = job_pool_new(10,BGJOBSCNT,&(eptr->jobfd)); #endif tcpnodelay(eptr->sock); eptr->mode=HEADER; eptr->inputpacket.next = NULL; eptr->inputpacket.bytesleft = 8; eptr->inputpacket.startptr = eptr->hdrbuff; eptr->inputpacket.packet = NULL; eptr->outputhead = NULL; eptr->outputtail = &(eptr->outputhead); masterconn_sendregister(eptr); eptr->lastread = eptr->lastwrite = main_time(); }
void masterconn_connected(masterconn *eptr) { double now; now = monotonic_seconds(); tcpnodelay(eptr->sock); eptr->mode = DATA; eptr->lastread = now; eptr->lastwrite = now; eptr->input_bytesleft = 8; eptr->input_startptr = eptr->input_hdr; eptr->input_end = 0; eptr->input_packet = NULL; eptr->inputhead = NULL; eptr->inputtail = &(eptr->inputhead); eptr->outputhead = NULL; eptr->outputtail = &(eptr->outputhead); masterconn_sendregister(eptr); if (lastlogversion==0) { masterconn_metadownloadinit(); } }
void masterconn_master_ack(masterconn *eptr,const uint8_t *data,uint32_t length) { uint8_t atype; uint64_t metaid; uint16_t csid; if (length!=33 && length!=17 && length!=15 && length!=9 && length!=7 && length!=5 && length!=1) { syslog(LOG_NOTICE,"MATOCS_MASTER_ACK - wrong size (%"PRIu32"/1|5|7|9|15|17|33)",length); eptr->mode = KILL; return; } atype = get8bit(&data); if (atype==0) { csid = 0; metaid = 0; if (length>=5) { eptr->masterversion = get32bit(&data); } if (length>=9) { if (Timeout==0) { eptr->timeout = get16bit(&data); } else { data+=2; } csid = get16bit(&data); } if (length>=17) { metaid = get64bit(&data); if (metaid>0 && MetaID>0 && metaid!=MetaID) { // wrong MFS instance - abort syslog(LOG_WARNING,"MATOCS_MASTER_ACK - wrong meta data id. Can't connect to master"); eptr->registerstate = REGISTERED; // do not switch to register ver. 5 eptr->mode = KILL; return; } } if (csid>0 || metaid>0) { masterconn_setcsid(csid,metaid); } if (eptr->masterversion<VERSION2INT(2,0,0)) { if (eptr->registerstate != REGISTERED) { if (eptr->registerstate == INPROGRESS) { hdd_get_chunks_end(); } eptr->registerstate = REGISTERED; masterconn_sendchunksinfo(eptr); } } else { if (eptr->registerstate == UNREGISTERED || eptr->registerstate == WAITING) { hdd_get_chunks_begin(1); eptr->registerstate = INPROGRESS; if (eptr->masterversion>=VERSION2INT(2,1,0)) { masterconn_sendlabels(eptr); } } if (eptr->registerstate == INPROGRESS) { masterconn_sendnextchunks(eptr); } } } else if (atype==1 && length==5) { uint32_t mip; mip = get32bit(&data); if (mip) { // redirect to leader eptr->masterip = mip; eptr->new_register_mode = 3; if (eptr->registerstate == INPROGRESS) { hdd_get_chunks_end(); } eptr->registerstate = WAITING; #ifdef MFSDEBUG syslog(LOG_NOTICE,"masterconn: redirected to other master"); #endif } else { // leader not known - just reconnect eptr->masteraddrvalid = 0; syslog(LOG_NOTICE,"masterconn: follower doesn't know who is the leader, reconnect to another master"); } eptr->mode = CLOSE; } else if (atype==2 && (length==7 || length==15)) { #ifdef MFSDEBUG syslog(LOG_NOTICE,"masterconn: wait for acceptance"); #endif if (eptr->registerstate == INPROGRESS) { hdd_get_chunks_end(); } eptr->registerstate = WAITING; eptr->masterversion = get32bit(&data); if (Timeout==0) { eptr->timeout = get16bit(&data); } else { data+=2; } if (length>=15) { metaid = get64bit(&data); if (metaid>0 && MetaID>0 && metaid!=MetaID) { // wrong MFS instance - abort syslog(LOG_WARNING,"MATOCS_MASTER_ACK - wrong meta data id. Can't connect to master"); eptr->registerstate = REGISTERED; // do not switch to register ver. 5 eptr->mode = KILL; return; } } } else if (atype==3 && length==33) { #ifdef MFSDEBUG syslog(LOG_NOTICE,"masterconn: authorization needed"); #endif if (AuthCode==NULL) { syslog(LOG_WARNING,"MATOCS_MASTER_ACK - master needs authorization, but password was not defined"); eptr->registerstate = REGISTERED; // do not switch to register ver. 5 eptr->mode = KILL; return; } memcpy(eptr->rndblob,data,32); eptr->gotrndblob = 1; masterconn_sendregister(eptr); } else { syslog(LOG_NOTICE,"MATOCS_MASTER_ACK - bad type/length: %u/%u",atype,length); eptr->mode = KILL; } }