Ejemplo n.º 1
0
//Initialize timers
static int 
init_pro_fd_events() {
    
    // Send buffer for sending alive pings
    to_oracle = udp_sendbuf_new(PAXOS_PINGS_NET);
    if(to_oracle == NULL) {
        printf("Error creating proposer->oracle network sender\n");
        return PROPOSER_ERROR;
    }
    
    // Message receive event (from oracle)
    from_oracle = udp_receiver_new(PAXOS_ORACLE_NET);
    if (from_oracle == NULL) {
        printf("Error creating oracle->proposer network receiver\n");
        return PROPOSER_ERROR;
    }
    event_set(&oracle_msg_event, from_oracle->sock, EV_READ|EV_PERSIST, pro_handle_oracle_msg, NULL);
    event_add(&oracle_msg_event, NULL);

    //Set timer for sending alive pings
    evtimer_set(&fe_ping_event, pro_ping_failure_detector, NULL);
    evutil_timerclear(&fe_ping_interval);
    fe_ping_interval.tv_sec = (FAILURE_DETECTOR_PING_INTERVAL / 1000000);
    fe_ping_interval.tv_usec = (FAILURE_DETECTOR_PING_INTERVAL % 1000000);

    //Send the first alive ping
    pro_ping_failure_detector(0, 0, NULL);
    
    return 0;
}
Ejemplo n.º 2
0
//Initialize sockets and related events
static int 
init_pro_network() {
    
    // Send buffer for talking to acceptors
    to_acceptors = udp_sendbuf_new(PAXOS_ACCEPTORS_NET);
    if(to_acceptors == NULL) {
        printf("Error creating proposer->acceptors network sender\n");
        return PROPOSER_ERROR;
    }
    
    // Message receive event
    for_proposer = udp_receiver_new(PAXOS_PROPOSERS_NET);
    if (for_proposer == NULL) {
        printf("Error creating proposer network receiver\n");
        return PROPOSER_ERROR;
    }
    event_set(&proposer_msg_event, for_proposer->sock, EV_READ|EV_PERSIST, pro_handle_newmsg, NULL);
    event_add(&proposer_msg_event, NULL);
    
    return 0;
}
Ejemplo n.º 3
0
int main (int argc, char const *argv[])
{
    argc = argc;
    argv = argv;

    //Init oracle sender and receiver
    to_proposers = udp_sendbuf_new(PAXOS_ORACLE_NET);
    if(to_proposers == NULL) {
        printf("Error creating oracle->proposers network sender\n");
        return -1;
    }

    for_oracle = udp_receiver_blocking_new(PAXOS_PINGS_NET);
    if (for_oracle == NULL) {
        printf("Error creating proposers->oracle network receiver\n");
        return -1;
    }

    init_oracle_state();

    oracle_lock();

    // Starts 3 threads sharing a global lock
    //Thread 1: periodically send current leader
    pthread_create(&announce_thread, NULL, broadcast_current_leader, NULL);
    //Thread 2: Receive alive_ping from proposers
    pthread_create(&get_pings_thread, NULL, get_proposer_pings, NULL);
    //Thread 3: Ask the user to force a particular leader
    pthread_create(&user_input_thread, NULL, get_user_input, NULL);

    oracle_unlock();

    while(1) {
        sleep(10);
    }
    return 0;
}