mirror of
https://gitee.com/milvus-io/milvus.git
synced 2025-12-06 17:18:35 +08:00
enhance: record memory size (uncompressed) item for index (#38770)
issue: #38715 - Current milvus use a serialized index size(compressed) for estimate resource for loading. - Add a new field `MemSize` (before compressing) for index to estimate resource. --------- Signed-off-by: chyezh <chyezh@outlook.com>
This commit is contained in:
parent
5e38f01e5b
commit
3e788f0fbd
@ -264,7 +264,7 @@ func combineToSegmentIndexesMeta220(segmentIndexes SegmentIndexesMeta210, indexB
|
|||||||
IsDeleted: buildMeta.GetMarkDeleted(),
|
IsDeleted: buildMeta.GetMarkDeleted(),
|
||||||
CreatedUTCTime: record.GetCreateTime(),
|
CreatedUTCTime: record.GetCreateTime(),
|
||||||
IndexFileKeys: fileKeys,
|
IndexFileKeys: fileKeys,
|
||||||
IndexSize: buildMeta.GetSerializeSize(),
|
IndexSerializedSize: buildMeta.GetSerializeSize(),
|
||||||
WriteHandoff: buildMeta.GetState() == commonpb.IndexState_Finished,
|
WriteHandoff: buildMeta.GetState() == commonpb.IndexState_Finished,
|
||||||
}
|
}
|
||||||
segmentIndexModels.AddRecord(segID, indexID, segmentIndexModel)
|
segmentIndexModels.AddRecord(segID, indexID, segmentIndexModel)
|
||||||
|
|||||||
45
internal/core/src/common/protobuf_utils.cpp
Normal file
45
internal/core/src/common/protobuf_utils.cpp
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
// Copyright (C) 2019-2020 Zilliz. All rights reserved.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
|
||||||
|
// with the License. You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software distributed under the License
|
||||||
|
// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||||
|
// or implied. See the License for the specific language governing permissions and limitations under the License
|
||||||
|
|
||||||
|
#include "common/protobuf_utils.h"
|
||||||
|
#include "common/protobuf_utils_c.h"
|
||||||
|
|
||||||
|
// Make a static_assert to ensure that the size and alignment of the C++ and C
|
||||||
|
static_assert(
|
||||||
|
sizeof(milvus::ProtoLayout) == sizeof(ProtoLayout),
|
||||||
|
"Size of milvus::ProtoLayout is not equal to size of ProtoLayoutInterface");
|
||||||
|
|
||||||
|
// Make a static_assert to ensure that the size and alignment of the C++ and C
|
||||||
|
static_assert(alignof(milvus::ProtoLayout) == alignof(ProtoLayout),
|
||||||
|
"Alignment of milvus::ProtoLayout is not equal to alignment of "
|
||||||
|
"ProtoLayoutInterface");
|
||||||
|
|
||||||
|
ProtoLayoutInterface
|
||||||
|
CreateProtoLayout() {
|
||||||
|
auto ptr = new milvus::ProtoLayout();
|
||||||
|
return reinterpret_cast<ProtoLayoutInterface>(ptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ReleaseProtoLayout(ProtoLayoutInterface proto) {
|
||||||
|
delete reinterpret_cast<milvus::ProtoLayout*>(proto);
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace milvus {
|
||||||
|
ProtoLayout::ProtoLayout() : blob_(nullptr), size_(0) {
|
||||||
|
}
|
||||||
|
|
||||||
|
ProtoLayout::~ProtoLayout() {
|
||||||
|
if (blob_ != nullptr) {
|
||||||
|
delete[] static_cast<uint8_t*>(blob_);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} // namespace milvus
|
||||||
@ -38,4 +38,46 @@ RepeatedKeyValToMap(
|
|||||||
}
|
}
|
||||||
return mapping;
|
return mapping;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class ProtoLayout;
|
||||||
|
using ProtoLayoutPtr = std::unique_ptr<ProtoLayout>;
|
||||||
|
|
||||||
|
// ProtoLayout is a c++ type for esaier resource management at C-side.
|
||||||
|
// It's always keep same memory layout with ProtoLayout at C side for cgo call.
|
||||||
|
class ProtoLayout {
|
||||||
|
public:
|
||||||
|
ProtoLayout();
|
||||||
|
|
||||||
|
ProtoLayout(const ProtoLayout&) = delete;
|
||||||
|
|
||||||
|
ProtoLayout(ProtoLayout&&) = delete;
|
||||||
|
|
||||||
|
ProtoLayout&
|
||||||
|
operator=(const ProtoLayout&) = delete;
|
||||||
|
|
||||||
|
ProtoLayout&
|
||||||
|
operator=(ProtoLayout&&) = delete;
|
||||||
|
|
||||||
|
~ProtoLayout();
|
||||||
|
|
||||||
|
// Serialize the proto into bytes and hold it in the layout.
|
||||||
|
// Return false if failure.
|
||||||
|
template <typename T>
|
||||||
|
bool
|
||||||
|
SerializeAndHoldProto(T& proto) {
|
||||||
|
if (blob_ != nullptr || size_ != 0) {
|
||||||
|
throw std::runtime_error(
|
||||||
|
"ProtoLayout should always be empty "
|
||||||
|
"before calling SerializeAndHoldProto");
|
||||||
|
}
|
||||||
|
size_ = proto.ByteSizeLong();
|
||||||
|
blob_ = new uint8_t[size_];
|
||||||
|
return proto.SerializeToArray(blob_, size_);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
void* blob_;
|
||||||
|
size_t size_;
|
||||||
|
};
|
||||||
|
|
||||||
} //namespace milvus
|
} //namespace milvus
|
||||||
|
|||||||
40
internal/core/src/common/protobuf_utils_c.h
Normal file
40
internal/core/src/common/protobuf_utils_c.h
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
// Copyright (C) 2019-2020 Zilliz. All rights reserved.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
|
||||||
|
// with the License. You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software distributed under the License
|
||||||
|
// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||||
|
// or implied. See the License for the specific language governing permissions and limitations under the License
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ProtoLayout is a common ffi type for cgo call with serialized protobuf message.
|
||||||
|
// It's always keep same memory layout with milvus::ProtoLayout at C++ side.
|
||||||
|
typedef struct ProtoLayout {
|
||||||
|
void* blob;
|
||||||
|
size_t size;
|
||||||
|
} ProtoLayout;
|
||||||
|
|
||||||
|
// ProtoLayoutInterface is the pointer alias for ProtoLayout.
|
||||||
|
// It should always created by CreateProtoLayout and released by ReleaseProtoLayout.
|
||||||
|
typedef struct ProtoLayout* ProtoLayoutInterface;
|
||||||
|
|
||||||
|
// CreateProtoLayout is used to create an empty ProtoLayout.
|
||||||
|
// When you want to create a ProtoLayout at go-side, and return some data from C-side.
|
||||||
|
// You should use this API.
|
||||||
|
ProtoLayoutInterface
|
||||||
|
CreateProtoLayout();
|
||||||
|
|
||||||
|
void
|
||||||
|
ReleaseProtoLayout(ProtoLayoutInterface proto);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
@ -286,18 +286,15 @@ BitmapIndex<T>::Serialize(const Config& config) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
BinarySet
|
IndexStatsPtr
|
||||||
BitmapIndex<T>::Upload(const Config& config) {
|
BitmapIndex<T>::Upload(const Config& config) {
|
||||||
auto binary_set = Serialize(config);
|
auto binary_set = Serialize(config);
|
||||||
|
|
||||||
file_manager_->AddFile(binary_set);
|
file_manager_->AddFile(binary_set);
|
||||||
|
|
||||||
auto remote_path_to_size = file_manager_->GetRemotePathsToFileSize();
|
auto remote_path_to_size = file_manager_->GetRemotePathsToFileSize();
|
||||||
BinarySet ret;
|
return IndexStats::NewFromSizeMap(file_manager_->GetAddedTotalMemSize(),
|
||||||
for (auto& file : remote_path_to_size) {
|
remote_path_to_size);
|
||||||
ret.Append(file.first, nullptr, file.second);
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
|
|||||||
@ -114,7 +114,7 @@ class BitmapIndex : public ScalarIndex<T> {
|
|||||||
return Count();
|
return Count();
|
||||||
}
|
}
|
||||||
|
|
||||||
BinarySet
|
IndexStatsPtr
|
||||||
Upload(const Config& config = {}) override;
|
Upload(const Config& config = {}) override;
|
||||||
|
|
||||||
const bool
|
const bool
|
||||||
|
|||||||
@ -298,7 +298,7 @@ HybridScalarIndex<T>::SerializeIndexType() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
BinarySet
|
IndexStatsPtr
|
||||||
HybridScalarIndex<T>::Upload(const Config& config) {
|
HybridScalarIndex<T>::Upload(const Config& config) {
|
||||||
auto internal_index = GetInternalIndex();
|
auto internal_index = GetInternalIndex();
|
||||||
auto index_ret = internal_index->Upload(config);
|
auto index_ret = internal_index->Upload(config);
|
||||||
@ -306,9 +306,9 @@ HybridScalarIndex<T>::Upload(const Config& config) {
|
|||||||
auto index_type_ret = SerializeIndexType();
|
auto index_type_ret = SerializeIndexType();
|
||||||
|
|
||||||
for (auto& [key, value] : index_type_ret.binary_map_) {
|
for (auto& [key, value] : index_type_ret.binary_map_) {
|
||||||
index_ret.Append(key, value);
|
index_ret->AppendSerializedIndexFileInfo(
|
||||||
|
SerializedIndexFileInfo(key, value->size));
|
||||||
}
|
}
|
||||||
|
|
||||||
return index_ret;
|
return index_ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -153,7 +153,7 @@ class HybridScalarIndex : public ScalarIndex<T> {
|
|||||||
return internal_index_->HasRawData();
|
return internal_index_->HasRawData();
|
||||||
}
|
}
|
||||||
|
|
||||||
BinarySet
|
IndexStatsPtr
|
||||||
Upload(const Config& config = {}) override;
|
Upload(const Config& config = {}) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
@ -26,6 +26,7 @@
|
|||||||
#include "common/Tracer.h"
|
#include "common/Tracer.h"
|
||||||
#include "common/Types.h"
|
#include "common/Types.h"
|
||||||
#include "index/Meta.h"
|
#include "index/Meta.h"
|
||||||
|
#include "index/IndexStats.h"
|
||||||
|
|
||||||
namespace milvus::index {
|
namespace milvus::index {
|
||||||
|
|
||||||
@ -57,7 +58,7 @@ class IndexBase {
|
|||||||
virtual int64_t
|
virtual int64_t
|
||||||
Count() = 0;
|
Count() = 0;
|
||||||
|
|
||||||
virtual BinarySet
|
virtual IndexStatsPtr
|
||||||
Upload(const Config& config = {}) = 0;
|
Upload(const Config& config = {}) = 0;
|
||||||
|
|
||||||
virtual const bool
|
virtual const bool
|
||||||
|
|||||||
81
internal/core/src/index/IndexStats.cpp
Normal file
81
internal/core/src/index/IndexStats.cpp
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
// Copyright (C) 2019-2020 Zilliz. All rights reserved.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
|
||||||
|
// with the License. You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software distributed under the License
|
||||||
|
// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||||
|
// or implied. See the License for the specific language governing permissions and limitations under the License
|
||||||
|
|
||||||
|
#include "index/IndexStats.h"
|
||||||
|
|
||||||
|
namespace milvus::index {
|
||||||
|
|
||||||
|
IndexStatsPtr
|
||||||
|
IndexStats::NewFromSizeMap(int64_t mem_size,
|
||||||
|
std::map<std::string, int64_t>& index_size_map) {
|
||||||
|
std::vector<SerializedIndexFileInfo> serialized_index_infos;
|
||||||
|
serialized_index_infos.reserve(index_size_map.size());
|
||||||
|
for (auto& file : index_size_map) {
|
||||||
|
serialized_index_infos.emplace_back(file.first, file.second);
|
||||||
|
}
|
||||||
|
return IndexStats::New(mem_size, std::move(serialized_index_infos));
|
||||||
|
}
|
||||||
|
|
||||||
|
IndexStatsPtr
|
||||||
|
IndexStats::New(int64_t mem_size,
|
||||||
|
std::vector<SerializedIndexFileInfo>&& serialized_index_infos) {
|
||||||
|
return std::unique_ptr<IndexStats>(
|
||||||
|
new IndexStats(mem_size, std::move(serialized_index_infos)));
|
||||||
|
}
|
||||||
|
|
||||||
|
IndexStats::IndexStats(
|
||||||
|
int64_t mem_size,
|
||||||
|
std::vector<SerializedIndexFileInfo>&& serialized_index_infos)
|
||||||
|
: mem_size_(mem_size), serialized_index_infos_(serialized_index_infos) {
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
IndexStats::AppendSerializedIndexFileInfo(SerializedIndexFileInfo&& info) {
|
||||||
|
serialized_index_infos_.push_back(std::move(info));
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
IndexStats::SerializeAt(milvus::ProtoLayout* layout) {
|
||||||
|
milvus::proto::cgo::IndexStats result;
|
||||||
|
result.set_mem_size(mem_size_);
|
||||||
|
for (auto& info : serialized_index_infos_) {
|
||||||
|
auto serialized_info = result.add_serialized_index_infos();
|
||||||
|
serialized_info->set_file_name(info.file_name);
|
||||||
|
serialized_info->set_file_size(info.file_size);
|
||||||
|
}
|
||||||
|
AssertInfo(layout->SerializeAndHoldProto(result),
|
||||||
|
"marshal IndexStats failed");
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<std::string>
|
||||||
|
IndexStats::GetIndexFiles() const {
|
||||||
|
std::vector<std::string> files;
|
||||||
|
for (auto& info : serialized_index_infos_) {
|
||||||
|
files.push_back(info.file_name);
|
||||||
|
}
|
||||||
|
return files;
|
||||||
|
}
|
||||||
|
|
||||||
|
int64_t
|
||||||
|
IndexStats::GetMemSize() const {
|
||||||
|
return mem_size_;
|
||||||
|
}
|
||||||
|
|
||||||
|
int64_t
|
||||||
|
IndexStats::GetSerializedSize() const {
|
||||||
|
int64_t size = 0;
|
||||||
|
for (auto& info : serialized_index_infos_) {
|
||||||
|
size += info.file_size;
|
||||||
|
}
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace milvus::index
|
||||||
80
internal/core/src/index/IndexStats.h
Normal file
80
internal/core/src/index/IndexStats.h
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
// Copyright (C) 2019-2020 Zilliz. All rights reserved.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
|
||||||
|
// with the License. You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software distributed under the License
|
||||||
|
// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
|
||||||
|
// or implied. See the License for the specific language governing permissions and limitations under the License
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
#include "common/protobuf_utils.h"
|
||||||
|
#include "pb/cgo_msg.pb.h"
|
||||||
|
|
||||||
|
namespace milvus::index {
|
||||||
|
|
||||||
|
class SerializedIndexFileInfo {
|
||||||
|
public:
|
||||||
|
SerializedIndexFileInfo(const std::string& file_name, int64_t file_size)
|
||||||
|
: file_name(file_name), file_size(file_size) {
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string file_name;
|
||||||
|
int64_t file_size;
|
||||||
|
};
|
||||||
|
|
||||||
|
class IndexStats;
|
||||||
|
|
||||||
|
using IndexStatsPtr = std::unique_ptr<IndexStats>;
|
||||||
|
|
||||||
|
class IndexStats {
|
||||||
|
public:
|
||||||
|
static IndexStatsPtr
|
||||||
|
NewFromSizeMap(int64_t mem_size,
|
||||||
|
std::map<std::string, int64_t>& index_size_map);
|
||||||
|
|
||||||
|
// Create a new IndexStats instance.
|
||||||
|
static IndexStatsPtr
|
||||||
|
New(int64_t mem_size,
|
||||||
|
std::vector<SerializedIndexFileInfo>&& serialized_index_infos);
|
||||||
|
|
||||||
|
IndexStats(const IndexStats&) = delete;
|
||||||
|
|
||||||
|
IndexStats(IndexStats&&) = delete;
|
||||||
|
|
||||||
|
IndexStats&
|
||||||
|
operator=(const IndexStats&) = delete;
|
||||||
|
|
||||||
|
IndexStats&
|
||||||
|
operator=(IndexStats&&) = delete;
|
||||||
|
|
||||||
|
// Append a new serialized index file info into the result.
|
||||||
|
void
|
||||||
|
AppendSerializedIndexFileInfo(SerializedIndexFileInfo&& info);
|
||||||
|
|
||||||
|
// Serialize the result into the target proto layout.
|
||||||
|
void
|
||||||
|
SerializeAt(milvus::ProtoLayout* layout);
|
||||||
|
|
||||||
|
std::vector<std::string>
|
||||||
|
GetIndexFiles() const;
|
||||||
|
|
||||||
|
int64_t
|
||||||
|
GetMemSize() const;
|
||||||
|
|
||||||
|
int64_t
|
||||||
|
GetSerializedSize() const;
|
||||||
|
|
||||||
|
private:
|
||||||
|
IndexStats(int64_t mem_size,
|
||||||
|
std::vector<SerializedIndexFileInfo>&& serialized_index_infos);
|
||||||
|
|
||||||
|
int64_t mem_size_;
|
||||||
|
std::vector<SerializedIndexFileInfo> serialized_index_infos_;
|
||||||
|
};
|
||||||
|
} // namespace milvus::index
|
||||||
@ -136,7 +136,7 @@ InvertedIndexTantivy<T>::Serialize(const Config& config) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
BinarySet
|
IndexStatsPtr
|
||||||
InvertedIndexTantivy<T>::Upload(const Config& config) {
|
InvertedIndexTantivy<T>::Upload(const Config& config) {
|
||||||
finish();
|
finish();
|
||||||
|
|
||||||
@ -156,20 +156,25 @@ InvertedIndexTantivy<T>::Upload(const Config& config) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
BinarySet ret;
|
|
||||||
|
|
||||||
auto remote_paths_to_size = disk_file_manager_->GetRemotePathsToFileSize();
|
auto remote_paths_to_size = disk_file_manager_->GetRemotePathsToFileSize();
|
||||||
for (auto& file : remote_paths_to_size) {
|
|
||||||
ret.Append(file.first, nullptr, file.second);
|
|
||||||
}
|
|
||||||
auto binary_set = Serialize(config);
|
auto binary_set = Serialize(config);
|
||||||
mem_file_manager_->AddFile(binary_set);
|
mem_file_manager_->AddFile(binary_set);
|
||||||
auto remote_mem_path_to_size =
|
auto remote_mem_path_to_size =
|
||||||
mem_file_manager_->GetRemotePathsToFileSize();
|
mem_file_manager_->GetRemotePathsToFileSize();
|
||||||
for (auto& file : remote_mem_path_to_size) {
|
|
||||||
ret.Append(file.first, nullptr, file.second);
|
std::vector<SerializedIndexFileInfo> index_files;
|
||||||
|
index_files.reserve(remote_paths_to_size.size() +
|
||||||
|
remote_mem_path_to_size.size());
|
||||||
|
for (auto& file : remote_paths_to_size) {
|
||||||
|
index_files.emplace_back(file.first, file.second);
|
||||||
}
|
}
|
||||||
return ret;
|
for (auto& file : remote_mem_path_to_size) {
|
||||||
|
index_files.emplace_back(file.first, file.second);
|
||||||
|
}
|
||||||
|
return IndexStats::New(mem_file_manager_->GetAddedTotalMemSize() +
|
||||||
|
disk_file_manager_->GetAddedTotalFileSize(),
|
||||||
|
std::move(index_files));
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
|
|||||||
@ -89,7 +89,7 @@ class InvertedIndexTantivy : public ScalarIndex<T> {
|
|||||||
BinarySet
|
BinarySet
|
||||||
Serialize(const Config& config) override;
|
Serialize(const Config& config) override;
|
||||||
|
|
||||||
BinarySet
|
IndexStatsPtr
|
||||||
Upload(const Config& config = {}) override;
|
Upload(const Config& config = {}) override;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@ -151,18 +151,14 @@ ScalarIndexSort<T>::Serialize(const Config& config) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
BinarySet
|
IndexStatsPtr
|
||||||
ScalarIndexSort<T>::Upload(const Config& config) {
|
ScalarIndexSort<T>::Upload(const Config& config) {
|
||||||
auto binary_set = Serialize(config);
|
auto binary_set = Serialize(config);
|
||||||
file_manager_->AddFile(binary_set);
|
file_manager_->AddFile(binary_set);
|
||||||
|
|
||||||
auto remote_paths_to_size = file_manager_->GetRemotePathsToFileSize();
|
auto remote_paths_to_size = file_manager_->GetRemotePathsToFileSize();
|
||||||
BinarySet ret;
|
return IndexStats::NewFromSizeMap(file_manager_->GetAddedTotalMemSize(),
|
||||||
for (auto& file : remote_paths_to_size) {
|
remote_paths_to_size);
|
||||||
ret.Append(file.first, nullptr, file.second);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
|
|||||||
@ -90,7 +90,7 @@ class ScalarIndexSort : public ScalarIndex<T> {
|
|||||||
return (int64_t)data_.size();
|
return (int64_t)data_.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
BinarySet
|
IndexStatsPtr
|
||||||
Upload(const Config& config = {}) override;
|
Upload(const Config& config = {}) override;
|
||||||
|
|
||||||
const bool
|
const bool
|
||||||
|
|||||||
@ -174,18 +174,14 @@ StringIndexMarisa::Serialize(const Config& config) {
|
|||||||
return res_set;
|
return res_set;
|
||||||
}
|
}
|
||||||
|
|
||||||
BinarySet
|
IndexStatsPtr
|
||||||
StringIndexMarisa::Upload(const Config& config) {
|
StringIndexMarisa::Upload(const Config& config) {
|
||||||
auto binary_set = Serialize(config);
|
auto binary_set = Serialize(config);
|
||||||
file_manager_->AddFile(binary_set);
|
file_manager_->AddFile(binary_set);
|
||||||
|
|
||||||
auto remote_paths_to_size = file_manager_->GetRemotePathsToFileSize();
|
auto remote_paths_to_size = file_manager_->GetRemotePathsToFileSize();
|
||||||
BinarySet ret;
|
return IndexStats::NewFromSizeMap(file_manager_->GetAddedTotalMemSize(),
|
||||||
for (auto& file : remote_paths_to_size) {
|
remote_paths_to_size);
|
||||||
ret.Append(file.first, nullptr, file.second);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|||||||
@ -92,7 +92,7 @@ class StringIndexMarisa : public StringIndex {
|
|||||||
std::optional<std::string>
|
std::optional<std::string>
|
||||||
Reverse_Lookup(size_t offset) const override;
|
Reverse_Lookup(size_t offset) const override;
|
||||||
|
|
||||||
BinarySet
|
IndexStatsPtr
|
||||||
Upload(const Config& config = {}) override;
|
Upload(const Config& config = {}) override;
|
||||||
|
|
||||||
const bool
|
const bool
|
||||||
|
|||||||
@ -78,7 +78,7 @@ TextMatchIndex::TextMatchIndex(const storage::FileManagerContext& ctx)
|
|||||||
d_type_ = TantivyDataType::Text;
|
d_type_ = TantivyDataType::Text;
|
||||||
}
|
}
|
||||||
|
|
||||||
BinarySet
|
IndexStatsPtr
|
||||||
TextMatchIndex::Upload(const Config& config) {
|
TextMatchIndex::Upload(const Config& config) {
|
||||||
finish();
|
finish();
|
||||||
|
|
||||||
@ -98,21 +98,25 @@ TextMatchIndex::Upload(const Config& config) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
BinarySet ret;
|
|
||||||
|
|
||||||
auto remote_paths_to_size = disk_file_manager_->GetRemotePathsToFileSize();
|
auto remote_paths_to_size = disk_file_manager_->GetRemotePathsToFileSize();
|
||||||
for (auto& file : remote_paths_to_size) {
|
|
||||||
ret.Append(file.first, nullptr, file.second);
|
|
||||||
}
|
|
||||||
auto binary_set = Serialize(config);
|
auto binary_set = Serialize(config);
|
||||||
mem_file_manager_->AddFile(binary_set);
|
mem_file_manager_->AddFile(binary_set);
|
||||||
auto remote_mem_path_to_size =
|
auto remote_mem_path_to_size =
|
||||||
mem_file_manager_->GetRemotePathsToFileSize();
|
mem_file_manager_->GetRemotePathsToFileSize();
|
||||||
for (auto& file : remote_mem_path_to_size) {
|
|
||||||
ret.Append(file.first, nullptr, file.second);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
std::vector<SerializedIndexFileInfo> index_files;
|
||||||
|
index_files.reserve(remote_paths_to_size.size() +
|
||||||
|
remote_mem_path_to_size.size());
|
||||||
|
for (auto& file : remote_paths_to_size) {
|
||||||
|
index_files.emplace_back(file.first, file.second);
|
||||||
|
}
|
||||||
|
for (auto& file : remote_mem_path_to_size) {
|
||||||
|
index_files.emplace_back(file.first, file.second);
|
||||||
|
}
|
||||||
|
return IndexStats::New(mem_file_manager_->GetAddedTotalMemSize() +
|
||||||
|
disk_file_manager_->GetAddedTotalFileSize(),
|
||||||
|
std::move(index_files));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|||||||
@ -15,6 +15,7 @@
|
|||||||
#include <boost/filesystem.hpp>
|
#include <boost/filesystem.hpp>
|
||||||
|
|
||||||
#include "index/InvertedIndexTantivy.h"
|
#include "index/InvertedIndexTantivy.h"
|
||||||
|
#include "index/IndexStats.h"
|
||||||
|
|
||||||
namespace milvus::index {
|
namespace milvus::index {
|
||||||
|
|
||||||
@ -39,7 +40,7 @@ class TextMatchIndex : public InvertedIndexTantivy<std::string> {
|
|||||||
explicit TextMatchIndex(const storage::FileManagerContext& ctx);
|
explicit TextMatchIndex(const storage::FileManagerContext& ctx);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
BinarySet
|
IndexStatsPtr
|
||||||
Upload(const Config& config) override;
|
Upload(const Config& config) override;
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|||||||
@ -115,7 +115,7 @@ VectorDiskAnnIndex<T>::Load(milvus::tracer::TraceContext ctx,
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
BinarySet
|
IndexStatsPtr
|
||||||
VectorDiskAnnIndex<T>::Upload(const Config& config) {
|
VectorDiskAnnIndex<T>::Upload(const Config& config) {
|
||||||
BinarySet ret;
|
BinarySet ret;
|
||||||
auto stat = index_.Serialize(ret);
|
auto stat = index_.Serialize(ret);
|
||||||
@ -124,11 +124,8 @@ VectorDiskAnnIndex<T>::Upload(const Config& config) {
|
|||||||
"failed to serialize index, " + KnowhereStatusString(stat));
|
"failed to serialize index, " + KnowhereStatusString(stat));
|
||||||
}
|
}
|
||||||
auto remote_paths_to_size = file_manager_->GetRemotePathsToFileSize();
|
auto remote_paths_to_size = file_manager_->GetRemotePathsToFileSize();
|
||||||
for (auto& file : remote_paths_to_size) {
|
return IndexStats::NewFromSizeMap(file_manager_->GetAddedTotalFileSize(),
|
||||||
ret.Append(file.first, nullptr, file.second);
|
remote_paths_to_size);
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
|
|||||||
@ -46,7 +46,7 @@ class VectorDiskAnnIndex : public VectorIndex {
|
|||||||
return binary_set;
|
return binary_set;
|
||||||
}
|
}
|
||||||
|
|
||||||
BinarySet
|
IndexStatsPtr
|
||||||
Upload(const Config& config = {}) override;
|
Upload(const Config& config = {}) override;
|
||||||
|
|
||||||
int64_t
|
int64_t
|
||||||
|
|||||||
@ -92,18 +92,14 @@ VectorMemIndex<T>::VectorIterators(const milvus::DatasetPtr dataset,
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
BinarySet
|
IndexStatsPtr
|
||||||
VectorMemIndex<T>::Upload(const Config& config) {
|
VectorMemIndex<T>::Upload(const Config& config) {
|
||||||
auto binary_set = Serialize(config);
|
auto binary_set = Serialize(config);
|
||||||
file_manager_->AddFile(binary_set);
|
file_manager_->AddFile(binary_set);
|
||||||
|
|
||||||
auto remote_paths_to_size = file_manager_->GetRemotePathsToFileSize();
|
auto remote_paths_to_size = file_manager_->GetRemotePathsToFileSize();
|
||||||
BinarySet ret;
|
return IndexStats::NewFromSizeMap(file_manager_->GetAddedTotalMemSize(),
|
||||||
for (auto& file : remote_paths_to_size) {
|
remote_paths_to_size);
|
||||||
ret.Append(file.first, nullptr, file.second);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
|
|||||||
@ -78,7 +78,7 @@ class VectorMemIndex : public VectorIndex {
|
|||||||
std::unique_ptr<const knowhere::sparse::SparseRow<float>[]>
|
std::unique_ptr<const knowhere::sparse::SparseRow<float>[]>
|
||||||
GetSparseVector(const DatasetPtr dataset) const override;
|
GetSparseVector(const DatasetPtr dataset) const override;
|
||||||
|
|
||||||
BinarySet
|
IndexStatsPtr
|
||||||
Upload(const Config& config = {}) override;
|
Upload(const Config& config = {}) override;
|
||||||
|
|
||||||
knowhere::expected<std::vector<knowhere::IndexNode::IteratorPtr>>
|
knowhere::expected<std::vector<knowhere::IndexNode::IteratorPtr>>
|
||||||
|
|||||||
@ -13,6 +13,7 @@
|
|||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include "common/Types.h"
|
#include "common/Types.h"
|
||||||
|
#include "index/Index.h"
|
||||||
#include "storage/FileManager.h"
|
#include "storage/FileManager.h"
|
||||||
|
|
||||||
namespace milvus::indexbuilder {
|
namespace milvus::indexbuilder {
|
||||||
@ -33,7 +34,7 @@ class IndexCreatorBase {
|
|||||||
virtual void
|
virtual void
|
||||||
Load(const milvus::BinarySet&) = 0;
|
Load(const milvus::BinarySet&) = 0;
|
||||||
|
|
||||||
virtual BinarySet
|
virtual index::IndexStatsPtr
|
||||||
Upload() = 0;
|
Upload() = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -63,7 +63,7 @@ ScalarIndexCreator::index_type() {
|
|||||||
return index_type_;
|
return index_type_;
|
||||||
}
|
}
|
||||||
|
|
||||||
BinarySet
|
index::IndexStatsPtr
|
||||||
ScalarIndexCreator::Upload() {
|
ScalarIndexCreator::Upload() {
|
||||||
return index_->Upload();
|
return index_->Upload();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -38,7 +38,7 @@ class ScalarIndexCreator : public IndexCreatorBase {
|
|||||||
void
|
void
|
||||||
Load(const milvus::BinarySet&) override;
|
Load(const milvus::BinarySet&) override;
|
||||||
|
|
||||||
BinarySet
|
index::IndexStatsPtr
|
||||||
Upload() override;
|
Upload() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
@ -84,7 +84,7 @@ VecIndexCreator::Query(const milvus::DatasetPtr& dataset,
|
|||||||
return search_result;
|
return search_result;
|
||||||
}
|
}
|
||||||
|
|
||||||
BinarySet
|
index::IndexStatsPtr
|
||||||
VecIndexCreator::Upload() {
|
VecIndexCreator::Upload() {
|
||||||
return index_->Upload();
|
return index_->Upload();
|
||||||
}
|
}
|
||||||
|
|||||||
@ -58,7 +58,7 @@ class VecIndexCreator : public IndexCreatorBase {
|
|||||||
const SearchInfo& search_info,
|
const SearchInfo& search_info,
|
||||||
const BitsetView& bitset);
|
const BitsetView& bitset);
|
||||||
|
|
||||||
BinarySet
|
index::IndexStatsPtr
|
||||||
Upload() override;
|
Upload() override;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|||||||
@ -238,7 +238,7 @@ CreateIndex(CIndex* res_index,
|
|||||||
}
|
}
|
||||||
|
|
||||||
CStatus
|
CStatus
|
||||||
BuildTextIndex(CBinarySet* c_binary_set,
|
BuildTextIndex(ProtoLayoutInterface result,
|
||||||
const uint8_t* serialized_build_index_info,
|
const uint8_t* serialized_build_index_info,
|
||||||
const uint64_t len) {
|
const uint64_t len) {
|
||||||
try {
|
try {
|
||||||
@ -286,9 +286,9 @@ BuildTextIndex(CBinarySet* c_binary_set,
|
|||||||
"milvus_tokenizer",
|
"milvus_tokenizer",
|
||||||
field_schema.get_analyzer_params().c_str());
|
field_schema.get_analyzer_params().c_str());
|
||||||
index->Build(config);
|
index->Build(config);
|
||||||
auto binary =
|
auto create_index_result = index->Upload(config);
|
||||||
std::make_unique<knowhere::BinarySet>(index->Upload(config));
|
create_index_result->SerializeAt(
|
||||||
*c_binary_set = binary.release();
|
reinterpret_cast<milvus::ProtoLayout*>(result));
|
||||||
auto status = CStatus();
|
auto status = CStatus();
|
||||||
status.error_code = Success;
|
status.error_code = Success;
|
||||||
status.error_msg = "";
|
status.error_msg = "";
|
||||||
@ -776,7 +776,7 @@ AppendIndexStorageInfo(CBuildIndexInfo c_build_index_info,
|
|||||||
}
|
}
|
||||||
|
|
||||||
CStatus
|
CStatus
|
||||||
SerializeIndexAndUpLoad(CIndex index, CBinarySet* c_binary_set) {
|
SerializeIndexAndUpLoad(CIndex index, ProtoLayoutInterface result) {
|
||||||
auto status = CStatus();
|
auto status = CStatus();
|
||||||
try {
|
try {
|
||||||
AssertInfo(
|
AssertInfo(
|
||||||
@ -784,9 +784,9 @@ SerializeIndexAndUpLoad(CIndex index, CBinarySet* c_binary_set) {
|
|||||||
"failed to serialize index to binary set, passed index was null");
|
"failed to serialize index to binary set, passed index was null");
|
||||||
auto real_index =
|
auto real_index =
|
||||||
reinterpret_cast<milvus::indexbuilder::IndexCreatorBase*>(index);
|
reinterpret_cast<milvus::indexbuilder::IndexCreatorBase*>(index);
|
||||||
auto binary =
|
auto create_index_result = real_index->Upload();
|
||||||
std::make_unique<knowhere::BinarySet>(real_index->Upload());
|
create_index_result->SerializeAt(
|
||||||
*c_binary_set = binary.release();
|
reinterpret_cast<milvus::ProtoLayout*>(result));
|
||||||
status.error_code = Success;
|
status.error_code = Success;
|
||||||
status.error_msg = "";
|
status.error_msg = "";
|
||||||
} catch (std::exception& e) {
|
} catch (std::exception& e) {
|
||||||
|
|||||||
@ -17,6 +17,7 @@ extern "C" {
|
|||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include "common/type_c.h"
|
#include "common/type_c.h"
|
||||||
|
#include "common/protobuf_utils_c.h"
|
||||||
#include "common/binary_set_c.h"
|
#include "common/binary_set_c.h"
|
||||||
#include "indexbuilder/type_c.h"
|
#include "indexbuilder/type_c.h"
|
||||||
|
|
||||||
@ -36,7 +37,7 @@ CStatus
|
|||||||
DeleteIndex(CIndex index);
|
DeleteIndex(CIndex index);
|
||||||
|
|
||||||
CStatus
|
CStatus
|
||||||
BuildTextIndex(CBinarySet* c_binary_set,
|
BuildTextIndex(ProtoLayoutInterface c_binary_set,
|
||||||
const uint8_t* serialized_build_index_info,
|
const uint8_t* serialized_build_index_info,
|
||||||
const uint64_t len);
|
const uint64_t len);
|
||||||
|
|
||||||
@ -131,7 +132,7 @@ AppendOptionalFieldDataPath(CBuildIndexInfo c_build_index_info,
|
|||||||
const char* c_file_path);
|
const char* c_file_path);
|
||||||
|
|
||||||
CStatus
|
CStatus
|
||||||
SerializeIndexAndUpLoad(CIndex index, CBinarySet* c_binary_set);
|
SerializeIndexAndUpLoad(CIndex index, ProtoLayoutInterface result);
|
||||||
|
|
||||||
CStatus
|
CStatus
|
||||||
AppendIndexStorageInfo(CBuildIndexInfo c_build_index_info,
|
AppendIndexStorageInfo(CBuildIndexInfo c_build_index_info,
|
||||||
|
|||||||
@ -47,7 +47,10 @@ struct LoadIndexInfo {
|
|||||||
int64_t index_store_version;
|
int64_t index_store_version;
|
||||||
IndexVersion index_engine_version;
|
IndexVersion index_engine_version;
|
||||||
proto::schema::FieldSchema schema;
|
proto::schema::FieldSchema schema;
|
||||||
int64_t index_size;
|
int64_t index_size; // It's the size of index file before compressing
|
||||||
|
// (aka. the filesize before loading operation at knowhere),
|
||||||
|
// because the uncompressed-index-file-size may not be stored at previous milvus.
|
||||||
|
// so the size may be not accurate (generated by the compressed-index-file-size multiplied with a compress-ratio)
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace milvus::segcore
|
} // namespace milvus::segcore
|
||||||
|
|||||||
@ -94,6 +94,7 @@ DiskFileManagerImpl::AddFile(const std::string& file) noexcept {
|
|||||||
|
|
||||||
auto fileName = GetFileName(file);
|
auto fileName = GetFileName(file);
|
||||||
auto fileSize = local_chunk_manager->Size(file);
|
auto fileSize = local_chunk_manager->Size(file);
|
||||||
|
added_total_file_size_ += fileSize;
|
||||||
|
|
||||||
std::vector<std::string> batch_remote_files;
|
std::vector<std::string> batch_remote_files;
|
||||||
std::vector<int64_t> remote_file_sizes;
|
std::vector<int64_t> remote_file_sizes;
|
||||||
@ -146,6 +147,7 @@ DiskFileManagerImpl::AddTextLog(const std::string& file) noexcept {
|
|||||||
|
|
||||||
auto fileName = GetFileName(file);
|
auto fileName = GetFileName(file);
|
||||||
auto fileSize = local_chunk_manager->Size(file);
|
auto fileSize = local_chunk_manager->Size(file);
|
||||||
|
added_total_file_size_ += fileSize;
|
||||||
|
|
||||||
std::vector<std::string> batch_remote_files;
|
std::vector<std::string> batch_remote_files;
|
||||||
std::vector<int64_t> remote_file_sizes;
|
std::vector<int64_t> remote_file_sizes;
|
||||||
|
|||||||
@ -110,6 +110,11 @@ class DiskFileManagerImpl : public FileManagerImpl {
|
|||||||
return GetRemoteIndexObjectPrefix();
|
return GetRemoteIndexObjectPrefix();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
size_t
|
||||||
|
GetAddedTotalFileSize() const {
|
||||||
|
return added_total_file_size_;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int64_t
|
int64_t
|
||||||
GetIndexBuildId() {
|
GetIndexBuildId() {
|
||||||
@ -131,6 +136,8 @@ class DiskFileManagerImpl : public FileManagerImpl {
|
|||||||
|
|
||||||
// remote file path
|
// remote file path
|
||||||
std::map<std::string, int64_t> remote_paths_to_size_;
|
std::map<std::string, int64_t> remote_paths_to_size_;
|
||||||
|
|
||||||
|
size_t added_total_file_size_ = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
using DiskANNFileManagerImplPtr = std::shared_ptr<DiskFileManagerImpl>;
|
using DiskANNFileManagerImplPtr = std::shared_ptr<DiskFileManagerImpl>;
|
||||||
|
|||||||
@ -73,6 +73,7 @@ MemFileManagerImpl::AddFile(const BinarySet& binary_set) {
|
|||||||
slice_sizes.emplace_back(iter->second->size);
|
slice_sizes.emplace_back(iter->second->size);
|
||||||
slice_names.emplace_back(remotePrefix + "/" + iter->first);
|
slice_names.emplace_back(remotePrefix + "/" + iter->first);
|
||||||
batch_size += iter->second->size;
|
batch_size += iter->second->size;
|
||||||
|
added_total_mem_size_ += iter->second->size;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data_slices.size() > 0) {
|
if (data_slices.size() > 0) {
|
||||||
|
|||||||
@ -64,9 +64,16 @@ class MemFileManagerImpl : public FileManagerImpl {
|
|||||||
return remote_paths_to_size_;
|
return remote_paths_to_size_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
size_t
|
||||||
|
GetAddedTotalMemSize() const {
|
||||||
|
return added_total_mem_size_;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// remote file path
|
// remote file path
|
||||||
std::map<std::string, int64_t> remote_paths_to_size_;
|
std::map<std::string, int64_t> remote_paths_to_size_;
|
||||||
|
|
||||||
|
size_t added_total_mem_size_ = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
using MemFileManagerImplPtr = std::shared_ptr<MemFileManagerImpl>;
|
using MemFileManagerImplPtr = std::shared_ptr<MemFileManagerImpl>;
|
||||||
|
|||||||
@ -236,10 +236,12 @@ class ArrayBitmapIndexTest : public testing::Test {
|
|||||||
DataType::ARRAY, config, ctx);
|
DataType::ARRAY, config, ctx);
|
||||||
build_index->Build();
|
build_index->Build();
|
||||||
|
|
||||||
auto binary_set = build_index->Upload();
|
auto create_index_result = build_index->Upload();
|
||||||
for (const auto& [key, _] : binary_set.binary_map_) {
|
auto memSize = create_index_result->GetMemSize();
|
||||||
index_files.push_back(key);
|
auto serializedSize = create_index_result->GetSerializedSize();
|
||||||
}
|
ASSERT_GT(memSize, 0);
|
||||||
|
ASSERT_GT(serializedSize, 0);
|
||||||
|
index_files = create_index_result->GetIndexFiles();
|
||||||
}
|
}
|
||||||
|
|
||||||
index::CreateIndexInfo index_info{};
|
index::CreateIndexInfo index_info{};
|
||||||
|
|||||||
@ -134,7 +134,6 @@ class BitmapIndexTest : public testing::Test {
|
|||||||
log_path, serialized_bytes.data(), serialized_bytes.size());
|
log_path, serialized_bytes.data(), serialized_bytes.size());
|
||||||
|
|
||||||
storage::FileManagerContext ctx(field_meta, index_meta, chunk_manager_);
|
storage::FileManagerContext ctx(field_meta, index_meta, chunk_manager_);
|
||||||
std::vector<std::string> index_files;
|
|
||||||
|
|
||||||
Config config;
|
Config config;
|
||||||
config["index_type"] = milvus::index::BITMAP_INDEX_TYPE;
|
config["index_type"] = milvus::index::BITMAP_INDEX_TYPE;
|
||||||
@ -145,10 +144,12 @@ class BitmapIndexTest : public testing::Test {
|
|||||||
type_, config, ctx);
|
type_, config, ctx);
|
||||||
build_index->Build();
|
build_index->Build();
|
||||||
|
|
||||||
auto binary_set = build_index->Upload();
|
auto create_index_result = build_index->Upload();
|
||||||
for (const auto& [key, _] : binary_set.binary_map_) {
|
auto memSize = create_index_result->GetMemSize();
|
||||||
index_files.push_back(key);
|
auto serializedSize = create_index_result->GetSerializedSize();
|
||||||
}
|
ASSERT_GT(memSize, 0);
|
||||||
|
ASSERT_GT(serializedSize, 0);
|
||||||
|
auto index_files = create_index_result->GetIndexFiles();
|
||||||
|
|
||||||
index::CreateIndexInfo index_info{};
|
index::CreateIndexInfo index_info{};
|
||||||
index_info.index_type = milvus::index::BITMAP_INDEX_TYPE;
|
index_info.index_type = milvus::index::BITMAP_INDEX_TYPE;
|
||||||
|
|||||||
@ -149,10 +149,12 @@ class HybridIndexTestV1 : public testing::Test {
|
|||||||
type_, config, ctx);
|
type_, config, ctx);
|
||||||
build_index->Build();
|
build_index->Build();
|
||||||
|
|
||||||
auto binary_set = build_index->Upload();
|
auto create_index_result = build_index->Upload();
|
||||||
for (const auto& [key, _] : binary_set.binary_map_) {
|
auto memSize = create_index_result->GetMemSize();
|
||||||
index_files.push_back(key);
|
auto serializedSize = create_index_result->GetSerializedSize();
|
||||||
}
|
ASSERT_GT(memSize, 0);
|
||||||
|
ASSERT_GT(serializedSize, 0);
|
||||||
|
index_files = create_index_result->GetIndexFiles();
|
||||||
}
|
}
|
||||||
|
|
||||||
index::CreateIndexInfo index_info{};
|
index::CreateIndexInfo index_info{};
|
||||||
|
|||||||
@ -486,17 +486,18 @@ TEST_P(IndexTest, BuildAndQuery) {
|
|||||||
milvus::index::IndexBasePtr new_index;
|
milvus::index::IndexBasePtr new_index;
|
||||||
milvus::index::VectorIndex* vec_index = nullptr;
|
milvus::index::VectorIndex* vec_index = nullptr;
|
||||||
|
|
||||||
auto binary_set = index->Upload();
|
auto create_index_result = index->Upload();
|
||||||
index.reset();
|
index.reset();
|
||||||
|
|
||||||
new_index = milvus::index::IndexFactory::GetInstance().CreateIndex(
|
new_index = milvus::index::IndexFactory::GetInstance().CreateIndex(
|
||||||
create_index_info, file_manager_context);
|
create_index_info, file_manager_context);
|
||||||
vec_index = dynamic_cast<milvus::index::VectorIndex*>(new_index.get());
|
vec_index = dynamic_cast<milvus::index::VectorIndex*>(new_index.get());
|
||||||
|
|
||||||
std::vector<std::string> index_files;
|
auto index_files = create_index_result->GetIndexFiles();
|
||||||
for (auto& binary : binary_set.binary_map_) {
|
auto memSize = create_index_result->GetMemSize();
|
||||||
index_files.emplace_back(binary.first);
|
auto serializedSize = create_index_result->GetSerializedSize();
|
||||||
}
|
ASSERT_GT(memSize, 0);
|
||||||
|
ASSERT_GT(serializedSize, 0);
|
||||||
load_conf = generate_load_conf(index_type, metric_type, 0);
|
load_conf = generate_load_conf(index_type, metric_type, 0);
|
||||||
load_conf["index_files"] = index_files;
|
load_conf["index_files"] = index_files;
|
||||||
ASSERT_NO_THROW(vec_index->Load(milvus::tracer::TraceContext{}, load_conf));
|
ASSERT_NO_THROW(vec_index->Load(milvus::tracer::TraceContext{}, load_conf));
|
||||||
@ -551,7 +552,7 @@ TEST_P(IndexTest, Mmap) {
|
|||||||
milvus::index::IndexBasePtr new_index;
|
milvus::index::IndexBasePtr new_index;
|
||||||
milvus::index::VectorIndex* vec_index = nullptr;
|
milvus::index::VectorIndex* vec_index = nullptr;
|
||||||
|
|
||||||
auto binary_set = index->Upload();
|
auto create_index_result = index->Upload();
|
||||||
index.reset();
|
index.reset();
|
||||||
|
|
||||||
new_index = milvus::index::IndexFactory::GetInstance().CreateIndex(
|
new_index = milvus::index::IndexFactory::GetInstance().CreateIndex(
|
||||||
@ -561,10 +562,11 @@ TEST_P(IndexTest, Mmap) {
|
|||||||
}
|
}
|
||||||
vec_index = dynamic_cast<milvus::index::VectorIndex*>(new_index.get());
|
vec_index = dynamic_cast<milvus::index::VectorIndex*>(new_index.get());
|
||||||
|
|
||||||
std::vector<std::string> index_files;
|
auto index_files = create_index_result->GetIndexFiles();
|
||||||
for (auto& binary : binary_set.binary_map_) {
|
auto memSize = create_index_result->GetMemSize();
|
||||||
index_files.emplace_back(binary.first);
|
auto serializedSize = create_index_result->GetSerializedSize();
|
||||||
}
|
ASSERT_GT(memSize, 0);
|
||||||
|
ASSERT_GT(serializedSize, 0);
|
||||||
load_conf = generate_load_conf(index_type, metric_type, 0);
|
load_conf = generate_load_conf(index_type, metric_type, 0);
|
||||||
load_conf["index_files"] = index_files;
|
load_conf["index_files"] = index_files;
|
||||||
load_conf["mmap_filepath"] = "mmap/test_index_mmap_" + index_type;
|
load_conf["mmap_filepath"] = "mmap/test_index_mmap_" + index_type;
|
||||||
@ -610,24 +612,20 @@ TEST_P(IndexTest, GetVector) {
|
|||||||
milvus::index::IndexBasePtr new_index;
|
milvus::index::IndexBasePtr new_index;
|
||||||
milvus::index::VectorIndex* vec_index = nullptr;
|
milvus::index::VectorIndex* vec_index = nullptr;
|
||||||
|
|
||||||
auto binary_set = index->Upload();
|
auto create_index_result = index->Upload();
|
||||||
index.reset();
|
index.reset();
|
||||||
std::vector<std::string> index_files;
|
auto index_files = create_index_result->GetIndexFiles();
|
||||||
for (auto& binary : binary_set.binary_map_) {
|
auto memSize = create_index_result->GetMemSize();
|
||||||
index_files.emplace_back(binary.first);
|
auto serializedSize = create_index_result->GetSerializedSize();
|
||||||
}
|
ASSERT_GT(memSize, 0);
|
||||||
|
ASSERT_GT(serializedSize, 0);
|
||||||
new_index = milvus::index::IndexFactory::GetInstance().CreateIndex(
|
new_index = milvus::index::IndexFactory::GetInstance().CreateIndex(
|
||||||
create_index_info, file_manager_context);
|
create_index_info, file_manager_context);
|
||||||
load_conf = generate_load_conf(index_type, metric_type, 0);
|
load_conf = generate_load_conf(index_type, metric_type, 0);
|
||||||
load_conf["index_files"] = index_files;
|
load_conf["index_files"] = index_files;
|
||||||
|
|
||||||
vec_index = dynamic_cast<milvus::index::VectorIndex*>(new_index.get());
|
vec_index = dynamic_cast<milvus::index::VectorIndex*>(new_index.get());
|
||||||
if (index_type == knowhere::IndexEnum::INDEX_DISKANN) {
|
|
||||||
vec_index->Load(binary_set, load_conf);
|
|
||||||
EXPECT_EQ(vec_index->Count(), NB);
|
|
||||||
} else {
|
|
||||||
vec_index->Load(milvus::tracer::TraceContext{}, load_conf);
|
vec_index->Load(milvus::tracer::TraceContext{}, load_conf);
|
||||||
}
|
|
||||||
if (!is_sparse) {
|
if (!is_sparse) {
|
||||||
EXPECT_EQ(vec_index->GetDim(), DIM);
|
EXPECT_EQ(vec_index->GetDim(), DIM);
|
||||||
}
|
}
|
||||||
@ -716,12 +714,13 @@ TEST_P(IndexTest, GetVector_EmptySparseVector) {
|
|||||||
milvus::index::IndexBasePtr new_index;
|
milvus::index::IndexBasePtr new_index;
|
||||||
milvus::index::VectorIndex* vec_index = nullptr;
|
milvus::index::VectorIndex* vec_index = nullptr;
|
||||||
|
|
||||||
auto binary_set = index->Upload();
|
auto create_index_result = index->Upload();
|
||||||
index.reset();
|
index.reset();
|
||||||
std::vector<std::string> index_files;
|
auto index_files = create_index_result->GetIndexFiles();
|
||||||
for (auto& binary : binary_set.binary_map_) {
|
auto memSize = create_index_result->GetMemSize();
|
||||||
index_files.emplace_back(binary.first);
|
auto serializedSize = create_index_result->GetSerializedSize();
|
||||||
}
|
ASSERT_GT(memSize, 0);
|
||||||
|
ASSERT_GT(serializedSize, 0);
|
||||||
new_index = milvus::index::IndexFactory::GetInstance().CreateIndex(
|
new_index = milvus::index::IndexFactory::GetInstance().CreateIndex(
|
||||||
create_index_info, file_manager_context);
|
create_index_info, file_manager_context);
|
||||||
load_conf = generate_load_conf(index_type, metric_type, 0);
|
load_conf = generate_load_conf(index_type, metric_type, 0);
|
||||||
@ -797,16 +796,17 @@ TEST(Indexing, SearchDiskAnnWithInvalidParam) {
|
|||||||
ASSERT_NO_THROW(index->BuildWithDataset(xb_dataset, build_conf));
|
ASSERT_NO_THROW(index->BuildWithDataset(xb_dataset, build_conf));
|
||||||
|
|
||||||
// serialize and load disk index, disk index can only be search after loading for now
|
// serialize and load disk index, disk index can only be search after loading for now
|
||||||
auto binary_set = index->Upload();
|
auto create_index_result = index->Upload();
|
||||||
|
auto memSize = create_index_result->GetMemSize();
|
||||||
|
auto serializedSize = create_index_result->GetSerializedSize();
|
||||||
|
ASSERT_GT(memSize, 0);
|
||||||
|
ASSERT_GT(serializedSize, 0);
|
||||||
|
auto index_files = create_index_result->GetIndexFiles();
|
||||||
index.reset();
|
index.reset();
|
||||||
|
|
||||||
auto new_index = milvus::index::IndexFactory::GetInstance().CreateIndex(
|
auto new_index = milvus::index::IndexFactory::GetInstance().CreateIndex(
|
||||||
create_index_info, file_manager_context);
|
create_index_info, file_manager_context);
|
||||||
auto vec_index = dynamic_cast<milvus::index::VectorIndex*>(new_index.get());
|
auto vec_index = dynamic_cast<milvus::index::VectorIndex*>(new_index.get());
|
||||||
std::vector<std::string> index_files;
|
|
||||||
for (auto& binary : binary_set.binary_map_) {
|
|
||||||
index_files.emplace_back(binary.first);
|
|
||||||
}
|
|
||||||
auto load_conf = generate_load_conf(index_type, metric_type, NB);
|
auto load_conf = generate_load_conf(index_type, metric_type, NB);
|
||||||
load_conf["index_files"] = index_files;
|
load_conf["index_files"] = index_files;
|
||||||
vec_index->Load(milvus::tracer::TraceContext{}, load_conf);
|
vec_index->Load(milvus::tracer::TraceContext{}, load_conf);
|
||||||
@ -880,16 +880,17 @@ TEST(Indexing, SearchDiskAnnWithFloat16) {
|
|||||||
ASSERT_NO_THROW(index->BuildWithDataset(xb_dataset, build_conf));
|
ASSERT_NO_THROW(index->BuildWithDataset(xb_dataset, build_conf));
|
||||||
|
|
||||||
// serialize and load disk index, disk index can only be search after loading for now
|
// serialize and load disk index, disk index can only be search after loading for now
|
||||||
auto binary_set = index->Upload();
|
auto create_index_result = index->Upload();
|
||||||
|
auto memSize = create_index_result->GetMemSize();
|
||||||
|
auto serializedSize = create_index_result->GetSerializedSize();
|
||||||
|
ASSERT_GT(memSize, 0);
|
||||||
|
ASSERT_GT(serializedSize, 0);
|
||||||
|
auto index_files = create_index_result->GetIndexFiles();
|
||||||
index.reset();
|
index.reset();
|
||||||
|
|
||||||
auto new_index = milvus::index::IndexFactory::GetInstance().CreateIndex(
|
auto new_index = milvus::index::IndexFactory::GetInstance().CreateIndex(
|
||||||
create_index_info, file_manager_context);
|
create_index_info, file_manager_context);
|
||||||
auto vec_index = dynamic_cast<milvus::index::VectorIndex*>(new_index.get());
|
auto vec_index = dynamic_cast<milvus::index::VectorIndex*>(new_index.get());
|
||||||
std::vector<std::string> index_files;
|
|
||||||
for (auto& binary : binary_set.binary_map_) {
|
|
||||||
index_files.emplace_back(binary.first);
|
|
||||||
}
|
|
||||||
auto load_conf = generate_load_conf<float16>(index_type, metric_type, NB);
|
auto load_conf = generate_load_conf<float16>(index_type, metric_type, NB);
|
||||||
load_conf["index_files"] = index_files;
|
load_conf["index_files"] = index_files;
|
||||||
vec_index->Load(milvus::tracer::TraceContext{}, load_conf);
|
vec_index->Load(milvus::tracer::TraceContext{}, load_conf);
|
||||||
@ -962,16 +963,17 @@ TEST(Indexing, SearchDiskAnnWithBFloat16) {
|
|||||||
ASSERT_NO_THROW(index->BuildWithDataset(xb_dataset, build_conf));
|
ASSERT_NO_THROW(index->BuildWithDataset(xb_dataset, build_conf));
|
||||||
|
|
||||||
// serialize and load disk index, disk index can only be search after loading for now
|
// serialize and load disk index, disk index can only be search after loading for now
|
||||||
auto binary_set = index->Upload();
|
auto create_index_result = index->Upload();
|
||||||
|
auto memSize = create_index_result->GetMemSize();
|
||||||
|
auto serializedSize = create_index_result->GetSerializedSize();
|
||||||
|
ASSERT_GT(memSize, 0);
|
||||||
|
ASSERT_GT(serializedSize, 0);
|
||||||
|
auto index_files = create_index_result->GetIndexFiles();
|
||||||
index.reset();
|
index.reset();
|
||||||
|
|
||||||
auto new_index = milvus::index::IndexFactory::GetInstance().CreateIndex(
|
auto new_index = milvus::index::IndexFactory::GetInstance().CreateIndex(
|
||||||
create_index_info, file_manager_context);
|
create_index_info, file_manager_context);
|
||||||
auto vec_index = dynamic_cast<milvus::index::VectorIndex*>(new_index.get());
|
auto vec_index = dynamic_cast<milvus::index::VectorIndex*>(new_index.get());
|
||||||
std::vector<std::string> index_files;
|
|
||||||
for (auto& binary : binary_set.binary_map_) {
|
|
||||||
index_files.emplace_back(binary.first);
|
|
||||||
}
|
|
||||||
auto load_conf = generate_load_conf<bfloat16>(index_type, metric_type, NB);
|
auto load_conf = generate_load_conf<bfloat16>(index_type, metric_type, NB);
|
||||||
load_conf["index_files"] = index_files;
|
load_conf["index_files"] = index_files;
|
||||||
vec_index->Load(milvus::tracer::TraceContext{}, load_conf);
|
vec_index->Load(milvus::tracer::TraceContext{}, load_conf);
|
||||||
@ -993,3 +995,20 @@ TEST(Indexing, SearchDiskAnnWithBFloat16) {
|
|||||||
EXPECT_NO_THROW(vec_index->Query(xq_dataset, search_info, nullptr, result));
|
EXPECT_NO_THROW(vec_index->Query(xq_dataset, search_info, nullptr, result));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
TEST(Indexing, IndexStats) {
|
||||||
|
using milvus::index::IndexStats;
|
||||||
|
using milvus::index::SerializedIndexFileInfo;
|
||||||
|
auto sized_map =
|
||||||
|
std::map<std::string, int64_t>{{"file1", 100}, {"file2", 200}};
|
||||||
|
auto result = IndexStats::NewFromSizeMap(16, sized_map);
|
||||||
|
result->AppendSerializedIndexFileInfo(
|
||||||
|
SerializedIndexFileInfo{"file3", 300});
|
||||||
|
auto files = result->GetIndexFiles();
|
||||||
|
ASSERT_EQ(files.size(), 3);
|
||||||
|
ASSERT_EQ(files[0], "file1");
|
||||||
|
ASSERT_EQ(files[1], "file2");
|
||||||
|
ASSERT_EQ(files[2], "file3");
|
||||||
|
ASSERT_EQ(result->GetMemSize(), 16);
|
||||||
|
ASSERT_EQ(result->GetSerializedSize(), 600);
|
||||||
|
}
|
||||||
@ -193,10 +193,12 @@ test_run() {
|
|||||||
dtype, config, ctx);
|
dtype, config, ctx);
|
||||||
index->Build();
|
index->Build();
|
||||||
|
|
||||||
auto bs = index->Upload();
|
auto create_index_result = index->Upload();
|
||||||
for (const auto& [key, _] : bs.binary_map_) {
|
auto memSize = create_index_result->GetMemSize();
|
||||||
index_files.push_back(key);
|
auto serializedSize = create_index_result->GetSerializedSize();
|
||||||
}
|
ASSERT_GT(memSize, 0);
|
||||||
|
ASSERT_GT(serializedSize, 0);
|
||||||
|
index_files = create_index_result->GetIndexFiles();
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -466,10 +468,12 @@ test_string() {
|
|||||||
dtype, config, ctx);
|
dtype, config, ctx);
|
||||||
index->Build();
|
index->Build();
|
||||||
|
|
||||||
auto bs = index->Upload();
|
auto create_index_result = index->Upload();
|
||||||
for (const auto& [key, _] : bs.binary_map_) {
|
auto memSize = create_index_result->GetMemSize();
|
||||||
index_files.push_back(key);
|
auto serializedSize = create_index_result->GetSerializedSize();
|
||||||
}
|
ASSERT_GT(memSize, 0);
|
||||||
|
ASSERT_GT(serializedSize, 0);
|
||||||
|
index_files = create_index_result->GetIndexFiles();
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|||||||
@ -199,3 +199,9 @@ TEST(Util, dis_closer) {
|
|||||||
EXPECT_FALSE(milvus::query::dis_closer(0.1, 0.2, "IP"));
|
EXPECT_FALSE(milvus::query::dis_closer(0.1, 0.2, "IP"));
|
||||||
EXPECT_FALSE(milvus::query::dis_closer(0.1, 0.1, "IP"));
|
EXPECT_FALSE(milvus::query::dis_closer(0.1, 0.1, "IP"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(Util, ProtoLayout) {
|
||||||
|
milvus::ProtoLayout layout;
|
||||||
|
milvus::proto::cgo::IndexStats result;
|
||||||
|
EXPECT_TRUE(layout.SerializeAndHoldProto(result));
|
||||||
|
}
|
||||||
@ -1165,12 +1165,8 @@ GenVecIndexing(int64_t N,
|
|||||||
knowhere::Version::GetCurrentVersion().VersionNumber(),
|
knowhere::Version::GetCurrentVersion().VersionNumber(),
|
||||||
file_manager_context);
|
file_manager_context);
|
||||||
indexing->BuildWithDataset(database, conf);
|
indexing->BuildWithDataset(database, conf);
|
||||||
auto binary_set = indexing->Upload();
|
auto create_index_result = indexing->Upload();
|
||||||
|
auto index_files = create_index_result->GetIndexFiles();
|
||||||
std::vector<std::string> index_files;
|
|
||||||
for (auto& binary : binary_set.binary_map_) {
|
|
||||||
index_files.emplace_back(binary.first);
|
|
||||||
}
|
|
||||||
conf["index_files"] = index_files;
|
conf["index_files"] = index_files;
|
||||||
// we need a load stage to use index as the producation does
|
// we need a load stage to use index as the producation does
|
||||||
// knowhere would do some data preparation in this stage
|
// knowhere would do some data preparation in this stage
|
||||||
|
|||||||
@ -316,7 +316,7 @@ func Test_compactionTrigger_force(t *testing.T) {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: 0,
|
CreatedUTCTime: 0,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 0,
|
IndexSerializedSize: 0,
|
||||||
WriteHandoff: false,
|
WriteHandoff: false,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -335,7 +335,7 @@ func Test_compactionTrigger_force(t *testing.T) {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: 0,
|
CreatedUTCTime: 0,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 0,
|
IndexSerializedSize: 0,
|
||||||
WriteHandoff: false,
|
WriteHandoff: false,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -354,7 +354,7 @@ func Test_compactionTrigger_force(t *testing.T) {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: 0,
|
CreatedUTCTime: 0,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 0,
|
IndexSerializedSize: 0,
|
||||||
WriteHandoff: false,
|
WriteHandoff: false,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
@ -500,7 +500,7 @@ func createMetaForRecycleUnusedSegIndexes(catalog metastore.DataCoordCatalog) *m
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: 10,
|
CreatedUTCTime: 10,
|
||||||
IndexFileKeys: []string{"file1", "file2"},
|
IndexFileKeys: []string{"file1", "file2"},
|
||||||
IndexSize: 0,
|
IndexSerializedSize: 0,
|
||||||
WriteHandoff: false,
|
WriteHandoff: false,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -519,7 +519,7 @@ func createMetaForRecycleUnusedSegIndexes(catalog metastore.DataCoordCatalog) *m
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: 10,
|
CreatedUTCTime: 10,
|
||||||
IndexFileKeys: []string{"file1", "file2"},
|
IndexFileKeys: []string{"file1", "file2"},
|
||||||
IndexSize: 0,
|
IndexSerializedSize: 0,
|
||||||
WriteHandoff: false,
|
WriteHandoff: false,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -545,7 +545,7 @@ func createMetaForRecycleUnusedSegIndexes(catalog metastore.DataCoordCatalog) *m
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: 10,
|
CreatedUTCTime: 10,
|
||||||
IndexFileKeys: []string{"file1", "file2"},
|
IndexFileKeys: []string{"file1", "file2"},
|
||||||
IndexSize: 0,
|
IndexSerializedSize: 0,
|
||||||
})
|
})
|
||||||
|
|
||||||
meta.indexMeta.segmentBuildInfo.Add(&model.SegmentIndex{
|
meta.indexMeta.segmentBuildInfo.Add(&model.SegmentIndex{
|
||||||
@ -562,7 +562,7 @@ func createMetaForRecycleUnusedSegIndexes(catalog metastore.DataCoordCatalog) *m
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: 10,
|
CreatedUTCTime: 10,
|
||||||
IndexFileKeys: []string{"file1", "file2"},
|
IndexFileKeys: []string{"file1", "file2"},
|
||||||
IndexSize: 0,
|
IndexSerializedSize: 0,
|
||||||
})
|
})
|
||||||
|
|
||||||
for id, segment := range segments {
|
for id, segment := range segments {
|
||||||
@ -665,7 +665,7 @@ func createMetaTableForRecycleUnusedIndexFiles(catalog *datacoord.Catalog) *meta
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: 10,
|
CreatedUTCTime: 10,
|
||||||
IndexFileKeys: []string{"file1", "file2"},
|
IndexFileKeys: []string{"file1", "file2"},
|
||||||
IndexSize: 0,
|
IndexSerializedSize: 0,
|
||||||
WriteHandoff: false,
|
WriteHandoff: false,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -684,7 +684,7 @@ func createMetaTableForRecycleUnusedIndexFiles(catalog *datacoord.Catalog) *meta
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: 10,
|
CreatedUTCTime: 10,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 0,
|
IndexSerializedSize: 0,
|
||||||
WriteHandoff: false,
|
WriteHandoff: false,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -723,7 +723,7 @@ func createMetaTableForRecycleUnusedIndexFiles(catalog *datacoord.Catalog) *meta
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: 10,
|
CreatedUTCTime: 10,
|
||||||
IndexFileKeys: []string{"file1", "file2"},
|
IndexFileKeys: []string{"file1", "file2"},
|
||||||
IndexSize: 0,
|
IndexSerializedSize: 0,
|
||||||
WriteHandoff: false,
|
WriteHandoff: false,
|
||||||
})
|
})
|
||||||
meta.indexMeta.segmentBuildInfo.Add(&model.SegmentIndex{
|
meta.indexMeta.segmentBuildInfo.Add(&model.SegmentIndex{
|
||||||
@ -740,7 +740,7 @@ func createMetaTableForRecycleUnusedIndexFiles(catalog *datacoord.Catalog) *meta
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: 10,
|
CreatedUTCTime: 10,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 0,
|
IndexSerializedSize: 0,
|
||||||
WriteHandoff: false,
|
WriteHandoff: false,
|
||||||
})
|
})
|
||||||
for id, segment := range segments {
|
for id, segment := range segments {
|
||||||
@ -1065,7 +1065,7 @@ func TestGarbageCollector_clearETCD(t *testing.T) {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: 0,
|
CreatedUTCTime: 0,
|
||||||
IndexFileKeys: []string{"file1", "file2"},
|
IndexFileKeys: []string{"file1", "file2"},
|
||||||
IndexSize: 1024,
|
IndexSerializedSize: 1024,
|
||||||
WriteHandoff: false,
|
WriteHandoff: false,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -1084,7 +1084,7 @@ func TestGarbageCollector_clearETCD(t *testing.T) {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: 0,
|
CreatedUTCTime: 0,
|
||||||
IndexFileKeys: []string{"file3", "file4"},
|
IndexFileKeys: []string{"file3", "file4"},
|
||||||
IndexSize: 1024,
|
IndexSerializedSize: 1024,
|
||||||
WriteHandoff: false,
|
WriteHandoff: false,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -1151,7 +1151,7 @@ func TestGarbageCollector_clearETCD(t *testing.T) {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: 0,
|
CreatedUTCTime: 0,
|
||||||
IndexFileKeys: []string{"file1", "file2"},
|
IndexFileKeys: []string{"file1", "file2"},
|
||||||
IndexSize: 1024,
|
IndexSerializedSize: 1024,
|
||||||
WriteHandoff: false,
|
WriteHandoff: false,
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -1169,7 +1169,7 @@ func TestGarbageCollector_clearETCD(t *testing.T) {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: 0,
|
CreatedUTCTime: 0,
|
||||||
IndexFileKeys: []string{"file3", "file4"},
|
IndexFileKeys: []string{"file3", "file4"},
|
||||||
IndexSize: 1024,
|
IndexSerializedSize: 1024,
|
||||||
WriteHandoff: false,
|
WriteHandoff: false,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@ -45,6 +45,7 @@ import (
|
|||||||
"github.com/milvus-io/milvus/pkg/util/funcutil"
|
"github.com/milvus-io/milvus/pkg/util/funcutil"
|
||||||
"github.com/milvus-io/milvus/pkg/util/indexparams"
|
"github.com/milvus-io/milvus/pkg/util/indexparams"
|
||||||
"github.com/milvus-io/milvus/pkg/util/metricsinfo"
|
"github.com/milvus-io/milvus/pkg/util/metricsinfo"
|
||||||
|
"github.com/milvus-io/milvus/pkg/util/paramtable"
|
||||||
"github.com/milvus-io/milvus/pkg/util/timerecord"
|
"github.com/milvus-io/milvus/pkg/util/timerecord"
|
||||||
"github.com/milvus-io/milvus/pkg/util/tsoutil"
|
"github.com/milvus-io/milvus/pkg/util/tsoutil"
|
||||||
"github.com/milvus-io/milvus/pkg/util/typeutil"
|
"github.com/milvus-io/milvus/pkg/util/typeutil"
|
||||||
@ -74,7 +75,7 @@ func newIndexTaskStats(s *model.SegmentIndex) *metricsinfo.IndexTaskStats {
|
|||||||
BuildID: s.BuildID,
|
BuildID: s.BuildID,
|
||||||
IndexState: s.IndexState.String(),
|
IndexState: s.IndexState.String(),
|
||||||
FailReason: s.FailReason,
|
FailReason: s.FailReason,
|
||||||
IndexSize: s.IndexSize,
|
IndexSize: s.IndexMemSize,
|
||||||
IndexVersion: s.IndexVersion,
|
IndexVersion: s.IndexVersion,
|
||||||
CreatedUTCTime: typeutil.TimestampToString(s.CreatedUTCTime * 1000),
|
CreatedUTCTime: typeutil.TimestampToString(s.CreatedUTCTime * 1000),
|
||||||
FinishedUTCTime: typeutil.TimestampToString(s.FinishedUTCTime * 1000),
|
FinishedUTCTime: typeutil.TimestampToString(s.FinishedUTCTime * 1000),
|
||||||
@ -154,6 +155,9 @@ func (m *indexMeta) reloadFromKV() error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
for _, segIdx := range segmentIndexes {
|
for _, segIdx := range segmentIndexes {
|
||||||
|
if segIdx.IndexMemSize == 0 {
|
||||||
|
segIdx.IndexMemSize = segIdx.IndexSerializedSize * paramtable.Get().DataCoordCfg.IndexMemSizeEstimateMultiplier.GetAsUint64()
|
||||||
|
}
|
||||||
m.updateSegmentIndex(segIdx)
|
m.updateSegmentIndex(segIdx)
|
||||||
metrics.FlushedSegmentFileNum.WithLabelValues(metrics.IndexFileLabel).Observe(float64(len(segIdx.IndexFileKeys)))
|
metrics.FlushedSegmentFileNum.WithLabelValues(metrics.IndexFileLabel).Observe(float64(len(segIdx.IndexFileKeys)))
|
||||||
}
|
}
|
||||||
@ -788,7 +792,8 @@ func (m *indexMeta) FinishTask(taskInfo *workerpb.IndexTaskInfo) error {
|
|||||||
segIdx.IndexState = taskInfo.GetState()
|
segIdx.IndexState = taskInfo.GetState()
|
||||||
segIdx.IndexFileKeys = common.CloneStringList(taskInfo.GetIndexFileKeys())
|
segIdx.IndexFileKeys = common.CloneStringList(taskInfo.GetIndexFileKeys())
|
||||||
segIdx.FailReason = taskInfo.GetFailReason()
|
segIdx.FailReason = taskInfo.GetFailReason()
|
||||||
segIdx.IndexSize = taskInfo.GetSerializedSize()
|
segIdx.IndexSerializedSize = taskInfo.GetSerializedSize()
|
||||||
|
segIdx.IndexMemSize = taskInfo.GetMemSize()
|
||||||
segIdx.CurrentIndexVersion = taskInfo.GetCurrentIndexVersion()
|
segIdx.CurrentIndexVersion = taskInfo.GetCurrentIndexVersion()
|
||||||
segIdx.FinishedUTCTime = uint64(time.Now().Unix())
|
segIdx.FinishedUTCTime = uint64(time.Now().Unix())
|
||||||
return m.alterSegmentIndexes([]*model.SegmentIndex{segIdx})
|
return m.alterSegmentIndexes([]*model.SegmentIndex{segIdx})
|
||||||
@ -885,8 +890,8 @@ func (m *indexMeta) SetStoredIndexFileSizeMetric(collections map[UniqueID]*colle
|
|||||||
coll, ok := collections[segmentIdx.CollectionID]
|
coll, ok := collections[segmentIdx.CollectionID]
|
||||||
if ok {
|
if ok {
|
||||||
metrics.DataCoordStoredIndexFilesSize.WithLabelValues(coll.DatabaseName, coll.Schema.GetName(),
|
metrics.DataCoordStoredIndexFilesSize.WithLabelValues(coll.DatabaseName, coll.Schema.GetName(),
|
||||||
fmt.Sprint(segmentIdx.CollectionID)).Add(float64(segmentIdx.IndexSize))
|
fmt.Sprint(segmentIdx.CollectionID)).Add(float64(segmentIdx.IndexSerializedSize))
|
||||||
total += segmentIdx.IndexSize
|
total += segmentIdx.IndexSerializedSize
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return total
|
return total
|
||||||
@ -1135,7 +1140,7 @@ func (m *indexMeta) GetSegmentIndexedFields(collectionID UniqueID, segmentID Uni
|
|||||||
IndexFieldID: index.IndexID,
|
IndexFieldID: index.IndexID,
|
||||||
IndexID: index.IndexID,
|
IndexID: index.IndexID,
|
||||||
BuildID: buildID,
|
BuildID: buildID,
|
||||||
IndexSize: int64(si.IndexSize),
|
IndexSize: int64(si.IndexSerializedSize),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -530,7 +530,7 @@ func TestMeta_AddSegmentIndex(t *testing.T) {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: 12,
|
CreatedUTCTime: 12,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 0,
|
IndexSerializedSize: 0,
|
||||||
}
|
}
|
||||||
|
|
||||||
t.Run("save meta fail", func(t *testing.T) {
|
t.Run("save meta fail", func(t *testing.T) {
|
||||||
@ -677,7 +677,7 @@ func TestMeta_GetSegmentIndexState(t *testing.T) {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: 12,
|
CreatedUTCTime: 12,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 0,
|
IndexSerializedSize: 0,
|
||||||
})
|
})
|
||||||
|
|
||||||
state := m.GetSegmentIndexState(collID, segID, indexID)
|
state := m.GetSegmentIndexState(collID, segID, indexID)
|
||||||
@ -699,7 +699,7 @@ func TestMeta_GetSegmentIndexState(t *testing.T) {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: 12,
|
CreatedUTCTime: 12,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 0,
|
IndexSerializedSize: 0,
|
||||||
})
|
})
|
||||||
|
|
||||||
state := m.GetSegmentIndexState(collID, segID, indexID)
|
state := m.GetSegmentIndexState(collID, segID, indexID)
|
||||||
@ -747,7 +747,7 @@ func TestMeta_GetIndexedSegment(t *testing.T) {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: 10,
|
CreatedUTCTime: 10,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 0,
|
IndexSerializedSize: 0,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@ -783,7 +783,7 @@ func TestMeta_GetIndexedSegment(t *testing.T) {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: 10,
|
CreatedUTCTime: 10,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 0,
|
IndexSerializedSize: 0,
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("success", func(t *testing.T) {
|
t.Run("success", func(t *testing.T) {
|
||||||
@ -1105,7 +1105,7 @@ func TestMeta_GetIndexJob(t *testing.T) {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: 0,
|
CreatedUTCTime: 0,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 0,
|
IndexSerializedSize: 0,
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("exist", func(t *testing.T) {
|
t.Run("exist", func(t *testing.T) {
|
||||||
@ -1193,7 +1193,7 @@ func updateSegmentIndexMeta(t *testing.T) *indexMeta {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: 0,
|
CreatedUTCTime: 0,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 0,
|
IndexSerializedSize: 0,
|
||||||
})
|
})
|
||||||
|
|
||||||
return &indexMeta{
|
return &indexMeta{
|
||||||
@ -1214,7 +1214,7 @@ func updateSegmentIndexMeta(t *testing.T) *indexMeta {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: 0,
|
CreatedUTCTime: 0,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 0,
|
IndexSerializedSize: 0,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -1527,7 +1527,7 @@ func TestBuildIndexTaskStatsJSON(t *testing.T) {
|
|||||||
IndexID: 10,
|
IndexID: 10,
|
||||||
IndexState: commonpb.IndexState_Finished,
|
IndexState: commonpb.IndexState_Finished,
|
||||||
FailReason: "",
|
FailReason: "",
|
||||||
IndexSize: 1024,
|
IndexSerializedSize: 1024,
|
||||||
IndexVersion: 1,
|
IndexVersion: 1,
|
||||||
CreatedUTCTime: uint64(time.Now().Unix()),
|
CreatedUTCTime: uint64(time.Now().Unix()),
|
||||||
}
|
}
|
||||||
@ -1538,7 +1538,7 @@ func TestBuildIndexTaskStatsJSON(t *testing.T) {
|
|||||||
IndexID: 11,
|
IndexID: 11,
|
||||||
IndexState: commonpb.IndexState_Finished,
|
IndexState: commonpb.IndexState_Finished,
|
||||||
FailReason: "",
|
FailReason: "",
|
||||||
IndexSize: 2048,
|
IndexSerializedSize: 2048,
|
||||||
IndexVersion: 1,
|
IndexVersion: 1,
|
||||||
CreatedUTCTime: uint64(time.Now().Unix()),
|
CreatedUTCTime: uint64(time.Now().Unix()),
|
||||||
}
|
}
|
||||||
@ -1651,7 +1651,7 @@ func TestMeta_GetSegmentIndexStatus(t *testing.T) {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: 12,
|
CreatedUTCTime: 12,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 0,
|
IndexSerializedSize: 0,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
segID + 1: {},
|
segID + 1: {},
|
||||||
|
|||||||
@ -932,7 +932,8 @@ func (s *Server) GetIndexInfos(ctx context.Context, req *indexpb.GetIndexInfoReq
|
|||||||
IndexName: s.meta.indexMeta.GetIndexNameByID(segIdx.CollectionID, segIdx.IndexID),
|
IndexName: s.meta.indexMeta.GetIndexNameByID(segIdx.CollectionID, segIdx.IndexID),
|
||||||
IndexParams: indexParams,
|
IndexParams: indexParams,
|
||||||
IndexFilePaths: indexFilePaths,
|
IndexFilePaths: indexFilePaths,
|
||||||
SerializedSize: segIdx.IndexSize,
|
SerializedSize: segIdx.IndexSerializedSize,
|
||||||
|
MemSize: segIdx.IndexMemSize,
|
||||||
IndexVersion: segIdx.IndexVersion,
|
IndexVersion: segIdx.IndexVersion,
|
||||||
NumRows: segIdx.NumRows,
|
NumRows: segIdx.NumRows,
|
||||||
CurrentIndexVersion: segIdx.CurrentIndexVersion,
|
CurrentIndexVersion: segIdx.CurrentIndexVersion,
|
||||||
|
|||||||
@ -413,7 +413,7 @@ func TestServer_AlterIndex(t *testing.T) {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: createTS,
|
CreatedUTCTime: createTS,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 0,
|
IndexSerializedSize: 0,
|
||||||
WriteHandoff: false,
|
WriteHandoff: false,
|
||||||
},
|
},
|
||||||
indexID + 1: {
|
indexID + 1: {
|
||||||
@ -430,7 +430,7 @@ func TestServer_AlterIndex(t *testing.T) {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: createTS,
|
CreatedUTCTime: createTS,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 0,
|
IndexSerializedSize: 0,
|
||||||
WriteHandoff: false,
|
WriteHandoff: false,
|
||||||
},
|
},
|
||||||
indexID + 3: {
|
indexID + 3: {
|
||||||
@ -447,7 +447,7 @@ func TestServer_AlterIndex(t *testing.T) {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: createTS,
|
CreatedUTCTime: createTS,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 0,
|
IndexSerializedSize: 0,
|
||||||
WriteHandoff: false,
|
WriteHandoff: false,
|
||||||
},
|
},
|
||||||
indexID + 4: {
|
indexID + 4: {
|
||||||
@ -464,7 +464,7 @@ func TestServer_AlterIndex(t *testing.T) {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: createTS,
|
CreatedUTCTime: createTS,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 0,
|
IndexSerializedSize: 0,
|
||||||
WriteHandoff: false,
|
WriteHandoff: false,
|
||||||
},
|
},
|
||||||
indexID + 5: {
|
indexID + 5: {
|
||||||
@ -481,7 +481,7 @@ func TestServer_AlterIndex(t *testing.T) {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: createTS,
|
CreatedUTCTime: createTS,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 0,
|
IndexSerializedSize: 0,
|
||||||
WriteHandoff: false,
|
WriteHandoff: false,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -856,7 +856,7 @@ func TestServer_GetIndexState(t *testing.T) {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: 0,
|
CreatedUTCTime: 0,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 0,
|
IndexSerializedSize: 0,
|
||||||
WriteHandoff: false,
|
WriteHandoff: false,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -981,7 +981,7 @@ func TestServer_GetSegmentIndexState(t *testing.T) {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: createTS,
|
CreatedUTCTime: createTS,
|
||||||
IndexFileKeys: []string{"file1", "file2"},
|
IndexFileKeys: []string{"file1", "file2"},
|
||||||
IndexSize: 1025,
|
IndexSerializedSize: 1025,
|
||||||
WriteHandoff: false,
|
WriteHandoff: false,
|
||||||
})
|
})
|
||||||
s.meta.segments.SetSegment(segID, &SegmentInfo{
|
s.meta.segments.SetSegment(segID, &SegmentInfo{
|
||||||
@ -1018,7 +1018,7 @@ func TestServer_GetSegmentIndexState(t *testing.T) {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: createTS,
|
CreatedUTCTime: createTS,
|
||||||
IndexFileKeys: []string{"file1", "file2"},
|
IndexFileKeys: []string{"file1", "file2"},
|
||||||
IndexSize: 1025,
|
IndexSerializedSize: 1025,
|
||||||
WriteHandoff: false,
|
WriteHandoff: false,
|
||||||
})
|
})
|
||||||
resp, err := s.GetSegmentIndexState(ctx, req)
|
resp, err := s.GetSegmentIndexState(ctx, req)
|
||||||
@ -1140,7 +1140,7 @@ func TestServer_GetIndexBuildProgress(t *testing.T) {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: createTS,
|
CreatedUTCTime: createTS,
|
||||||
IndexFileKeys: []string{"file1", "file2"},
|
IndexFileKeys: []string{"file1", "file2"},
|
||||||
IndexSize: 0,
|
IndexSerializedSize: 0,
|
||||||
WriteHandoff: false,
|
WriteHandoff: false,
|
||||||
})
|
})
|
||||||
s.meta.segments = NewSegmentsInfo()
|
s.meta.segments = NewSegmentsInfo()
|
||||||
@ -1402,7 +1402,7 @@ func TestServer_DescribeIndex(t *testing.T) {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: createTS,
|
CreatedUTCTime: createTS,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 0,
|
IndexSerializedSize: 0,
|
||||||
WriteHandoff: false,
|
WriteHandoff: false,
|
||||||
},
|
},
|
||||||
indexID + 1: {
|
indexID + 1: {
|
||||||
@ -1419,7 +1419,7 @@ func TestServer_DescribeIndex(t *testing.T) {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: createTS,
|
CreatedUTCTime: createTS,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 0,
|
IndexSerializedSize: 0,
|
||||||
WriteHandoff: false,
|
WriteHandoff: false,
|
||||||
},
|
},
|
||||||
indexID + 3: {
|
indexID + 3: {
|
||||||
@ -1436,7 +1436,7 @@ func TestServer_DescribeIndex(t *testing.T) {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: createTS,
|
CreatedUTCTime: createTS,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 0,
|
IndexSerializedSize: 0,
|
||||||
WriteHandoff: false,
|
WriteHandoff: false,
|
||||||
},
|
},
|
||||||
indexID + 4: {
|
indexID + 4: {
|
||||||
@ -1453,7 +1453,7 @@ func TestServer_DescribeIndex(t *testing.T) {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: createTS,
|
CreatedUTCTime: createTS,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 0,
|
IndexSerializedSize: 0,
|
||||||
WriteHandoff: false,
|
WriteHandoff: false,
|
||||||
},
|
},
|
||||||
indexID + 5: {
|
indexID + 5: {
|
||||||
@ -1470,7 +1470,7 @@ func TestServer_DescribeIndex(t *testing.T) {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: createTS,
|
CreatedUTCTime: createTS,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 0,
|
IndexSerializedSize: 0,
|
||||||
WriteHandoff: false,
|
WriteHandoff: false,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -1907,7 +1907,7 @@ func TestServer_GetIndexStatistics(t *testing.T) {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: createTS,
|
CreatedUTCTime: createTS,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 0,
|
IndexSerializedSize: 0,
|
||||||
WriteHandoff: false,
|
WriteHandoff: false,
|
||||||
},
|
},
|
||||||
indexID + 1: {
|
indexID + 1: {
|
||||||
@ -1924,7 +1924,7 @@ func TestServer_GetIndexStatistics(t *testing.T) {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: createTS,
|
CreatedUTCTime: createTS,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 0,
|
IndexSerializedSize: 0,
|
||||||
WriteHandoff: false,
|
WriteHandoff: false,
|
||||||
},
|
},
|
||||||
indexID + 3: {
|
indexID + 3: {
|
||||||
@ -1941,7 +1941,7 @@ func TestServer_GetIndexStatistics(t *testing.T) {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: createTS,
|
CreatedUTCTime: createTS,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 0,
|
IndexSerializedSize: 0,
|
||||||
WriteHandoff: false,
|
WriteHandoff: false,
|
||||||
},
|
},
|
||||||
indexID + 4: {
|
indexID + 4: {
|
||||||
@ -1958,7 +1958,7 @@ func TestServer_GetIndexStatistics(t *testing.T) {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: createTS,
|
CreatedUTCTime: createTS,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 0,
|
IndexSerializedSize: 0,
|
||||||
WriteHandoff: false,
|
WriteHandoff: false,
|
||||||
},
|
},
|
||||||
indexID + 5: {
|
indexID + 5: {
|
||||||
@ -1975,7 +1975,7 @@ func TestServer_GetIndexStatistics(t *testing.T) {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: createTS,
|
CreatedUTCTime: createTS,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 0,
|
IndexSerializedSize: 0,
|
||||||
WriteHandoff: false,
|
WriteHandoff: false,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -2299,7 +2299,7 @@ func TestServer_GetIndexInfos(t *testing.T) {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: createTS,
|
CreatedUTCTime: createTS,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 0,
|
IndexSerializedSize: 0,
|
||||||
WriteHandoff: false,
|
WriteHandoff: false,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
@ -719,7 +719,7 @@ func TestServer_getSegmentsJSON(t *testing.T) {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: 12,
|
CreatedUTCTime: 12,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 0,
|
IndexSerializedSize: 0,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
@ -1646,7 +1646,7 @@ func TestGetRecoveryInfo(t *testing.T) {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: 0,
|
CreatedUTCTime: 0,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 0,
|
IndexSerializedSize: 0,
|
||||||
})
|
})
|
||||||
|
|
||||||
req := &datapb.GetRecoveryInfoRequest{
|
req := &datapb.GetRecoveryInfoRequest{
|
||||||
|
|||||||
@ -1271,7 +1271,7 @@ func TestGetRecoveryInfoV2(t *testing.T) {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: 0,
|
CreatedUTCTime: 0,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 0,
|
IndexSerializedSize: 0,
|
||||||
})
|
})
|
||||||
|
|
||||||
ch := &channelMeta{Name: "vchan1", CollectionID: 0}
|
ch := &channelMeta{Name: "vchan1", CollectionID: 0}
|
||||||
|
|||||||
@ -71,7 +71,7 @@ func createIndexMeta(catalog metastore.DataCoordCatalog) *indexMeta {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: 0,
|
CreatedUTCTime: 0,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 1,
|
IndexSerializedSize: 1,
|
||||||
})
|
})
|
||||||
|
|
||||||
indexBuildInfo.Add(&model.SegmentIndex{
|
indexBuildInfo.Add(&model.SegmentIndex{
|
||||||
@ -88,7 +88,7 @@ func createIndexMeta(catalog metastore.DataCoordCatalog) *indexMeta {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: 1111,
|
CreatedUTCTime: 1111,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 1,
|
IndexSerializedSize: 1,
|
||||||
})
|
})
|
||||||
|
|
||||||
indexBuildInfo.Add(&model.SegmentIndex{
|
indexBuildInfo.Add(&model.SegmentIndex{
|
||||||
@ -105,7 +105,7 @@ func createIndexMeta(catalog metastore.DataCoordCatalog) *indexMeta {
|
|||||||
IsDeleted: true,
|
IsDeleted: true,
|
||||||
CreatedUTCTime: 1111,
|
CreatedUTCTime: 1111,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 1,
|
IndexSerializedSize: 1,
|
||||||
})
|
})
|
||||||
|
|
||||||
indexBuildInfo.Add(&model.SegmentIndex{
|
indexBuildInfo.Add(&model.SegmentIndex{
|
||||||
@ -122,7 +122,7 @@ func createIndexMeta(catalog metastore.DataCoordCatalog) *indexMeta {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: 1111,
|
CreatedUTCTime: 1111,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 1,
|
IndexSerializedSize: 1,
|
||||||
})
|
})
|
||||||
|
|
||||||
indexBuildInfo.Add(&model.SegmentIndex{
|
indexBuildInfo.Add(&model.SegmentIndex{
|
||||||
@ -139,7 +139,7 @@ func createIndexMeta(catalog metastore.DataCoordCatalog) *indexMeta {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: 1111,
|
CreatedUTCTime: 1111,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 1,
|
IndexSerializedSize: 1,
|
||||||
})
|
})
|
||||||
|
|
||||||
indexBuildInfo.Add(&model.SegmentIndex{
|
indexBuildInfo.Add(&model.SegmentIndex{
|
||||||
@ -156,7 +156,7 @@ func createIndexMeta(catalog metastore.DataCoordCatalog) *indexMeta {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: 1111,
|
CreatedUTCTime: 1111,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 1,
|
IndexSerializedSize: 1,
|
||||||
})
|
})
|
||||||
|
|
||||||
indexBuildInfo.Add(&model.SegmentIndex{
|
indexBuildInfo.Add(&model.SegmentIndex{
|
||||||
@ -173,7 +173,7 @@ func createIndexMeta(catalog metastore.DataCoordCatalog) *indexMeta {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: 1111,
|
CreatedUTCTime: 1111,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 1,
|
IndexSerializedSize: 1,
|
||||||
})
|
})
|
||||||
|
|
||||||
indexBuildInfo.Add(&model.SegmentIndex{
|
indexBuildInfo.Add(&model.SegmentIndex{
|
||||||
@ -190,7 +190,7 @@ func createIndexMeta(catalog metastore.DataCoordCatalog) *indexMeta {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: 1111,
|
CreatedUTCTime: 1111,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 1,
|
IndexSerializedSize: 1,
|
||||||
})
|
})
|
||||||
|
|
||||||
indexBuildInfo.Add(&model.SegmentIndex{
|
indexBuildInfo.Add(&model.SegmentIndex{
|
||||||
@ -207,7 +207,7 @@ func createIndexMeta(catalog metastore.DataCoordCatalog) *indexMeta {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: 1111,
|
CreatedUTCTime: 1111,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 1,
|
IndexSerializedSize: 1,
|
||||||
})
|
})
|
||||||
|
|
||||||
indexBuildInfo.Add(&model.SegmentIndex{
|
indexBuildInfo.Add(&model.SegmentIndex{
|
||||||
@ -224,7 +224,7 @@ func createIndexMeta(catalog metastore.DataCoordCatalog) *indexMeta {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: 1111,
|
CreatedUTCTime: 1111,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 1,
|
IndexSerializedSize: 1,
|
||||||
})
|
})
|
||||||
|
|
||||||
indexBuildInfo.Add(&model.SegmentIndex{
|
indexBuildInfo.Add(&model.SegmentIndex{
|
||||||
@ -241,7 +241,7 @@ func createIndexMeta(catalog metastore.DataCoordCatalog) *indexMeta {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: 1111,
|
CreatedUTCTime: 1111,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 1,
|
IndexSerializedSize: 1,
|
||||||
})
|
})
|
||||||
|
|
||||||
return &indexMeta{
|
return &indexMeta{
|
||||||
@ -291,7 +291,7 @@ func createIndexMeta(catalog metastore.DataCoordCatalog) *indexMeta {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: 0,
|
CreatedUTCTime: 0,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 1,
|
IndexSerializedSize: 1,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
segID + 1: {
|
segID + 1: {
|
||||||
@ -309,7 +309,7 @@ func createIndexMeta(catalog metastore.DataCoordCatalog) *indexMeta {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: 1111,
|
CreatedUTCTime: 1111,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 1,
|
IndexSerializedSize: 1,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
segID + 2: {
|
segID + 2: {
|
||||||
@ -327,7 +327,7 @@ func createIndexMeta(catalog metastore.DataCoordCatalog) *indexMeta {
|
|||||||
IsDeleted: true,
|
IsDeleted: true,
|
||||||
CreatedUTCTime: 1111,
|
CreatedUTCTime: 1111,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 1,
|
IndexSerializedSize: 1,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
segID + 3: {
|
segID + 3: {
|
||||||
@ -345,7 +345,7 @@ func createIndexMeta(catalog metastore.DataCoordCatalog) *indexMeta {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: 1111,
|
CreatedUTCTime: 1111,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 1,
|
IndexSerializedSize: 1,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
segID + 4: {
|
segID + 4: {
|
||||||
@ -363,7 +363,7 @@ func createIndexMeta(catalog metastore.DataCoordCatalog) *indexMeta {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: 1111,
|
CreatedUTCTime: 1111,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 1,
|
IndexSerializedSize: 1,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
segID + 5: {
|
segID + 5: {
|
||||||
@ -381,7 +381,7 @@ func createIndexMeta(catalog metastore.DataCoordCatalog) *indexMeta {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: 1111,
|
CreatedUTCTime: 1111,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 1,
|
IndexSerializedSize: 1,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
segID + 6: {
|
segID + 6: {
|
||||||
@ -399,7 +399,7 @@ func createIndexMeta(catalog metastore.DataCoordCatalog) *indexMeta {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: 1111,
|
CreatedUTCTime: 1111,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 1,
|
IndexSerializedSize: 1,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
segID + 7: {
|
segID + 7: {
|
||||||
@ -417,7 +417,7 @@ func createIndexMeta(catalog metastore.DataCoordCatalog) *indexMeta {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: 1111,
|
CreatedUTCTime: 1111,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 1,
|
IndexSerializedSize: 1,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
segID + 8: {
|
segID + 8: {
|
||||||
@ -435,7 +435,7 @@ func createIndexMeta(catalog metastore.DataCoordCatalog) *indexMeta {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: 1111,
|
CreatedUTCTime: 1111,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 1,
|
IndexSerializedSize: 1,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
segID + 9: {
|
segID + 9: {
|
||||||
@ -453,7 +453,7 @@ func createIndexMeta(catalog metastore.DataCoordCatalog) *indexMeta {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: 1111,
|
CreatedUTCTime: 1111,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 1,
|
IndexSerializedSize: 1,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
segID + 10: {
|
segID + 10: {
|
||||||
@ -471,7 +471,7 @@ func createIndexMeta(catalog metastore.DataCoordCatalog) *indexMeta {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: 1111,
|
CreatedUTCTime: 1111,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 1,
|
IndexSerializedSize: 1,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -1554,7 +1554,7 @@ func (s *taskSchedulerSuite) Test_indexTaskWithMvOptionalScalarField() {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: 0,
|
CreatedUTCTime: 0,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 0,
|
IndexSerializedSize: 0,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -1596,7 +1596,7 @@ func (s *taskSchedulerSuite) Test_indexTaskWithMvOptionalScalarField() {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: 0,
|
CreatedUTCTime: 0,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 0,
|
IndexSerializedSize: 0,
|
||||||
})
|
})
|
||||||
cm := mocks.NewChunkManager(s.T())
|
cm := mocks.NewChunkManager(s.T())
|
||||||
cm.EXPECT().RootPath().Return("ut-index")
|
cm.EXPECT().RootPath().Return("ut-index")
|
||||||
|
|||||||
@ -132,6 +132,7 @@ func (i *IndexNode) QueryJobs(ctx context.Context, req *workerpb.QueryJobsReques
|
|||||||
state: info.state,
|
state: info.state,
|
||||||
fileKeys: common.CloneStringList(info.fileKeys),
|
fileKeys: common.CloneStringList(info.fileKeys),
|
||||||
serializedSize: info.serializedSize,
|
serializedSize: info.serializedSize,
|
||||||
|
memSize: info.memSize,
|
||||||
failReason: info.failReason,
|
failReason: info.failReason,
|
||||||
currentIndexVersion: info.currentIndexVersion,
|
currentIndexVersion: info.currentIndexVersion,
|
||||||
indexStoreVersion: info.indexStoreVersion,
|
indexStoreVersion: info.indexStoreVersion,
|
||||||
@ -154,6 +155,7 @@ func (i *IndexNode) QueryJobs(ctx context.Context, req *workerpb.QueryJobsReques
|
|||||||
ret.IndexInfos[i].State = info.state
|
ret.IndexInfos[i].State = info.state
|
||||||
ret.IndexInfos[i].IndexFileKeys = info.fileKeys
|
ret.IndexInfos[i].IndexFileKeys = info.fileKeys
|
||||||
ret.IndexInfos[i].SerializedSize = info.serializedSize
|
ret.IndexInfos[i].SerializedSize = info.serializedSize
|
||||||
|
ret.IndexInfos[i].MemSize = info.memSize
|
||||||
ret.IndexInfos[i].FailReason = info.failReason
|
ret.IndexInfos[i].FailReason = info.failReason
|
||||||
ret.IndexInfos[i].CurrentIndexVersion = info.currentIndexVersion
|
ret.IndexInfos[i].CurrentIndexVersion = info.currentIndexVersion
|
||||||
ret.IndexInfos[i].IndexStoreVersion = info.indexStoreVersion
|
ret.IndexInfos[i].IndexStoreVersion = info.indexStoreVersion
|
||||||
@ -444,6 +446,7 @@ func (i *IndexNode) QueryJobsV2(ctx context.Context, req *workerpb.QueryJobsV2Re
|
|||||||
state: info.state,
|
state: info.state,
|
||||||
fileKeys: common.CloneStringList(info.fileKeys),
|
fileKeys: common.CloneStringList(info.fileKeys),
|
||||||
serializedSize: info.serializedSize,
|
serializedSize: info.serializedSize,
|
||||||
|
memSize: info.memSize,
|
||||||
failReason: info.failReason,
|
failReason: info.failReason,
|
||||||
currentIndexVersion: info.currentIndexVersion,
|
currentIndexVersion: info.currentIndexVersion,
|
||||||
indexStoreVersion: info.indexStoreVersion,
|
indexStoreVersion: info.indexStoreVersion,
|
||||||
@ -462,6 +465,7 @@ func (i *IndexNode) QueryJobsV2(ctx context.Context, req *workerpb.QueryJobsV2Re
|
|||||||
results[i].State = info.state
|
results[i].State = info.state
|
||||||
results[i].IndexFileKeys = info.fileKeys
|
results[i].IndexFileKeys = info.fileKeys
|
||||||
results[i].SerializedSize = info.serializedSize
|
results[i].SerializedSize = info.serializedSize
|
||||||
|
results[i].MemSize = info.memSize
|
||||||
results[i].FailReason = info.failReason
|
results[i].FailReason = info.failReason
|
||||||
results[i].CurrentIndexVersion = info.currentIndexVersion
|
results[i].CurrentIndexVersion = info.currentIndexVersion
|
||||||
results[i].IndexStoreVersion = info.indexStoreVersion
|
results[i].IndexStoreVersion = info.indexStoreVersion
|
||||||
|
|||||||
@ -332,7 +332,7 @@ func (it *indexBuildTask) PostExecute(ctx context.Context) error {
|
|||||||
log.Warn("IndexNode indexBuildTask Execute CIndexDelete failed", zap.Error(err))
|
log.Warn("IndexNode indexBuildTask Execute CIndexDelete failed", zap.Error(err))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
indexFilePath2Size, err := it.index.UpLoad()
|
indexStats, err := it.index.UpLoad()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Warn("failed to upload index", zap.Error(err))
|
log.Warn("failed to upload index", zap.Error(err))
|
||||||
gcIndex()
|
gcIndex()
|
||||||
@ -347,19 +347,21 @@ func (it *indexBuildTask) PostExecute(ctx context.Context) error {
|
|||||||
// use serialized size before encoding
|
// use serialized size before encoding
|
||||||
var serializedSize uint64
|
var serializedSize uint64
|
||||||
saveFileKeys := make([]string, 0)
|
saveFileKeys := make([]string, 0)
|
||||||
for filePath, fileSize := range indexFilePath2Size {
|
for _, indexInfo := range indexStats.GetSerializedIndexInfos() {
|
||||||
serializedSize += uint64(fileSize)
|
serializedSize += uint64(indexInfo.FileSize)
|
||||||
parts := strings.Split(filePath, "/")
|
parts := strings.Split(indexInfo.FileName, "/")
|
||||||
fileKey := parts[len(parts)-1]
|
fileKey := parts[len(parts)-1]
|
||||||
saveFileKeys = append(saveFileKeys, fileKey)
|
saveFileKeys = append(saveFileKeys, fileKey)
|
||||||
}
|
}
|
||||||
|
|
||||||
it.node.storeIndexFilesAndStatistic(it.req.GetClusterID(), it.req.GetBuildID(), saveFileKeys, serializedSize, it.req.GetCurrentIndexVersion())
|
it.node.storeIndexFilesAndStatistic(it.req.GetClusterID(), it.req.GetBuildID(), saveFileKeys, serializedSize, uint64(indexStats.MemSize), it.req.GetCurrentIndexVersion())
|
||||||
log.Debug("save index files done", zap.Strings("IndexFiles", saveFileKeys))
|
|
||||||
saveIndexFileDur := it.tr.RecordSpan()
|
saveIndexFileDur := it.tr.RecordSpan()
|
||||||
metrics.IndexNodeSaveIndexFileLatency.WithLabelValues(strconv.FormatInt(paramtable.GetNodeID(), 10)).Observe(saveIndexFileDur.Seconds())
|
metrics.IndexNodeSaveIndexFileLatency.WithLabelValues(strconv.FormatInt(paramtable.GetNodeID(), 10)).Observe(saveIndexFileDur.Seconds())
|
||||||
it.tr.Elapse("index building all done")
|
it.tr.Elapse("index building all done")
|
||||||
log.Info("Successfully save index files")
|
log.Info("Successfully save index files",
|
||||||
|
zap.Uint64("serializedSize", serializedSize),
|
||||||
|
zap.Int64("memSize", indexStats.MemSize),
|
||||||
|
zap.Strings("indexFiles", saveFileKeys))
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -34,6 +34,7 @@ type indexTaskInfo struct {
|
|||||||
state commonpb.IndexState
|
state commonpb.IndexState
|
||||||
fileKeys []string
|
fileKeys []string
|
||||||
serializedSize uint64
|
serializedSize uint64
|
||||||
|
memSize uint64
|
||||||
failReason string
|
failReason string
|
||||||
currentIndexVersion int32
|
currentIndexVersion int32
|
||||||
indexStoreVersion int64
|
indexStoreVersion int64
|
||||||
@ -90,6 +91,7 @@ func (i *IndexNode) storeIndexFilesAndStatistic(
|
|||||||
buildID UniqueID,
|
buildID UniqueID,
|
||||||
fileKeys []string,
|
fileKeys []string,
|
||||||
serializedSize uint64,
|
serializedSize uint64,
|
||||||
|
memSize uint64,
|
||||||
currentIndexVersion int32,
|
currentIndexVersion int32,
|
||||||
) {
|
) {
|
||||||
key := taskKey{ClusterID: ClusterID, TaskID: buildID}
|
key := taskKey{ClusterID: ClusterID, TaskID: buildID}
|
||||||
@ -98,31 +100,12 @@ func (i *IndexNode) storeIndexFilesAndStatistic(
|
|||||||
if info, ok := i.indexTasks[key]; ok {
|
if info, ok := i.indexTasks[key]; ok {
|
||||||
info.fileKeys = common.CloneStringList(fileKeys)
|
info.fileKeys = common.CloneStringList(fileKeys)
|
||||||
info.serializedSize = serializedSize
|
info.serializedSize = serializedSize
|
||||||
|
info.memSize = memSize
|
||||||
info.currentIndexVersion = currentIndexVersion
|
info.currentIndexVersion = currentIndexVersion
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (i *IndexNode) storeIndexFilesAndStatisticV2(
|
|
||||||
ClusterID string,
|
|
||||||
buildID UniqueID,
|
|
||||||
fileKeys []string,
|
|
||||||
serializedSize uint64,
|
|
||||||
currentIndexVersion int32,
|
|
||||||
indexStoreVersion int64,
|
|
||||||
) {
|
|
||||||
key := taskKey{ClusterID: ClusterID, TaskID: buildID}
|
|
||||||
i.stateLock.Lock()
|
|
||||||
defer i.stateLock.Unlock()
|
|
||||||
if info, ok := i.indexTasks[key]; ok {
|
|
||||||
info.fileKeys = common.CloneStringList(fileKeys)
|
|
||||||
info.serializedSize = serializedSize
|
|
||||||
info.currentIndexVersion = currentIndexVersion
|
|
||||||
info.indexStoreVersion = indexStoreVersion
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (i *IndexNode) deleteIndexTaskInfos(ctx context.Context, keys []taskKey) []*indexTaskInfo {
|
func (i *IndexNode) deleteIndexTaskInfos(ctx context.Context, keys []taskKey) []*indexTaskInfo {
|
||||||
i.stateLock.Lock()
|
i.stateLock.Lock()
|
||||||
defer i.stateLock.Unlock()
|
defer i.stateLock.Unlock()
|
||||||
|
|||||||
@ -1026,7 +1026,7 @@ func TestCatalog_CreateSegmentIndex(t *testing.T) {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: 0,
|
CreatedUTCTime: 0,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 0,
|
IndexSerializedSize: 0,
|
||||||
}
|
}
|
||||||
|
|
||||||
t.Run("success", func(t *testing.T) {
|
t.Run("success", func(t *testing.T) {
|
||||||
@ -1126,7 +1126,7 @@ func TestCatalog_AlterSegmentIndexes(t *testing.T) {
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: 0,
|
CreatedUTCTime: 0,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 0,
|
IndexSerializedSize: 0,
|
||||||
}
|
}
|
||||||
|
|
||||||
t.Run("add", func(t *testing.T) {
|
t.Run("add", func(t *testing.T) {
|
||||||
|
|||||||
@ -20,7 +20,12 @@ type SegmentIndex struct {
|
|||||||
IsDeleted bool
|
IsDeleted bool
|
||||||
CreatedUTCTime uint64
|
CreatedUTCTime uint64
|
||||||
IndexFileKeys []string
|
IndexFileKeys []string
|
||||||
IndexSize uint64
|
// The byte size of serialized index data at oos. (compressed)
|
||||||
|
IndexSerializedSize uint64
|
||||||
|
// The byte size of index data in memory. (uncompressed)
|
||||||
|
// The IndexMemSize may not be stored at old milvus implementation, so it may be not accurate.
|
||||||
|
// (generated by the IndexSerializedSize multiplied with a configured compress-ratio).
|
||||||
|
IndexMemSize uint64
|
||||||
// deprecated
|
// deprecated
|
||||||
WriteHandoff bool
|
WriteHandoff bool
|
||||||
CurrentIndexVersion int32
|
CurrentIndexVersion int32
|
||||||
@ -32,7 +37,6 @@ func UnmarshalSegmentIndexModel(segIndex *indexpb.SegmentIndex) *SegmentIndex {
|
|||||||
if segIndex == nil {
|
if segIndex == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return &SegmentIndex{
|
return &SegmentIndex{
|
||||||
SegmentID: segIndex.SegmentID,
|
SegmentID: segIndex.SegmentID,
|
||||||
CollectionID: segIndex.CollectionID,
|
CollectionID: segIndex.CollectionID,
|
||||||
@ -47,7 +51,8 @@ func UnmarshalSegmentIndexModel(segIndex *indexpb.SegmentIndex) *SegmentIndex {
|
|||||||
IsDeleted: segIndex.Deleted,
|
IsDeleted: segIndex.Deleted,
|
||||||
CreatedUTCTime: segIndex.CreateTime,
|
CreatedUTCTime: segIndex.CreateTime,
|
||||||
IndexFileKeys: common.CloneStringList(segIndex.IndexFileKeys),
|
IndexFileKeys: common.CloneStringList(segIndex.IndexFileKeys),
|
||||||
IndexSize: segIndex.SerializeSize,
|
IndexSerializedSize: segIndex.SerializeSize,
|
||||||
|
IndexMemSize: segIndex.MemSize,
|
||||||
WriteHandoff: segIndex.WriteHandoff,
|
WriteHandoff: segIndex.WriteHandoff,
|
||||||
CurrentIndexVersion: segIndex.GetCurrentIndexVersion(),
|
CurrentIndexVersion: segIndex.GetCurrentIndexVersion(),
|
||||||
FinishedUTCTime: segIndex.FinishedTime,
|
FinishedUTCTime: segIndex.FinishedTime,
|
||||||
@ -73,7 +78,8 @@ func MarshalSegmentIndexModel(segIdx *SegmentIndex) *indexpb.SegmentIndex {
|
|||||||
IndexFileKeys: common.CloneStringList(segIdx.IndexFileKeys),
|
IndexFileKeys: common.CloneStringList(segIdx.IndexFileKeys),
|
||||||
Deleted: segIdx.IsDeleted,
|
Deleted: segIdx.IsDeleted,
|
||||||
CreateTime: segIdx.CreatedUTCTime,
|
CreateTime: segIdx.CreatedUTCTime,
|
||||||
SerializeSize: segIdx.IndexSize,
|
SerializeSize: segIdx.IndexSerializedSize,
|
||||||
|
MemSize: segIdx.IndexMemSize,
|
||||||
WriteHandoff: segIdx.WriteHandoff,
|
WriteHandoff: segIdx.WriteHandoff,
|
||||||
CurrentIndexVersion: segIdx.CurrentIndexVersion,
|
CurrentIndexVersion: segIdx.CurrentIndexVersion,
|
||||||
FinishedTime: segIdx.FinishedUTCTime,
|
FinishedTime: segIdx.FinishedUTCTime,
|
||||||
@ -95,7 +101,8 @@ func CloneSegmentIndex(segIndex *SegmentIndex) *SegmentIndex {
|
|||||||
IsDeleted: segIndex.IsDeleted,
|
IsDeleted: segIndex.IsDeleted,
|
||||||
CreatedUTCTime: segIndex.CreatedUTCTime,
|
CreatedUTCTime: segIndex.CreatedUTCTime,
|
||||||
IndexFileKeys: common.CloneStringList(segIndex.IndexFileKeys),
|
IndexFileKeys: common.CloneStringList(segIndex.IndexFileKeys),
|
||||||
IndexSize: segIndex.IndexSize,
|
IndexSerializedSize: segIndex.IndexSerializedSize,
|
||||||
|
IndexMemSize: segIndex.IndexMemSize,
|
||||||
WriteHandoff: segIndex.WriteHandoff,
|
WriteHandoff: segIndex.WriteHandoff,
|
||||||
CurrentIndexVersion: segIndex.CurrentIndexVersion,
|
CurrentIndexVersion: segIndex.CurrentIndexVersion,
|
||||||
FinishedUTCTime: segIndex.FinishedUTCTime,
|
FinishedUTCTime: segIndex.FinishedUTCTime,
|
||||||
|
|||||||
@ -44,7 +44,7 @@ var (
|
|||||||
IsDeleted: false,
|
IsDeleted: false,
|
||||||
CreatedUTCTime: 1,
|
CreatedUTCTime: 1,
|
||||||
IndexFileKeys: nil,
|
IndexFileKeys: nil,
|
||||||
IndexSize: 0,
|
IndexSerializedSize: 0,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@ -356,7 +356,7 @@ func (broker *CoordinatorBroker) GetIndexInfo(ctx context.Context, collectionID
|
|||||||
BuildID: info.GetBuildID(),
|
BuildID: info.GetBuildID(),
|
||||||
IndexParams: info.GetIndexParams(),
|
IndexParams: info.GetIndexParams(),
|
||||||
IndexFilePaths: info.GetIndexFilePaths(),
|
IndexFilePaths: info.GetIndexFilePaths(),
|
||||||
IndexSize: int64(info.GetSerializedSize()),
|
IndexSize: int64(info.GetMemSize()),
|
||||||
IndexVersion: info.GetIndexVersion(),
|
IndexVersion: info.GetIndexVersion(),
|
||||||
NumRows: info.GetNumRows(),
|
NumRows: info.GetNumRows(),
|
||||||
CurrentIndexVersion: info.GetCurrentIndexVersion(),
|
CurrentIndexVersion: info.GetCurrentIndexVersion(),
|
||||||
|
|||||||
@ -965,8 +965,7 @@ func GetCLoadInfoWithFunc(ctx context.Context,
|
|||||||
IndexFiles: indexInfo.GetIndexFilePaths(),
|
IndexFiles: indexInfo.GetIndexFilePaths(),
|
||||||
IndexEngineVersion: indexInfo.GetCurrentIndexVersion(),
|
IndexEngineVersion: indexInfo.GetCurrentIndexVersion(),
|
||||||
IndexStoreVersion: indexInfo.GetIndexStoreVersion(),
|
IndexStoreVersion: indexInfo.GetIndexStoreVersion(),
|
||||||
// TODO: For quickly fixing, we add the multiplier here, but those logic should be put at the datacoord after we add the mem size for each index.
|
IndexFileSize: indexInfo.GetIndexSize(),
|
||||||
IndexFileSize: int64(paramtable.Get().DataCoordCfg.IndexMemSizeEstimateMultiplier.GetAsFloat() * float64(indexInfo.GetIndexSize())),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2.
|
// 2.
|
||||||
|
|||||||
@ -5,6 +5,7 @@ package indexcgowrapper
|
|||||||
|
|
||||||
#include <stdlib.h> // free
|
#include <stdlib.h> // free
|
||||||
#include "indexbuilder/index_c.h"
|
#include "indexbuilder/index_c.h"
|
||||||
|
#include "common/type_c.h"
|
||||||
*/
|
*/
|
||||||
import "C"
|
import "C"
|
||||||
|
|
||||||
@ -22,7 +23,9 @@ import (
|
|||||||
"github.com/milvus-io/milvus-proto/go-api/v2/commonpb"
|
"github.com/milvus-io/milvus-proto/go-api/v2/commonpb"
|
||||||
"github.com/milvus-io/milvus-proto/go-api/v2/schemapb"
|
"github.com/milvus-io/milvus-proto/go-api/v2/schemapb"
|
||||||
"github.com/milvus-io/milvus/internal/storage"
|
"github.com/milvus-io/milvus/internal/storage"
|
||||||
|
"github.com/milvus-io/milvus/internal/util/segcore"
|
||||||
"github.com/milvus-io/milvus/pkg/log"
|
"github.com/milvus-io/milvus/pkg/log"
|
||||||
|
"github.com/milvus-io/milvus/pkg/proto/cgopb"
|
||||||
"github.com/milvus-io/milvus/pkg/proto/indexcgopb"
|
"github.com/milvus-io/milvus/pkg/proto/indexcgopb"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -40,7 +43,7 @@ type CodecIndex interface {
|
|||||||
Load([]*Blob) error
|
Load([]*Blob) error
|
||||||
Delete() error
|
Delete() error
|
||||||
CleanLocalData() error
|
CleanLocalData() error
|
||||||
UpLoad() (map[string]int64, error)
|
UpLoad() (*cgopb.IndexStats, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ CodecIndex = (*CgoIndex)(nil)
|
var _ CodecIndex = (*CgoIndex)(nil)
|
||||||
@ -135,31 +138,21 @@ func CreateTextIndex(ctx context.Context, buildIndexInfo *indexcgopb.BuildIndexI
|
|||||||
zap.Error(err))
|
zap.Error(err))
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
var cBinarySet C.CBinarySet
|
result := C.CreateProtoLayout()
|
||||||
status := C.BuildTextIndex(&cBinarySet, (*C.uint8_t)(unsafe.Pointer(&buildIndexInfoBlob[0])), (C.uint64_t)(len(buildIndexInfoBlob)))
|
defer C.ReleaseProtoLayout(result)
|
||||||
|
status := C.BuildTextIndex(result, (*C.uint8_t)(unsafe.Pointer(&buildIndexInfoBlob[0])), (C.uint64_t)(len(buildIndexInfoBlob)))
|
||||||
if err := HandleCStatus(&status, "failed to build text index"); err != nil {
|
if err := HandleCStatus(&status, "failed to build text index"); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
var indexStats cgopb.IndexStats
|
||||||
defer func() {
|
if err := segcore.UnmarshalProtoLayout(result, &indexStats); err != nil {
|
||||||
if cBinarySet != nil {
|
return nil, err
|
||||||
C.DeleteBinarySet(cBinarySet)
|
|
||||||
}
|
}
|
||||||
}()
|
|
||||||
|
|
||||||
res := make(map[string]int64)
|
res := make(map[string]int64)
|
||||||
indexFilePaths, err := GetBinarySetKeys(cBinarySet)
|
for _, indexInfo := range indexStats.GetSerializedIndexInfos() {
|
||||||
if err != nil {
|
res[indexInfo.FileName] = indexInfo.FileSize
|
||||||
return nil, err
|
|
||||||
}
|
}
|
||||||
for _, path := range indexFilePaths {
|
|
||||||
size, err := GetBinarySetSize(cBinarySet, path)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
res[path] = size
|
|
||||||
}
|
|
||||||
|
|
||||||
return res, nil
|
return res, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -405,31 +398,17 @@ func (index *CgoIndex) CleanLocalData() error {
|
|||||||
return HandleCStatus(&status, "failed to clean cached data on disk")
|
return HandleCStatus(&status, "failed to clean cached data on disk")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (index *CgoIndex) UpLoad() (map[string]int64, error) {
|
func (index *CgoIndex) UpLoad() (*cgopb.IndexStats, error) {
|
||||||
var cBinarySet C.CBinarySet
|
result := C.CreateProtoLayout()
|
||||||
|
defer C.ReleaseProtoLayout(result)
|
||||||
status := C.SerializeIndexAndUpLoad(index.indexPtr, &cBinarySet)
|
status := C.SerializeIndexAndUpLoad(index.indexPtr, result)
|
||||||
defer func() {
|
|
||||||
if cBinarySet != nil {
|
|
||||||
C.DeleteBinarySet(cBinarySet)
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
if err := HandleCStatus(&status, "failed to serialize index and upload index"); err != nil {
|
if err := HandleCStatus(&status, "failed to serialize index and upload index"); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
res := make(map[string]int64)
|
var indexStats cgopb.IndexStats
|
||||||
indexFilePaths, err := GetBinarySetKeys(cBinarySet)
|
if err := segcore.UnmarshalProtoLayout(result, &indexStats); err != nil {
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
for _, path := range indexFilePaths {
|
return &indexStats, nil
|
||||||
size, err := GetBinarySetSize(cBinarySet, path)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
res[path] = size
|
|
||||||
}
|
|
||||||
|
|
||||||
return res, nil
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -21,6 +21,7 @@ package segcore
|
|||||||
|
|
||||||
#include "segcore/collection_c.h"
|
#include "segcore/collection_c.h"
|
||||||
#include "common/type_c.h"
|
#include "common/type_c.h"
|
||||||
|
#include "common/protobuf_utils_c.h"
|
||||||
#include "segcore/segment_c.h"
|
#include "segcore/segment_c.h"
|
||||||
#include "storage/storage_c.h"
|
#include "storage/storage_c.h"
|
||||||
*/
|
*/
|
||||||
@ -29,6 +30,7 @@ import "C"
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"math"
|
"math"
|
||||||
|
"reflect"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
|
|
||||||
"google.golang.org/protobuf/proto"
|
"google.golang.org/protobuf/proto"
|
||||||
@ -50,6 +52,13 @@ func ConsumeCStatusIntoError(status *C.CStatus) error {
|
|||||||
return merr.SegcoreError(int32(errorCode), errorMsg)
|
return merr.SegcoreError(int32(errorCode), errorMsg)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func UnmarshalProtoLayout(protoLayout any, msg proto.Message) error {
|
||||||
|
layout := unsafe.Pointer(reflect.ValueOf(protoLayout).Pointer())
|
||||||
|
cProtoLayout := (*C.ProtoLayout)(layout)
|
||||||
|
blob := (*(*[math.MaxInt32]byte)(cProtoLayout.blob))[:int(cProtoLayout.size):int(cProtoLayout.size)]
|
||||||
|
return proto.Unmarshal(blob, msg)
|
||||||
|
}
|
||||||
|
|
||||||
// unmarshalCProto unmarshal the proto from C memory
|
// unmarshalCProto unmarshal the proto from C memory
|
||||||
func unmarshalCProto(cRes *C.CProto, msg proto.Message) error {
|
func unmarshalCProto(cRes *C.CProto, msg proto.Message) error {
|
||||||
blob := (*(*[math.MaxInt32]byte)(cRes.proto_blob))[:int(cRes.proto_size):int(cRes.proto_size)]
|
blob := (*(*[math.MaxInt32]byte)(cRes.proto_blob))[:int(cRes.proto_size):int(cRes.proto_size)]
|
||||||
|
|||||||
@ -2,9 +2,13 @@ package segcore
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"runtime"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
|
"google.golang.org/protobuf/proto"
|
||||||
|
|
||||||
|
"github.com/milvus-io/milvus/pkg/proto/cgopb"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestConsumeCStatusIntoError(t *testing.T) {
|
func TestConsumeCStatusIntoError(t *testing.T) {
|
||||||
@ -17,3 +21,28 @@ func TestGetLocalUsedSize(t *testing.T) {
|
|||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.NotNil(t, size)
|
assert.NotNil(t, size)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestProtoLayout(t *testing.T) {
|
||||||
|
layout := CreateProtoLayout()
|
||||||
|
testProto := cgopb.IndexStats{
|
||||||
|
MemSize: 1024,
|
||||||
|
SerializedIndexInfos: []*cgopb.SerializedIndexFileInfo{
|
||||||
|
{
|
||||||
|
FileName: "test",
|
||||||
|
FileSize: 768,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
msg, err := proto.Marshal(&testProto)
|
||||||
|
defer runtime.KeepAlive(msg)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
SetProtoLayout(layout, msg)
|
||||||
|
|
||||||
|
resultProto := cgopb.IndexStats{}
|
||||||
|
UnmarshalProtoLayout(layout, &resultProto)
|
||||||
|
|
||||||
|
assert.True(t, proto.Equal(&testProto, &resultProto))
|
||||||
|
layout.blob = nil
|
||||||
|
layout.size = 0
|
||||||
|
ReleaseProtoLayout(layout)
|
||||||
|
}
|
||||||
|
|||||||
31
internal/util/segcore/cgo_util_test_only.go
Normal file
31
internal/util/segcore/cgo_util_test_only.go
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
//go:build test
|
||||||
|
// +build test
|
||||||
|
|
||||||
|
package segcore
|
||||||
|
|
||||||
|
/*
|
||||||
|
#cgo pkg-config: milvus_core
|
||||||
|
|
||||||
|
#include "common/protobuf_utils_c.h"
|
||||||
|
*/
|
||||||
|
import "C"
|
||||||
|
|
||||||
|
import (
|
||||||
|
"reflect"
|
||||||
|
"unsafe"
|
||||||
|
)
|
||||||
|
|
||||||
|
func CreateProtoLayout() *C.ProtoLayout {
|
||||||
|
ptr := C.CreateProtoLayout()
|
||||||
|
layout := unsafe.Pointer(reflect.ValueOf(ptr).Pointer())
|
||||||
|
return (*C.ProtoLayout)(layout)
|
||||||
|
}
|
||||||
|
|
||||||
|
func SetProtoLayout(protoLayout *C.ProtoLayout, slice []byte) {
|
||||||
|
protoLayout.blob = unsafe.Pointer(&slice[0])
|
||||||
|
protoLayout.size = C.size_t(len(slice))
|
||||||
|
}
|
||||||
|
|
||||||
|
func ReleaseProtoLayout(protoLayout *C.ProtoLayout) {
|
||||||
|
C.ReleaseProtoLayout((C.ProtoLayoutInterface)(unsafe.Pointer(reflect.ValueOf(protoLayout).Pointer())))
|
||||||
|
}
|
||||||
@ -22,3 +22,13 @@ message LoadIndexInfo {
|
|||||||
int32 index_engine_version = 15;
|
int32 index_engine_version = 15;
|
||||||
int64 index_file_size = 16;
|
int64 index_file_size = 16;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
message IndexStats {
|
||||||
|
int64 mem_size = 1;
|
||||||
|
repeated SerializedIndexFileInfo serialized_index_infos = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
message SerializedIndexFileInfo {
|
||||||
|
string file_name = 1;
|
||||||
|
int64 file_size = 2;
|
||||||
|
}
|
||||||
|
|||||||
@ -180,6 +180,116 @@ func (x *LoadIndexInfo) GetIndexFileSize() int64 {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type IndexStats struct {
|
||||||
|
state protoimpl.MessageState
|
||||||
|
sizeCache protoimpl.SizeCache
|
||||||
|
unknownFields protoimpl.UnknownFields
|
||||||
|
|
||||||
|
MemSize int64 `protobuf:"varint,1,opt,name=mem_size,json=memSize,proto3" json:"mem_size,omitempty"`
|
||||||
|
SerializedIndexInfos []*SerializedIndexFileInfo `protobuf:"bytes,3,rep,name=serialized_index_infos,json=serializedIndexInfos,proto3" json:"serialized_index_infos,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *IndexStats) Reset() {
|
||||||
|
*x = IndexStats{}
|
||||||
|
if protoimpl.UnsafeEnabled {
|
||||||
|
mi := &file_cgo_msg_proto_msgTypes[1]
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *IndexStats) String() string {
|
||||||
|
return protoimpl.X.MessageStringOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*IndexStats) ProtoMessage() {}
|
||||||
|
|
||||||
|
func (x *IndexStats) ProtoReflect() protoreflect.Message {
|
||||||
|
mi := &file_cgo_msg_proto_msgTypes[1]
|
||||||
|
if protoimpl.UnsafeEnabled && x != nil {
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
if ms.LoadMessageInfo() == nil {
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
return ms
|
||||||
|
}
|
||||||
|
return mi.MessageOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Deprecated: Use IndexStats.ProtoReflect.Descriptor instead.
|
||||||
|
func (*IndexStats) Descriptor() ([]byte, []int) {
|
||||||
|
return file_cgo_msg_proto_rawDescGZIP(), []int{1}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *IndexStats) GetMemSize() int64 {
|
||||||
|
if x != nil {
|
||||||
|
return x.MemSize
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *IndexStats) GetSerializedIndexInfos() []*SerializedIndexFileInfo {
|
||||||
|
if x != nil {
|
||||||
|
return x.SerializedIndexInfos
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type SerializedIndexFileInfo struct {
|
||||||
|
state protoimpl.MessageState
|
||||||
|
sizeCache protoimpl.SizeCache
|
||||||
|
unknownFields protoimpl.UnknownFields
|
||||||
|
|
||||||
|
FileName string `protobuf:"bytes,1,opt,name=file_name,json=fileName,proto3" json:"file_name,omitempty"`
|
||||||
|
FileSize int64 `protobuf:"varint,2,opt,name=file_size,json=fileSize,proto3" json:"file_size,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *SerializedIndexFileInfo) Reset() {
|
||||||
|
*x = SerializedIndexFileInfo{}
|
||||||
|
if protoimpl.UnsafeEnabled {
|
||||||
|
mi := &file_cgo_msg_proto_msgTypes[2]
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *SerializedIndexFileInfo) String() string {
|
||||||
|
return protoimpl.X.MessageStringOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (*SerializedIndexFileInfo) ProtoMessage() {}
|
||||||
|
|
||||||
|
func (x *SerializedIndexFileInfo) ProtoReflect() protoreflect.Message {
|
||||||
|
mi := &file_cgo_msg_proto_msgTypes[2]
|
||||||
|
if protoimpl.UnsafeEnabled && x != nil {
|
||||||
|
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||||
|
if ms.LoadMessageInfo() == nil {
|
||||||
|
ms.StoreMessageInfo(mi)
|
||||||
|
}
|
||||||
|
return ms
|
||||||
|
}
|
||||||
|
return mi.MessageOf(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Deprecated: Use SerializedIndexFileInfo.ProtoReflect.Descriptor instead.
|
||||||
|
func (*SerializedIndexFileInfo) Descriptor() ([]byte, []int) {
|
||||||
|
return file_cgo_msg_proto_rawDescGZIP(), []int{2}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *SerializedIndexFileInfo) GetFileName() string {
|
||||||
|
if x != nil {
|
||||||
|
return x.FileName
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *SerializedIndexFileInfo) GetFileSize() int64 {
|
||||||
|
if x != nil {
|
||||||
|
return x.FileSize
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
var File_cgo_msg_proto protoreflect.FileDescriptor
|
var File_cgo_msg_proto protoreflect.FileDescriptor
|
||||||
|
|
||||||
var file_cgo_msg_proto_rawDesc = []byte{
|
var file_cgo_msg_proto_rawDesc = []byte{
|
||||||
@ -228,7 +338,21 @@ var file_cgo_msg_proto_rawDesc = []byte{
|
|||||||
0x78, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03,
|
0x78, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03,
|
||||||
0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14,
|
0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14,
|
||||||
0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76,
|
0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76,
|
||||||
0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x2d, 0x5a, 0x2b, 0x67, 0x69, 0x74, 0x68,
|
0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x88, 0x01, 0x0a, 0x0a, 0x49, 0x6e, 0x64,
|
||||||
|
0x65, 0x78, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x65, 0x6d, 0x5f, 0x73,
|
||||||
|
0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x53, 0x69,
|
||||||
|
0x7a, 0x65, 0x12, 0x5f, 0x0a, 0x16, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64,
|
||||||
|
0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x73, 0x18, 0x03, 0x20, 0x03,
|
||||||
|
0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
||||||
|
0x6f, 0x2e, 0x63, 0x67, 0x6f, 0x2e, 0x53, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64,
|
||||||
|
0x49, 0x6e, 0x64, 0x65, 0x78, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x14, 0x73,
|
||||||
|
0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x49, 0x6e,
|
||||||
|
0x66, 0x6f, 0x73, 0x22, 0x53, 0x0a, 0x17, 0x53, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65,
|
||||||
|
0x64, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1b,
|
||||||
|
0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
|
||||||
|
0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x66,
|
||||||
|
0x69, 0x6c, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08,
|
||||||
|
0x66, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x42, 0x2d, 0x5a, 0x2b, 0x67, 0x69, 0x74, 0x68,
|
||||||
0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2d, 0x69, 0x6f,
|
0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2d, 0x69, 0x6f,
|
||||||
0x2f, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74,
|
0x2f, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74,
|
||||||
0x6f, 0x2f, 0x63, 0x67, 0x6f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
0x6f, 0x2f, 0x63, 0x67, 0x6f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||||
@ -246,20 +370,23 @@ func file_cgo_msg_proto_rawDescGZIP() []byte {
|
|||||||
return file_cgo_msg_proto_rawDescData
|
return file_cgo_msg_proto_rawDescData
|
||||||
}
|
}
|
||||||
|
|
||||||
var file_cgo_msg_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
|
var file_cgo_msg_proto_msgTypes = make([]protoimpl.MessageInfo, 4)
|
||||||
var file_cgo_msg_proto_goTypes = []interface{}{
|
var file_cgo_msg_proto_goTypes = []interface{}{
|
||||||
(*LoadIndexInfo)(nil), // 0: milvus.proto.cgo.LoadIndexInfo
|
(*LoadIndexInfo)(nil), // 0: milvus.proto.cgo.LoadIndexInfo
|
||||||
nil, // 1: milvus.proto.cgo.LoadIndexInfo.IndexParamsEntry
|
(*IndexStats)(nil), // 1: milvus.proto.cgo.IndexStats
|
||||||
(*schemapb.FieldSchema)(nil), // 2: milvus.proto.schema.FieldSchema
|
(*SerializedIndexFileInfo)(nil), // 2: milvus.proto.cgo.SerializedIndexFileInfo
|
||||||
|
nil, // 3: milvus.proto.cgo.LoadIndexInfo.IndexParamsEntry
|
||||||
|
(*schemapb.FieldSchema)(nil), // 4: milvus.proto.schema.FieldSchema
|
||||||
}
|
}
|
||||||
var file_cgo_msg_proto_depIdxs = []int32{
|
var file_cgo_msg_proto_depIdxs = []int32{
|
||||||
2, // 0: milvus.proto.cgo.LoadIndexInfo.field:type_name -> milvus.proto.schema.FieldSchema
|
4, // 0: milvus.proto.cgo.LoadIndexInfo.field:type_name -> milvus.proto.schema.FieldSchema
|
||||||
1, // 1: milvus.proto.cgo.LoadIndexInfo.index_params:type_name -> milvus.proto.cgo.LoadIndexInfo.IndexParamsEntry
|
3, // 1: milvus.proto.cgo.LoadIndexInfo.index_params:type_name -> milvus.proto.cgo.LoadIndexInfo.IndexParamsEntry
|
||||||
2, // [2:2] is the sub-list for method output_type
|
2, // 2: milvus.proto.cgo.IndexStats.serialized_index_infos:type_name -> milvus.proto.cgo.SerializedIndexFileInfo
|
||||||
2, // [2:2] is the sub-list for method input_type
|
3, // [3:3] is the sub-list for method output_type
|
||||||
2, // [2:2] is the sub-list for extension type_name
|
3, // [3:3] is the sub-list for method input_type
|
||||||
2, // [2:2] is the sub-list for extension extendee
|
3, // [3:3] is the sub-list for extension type_name
|
||||||
0, // [0:2] is the sub-list for field type_name
|
3, // [3:3] is the sub-list for extension extendee
|
||||||
|
0, // [0:3] is the sub-list for field type_name
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() { file_cgo_msg_proto_init() }
|
func init() { file_cgo_msg_proto_init() }
|
||||||
@ -280,6 +407,30 @@ func file_cgo_msg_proto_init() {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
file_cgo_msg_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
|
||||||
|
switch v := v.(*IndexStats); i {
|
||||||
|
case 0:
|
||||||
|
return &v.state
|
||||||
|
case 1:
|
||||||
|
return &v.sizeCache
|
||||||
|
case 2:
|
||||||
|
return &v.unknownFields
|
||||||
|
default:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
file_cgo_msg_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
|
||||||
|
switch v := v.(*SerializedIndexFileInfo); i {
|
||||||
|
case 0:
|
||||||
|
return &v.state
|
||||||
|
case 1:
|
||||||
|
return &v.sizeCache
|
||||||
|
case 2:
|
||||||
|
return &v.unknownFields
|
||||||
|
default:
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
type x struct{}
|
type x struct{}
|
||||||
out := protoimpl.TypeBuilder{
|
out := protoimpl.TypeBuilder{
|
||||||
@ -287,7 +438,7 @@ func file_cgo_msg_proto_init() {
|
|||||||
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
||||||
RawDescriptor: file_cgo_msg_proto_rawDesc,
|
RawDescriptor: file_cgo_msg_proto_rawDesc,
|
||||||
NumEnums: 0,
|
NumEnums: 0,
|
||||||
NumMessages: 2,
|
NumMessages: 4,
|
||||||
NumExtensions: 0,
|
NumExtensions: 0,
|
||||||
NumServices: 0,
|
NumServices: 0,
|
||||||
},
|
},
|
||||||
|
|||||||
@ -76,11 +76,12 @@ message SegmentIndex {
|
|||||||
repeated string index_file_keys = 11;
|
repeated string index_file_keys = 11;
|
||||||
bool deleted = 12;
|
bool deleted = 12;
|
||||||
uint64 create_time = 13;
|
uint64 create_time = 13;
|
||||||
uint64 serialize_size = 14;
|
uint64 serialize_size = 14; // the total size of index file at oos. (may be compress)
|
||||||
bool write_handoff = 15;
|
bool write_handoff = 15;
|
||||||
int32 current_index_version = 16;
|
int32 current_index_version = 16;
|
||||||
int64 index_store_version = 17;
|
int64 index_store_version = 17;
|
||||||
uint64 finished_time = 18;
|
uint64 finished_time = 18;
|
||||||
|
uint64 mem_size = 19; // the total size of index file at local (disk or memory) before loading by knowhere. (not compress)
|
||||||
}
|
}
|
||||||
|
|
||||||
message RegisterNodeRequest {
|
message RegisterNodeRequest {
|
||||||
@ -160,6 +161,7 @@ message IndexFilePathInfo {
|
|||||||
int64 index_version = 9;
|
int64 index_version = 9;
|
||||||
int64 num_rows = 10;
|
int64 num_rows = 10;
|
||||||
int32 current_index_version = 11;
|
int32 current_index_version = 11;
|
||||||
|
uint64 mem_size = 12;
|
||||||
}
|
}
|
||||||
|
|
||||||
message SegmentInfo {
|
message SegmentInfo {
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -169,6 +169,7 @@ message IndexTaskInfo {
|
|||||||
string fail_reason = 5;
|
string fail_reason = 5;
|
||||||
int32 current_index_version = 6;
|
int32 current_index_version = 6;
|
||||||
int64 index_store_version = 7;
|
int64 index_store_version = 7;
|
||||||
|
uint64 mem_size = 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
message IndexJobResults {
|
message IndexJobResults {
|
||||||
|
|||||||
@ -1139,6 +1139,7 @@ type IndexTaskInfo struct {
|
|||||||
FailReason string `protobuf:"bytes,5,opt,name=fail_reason,json=failReason,proto3" json:"fail_reason,omitempty"`
|
FailReason string `protobuf:"bytes,5,opt,name=fail_reason,json=failReason,proto3" json:"fail_reason,omitempty"`
|
||||||
CurrentIndexVersion int32 `protobuf:"varint,6,opt,name=current_index_version,json=currentIndexVersion,proto3" json:"current_index_version,omitempty"`
|
CurrentIndexVersion int32 `protobuf:"varint,6,opt,name=current_index_version,json=currentIndexVersion,proto3" json:"current_index_version,omitempty"`
|
||||||
IndexStoreVersion int64 `protobuf:"varint,7,opt,name=index_store_version,json=indexStoreVersion,proto3" json:"index_store_version,omitempty"`
|
IndexStoreVersion int64 `protobuf:"varint,7,opt,name=index_store_version,json=indexStoreVersion,proto3" json:"index_store_version,omitempty"`
|
||||||
|
MemSize uint64 `protobuf:"varint,8,opt,name=mem_size,json=memSize,proto3" json:"mem_size,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *IndexTaskInfo) Reset() {
|
func (x *IndexTaskInfo) Reset() {
|
||||||
@ -1222,6 +1223,13 @@ func (x *IndexTaskInfo) GetIndexStoreVersion() int64 {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (x *IndexTaskInfo) GetMemSize() uint64 {
|
||||||
|
if x != nil {
|
||||||
|
return x.MemSize
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
type IndexJobResults struct {
|
type IndexJobResults struct {
|
||||||
state protoimpl.MessageState
|
state protoimpl.MessageState
|
||||||
sizeCache protoimpl.SizeCache
|
sizeCache protoimpl.SizeCache
|
||||||
@ -2002,7 +2010,7 @@ var file_worker_proto_rawDesc = []byte{
|
|||||||
0x44, 0x73, 0x12, 0x36, 0x0a, 0x08, 0x6a, 0x6f, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03,
|
0x44, 0x73, 0x12, 0x36, 0x0a, 0x08, 0x6a, 0x6f, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03,
|
||||||
0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72,
|
0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72,
|
||||||
0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x4a, 0x6f, 0x62, 0x54, 0x79, 0x70,
|
0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x4a, 0x6f, 0x62, 0x54, 0x79, 0x70,
|
||||||
0x65, 0x52, 0x07, 0x6a, 0x6f, 0x62, 0x54, 0x79, 0x70, 0x65, 0x22, 0xb6, 0x02, 0x0a, 0x0d, 0x49,
|
0x65, 0x52, 0x07, 0x6a, 0x6f, 0x62, 0x54, 0x79, 0x70, 0x65, 0x22, 0xd1, 0x02, 0x0a, 0x0d, 0x49,
|
||||||
0x6e, 0x64, 0x65, 0x78, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x07,
|
0x6e, 0x64, 0x65, 0x78, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x07,
|
||||||
0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x62,
|
0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x62,
|
||||||
0x75, 0x69, 0x6c, 0x64, 0x49, 0x44, 0x12, 0x35, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18,
|
0x75, 0x69, 0x6c, 0x64, 0x49, 0x44, 0x12, 0x35, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18,
|
||||||
@ -2022,175 +2030,177 @@ var file_worker_proto_rawDesc = []byte{
|
|||||||
0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x13, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x73, 0x74, 0x6f,
|
0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x13, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x73, 0x74, 0x6f,
|
||||||
0x72, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03,
|
0x72, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03,
|
||||||
0x52, 0x11, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x56, 0x65, 0x72, 0x73,
|
0x52, 0x11, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x56, 0x65, 0x72, 0x73,
|
||||||
0x69, 0x6f, 0x6e, 0x22, 0x4e, 0x0a, 0x0f, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4a, 0x6f, 0x62, 0x52,
|
0x69, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x65, 0x6d, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18,
|
||||||
|
0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x4e,
|
||||||
|
0x0a, 0x0f, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74,
|
||||||
|
0x73, 0x12, 0x3b, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03,
|
||||||
|
0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
||||||
|
0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x61, 0x73,
|
||||||
|
0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0xa3,
|
||||||
|
0x01, 0x0a, 0x0d, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74,
|
||||||
|
0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03,
|
||||||
|
0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x44, 0x12, 0x32, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74,
|
||||||
|
0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73,
|
||||||
|
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x4a, 0x6f, 0x62,
|
||||||
|
0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1f, 0x0a, 0x0b,
|
||||||
|
0x66, 0x61, 0x69, 0x6c, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28,
|
||||||
|
0x09, 0x52, 0x0a, 0x66, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x25, 0x0a,
|
||||||
|
0x0e, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x6f, 0x69, 0x64, 0x73, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18,
|
||||||
|
0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x6f, 0x69, 0x64, 0x73,
|
||||||
|
0x46, 0x69, 0x6c, 0x65, 0x22, 0x4d, 0x0a, 0x0e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x52,
|
||||||
0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x3b, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74,
|
0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x3b, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74,
|
||||||
0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73,
|
0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73,
|
||||||
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x49, 0x6e, 0x64,
|
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x41, 0x6e, 0x61,
|
||||||
0x65, 0x78, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75,
|
0x6c, 0x79, 0x7a, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75,
|
||||||
0x6c, 0x74, 0x73, 0x22, 0xa3, 0x01, 0x0a, 0x0d, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x52,
|
0x6c, 0x74, 0x73, 0x22, 0x91, 0x05, 0x0a, 0x0b, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73,
|
||||||
0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x44, 0x18,
|
0x75, 0x6c, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x44, 0x18, 0x01, 0x20,
|
||||||
0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x44, 0x12, 0x32, 0x0a,
|
0x01, 0x28, 0x03, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x44, 0x12, 0x32, 0x0a, 0x05, 0x73,
|
||||||
0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x6d,
|
0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x6d, 0x69, 0x6c,
|
||||||
0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65,
|
0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e,
|
||||||
0x78, 0x2e, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74,
|
0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12,
|
||||||
0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x61, 0x69, 0x6c, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e,
|
0x1f, 0x0a, 0x0b, 0x66, 0x61, 0x69, 0x6c, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x03,
|
||||||
0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x61, 0x73,
|
0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e,
|
||||||
0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x6f, 0x69, 0x64, 0x73, 0x5f,
|
0x12, 0x22, 0x0a, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44,
|
||||||
0x66, 0x69, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x65, 0x6e, 0x74,
|
0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69,
|
||||||
0x72, 0x6f, 0x69, 0x64, 0x73, 0x46, 0x69, 0x6c, 0x65, 0x22, 0x4d, 0x0a, 0x0e, 0x41, 0x6e, 0x61,
|
0x6f, 0x6e, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f,
|
||||||
0x6c, 0x79, 0x7a, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x3b, 0x0a, 0x07, 0x72,
|
0x6e, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x70, 0x61, 0x72, 0x74, 0x69,
|
||||||
0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6d,
|
0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e,
|
||||||
0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65,
|
0x74, 0x49, 0x44, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x65, 0x67, 0x6d, 0x65,
|
||||||
0x78, 0x2e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52,
|
0x6e, 0x74, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18,
|
||||||
0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0x91, 0x05, 0x0a, 0x0b, 0x53, 0x74, 0x61,
|
0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x3f,
|
||||||
0x74, 0x73, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x73, 0x6b,
|
0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x5f, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x08, 0x20,
|
||||||
0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x44,
|
0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f,
|
||||||
0x12, 0x32, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32,
|
0x74, 0x6f, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x69, 0x6e,
|
||||||
0x1c, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69,
|
0x6c, 0x6f, 0x67, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x12,
|
||||||
0x6e, 0x64, 0x65, 0x78, 0x2e, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73,
|
0x3d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x73, 0x5f, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x09, 0x20,
|
||||||
0x74, 0x61, 0x74, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x61, 0x69, 0x6c, 0x5f, 0x72, 0x65, 0x61,
|
0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f,
|
||||||
0x73, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x61, 0x69, 0x6c, 0x52,
|
0x74, 0x6f, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x69, 0x6e,
|
||||||
0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74,
|
0x6c, 0x6f, 0x67, 0x52, 0x09, 0x73, 0x74, 0x61, 0x74, 0x73, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x5a,
|
||||||
0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x63, 0x6f, 0x6c,
|
0x0a, 0x0f, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x5f, 0x6c, 0x6f, 0x67,
|
||||||
0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x61, 0x72,
|
0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73,
|
||||||
0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b,
|
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x53, 0x74, 0x61,
|
||||||
0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x73,
|
0x74, 0x73, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x53, 0x74, 0x61,
|
||||||
0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09,
|
0x74, 0x73, 0x4c, 0x6f, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x74, 0x65, 0x78,
|
||||||
0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x68, 0x61,
|
0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x6e, 0x75,
|
||||||
0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e,
|
0x6d, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6e, 0x75,
|
||||||
0x6e, 0x65, 0x6c, 0x12, 0x3f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x5f, 0x6c, 0x6f,
|
0x6d, 0x52, 0x6f, 0x77, 0x73, 0x12, 0x3b, 0x0a, 0x09, 0x62, 0x6d, 0x32, 0x35, 0x5f, 0x6c, 0x6f,
|
||||||
0x67, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75,
|
0x67, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75,
|
||||||
0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x46, 0x69, 0x65,
|
0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x46, 0x69, 0x65,
|
||||||
0x6c, 0x64, 0x42, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74,
|
0x6c, 0x64, 0x42, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x52, 0x08, 0x62, 0x6d, 0x32, 0x35, 0x4c, 0x6f,
|
||||||
0x4c, 0x6f, 0x67, 0x73, 0x12, 0x3d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x73, 0x5f, 0x6c, 0x6f,
|
0x67, 0x73, 0x1a, 0x63, 0x0a, 0x12, 0x54, 0x65, 0x78, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x4c,
|
||||||
0x67, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75,
|
0x6f, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18,
|
||||||
0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x46, 0x69, 0x65,
|
0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x37, 0x0a, 0x05, 0x76, 0x61,
|
||||||
0x6c, 0x64, 0x42, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x52, 0x09, 0x73, 0x74, 0x61, 0x74, 0x73, 0x4c,
|
0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6d, 0x69, 0x6c, 0x76,
|
||||||
0x6f, 0x67, 0x73, 0x12, 0x5a, 0x0a, 0x0f, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74,
|
0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x65,
|
||||||
0x73, 0x5f, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x6d,
|
0x78, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x05, 0x76, 0x61,
|
||||||
0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65,
|
0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x49, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x74, 0x73,
|
||||||
0x78, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x54, 0x65,
|
0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x39, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c,
|
||||||
0x78, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x4c, 0x6f, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79,
|
0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75,
|
||||||
0x52, 0x0d, 0x74, 0x65, 0x78, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x4c, 0x6f, 0x67, 0x73, 0x12,
|
0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x53, 0x74,
|
||||||
0x19, 0x0a, 0x08, 0x6e, 0x75, 0x6d, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28,
|
0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c,
|
||||||
0x03, 0x52, 0x07, 0x6e, 0x75, 0x6d, 0x52, 0x6f, 0x77, 0x73, 0x12, 0x3b, 0x0a, 0x09, 0x62, 0x6d,
|
0x74, 0x73, 0x22, 0xeb, 0x02, 0x0a, 0x13, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4a, 0x6f, 0x62, 0x73,
|
||||||
0x32, 0x35, 0x5f, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e,
|
0x56, 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x06, 0x73, 0x74,
|
||||||
0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x64, 0x61, 0x74,
|
0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6d, 0x69, 0x6c,
|
||||||
0x61, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x52, 0x08, 0x62,
|
0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e,
|
||||||
0x6d, 0x32, 0x35, 0x4c, 0x6f, 0x67, 0x73, 0x1a, 0x63, 0x0a, 0x12, 0x54, 0x65, 0x78, 0x74, 0x53,
|
0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12,
|
||||||
0x74, 0x61, 0x74, 0x73, 0x4c, 0x6f, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a,
|
0x1c, 0x0a, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01,
|
||||||
0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,
|
0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x12, 0x51, 0x0a,
|
||||||
0x37, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21,
|
0x11, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x6a, 0x6f, 0x62, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c,
|
||||||
0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x64, 0x61,
|
0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75,
|
||||||
0x74, 0x61, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x74, 0x61, 0x74,
|
0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x49, 0x6e,
|
||||||
0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x49, 0x0a, 0x0c,
|
0x64, 0x65, 0x78, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x48, 0x00, 0x52,
|
||||||
0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x39, 0x0a, 0x07,
|
0x0f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73,
|
||||||
0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e,
|
0x12, 0x54, 0x0a, 0x13, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x5f, 0x6a, 0x6f, 0x62, 0x5f,
|
||||||
|
0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e,
|
||||||
0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64,
|
0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64,
|
||||||
0x65, 0x78, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x07,
|
0x65, 0x78, 0x2e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74,
|
||||||
0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0xeb, 0x02, 0x0a, 0x13, 0x51, 0x75, 0x65, 0x72,
|
0x73, 0x48, 0x00, 0x52, 0x11, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x4a, 0x6f, 0x62, 0x52,
|
||||||
0x79, 0x4a, 0x6f, 0x62, 0x73, 0x56, 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
|
0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x4e, 0x0a, 0x11, 0x73, 0x74, 0x61, 0x74, 0x73, 0x5f,
|
||||||
0x33, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
|
0x6a, 0x6f, 0x62, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28,
|
||||||
0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63,
|
0x0b, 0x32, 0x20, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||||
0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74,
|
0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x75,
|
||||||
0x61, 0x74, 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49,
|
0x6c, 0x74, 0x73, 0x48, 0x00, 0x52, 0x0f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x4a, 0x6f, 0x62, 0x52,
|
||||||
0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72,
|
0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x42, 0x08, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74,
|
||||||
0x49, 0x44, 0x12, 0x51, 0x0a, 0x11, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x6a, 0x6f, 0x62, 0x5f,
|
0x22, 0x83, 0x01, 0x0a, 0x11, 0x44, 0x72, 0x6f, 0x70, 0x4a, 0x6f, 0x62, 0x73, 0x56, 0x32, 0x52,
|
||||||
0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e,
|
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65,
|
||||||
0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64,
|
0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74,
|
||||||
0x65, 0x78, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x75, 0x6c,
|
0x65, 0x72, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x44, 0x73, 0x18,
|
||||||
0x74, 0x73, 0x48, 0x00, 0x52, 0x0f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4a, 0x6f, 0x62, 0x52, 0x65,
|
0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x44, 0x73, 0x12, 0x36,
|
||||||
0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x54, 0x0a, 0x13, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65,
|
0x0a, 0x08, 0x6a, 0x6f, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e,
|
||||||
0x5f, 0x6a, 0x6f, 0x62, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01,
|
0x32, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
|
||||||
0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x4a, 0x6f, 0x62, 0x54, 0x79, 0x70, 0x65, 0x52, 0x07, 0x6a,
|
||||||
0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x52,
|
0x6f, 0x62, 0x54, 0x79, 0x70, 0x65, 0x32, 0xb6, 0x08, 0x0a, 0x09, 0x49, 0x6e, 0x64, 0x65, 0x78,
|
||||||
0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x48, 0x00, 0x52, 0x11, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a,
|
0x4e, 0x6f, 0x64, 0x65, 0x12, 0x6c, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6f,
|
||||||
0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x4e, 0x0a, 0x11, 0x73,
|
0x6e, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x12, 0x2e, 0x2e, 0x6d, 0x69, 0x6c,
|
||||||
0x74, 0x61, 0x74, 0x73, 0x5f, 0x6a, 0x6f, 0x62, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73,
|
0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73,
|
||||||
0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e,
|
0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61,
|
||||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x53, 0x74, 0x61, 0x74,
|
0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x6d, 0x69, 0x6c,
|
||||||
0x73, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x48, 0x00, 0x52, 0x0f, 0x73, 0x74, 0x61, 0x74,
|
0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73,
|
||||||
0x73, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x42, 0x08, 0x0a, 0x06, 0x72,
|
0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73,
|
||||||
0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x83, 0x01, 0x0a, 0x11, 0x44, 0x72, 0x6f, 0x70, 0x4a, 0x6f,
|
0x22, 0x00, 0x12, 0x71, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74,
|
||||||
0x62, 0x73, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x63,
|
0x69, 0x63, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x32, 0x2e, 0x6d, 0x69, 0x6c,
|
||||||
0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09,
|
0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e,
|
||||||
0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x61, 0x73,
|
0x61, 0x6c, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73,
|
||||||
0x6b, 0x49, 0x44, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x07, 0x74, 0x61, 0x73, 0x6b,
|
0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23,
|
||||||
0x49, 0x44, 0x73, 0x12, 0x36, 0x0a, 0x08, 0x6a, 0x6f, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18,
|
0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69,
|
||||||
0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70,
|
0x6c, 0x76, 0x75, 0x73, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f,
|
||||||
0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x4a, 0x6f, 0x62, 0x54, 0x79,
|
0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x50, 0x0a, 0x09, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4a,
|
||||||
0x70, 0x65, 0x52, 0x07, 0x6a, 0x6f, 0x62, 0x54, 0x79, 0x70, 0x65, 0x32, 0xb6, 0x08, 0x0a, 0x09,
|
0x6f, 0x62, 0x12, 0x24, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
||||||
0x49, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x6c, 0x0a, 0x12, 0x47, 0x65, 0x74,
|
0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4a, 0x6f,
|
||||||
0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x12,
|
0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75,
|
||||||
0x2e, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d,
|
0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53,
|
||||||
0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65,
|
0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x09, 0x51, 0x75, 0x65, 0x72, 0x79,
|
||||||
0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
|
0x4a, 0x6f, 0x62, 0x73, 0x12, 0x24, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72,
|
||||||
0x24, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d,
|
0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4a,
|
||||||
0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x53,
|
0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x6d, 0x69, 0x6c,
|
||||||
0x74, 0x61, 0x74, 0x65, 0x73, 0x22, 0x00, 0x12, 0x71, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x53, 0x74,
|
0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e,
|
||||||
0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12,
|
0x51, 0x75, 0x65, 0x72, 0x79, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
|
||||||
0x32, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69,
|
0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x08, 0x44, 0x72, 0x6f, 0x70, 0x4a, 0x6f, 0x62, 0x73, 0x12,
|
||||||
0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69,
|
0x23, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69,
|
||||||
0x73, 0x74, 0x69, 0x63, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75,
|
0x6e, 0x64, 0x65, 0x78, 0x2e, 0x44, 0x72, 0x6f, 0x70, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71,
|
||||||
0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f,
|
0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72,
|
||||||
0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67,
|
0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75,
|
||||||
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x50, 0x0a, 0x09, 0x43, 0x72,
|
0x73, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61,
|
||||||
0x65, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x12, 0x24, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73,
|
0x74, 0x73, 0x12, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
||||||
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x43, 0x72, 0x65,
|
0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x53, 0x74,
|
||||||
0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e,
|
0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6d, 0x69, 0x6c,
|
||||||
0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d,
|
0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e,
|
||||||
0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x09,
|
0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
|
||||||
0x51, 0x75, 0x65, 0x72, 0x79, 0x4a, 0x6f, 0x62, 0x73, 0x12, 0x24, 0x2e, 0x6d, 0x69, 0x6c, 0x76,
|
0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x7b, 0x0a, 0x12, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x6f, 0x6e,
|
||||||
0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x51,
|
0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x30, 0x2e, 0x6d, 0x69,
|
||||||
0x75, 0x65, 0x72, 0x79, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
|
0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72,
|
||||||
0x25, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69,
|
0x6e, 0x61, 0x6c, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72,
|
||||||
0x6e, 0x64, 0x65, 0x78, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65,
|
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e,
|
||||||
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x08, 0x44, 0x72, 0x6f, 0x70,
|
0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74,
|
||||||
0x4a, 0x6f, 0x62, 0x73, 0x12, 0x23, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72,
|
0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
|
||||||
0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x44, 0x72, 0x6f, 0x70, 0x4a, 0x6f,
|
0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
|
||||||
0x62, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76,
|
0x22, 0x00, 0x12, 0x5f, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73,
|
||||||
0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e,
|
0x12, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
|
||||||
0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4a,
|
0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63,
|
||||||
0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73,
|
0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75,
|
||||||
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x47, 0x65, 0x74,
|
0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x47,
|
||||||
0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
|
0x65, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
|
||||||
0x27, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69,
|
0x65, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62,
|
||||||
0x6e, 0x64, 0x65, 0x78, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x73,
|
0x56, 0x32, 0x12, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
||||||
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x7b, 0x0a, 0x12, 0x53, 0x68,
|
0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4a, 0x6f,
|
||||||
0x6f, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
|
0x62, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c,
|
||||||
0x12, 0x30, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
|
0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e,
|
||||||
0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x6f, 0x6e,
|
0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x0b, 0x51, 0x75, 0x65,
|
||||||
0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
|
0x72, 0x79, 0x4a, 0x6f, 0x62, 0x73, 0x56, 0x32, 0x12, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75,
|
||||||
0x73, 0x74, 0x1a, 0x31, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x51, 0x75,
|
||||||
0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x43,
|
0x65, 0x72, 0x79, 0x4a, 0x6f, 0x62, 0x73, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
|
||||||
0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73,
|
0x1a, 0x27, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
|
||||||
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5f, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x4d, 0x65,
|
0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4a, 0x6f, 0x62, 0x73, 0x56,
|
||||||
0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70,
|
0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x52, 0x0a, 0x0a, 0x44,
|
||||||
0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4d,
|
0x72, 0x6f, 0x70, 0x4a, 0x6f, 0x62, 0x73, 0x56, 0x32, 0x12, 0x25, 0x2e, 0x6d, 0x69, 0x6c, 0x76,
|
||||||
0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e,
|
0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x44,
|
||||||
0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c,
|
0x72, 0x6f, 0x70, 0x4a, 0x6f, 0x62, 0x73, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
|
||||||
0x76, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65,
|
0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
|
||||||
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61,
|
0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x42,
|
||||||
0x74, 0x65, 0x4a, 0x6f, 0x62, 0x56, 0x32, 0x12, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73,
|
0x30, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6d, 0x69,
|
||||||
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x43, 0x72, 0x65,
|
0x6c, 0x76, 0x75, 0x73, 0x2d, 0x69, 0x6f, 0x2f, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2f, 0x70,
|
||||||
0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
|
0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x70,
|
||||||
0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63,
|
0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||||
0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x60,
|
|
||||||
0x0a, 0x0b, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4a, 0x6f, 0x62, 0x73, 0x56, 0x32, 0x12, 0x26, 0x2e,
|
|
||||||
0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64,
|
|
||||||
0x65, 0x78, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4a, 0x6f, 0x62, 0x73, 0x56, 0x32, 0x52, 0x65,
|
|
||||||
0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70,
|
|
||||||
0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79,
|
|
||||||
0x4a, 0x6f, 0x62, 0x73, 0x56, 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
|
|
||||||
0x12, 0x52, 0x0a, 0x0a, 0x44, 0x72, 0x6f, 0x70, 0x4a, 0x6f, 0x62, 0x73, 0x56, 0x32, 0x12, 0x25,
|
|
||||||
0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e,
|
|
||||||
0x64, 0x65, 0x78, 0x2e, 0x44, 0x72, 0x6f, 0x70, 0x4a, 0x6f, 0x62, 0x73, 0x56, 0x32, 0x52, 0x65,
|
|
||||||
0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70,
|
|
||||||
0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74,
|
|
||||||
0x75, 0x73, 0x22, 0x00, 0x42, 0x30, 0x5a, 0x2e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63,
|
|
||||||
0x6f, 0x6d, 0x2f, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2d, 0x69, 0x6f, 0x2f, 0x6d, 0x69, 0x6c,
|
|
||||||
0x76, 0x75, 0x73, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x77, 0x6f,
|
|
||||||
0x72, 0x6b, 0x65, 0x72, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user