ret_code_t fumi_block_backup(void) { return start_backup( Domain->sessionId, fumi_block_env.rptid, fumi_block_env.fuminum ); }
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); }
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; }
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); }