Ejemplo n.º 1
0
/** Check timestamp and make checkpoint if timestamp is large enough.
  * @returns error code and flag that indicates whether or not new checkpoint is created
  */
std::tuple<aku_Status, int> Sequencer::check_timestamp_(aku_Timestamp ts) {
    aku_Status error_code = AKU_SUCCESS;
    if (ts < top_timestamp_) {
        auto delta = top_timestamp_ - ts;
        if (delta > window_size_) {
            error_code = AKU_ELATE_WRITE;
        }
        return make_tuple(error_code, 0);
    }
    auto point = get_checkpoint_(ts);
    int flag = 0;
    if (point > checkpoint_) {
        // Create new checkpoint
        flag = make_checkpoint_(point);
    }
    top_timestamp_ = ts;
    return make_tuple(error_code, flag);
}
Ejemplo n.º 2
0
/** Check timestamp and make checkpoint if timestamp is large enough.
  * @returns error code and flag that indicates whether or not new checkpoint is created
  */
std::tuple<int, int> Sequencer::check_timestamp_(aku_Timestamp ts) {
    int error_code = AKU_SUCCESS;
    if (ts < top_timestamp_) {
        auto delta = top_timestamp_ - ts;
        if (delta > window_size_) {
            error_code = AKU_ELATE_WRITE;
        }
        return make_tuple(error_code, 0);
    }
    auto point = get_checkpoint_(ts);
    int flag = 0;
    if (point > checkpoint_) {
        // Create new checkpoint
        flag = make_checkpoint_(point);
        if (flag % 2 == 0) {
            // Previous checkpoint not completed
            error_code = AKU_EBUSY;
        }
    }
    top_timestamp_ = ts;
    return make_tuple(error_code, flag);
}