//############################################################################## //############################################################################## 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(); } } }
//############################################################################## //############################################################################## 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; }