//##############################################################################
//##############################################################################
BerkeleyDB::range_changelist_t
BerkeleyDB::get_changelist()
{
    RANGE_LOG_FUNCTION();
    this->init_info();
    std::string buf = info_->get_record(record_type::GRAPH_META,
            "range_changelist");

    ChangeList changes;
    if(!buf.empty()) {
        changes.ParseFromString(buf);
    } else {
        return range_changelist_t();
    }

    range_changelist_t changelist;
    for (int c_idx = 0; c_idx < changes.change_size(); ++c_idx) {
        range_change_t c;
        std::time_t t;
        for (int i_idx = 0; i_idx < changes.change(c_idx).items_size(); ++i_idx) {
            auto item = changes.change(c_idx).items(i_idx);
            c[item.key()] = item.version();
            auto ts = changes.change(c_idx).timestamp();
            t = ts.seconds();
        }
        changelist.push_back(std::make_tuple(t, c_idx, c));
    }

    return changelist;
}
//##############################################################################
//##############################################################################
void
BerkeleyDB::set_wanted_version(uint64_t version) {
    RANGE_LOG_FUNCTION();
    this->init_info();

    std::string buf = info_->get_record(record_type::GRAPH_META,
            "range_changelist");
    ChangeList changes;
    if(!buf.empty()) {
        changes.ParseFromString(buf);
    }


    for (uint32_t c_idx = changes.change_size() - 1; c_idx >= version; --c_idx) {
        for (int i_idx = 0; i_idx < changes.change(c_idx).items_size(); ++i_idx) {
            auto item = changes.change(c_idx).items(i_idx);
            graph_wanted_version_map_[item.key()] = item.version();
        }
    }
}
示例#3
0
//##############################################################################
//##############################################################################
BerkeleyDBCXXDb::history_list_t
BerkeleyDBCXXDb::get_change_history() const
{
    RANGE_LOG_FUNCTION();
    ChangeList changes = this->read_changelist();
    history_list_t history_list;

    for (int v = 0; v < changes.change_size(); ++v) {
        ChangeList_Change v_change = changes.change(v);
        changelist_t clist;

        for (int i = 0; i < v_change.items_size(); ++i) {
            ChangeList_Change_Item item = v_change.items(i);
            record_type type = get_type_from_keyname(item.key());
            std::string key = item.key().substr(key_prefix(type).size());
            clist.push_back(std::make_tuple(type, key, item.version(), ""));
        }
        history_list.push_back(clist);
    }

    return history_list;
}