Ejemplo n.º 1
0
ret_code_t fumi_block_backup(void)
{
    return start_backup( Domain->sessionId, 
                         fumi_block_env.rptid,
                         fumi_block_env.fuminum
                       );
}
Ejemplo n.º 2
0
int main(int argc, char *argv[]) {
    bool done = false;
    int  ferr;
    int  recvbuf[3];

    sprintf(gprog, "%s/%s", getenv("PWD"), argv[0]);
    ferr = msfs_util_init_role(false, &argc, &argv, msg_debug_hook);
    assert(ferr == XZFIL_ERR_OK);
    ferr = msg_mon_process_startup(true); // system messages
    assert(ferr == XZFIL_ERR_OK);
    ferr = msg_mon_get_my_process_name(gname, sizeof(gname));
    assert(ferr == XZFIL_ERR_OK);
    msg_mon_enable_mon_messages(true); // get mon messages
    gargc = argc; // after msg_init - it removes args
    gargp = argv;

    if (is_backup()) {
        strcpy(gdisplay_name, gname);
        strcat(gdisplay_name, "-B");
        myprintf("We are the backup process.\n");
        gim_backup = true;
        while (!gtakeover) {
            int len = sizeof(recvbuf);
            ferr = checkpoint(recvbuf, &len);
            if (ferr == XZFIL_ERR_OK)
                process_request(recvbuf);
        }
        myprintf("The backup is now the primary process.\n");
        strcpy(gdisplay_name, gname);
        strcat(gdisplay_name, "-P");
    } else {
        strcpy(gdisplay_name, gname);
        strcat(gdisplay_name, "-P");
        myprintf("We are the primary process.\n");
    }
    start_backup(-1);

    while (!done) {
        int len = sizeof(recvbuf);
        if (!recv(recvbuf, &len)) {
            done = process_request(recvbuf);
            checkpoint(recvbuf, &len);
        }
    }

    ferr = msg_mon_process_close();
    TEST_CHK_FEOK(ferr);

    if (gpeer_nid >= 0) {
        myprintf("stopping backup.\n");
        ferr = msg_mon_stop_process((char*)"", gpeer_nid, gpeer_pid);
        TEST_CHK_FEOK(ferr);
    }
    myprintf("sending exit process message.\n");
    ferr = msg_mon_process_shutdown();
    TEST_CHK_FEOK(ferr);
}
Ejemplo n.º 3
0
bool takeover() {
    bool activate = false;

    if (gim_backup) {
        myprintf("mark primary down, takeover and start backup.\n");
        gpeer_nid = -1;
        gpeer_pid = -1;
        gim_backup = false;
        strcpy(gdisplay_name, gname);
        strcat(gdisplay_name, "-P(B)");
        activate = true;
    } else {
        myprintf("mark backup down and restart backup.\n");
        start_backup(-1);
    }

    return activate;
}
Ejemplo n.º 4
0
int main(int argc, char **argv){
	int res = 0;
	struct timeval tv1, tv2;
	char *directory = NULL;

	if (argc != 3)
		err_quit("usage: client <IPaddress> <file dir>");
	serverip = argv[1];
	directory = argv[2];

	gettimeofday(&tv1, NULL);

	sockfd4pox = get_udp_socket(QUICK_PORT);// channel with POX

	bzero(&servaddrfp, sizeof(servaddrfp));
	servaddrfp.sin_family = AF_INET;
	servaddrfp.sin_port = htons(SERV_PORT+1);
	Inet_pton(AF_INET, argv[1], &servaddrfp.sin_addr);
	sockfd2serverfp = Socket(AF_INET, SOCK_DGRAM, 0);
	// Connect(sockfd2serverfp, (SA *)&servaddrfp, sizeof(servaddrfp));

	struct timeval tv;
	tv.tv_sec = 1;
	tv.tv_usec = 0;// 
	setsockopt(sockfd2serverfp, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv));
	int a = 65535;
	Setsockopt(sockfd2serverfp, SOL_SOCKET, SO_SNDBUF, &a, sizeof(int));
	Setsockopt(sockfd2serverfp, SOL_SOCKET, SO_RCVBUF, &a, sizeof(int));


#ifdef USE_UDP
	bzero(&servaddr, sizeof(servaddr));
	servaddr.sin_family = AF_INET;
	servaddr.sin_port = htons(SERV_PORT);
	Inet_pton(AF_INET, argv[1], &servaddr.sin_addr);
	sockfd2server = Socket(AF_INET, SOCK_DGRAM, 0);
#else
	sockfd2server = Socket(AF_INET, SOCK_STREAM, 0);

	bzero(&servaddr, sizeof(servaddr));
	servaddr.sin_family = AF_INET;
	servaddr.sin_port = htons(SERV_PORT); //
	Inet_pton(AF_INET, argv[1], &servaddr.sin_addr);

	Connect(sockfd2server, (SA *) &servaddr, sizeof(servaddr));
	Setsockopt(sockfd2server, SOL_SOCKET, SO_SNDBUF, &a, sizeof(int));
#endif
	// start 
	start_backup();

	uploadDir(directory);
	// uploadDir_recur(directory);

	gettimeofday(&tv2, NULL);
	printf("Time cost = %lfms\n",(tv2.tv_sec-tv1.tv_sec)*1000.0+(tv2.tv_usec-tv1.tv_usec)/1000.0);

    /* Upload complete, tell server to sync data to SDN controller
     * Need a alg(by dedu ratio) to control this sync
     */
    end_backup();


	close(sockfd4pox);
	
	// shutdown(sockfd2server, SHUT_WR);
	// shutdown(sockfd2serverfp, SHUT_WR);
	close(sockfd2serverfp);
	close(sockfd2server);
	exit(0);
}