int dfa_reinitialize(DfaSet *dfaSet, char * localhost, Transition transitions[], int transition_count, State states[], state_name state_count) { dfaSet->lock = initlock(); dfaSet->states = states; dfaSet->state_count = state_count; dfaSet->transitions = transitions; dfaSet->transition_count = transition_count; if(init_network_broadcast(&(dfaSet->networkSetup), dfaSet->networkSetup.localport, localhost, dfaSet->networkSetup.broadcast_lists, dfaSet->networkSetup.broadcast_lists_count, dfaSet->networkSetup.broadcast_list_host_count) < 0) { return -1; } writelock(dfaSet->lock, 100); recover(dfaSet); writeunlock(dfaSet->lock); return 0; }
int main (int argc, char ** argv) { short port; DfaSet * dfaSet; TwoPCAppState * app_state; char * localhost; assert(argc >= 2); broadcast_lists[0] = star_nodes; broadcast_lists[1] = point_nodes; app_state = malloc(sizeof(TwoPCAppState)); if (!strcmp(argv[1], "c")) { assert(argc == 2); port = parse_port(broadcast_lists[0][0]); app_state->is_coordinator = TRUE; dfaSet = dfa_malloc_old(DFA_MACHINE_COUNT, port, broadcast_lists, broadcast_lists_count, broadcast_list_host_count); localhost = broadcast_lists[0][0]; } else if (!strcmp(argv[1], "s")) { int replica; assert(argc == 3); replica = atoi(argv[2]); port = parse_port(broadcast_lists[1][replica]); app_state->is_coordinator = FALSE; dfaSet = dfa_malloc_old(DFA_MACHINE_COUNT * 10, port, broadcast_lists, broadcast_lists_count, broadcast_list_host_count); localhost = broadcast_lists[1][replica]; }else { Message * m = malloc (sizeof (Message)); NetworkSetup * ns = malloc(sizeof(NetworkSetup)); init_network_broadcast(ns, 12345, "127.0.0.1:12345", broadcast_lists, broadcast_lists_count, broadcast_list_host_count); m->to_machine_id = atoi(argv[2]); m->from_machine_id = m->to_machine_id; m->type = NULL_STATE; send_message(ns, m, "bc:0"); return 0; } if(dfa_reinitialize(dfaSet, localhost, transitions_2pc, transition_count_2pc, states_2pc, state_count_2pc) < 0) { perror("dfa_reinitialize failed"); } app_state->init_xact_2pc = NULL; app_state->veto_or_prepare_2pc = &always_prepare; app_state->abort_2pc = &assert_false; app_state->commit_2pc = &print_commit; app_state->get_broadcast_group = &bc_group_1; app_state->tally_2pc = NULL; dfaSet->app_setup = app_state; if(!strcmp(argv[1], "c")) { main_loop(dfaSet); } else if (!strcmp(argv[1], "s")) { main_loop(dfaSet); } printf("transition_count_2pc=%d\n", transition_count_2pc); printf("transitions[0].initial_state=%d\n", transitions_2pc[0].remote_state); return 0; }