//############################################################################## //############################################################################## uint64_t BerkeleyDBCXXDb::version() const { RANGE_LOG_FUNCTION(); ChangeList changes = this->read_changelist(); uint64_t version = changes.current_version(); auto txn = current_txn_.lock(); if(txn && txn->pending() > 0) { ++version; } return version; }
//############################################################################## //############################################################################## uint64_t BerkeleyDB::range_version() const { RANGE_LOG_FUNCTION(); this->init_info(); std::string buf = info_->get_record(record_type::GRAPH_META, "range_changelist"); if(!buf.empty()) { ChangeList changes; changes.ParseFromString(buf); return changes.current_version(); } return 0; }
//############################################################################## //############################################################################## void BerkeleyDB::add_new_range_version() { RANGE_LOG_FUNCTION(); this->init_info(); auto lock = info_->write_lock(record_type::GRAPH_META, "graph_list"); std::string buf = info_->get_record(record_type::GRAPH_META, "range_changelist"); ChangeList changes; if(!buf.empty()) { changes.ParseFromString(buf); } std::unordered_map<std::string, uint64_t> vermap; for (auto &gname : listGraphInstances()) { auto ginst = getGraphInstance(gname); vermap[gname] = ginst->version(); } ChangeList_Change *c = changes.add_change(); for(auto &verinfo : vermap) { auto item = c->add_items(); item->set_key(verinfo.first); item->set_version(verinfo.second); } struct timeval cur_time; gettimeofday(&cur_time, NULL); auto ts = c->mutable_timestamp(); ts->set_seconds(cur_time.tv_sec); ts->set_msec(cur_time.tv_usec / 1000); changes.set_current_version(changes.current_version() + 1); info_->commit_record(std::make_tuple(record_type::GRAPH_META, "range_changelist", 0, changes.SerializeAsString())); }