tupid_t get_sub_dir_dt(void) { if(tup_sub_dir_dt < 0) { tup_sub_dir_dt = find_dir_tupid(get_sub_dir()); if(tup_sub_dir_dt < 0) { fprintf(stderr, "Error: Unable to find tupid for working directory: '%s'\n", get_sub_dir()); } } return tup_sub_dir_dt; }
Status Node::node_open(const std::string db_dir) { std::vector<std::string> dbs; if (OK != get_sub_dir(db_dir, &dbs)) { //printf("failed to open db:%s \n", db_dir.c_str()); return FILE_ERROR; } if (dbs.size() == 0) { //printf("have no db file\n"); return FILE_ERROR; } for (size_t i = 0; i < dbs.size(); ++i) { _dbs.push_back(new DBImpl()); if (_dbs[i] != NULL && OK != _dbs[i]->load(dbs[i])) { //printf("open %s failed\n", dbs[i].c_str()); return FILE_ERROR; } } // 升序排列 std::sort(_dbs.begin(), _dbs.end(), comp_db); Status s = _dbs_index.allocate(_dbs.size()); if (OK != s) { //printf("sort failed\n"); return s; } //_dbs_index.print(); for (size_t i = 0; i < _dbs.size() - 1; ++i) { // 检查各个db没有交集 if (_dbs[i]->get_last_key() >= _dbs[i + 1]->get_first_key()) { //printf("file %s is not in ascending order\n", dbs[i].c_str()); return FILE_ERROR; } _dbs_index.set_item(i, _dbs[i]->get_first_key(), i); } _dbs_index.set_item(_dbs.size() - 1, _dbs.back()->get_first_key(), _dbs.size() - 1); return OK; }