void ReceiveAndRecoverSysCtrlNodeStates_(BackupSysCtrlNodeController* thiz, MySocket* sysCtrlNodeSocket) { Packet packet; char* stream; int length; printf("prepare to receive initialization data...\n"); while (!RecvPacket(sysCtrlNodeSocket, &packet)) { printf("receive initialization data failed, retrying...\n"); Sleep(1000); } RecvStream(sysCtrlNodeSocket, &packet, &stream, &length); SysCtrlNodeRecoverStateFromStream(thiz->server_, stream, length); printf("initialization finished.\n"); Free(stream); }
int main( int ac, char* av[] ) { int j; int Ret; char *pCell, *pPath, *pRas; int Fd; int Len; if( ac < 4 ) { usage(); exit( -1 ); } pCell = av[1]; j = atoi( av[2] ); pRas = av[3]; pPath = av[4]; Fd = ConnectAdmPort( pCell, j ); if( Fd < 0 ) { printf("No AdmPort[%s_%d]\n", pCell, j ); goto err; } /* * send RAS command */ PaxosSessionHead_t Any; MSGINIT( &Any, PAXOS_SESSION_ANY, 0, sizeof(Any)+sizeof(PFSRASReq_t)); Ret = SendStream( Fd, (char*)&Any, sizeof(Any) ); if( Ret ) { printf("ERR:SendStream[%s_%d] ANY\n", pCell, j ); goto err1; } PFSRASReq_t Req; PFSRASRpl_t Rpl; memset( &Req, 0, sizeof(Req)); MSGINIT( &Req, PFS_RAS, 0, sizeof(Req) ); strncpy( Req.r_Cell, pRas, sizeof(Req.r_Cell) ); strncpy( Req.r_Path, pPath, sizeof(Req.r_Path) ); Ret = SendStream( Fd, (char*)&Req, sizeof(Req) ); if( Ret ) { printf("ERR:SendStream[%s_%d]\n", pCell, j ); goto err1; } Len = sizeof(Rpl); Ret = RecvStream( Fd, (char*)&Rpl, Len ); if( Ret ) { printf("ERR:RecvStream[%s_%d]\n", pCell, j ); goto err1; } if( Rpl.r_Head.h_Error ) { errno = Rpl.r_Head.h_Error; perror(" "); } close( Fd ); exit( 0 ); err1: close( Fd ); err: exit( -1 ); }