MemTable.cpp 1.9 KB
Newer Older
Z
zhiru 已提交
1 2 3 4 5 6 7 8
#include "MemTable.h"
#include "Log.h"

namespace zilliz {
namespace milvus {
namespace engine {

MemTable::MemTable(const std::string& table_id,
Z
zhiru 已提交
9 10
                   const std::shared_ptr<meta::Meta>& meta,
                   const Options& options) :
Z
zhiru 已提交
11
                   table_id_(table_id),
Z
zhiru 已提交
12 13
                   meta_(meta),
                   options_(options) {
Z
zhiru 已提交
14 15 16 17 18 19

}

Status MemTable::Add(VectorSource::Ptr& source) {
    while (!source->AllAdded()) {
        MemTableFile::Ptr currentMemTableFile;
Z
zhiru 已提交
20 21
        if (!mem_table_file_list_.empty()) {
            currentMemTableFile = mem_table_file_list_.back();
Z
zhiru 已提交
22 23
        }
        Status status;
Z
zhiru 已提交
24 25
        if (mem_table_file_list_.empty() || currentMemTableFile->IsFull()) {
            MemTableFile::Ptr newMemTableFile = std::make_shared<MemTableFile>(table_id_, meta_, options_);
Z
zhiru 已提交
26 27
            status = newMemTableFile->Add(source);
            if (status.ok()) {
Z
zhiru 已提交
28
                mem_table_file_list_.emplace_back(newMemTableFile);
Z
zhiru 已提交
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
            }
        }
        else {
            status = currentMemTableFile->Add(source);
        }
        if (!status.ok()) {
            std::string errMsg = "MemTable::Add failed: " + status.ToString();
            ENGINE_LOG_ERROR << errMsg;
            return Status::Error(errMsg);
        }
    }
    return Status::OK();
}

void MemTable::GetCurrentMemTableFile(MemTableFile::Ptr& mem_table_file) {
Z
zhiru 已提交
44
    mem_table_file = mem_table_file_list_.back();
Z
zhiru 已提交
45 46 47
}

size_t MemTable::GetStackSize() {
Z
zhiru 已提交
48 49 50 51 52 53 54 55 56 57 58 59 60
    return mem_table_file_list_.size();
}

Status MemTable::Serialize() {
    for (auto& memTableFile : mem_table_file_list_) {
        auto status = memTableFile->Serialize();
        if (!status.ok()) {
            std::string errMsg = "MemTable::Serialize failed: " + status.ToString();
            ENGINE_LOG_ERROR << errMsg;
            return Status::Error(errMsg);
        }
    }
    return Status::OK();
Z
zhiru 已提交
61 62 63 64 65
}

} // namespace engine
} // namespace milvus
} // namespace zilliz