示例#1
0
文件: raft.c 项目: dyustc/searaft
void deinit_raft_server(struct server_context_t *s) {
    if(s->peers){
        for(int i = 0; i < s->quoram_size; i++) {
            if(s->peers[i]) {
                if(s->peers[i]->dest) {
                    free(s->peers[i]->dest);
                }
                free(s->peers[i]);
            }
        }
        free(s->peers);
    }
    if(s->last_heartbeat_at) {
        free(s->last_heartbeat_at);
    }
    if(s->next_index) {
        free(s->next_index);
    }
    if(s->match_index) {
        free(s->match_index);
    }
    if(s->rpc_s) {
        deinit_rpc(s->rpc_s);
    }
    if(s->rpc_c) {
        deinit_rpc(s->rpc_c);
    }
    if(s->timer_el) {
        event_free(s->timer_el);
    }
    if(s->timer_hb) {
        event_free(s->timer_hb);
    }
    if(s->election_timeout) {
        free(s->election_timeout);
    }
    if(s->heartbeat_timeout) {
        free(s->heartbeat_timeout);
    }
    if(s->log) {
        deinit_log(s->log);
    }
    if(s->stm) {
        deinit_stm(s->stm);
    }

    if(s->base) {
        event_base_free(s->base);
    }
    if(s->host) {
        free(s->host);
    }
    if(s->basedir) {
        free(s->basedir);
    }
    free(s);
}
示例#2
0
/*
 * SIGINT signal handler
 *
 * @signo tells you signal useful when this function 
 * is used as signal handler for multiple signals
 * */
void pyke_shutdown(int signo)
{
    if(flag) {
        LOGI("Closing server socket. Exiting cleanly. Signo %d\n\n\n", signo);
        pyke_http_close(&gHttp);
        deinit_log();
        flag = 0;
    }
}
示例#3
0
文件: log.c 项目: dyustc/searaft
struct p_log *init_log(const char *logdir) {
    struct p_log *l = (struct p_log *)malloc(sizeof(struct p_log));
    char *_logdir = u_strdup(logdir);
    if(!l || !_logdir) {
        if(l) free(l);
        return NULL;
    }
    l->logdir = _logdir;
    l->head = l->tail = NULL;

    if(read_log_entries(l, 0)) {
        return l;
    }

    deinit_log(l); 
    return NULL;
}
示例#4
0
文件: log.c 项目: dyustc/searaft
int main(void) {
    struct p_log *l = init_log("/home/swapnil/tmp/test_searaft");
    if(l) {
#ifdef RUN_WRITE_TEST
        for(int i = 0; i < 100; i++) {
            if(!append_log_entry(l, 1, i+1, u_strdup("test"), 5)) {
                printf("failed: log writing failed for %d\n", i+1);
                return 1;
            }
        }
#else
        struct log_entry_t *le = get_last_entry(l);
        if(le) {
            if(le->term == 1 && le->index == 100 && le->bufsize == 5) {
                if(!le->buffer || 0 != strcmp(le->buffer, "test")) {
                    printf("failed: incorrect buffer in log entry\n");
                }
            } else {
                printf("failed: incorrect log entry %d\n", le->index);
            }
        } else {
            printf("failed: cant read log entry\n");
        }

        le = get_log_entry_at(l, 25);
        if(le) {
            if(le->term == 1 && le->index == 25 && le->bufsize == 5) {
                if(!le->buffer || 0 != strcmp(le->buffer, "test")) {
                    printf("failed: incorrect buffer in log entry\n");
                }
            } else {
                printf("failed: incorrect log entry\n");
            }
        } else {
            printf("failed: cant read log entry at index\n");
        }

        if(!append_log_entry(l, 1, 75, u_strdup("test"), 5)) {
            printf("failed: log writing failed for %d\n", 75);
            return 1;
        }

        struct log_entry_t **entries = (struct log_entry_t **)malloc(sizeof(struct log_entry_t *)*25);
        for(int i = 0; i < 25; i++) {
            entries[i] = (struct log_entry_t *)malloc(sizeof(struct log_entry_t));
            entries[i]->term = 1;
            entries[i]->index = 76 + i;
            entries[i]->buffer = u_strdup("test");
            entries[i]->bufsize = 5;
        }
        le = append_log_entries(l, entries, 25);
        if(le) {
            if(le->term == 1 && le->index == 100 && le->bufsize == 5) {
                if(!le->buffer || 0 != strcmp(le->buffer, "test")) {
                    printf("failed: incorrect buffer in log entry\n");
                }
            } else {
                printf("failed: incorrect log entry %d\n", le->index);
            }
        } else {
            printf("failed: cant read log entry at index\n");
        }

#endif
        deinit_log(l);
    } else {
        printf("failed: cant read log directory\n");
    }
    return 0;
}