mirror of https://github.com/milvus-io/milvus.git
parent
a3935eed71
commit
52ac810a1f
|
@ -48,7 +48,7 @@ struct MXLogBufferHandler {
|
||||||
uint8_t buf_idx;
|
uint8_t buf_idx;
|
||||||
};
|
};
|
||||||
|
|
||||||
using BufferPtr = std::shared_ptr<char>;
|
using BufferPtr = std::shared_ptr<char[]>;
|
||||||
|
|
||||||
class MXLogBuffer {
|
class MXLogBuffer {
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -41,7 +41,8 @@ MXLogFileHandler::Load(char* buf, uint32_t data_offset) {
|
||||||
if (file_size > data_offset) {
|
if (file_size > data_offset) {
|
||||||
read_size = file_size - data_offset;
|
read_size = file_size - data_offset;
|
||||||
fseek(p_file_, data_offset, SEEK_SET);
|
fseek(p_file_, data_offset, SEEK_SET);
|
||||||
fread(buf, 1, read_size, p_file_);
|
auto ret = fread(buf, 1, read_size, p_file_);
|
||||||
|
__glibcxx_assert(ret == read_size);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return read_size;
|
return read_size;
|
||||||
|
@ -56,7 +57,8 @@ MXLogFileHandler::Load(char* buf, uint32_t data_offset, uint32_t data_size) {
|
||||||
}
|
}
|
||||||
|
|
||||||
fseek(p_file_, data_offset, SEEK_SET);
|
fseek(p_file_, data_offset, SEEK_SET);
|
||||||
fread(buf, 1, data_size, p_file_);
|
auto ret = fread(buf, 1, data_size, p_file_);
|
||||||
|
__glibcxx_assert(ret == data_size);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -100,8 +100,7 @@ read_index(const std::string& location) {
|
||||||
rp += bin_length;
|
rp += bin_length;
|
||||||
reader_ptr->seekg(rp);
|
reader_ptr->seekg(rp);
|
||||||
|
|
||||||
auto binptr = std::make_shared<uint8_t>();
|
std::shared_ptr<uint8_t[]> binptr(bin);
|
||||||
binptr.reset(bin);
|
|
||||||
load_data_list.Append(std::string(meta, meta_length), binptr, bin_length);
|
load_data_list.Append(std::string(meta, meta_length), binptr, bin_length);
|
||||||
delete[] meta;
|
delete[] meta;
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,7 @@ namespace milvus {
|
||||||
namespace knowhere {
|
namespace knowhere {
|
||||||
|
|
||||||
struct Binary {
|
struct Binary {
|
||||||
std::shared_ptr<uint8_t> data;
|
std::shared_ptr<uint8_t[]> data;
|
||||||
int64_t size = 0;
|
int64_t size = 0;
|
||||||
};
|
};
|
||||||
using BinaryPtr = std::shared_ptr<Binary>;
|
using BinaryPtr = std::shared_ptr<Binary>;
|
||||||
|
@ -47,7 +47,7 @@ class BinarySet {
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Append(const std::string& name, std::shared_ptr<uint8_t> data, int64_t size) {
|
Append(const std::string& name, std::shared_ptr<uint8_t[]> data, int64_t size) {
|
||||||
auto binary = std::make_shared<Binary>();
|
auto binary = std::make_shared<Binary>();
|
||||||
binary->data = data;
|
binary->data = data;
|
||||||
binary->size = size;
|
binary->size = size;
|
||||||
|
|
|
@ -25,8 +25,7 @@ FaissBaseBinaryIndex::SerializeImpl(const IndexType& type) {
|
||||||
|
|
||||||
MemoryIOWriter writer;
|
MemoryIOWriter writer;
|
||||||
faiss::write_index_binary(index, &writer);
|
faiss::write_index_binary(index, &writer);
|
||||||
auto data = std::make_shared<uint8_t>();
|
std::shared_ptr<uint8_t[]> data(writer.data_);
|
||||||
data.reset(writer.data_);
|
|
||||||
|
|
||||||
BinarySet res_set;
|
BinarySet res_set;
|
||||||
res_set.Append("BinaryIVF", data, writer.rp);
|
res_set.Append("BinaryIVF", data, writer.rp);
|
||||||
|
|
|
@ -28,8 +28,7 @@ FaissBaseIndex::SerializeImpl(const IndexType& type) {
|
||||||
|
|
||||||
MemoryIOWriter writer;
|
MemoryIOWriter writer;
|
||||||
faiss::write_index(index, &writer);
|
faiss::write_index(index, &writer);
|
||||||
auto data = std::make_shared<uint8_t>();
|
std::shared_ptr<uint8_t[]> data(writer.data_);
|
||||||
data.reset(writer.data_);
|
|
||||||
|
|
||||||
BinarySet res_set;
|
BinarySet res_set;
|
||||||
// TODO(linxj): use virtual func Name() instead of raw string.
|
// TODO(linxj): use virtual func Name() instead of raw string.
|
||||||
|
|
|
@ -35,22 +35,19 @@ IndexAnnoy::Serialize(const Config& config) {
|
||||||
KNOWHERE_THROW_MSG("index not initialize or trained");
|
KNOWHERE_THROW_MSG("index not initialize or trained");
|
||||||
}
|
}
|
||||||
|
|
||||||
BinarySet res_set;
|
|
||||||
auto metric_type_length = metric_type_.length();
|
auto metric_type_length = metric_type_.length();
|
||||||
uint8_t* p = new uint8_t[metric_type_length];
|
std::shared_ptr<uint8_t[]> metric_type(new uint8_t[metric_type_length]);
|
||||||
std::shared_ptr<uint8_t> metric_type(p, [](uint8_t* p) { delete[] p; });
|
memcpy(metric_type.get(), metric_type_.data(), metric_type_.length());
|
||||||
memcpy(p, metric_type_.data(), metric_type_.length());
|
|
||||||
|
|
||||||
uint8_t* p_dim = new uint8_t[sizeof(uint64_t)];
|
|
||||||
std::shared_ptr<uint8_t> dim_data(p_dim, [](uint8_t* p_dim) { delete[] p_dim; });
|
|
||||||
auto dim = Dim();
|
auto dim = Dim();
|
||||||
memcpy(p_dim, &dim, sizeof(uint64_t));
|
std::shared_ptr<uint8_t[]> dim_data(new uint8_t[sizeof(uint64_t)]);
|
||||||
|
memcpy(dim_data.get(), &dim, sizeof(uint64_t));
|
||||||
|
|
||||||
auto index_length = index_->get_index_length();
|
auto index_length = index_->get_index_length();
|
||||||
uint8_t* q = new uint8_t[index_length];
|
std::shared_ptr<uint8_t[]> index_data(new uint8_t[index_length]);
|
||||||
std::shared_ptr<uint8_t> index_data(q, [](uint8_t* q) { delete[] q; });
|
memcpy(index_data.get(), index_->get_index(), (size_t)index_length);
|
||||||
memcpy(q, index_->get_index(), (size_t)index_length);
|
|
||||||
|
|
||||||
|
BinarySet res_set;
|
||||||
res_set.Append("annoy_metric_type", metric_type, metric_type_length);
|
res_set.Append("annoy_metric_type", metric_type, metric_type_length);
|
||||||
res_set.Append("annoy_dim", dim_data, sizeof(uint64_t));
|
res_set.Append("annoy_dim", dim_data, sizeof(uint64_t));
|
||||||
res_set.Append("annoy_index_data", index_data, index_length);
|
res_set.Append("annoy_index_data", index_data, index_length);
|
||||||
|
|
|
@ -45,8 +45,7 @@ IndexHNSW::Serialize(const Config& config) {
|
||||||
try {
|
try {
|
||||||
MemoryIOWriter writer;
|
MemoryIOWriter writer;
|
||||||
index_->saveIndex(writer);
|
index_->saveIndex(writer);
|
||||||
auto data = std::make_shared<uint8_t>();
|
std::shared_ptr<uint8_t[]> data(writer.data_);
|
||||||
data.reset(writer.data_);
|
|
||||||
|
|
||||||
BinarySet res_set;
|
BinarySet res_set;
|
||||||
res_set.Append("HNSW", data, writer.total);
|
res_set.Append("HNSW", data, writer.total);
|
||||||
|
|
|
@ -44,8 +44,7 @@ NSG::Serialize(const Config& config) {
|
||||||
|
|
||||||
MemoryIOWriter writer;
|
MemoryIOWriter writer;
|
||||||
impl::write_index(index, writer);
|
impl::write_index(index, writer);
|
||||||
auto data = std::make_shared<uint8_t>();
|
std::shared_ptr<uint8_t[]> data(writer.data_);
|
||||||
data.reset(writer.data_);
|
|
||||||
|
|
||||||
BinarySet res_set;
|
BinarySet res_set;
|
||||||
res_set.Append("NSG", data, writer.total);
|
res_set.Append("NSG", data, writer.total);
|
||||||
|
|
|
@ -60,19 +60,19 @@ CPUSPTAGRNG::Serialize(const Config& config) {
|
||||||
snprintf(cstr, length, "%s", index_config.c_str());
|
snprintf(cstr, length, "%s", index_config.c_str());
|
||||||
|
|
||||||
BinarySet binary_set;
|
BinarySet binary_set;
|
||||||
auto sample = std::make_shared<uint8_t>();
|
std::shared_ptr<uint8_t[]> sample;
|
||||||
sample.reset(static_cast<uint8_t*>(index_blobs[0].Data()));
|
sample.reset(static_cast<uint8_t*>(index_blobs[0].Data()));
|
||||||
auto tree = std::make_shared<uint8_t>();
|
std::shared_ptr<uint8_t[]> tree;
|
||||||
tree.reset(static_cast<uint8_t*>(index_blobs[1].Data()));
|
tree.reset(static_cast<uint8_t*>(index_blobs[1].Data()));
|
||||||
auto graph = std::make_shared<uint8_t>();
|
std::shared_ptr<uint8_t[]> graph;
|
||||||
graph.reset(static_cast<uint8_t*>(index_blobs[2].Data()));
|
graph.reset(static_cast<uint8_t*>(index_blobs[2].Data()));
|
||||||
auto deleteid = std::make_shared<uint8_t>();
|
std::shared_ptr<uint8_t[]> deleteid;
|
||||||
deleteid.reset(static_cast<uint8_t*>(index_blobs[3].Data()));
|
deleteid.reset(static_cast<uint8_t*>(index_blobs[3].Data()));
|
||||||
auto metadata1 = std::make_shared<uint8_t>();
|
std::shared_ptr<uint8_t[]> metadata1;
|
||||||
metadata1.reset(static_cast<uint8_t*>(index_blobs[4].Data()));
|
metadata1.reset(static_cast<uint8_t*>(index_blobs[4].Data()));
|
||||||
auto metadata2 = std::make_shared<uint8_t>();
|
std::shared_ptr<uint8_t[]> metadata2;
|
||||||
metadata2.reset(static_cast<uint8_t*>(index_blobs[5].Data()));
|
metadata2.reset(static_cast<uint8_t*>(index_blobs[5].Data()));
|
||||||
auto x_cfg = std::make_shared<uint8_t>();
|
std::shared_ptr<uint8_t[]> x_cfg;
|
||||||
x_cfg.reset(static_cast<uint8_t*>((void*)cstr));
|
x_cfg.reset(static_cast<uint8_t*>((void*)cstr));
|
||||||
|
|
||||||
binary_set.Append("samples", sample, index_blobs[0].Length());
|
binary_set.Append("samples", sample, index_blobs[0].Length());
|
||||||
|
|
|
@ -52,8 +52,7 @@ GPUIDMAP::SerializeImpl(const IndexType& type) {
|
||||||
faiss::write_index(host_index, &writer);
|
faiss::write_index(host_index, &writer);
|
||||||
delete host_index;
|
delete host_index;
|
||||||
}
|
}
|
||||||
auto data = std::make_shared<uint8_t>();
|
std::shared_ptr<uint8_t[]> data(writer.data_);
|
||||||
data.reset(writer.data_);
|
|
||||||
|
|
||||||
BinarySet res_set;
|
BinarySet res_set;
|
||||||
res_set.Append("IVF", data, writer.rp);
|
res_set.Append("IVF", data, writer.rp);
|
||||||
|
|
|
@ -102,8 +102,7 @@ GPUIVF::SerializeImpl(const IndexType& type) {
|
||||||
faiss::write_index(host_index, &writer);
|
faiss::write_index(host_index, &writer);
|
||||||
delete host_index;
|
delete host_index;
|
||||||
}
|
}
|
||||||
auto data = std::make_shared<uint8_t>();
|
std::shared_ptr<uint8_t[]> data(writer.data_);
|
||||||
data.reset(writer.data_);
|
|
||||||
|
|
||||||
BinarySet res_set;
|
BinarySet res_set;
|
||||||
res_set.Append("IVF", data, writer.rp);
|
res_set.Append("IVF", data, writer.rp);
|
||||||
|
|
|
@ -227,8 +227,7 @@ IVFSQHybrid::SerializeImpl(const IndexType& type) {
|
||||||
MemoryIOWriter writer;
|
MemoryIOWriter writer;
|
||||||
faiss::write_index(index_.get(), &writer);
|
faiss::write_index(index_.get(), &writer);
|
||||||
|
|
||||||
auto data = std::make_shared<uint8_t>();
|
std::shared_ptr<uint8_t[]> data(writer.data_);
|
||||||
data.reset(writer.data_);
|
|
||||||
|
|
||||||
BinarySet res_set;
|
BinarySet res_set;
|
||||||
res_set.Append("IVF", data, writer.rp);
|
res_set.Append("IVF", data, writer.rp);
|
||||||
|
|
|
@ -35,7 +35,7 @@ MemoryIOWriter::operator()(const void* ptr, size_t size, size_t nitems) {
|
||||||
total = total_need * magic_num;
|
total = total_need * magic_num;
|
||||||
auto new_data = new uint8_t[total];
|
auto new_data = new uint8_t[total];
|
||||||
memcpy((void*)new_data, (void*)data_, rp);
|
memcpy((void*)new_data, (void*)data_, rp);
|
||||||
delete data_;
|
delete[] data_;
|
||||||
data_ = new_data;
|
data_ = new_data;
|
||||||
|
|
||||||
memcpy((void*)(data_ + rp), ptr, size * nitems);
|
memcpy((void*)(data_ + rp), ptr, size * nitems);
|
||||||
|
|
|
@ -112,8 +112,7 @@ TEST_P(BinaryIDMAPTest, binaryidmap_serialize) {
|
||||||
serialize(filename, bin, load_data);
|
serialize(filename, bin, load_data);
|
||||||
|
|
||||||
binaryset.clear();
|
binaryset.clear();
|
||||||
auto data = std::make_shared<uint8_t>();
|
std::shared_ptr<uint8_t[]> data(load_data);
|
||||||
data.reset(load_data);
|
|
||||||
binaryset.Append("BinaryIVF", data, bin->size);
|
binaryset.Append("BinaryIVF", data, bin->size);
|
||||||
|
|
||||||
index_->Load(binaryset);
|
index_->Load(binaryset);
|
||||||
|
|
|
@ -134,8 +134,7 @@ TEST_P(BinaryIVFTest, binaryivf_serialize) {
|
||||||
serialize(filename, bin, load_data);
|
serialize(filename, bin, load_data);
|
||||||
|
|
||||||
binaryset.clear();
|
binaryset.clear();
|
||||||
auto data = std::make_shared<uint8_t>();
|
std::shared_ptr<uint8_t[]> data(load_data);
|
||||||
data.reset(load_data);
|
|
||||||
binaryset.Append("BinaryIVF", data, bin->size);
|
binaryset.Append("BinaryIVF", data, bin->size);
|
||||||
|
|
||||||
index_->Load(binaryset);
|
index_->Load(binaryset);
|
||||||
|
|
|
@ -126,8 +126,7 @@ TEST_F(IDMAPTest, idmap_serialize) {
|
||||||
serialize(filename, bin, load_data);
|
serialize(filename, bin, load_data);
|
||||||
|
|
||||||
binaryset.clear();
|
binaryset.clear();
|
||||||
auto data = std::make_shared<uint8_t>();
|
std::shared_ptr<uint8_t[]> data(load_data);
|
||||||
data.reset(load_data);
|
|
||||||
binaryset.Append("IVF", data, bin->size);
|
binaryset.Append("IVF", data, bin->size);
|
||||||
|
|
||||||
index_->Load(binaryset);
|
index_->Load(binaryset);
|
||||||
|
|
|
@ -165,8 +165,7 @@ TEST_P(IVFTest, ivf_serialize) {
|
||||||
serialize(filename, bin, load_data);
|
serialize(filename, bin, load_data);
|
||||||
|
|
||||||
binaryset.clear();
|
binaryset.clear();
|
||||||
auto data = std::make_shared<uint8_t>();
|
std::shared_ptr<uint8_t[]> data(load_data);
|
||||||
data.reset(load_data);
|
|
||||||
binaryset.Append("IVF", data, bin->size);
|
binaryset.Append("IVF", data, bin->size);
|
||||||
|
|
||||||
index_->Load(binaryset);
|
index_->Load(binaryset);
|
||||||
|
|
|
@ -124,8 +124,7 @@ TEST_P(SPTAGTest, sptag_serialize) {
|
||||||
|
|
||||||
auto load_data = new uint8_t[bin_size];
|
auto load_data = new uint8_t[bin_size];
|
||||||
reader(load_data, bin_size);
|
reader(load_data, bin_size);
|
||||||
auto data = std::make_shared<uint8_t>();
|
std::shared_ptr<uint8_t[]> data(load_data);
|
||||||
data.reset(load_data);
|
|
||||||
load_data_list.Append(meta_list[i].first, data, bin_size);
|
load_data_list.Append(meta_list[i].first, data, bin_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -32,11 +32,13 @@ namespace {
|
||||||
|
|
||||||
void
|
void
|
||||||
MakeEmptyTestPath() {
|
MakeEmptyTestPath() {
|
||||||
|
pid_t ret;
|
||||||
if (access(WAL_GTEST_PATH, 0) == 0) {
|
if (access(WAL_GTEST_PATH, 0) == 0) {
|
||||||
::system("rm -rf " WAL_GTEST_PATH "*");
|
ret = ::system("rm -rf " WAL_GTEST_PATH "*");
|
||||||
} else {
|
} else {
|
||||||
::system("mkdir -m 777 -p " WAL_GTEST_PATH);
|
ret = ::system("mkdir -m 777 -p " WAL_GTEST_PATH);
|
||||||
}
|
}
|
||||||
|
__glibcxx_assert(ret != -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
Loading…
Reference in New Issue