Example #1
0
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;

}
Example #2
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;
}