Esempio n. 1
0
int main (int argc, char ** argv) {
  int list_number;
  int node_number;


  DfaSet * dfaSet;
  short port;

  broadcast_lists[0] = star_nodes;
  broadcast_lists[1] = point_nodes;

  assert(argc == 3);

  list_number = atoi(argv[1]); 
  node_number = atoi(argv[2]);
  
  assert(list_number < broadcast_lists_count);
  assert(node_number < broadcast_list_host_count[list_number]);

  port = parse_port(broadcast_lists[list_number][node_number]);

  dfaSet = dfa_malloc_old(DFA_MACHINE_COUNT, port, broadcast_lists, 
			       broadcast_lists_count, broadcast_list_host_count);

  if(list_number == 0) {
    long ret;

    dfa_reinitialize(dfaSet, broadcast_lists[list_number][node_number], transitions_star, 2, states_star, 2);

    spawn_main_thread(dfaSet);
    
    ret =(long) request(dfaSet, HUB_START, "bc:1", NULL_MACHINE, NULL);
    
    printf("run_request_returned: %lx\n", ret);
    
  } else {
    
    /*    init_point(dfaSet, node_number); */

    if(dfa_reinitialize(dfaSet, broadcast_lists[list_number][node_number], transitions_star, 2, states_star, 2) < 0) {
      printf("Error.  Exiting.\n");
    }
    main_loop(dfaSet);
  }

  return 0;
}
Esempio n. 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;
}
Esempio n. 3
0
int main (int argc, char** argv) {
  DfaSet * dfaSet = stasis_calloc(1, DfaSet);
  /*  callback_fcn* callbacks[MAX_MESSAGE_COUNT]; */
  
  Transition * transitions = stasis_malloc(3, Transition);

  State * states = stasis_malloc(MAX_STATE_COUNT, State);
  /*  StateMachine initial_sm1_stack; */
  StateMachine * initial_sm1;
  int transition_count;

  /*  dfaSet->monoTree.buffer = stasis_calloc(DFA_MACHINE_COUNT, StateMachine);
      dfa_initialize_new (dfaSet, 10001, DFA_MACHINE_COUNT); */
  /*   dfaSet->monoTree.buffer = stasis_calloc(100, StateMachine); */
  dfa_initialize_new (dfaSet, 10001, 100);
  
  /*  initial_sm1 = allocMachine(&(dfaSet->monoTree)); */
  initial_sm1 = allocSmash(dfaSet->smash);
  assert(NULL != initial_sm1);
  //(initial_sm1 = allocSmash(dfaSet->smash)));
  
  initial_sm1->message.from_machine_id = initial_sm1->machine_id;
  initial_sm1->message.to_machine_id   = NULL_MACHINE;
  initial_sm1->message.type = NULL_STATE;
  /* What to do here ???? 
     initial_sm1->message.machine_id = initial_sm2->machine_id;
     initial_sm2->message.machine_id = initial_sm1->machine_id;
  */
  
  printf("sm1 %ld\n", initial_sm1->machine_id);

  initial_sm1->current_state = START_STATE;
    
  initial_sm1->last_transition = (time_t)0;
  
  strcpy(initial_sm1->message_recipient, "127.0.0.1:10001");

  setSmash(dfaSet->smash, initial_sm1->machine_id);
  
  states[0].name      = FORKED;
  states[0].retry_fcn = NULL;
  states[0].abort_fcn = NULL;

  transitions[0].remote_state = NULL_STATE;
  transitions[0].pre_state    = NULL_STATE;
  transitions[0].post_state   = START_STATE;
  transitions[0].fcn_ptr      = &recv_new;
  transitions[0].force        = 0;

  transitions[1].remote_state = START_STATE;
  transitions[1].pre_state    = START_STATE;
  transitions[1].post_state   = FORKED;
  transitions[1].fcn_ptr      = &recv_ack;
  transitions[1].force        = 0;

  transitions[2].remote_state = START_STATE;
  transitions[2].pre_state    = FORKED;
  transitions[2].post_state   = NULL_STATE;
  transitions[2].fcn_ptr      = &recv_ack;
  transitions[2].force        = 0;

  /* Needed for bootstrap... */

  transitions[3].remote_state = START_STATE;
  transitions[3].pre_state    = NULL_STATE;
  transitions[3].post_state   = START_STATE;
  transitions[3].fcn_ptr      = &recv_new;
  transitions[3].force        = 0;

  transition_count = 4;

  if(dfa_reinitialize(dfaSet, "127.0.0.1:10001", transitions, transition_count, states, 1) < 0) {
    printf("Error.  Exiting.\n");
  }

  main_loop(dfaSet);


  return 0;
}