mirror of
https://gitee.com/milvus-io/milvus.git
synced 2026-01-07 19:31:51 +08:00
84 lines
2.5 KiB
C++
84 lines
2.5 KiB
C++
#include "MemTable.h"
|
|
#include "Log.h"
|
|
|
|
namespace zilliz {
|
|
namespace milvus {
|
|
namespace engine {
|
|
|
|
MemTable::MemTable(const std::string& table_id,
|
|
const std::shared_ptr<meta::Meta>& meta,
|
|
const Options& options) :
|
|
table_id_(table_id),
|
|
meta_(meta),
|
|
options_(options) {
|
|
|
|
}
|
|
|
|
Status MemTable::Add(VectorSource::Ptr& source) {
|
|
while (!source->AllAdded()) {
|
|
MemTableFile::Ptr currentMemTableFile;
|
|
if (!mem_table_file_list_.empty()) {
|
|
currentMemTableFile = mem_table_file_list_.back();
|
|
}
|
|
Status status;
|
|
if (mem_table_file_list_.empty() || currentMemTableFile->IsFull()) {
|
|
MemTableFile::Ptr newMemTableFile = std::make_shared<MemTableFile>(table_id_, meta_, options_);
|
|
status = newMemTableFile->Add(source);
|
|
if (status.ok()) {
|
|
mem_table_file_list_.emplace_back(newMemTableFile);
|
|
}
|
|
}
|
|
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) {
|
|
mem_table_file = mem_table_file_list_.back();
|
|
}
|
|
|
|
size_t MemTable::GetTableFileCount() {
|
|
return mem_table_file_list_.size();
|
|
}
|
|
|
|
Status MemTable::Serialize() {
|
|
for (auto memTableFile = mem_table_file_list_.begin(); memTableFile != mem_table_file_list_.end(); ) {
|
|
auto status = (*memTableFile)->Serialize();
|
|
if (!status.ok()) {
|
|
std::string errMsg = "MemTable::Serialize failed: " + status.ToString();
|
|
ENGINE_LOG_ERROR << errMsg;
|
|
return Status::Error(errMsg);
|
|
}
|
|
std::lock_guard<std::mutex> lock(mutex_);
|
|
memTableFile = mem_table_file_list_.erase(memTableFile);
|
|
}
|
|
return Status::OK();
|
|
}
|
|
|
|
bool MemTable::Empty() {
|
|
return mem_table_file_list_.empty();
|
|
}
|
|
|
|
const std::string& MemTable::GetTableId() const {
|
|
return table_id_;
|
|
}
|
|
|
|
size_t MemTable::GetCurrentMem() {
|
|
std::lock_guard<std::mutex> lock(mutex_);
|
|
size_t totalMem = 0;
|
|
for (auto& memTableFile : mem_table_file_list_) {
|
|
totalMem += memTableFile->GetCurrentMem();
|
|
}
|
|
return totalMem;
|
|
}
|
|
|
|
} // namespace engine
|
|
} // namespace milvus
|
|
} // namespace zilliz
|