Пример #1
0
//##############################################################################
//##############################################################################
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;
}
Пример #2
0
//##############################################################################
//##############################################################################
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;
}
Пример #3
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()));
}