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);
}
예제 #2
0
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 );
}