mirror of https://github.com/milvus-io/milvus.git
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>pull/39208/head
parent
5e38f01e5b
commit
3e788f0fbd
|
@ -251,21 +251,21 @@ func combineToSegmentIndexesMeta220(segmentIndexes SegmentIndexesMeta210, indexB
|
|||
}
|
||||
|
||||
segmentIndexModel := &model.SegmentIndex{
|
||||
SegmentID: segID,
|
||||
CollectionID: record.GetCollectionID(),
|
||||
PartitionID: record.GetPartitionID(),
|
||||
NumRows: buildMeta.GetReq().GetNumRows(),
|
||||
IndexID: indexID,
|
||||
BuildID: record.GetBuildID(),
|
||||
NodeID: buildMeta.GetNodeID(),
|
||||
IndexVersion: buildMeta.GetIndexVersion(),
|
||||
IndexState: buildMeta.GetState(),
|
||||
FailReason: buildMeta.GetFailReason(),
|
||||
IsDeleted: buildMeta.GetMarkDeleted(),
|
||||
CreatedUTCTime: record.GetCreateTime(),
|
||||
IndexFileKeys: fileKeys,
|
||||
IndexSize: buildMeta.GetSerializeSize(),
|
||||
WriteHandoff: buildMeta.GetState() == commonpb.IndexState_Finished,
|
||||
SegmentID: segID,
|
||||
CollectionID: record.GetCollectionID(),
|
||||
PartitionID: record.GetPartitionID(),
|
||||
NumRows: buildMeta.GetReq().GetNumRows(),
|
||||
IndexID: indexID,
|
||||
BuildID: record.GetBuildID(),
|
||||
NodeID: buildMeta.GetNodeID(),
|
||||
IndexVersion: buildMeta.GetIndexVersion(),
|
||||
IndexState: buildMeta.GetState(),
|
||||
FailReason: buildMeta.GetFailReason(),
|
||||
IsDeleted: buildMeta.GetMarkDeleted(),
|
||||
CreatedUTCTime: record.GetCreateTime(),
|
||||
IndexFileKeys: fileKeys,
|
||||
IndexSerializedSize: buildMeta.GetSerializeSize(),
|
||||
WriteHandoff: buildMeta.GetState() == commonpb.IndexState_Finished,
|
||||
}
|
||||
segmentIndexModels.AddRecord(segID, indexID, segmentIndexModel)
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
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
|
||||
|
|
|
@ -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>
|
||||
BinarySet
|
||||
IndexStatsPtr
|
||||
BitmapIndex<T>::Upload(const Config& config) {
|
||||
auto binary_set = Serialize(config);
|
||||
|
||||
file_manager_->AddFile(binary_set);
|
||||
|
||||
auto remote_path_to_size = file_manager_->GetRemotePathsToFileSize();
|
||||
BinarySet ret;
|
||||
for (auto& file : remote_path_to_size) {
|
||||
ret.Append(file.first, nullptr, file.second);
|
||||
}
|
||||
return ret;
|
||||
return IndexStats::NewFromSizeMap(file_manager_->GetAddedTotalMemSize(),
|
||||
remote_path_to_size);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
|
|
|
@ -114,7 +114,7 @@ class BitmapIndex : public ScalarIndex<T> {
|
|||
return Count();
|
||||
}
|
||||
|
||||
BinarySet
|
||||
IndexStatsPtr
|
||||
Upload(const Config& config = {}) override;
|
||||
|
||||
const bool
|
||||
|
|
|
@ -298,7 +298,7 @@ HybridScalarIndex<T>::SerializeIndexType() {
|
|||
}
|
||||
|
||||
template <typename T>
|
||||
BinarySet
|
||||
IndexStatsPtr
|
||||
HybridScalarIndex<T>::Upload(const Config& config) {
|
||||
auto internal_index = GetInternalIndex();
|
||||
auto index_ret = internal_index->Upload(config);
|
||||
|
@ -306,9 +306,9 @@ HybridScalarIndex<T>::Upload(const Config& config) {
|
|||
auto index_type_ret = SerializeIndexType();
|
||||
|
||||
for (auto& [key, value] : index_type_ret.binary_map_) {
|
||||
index_ret.Append(key, value);
|
||||
index_ret->AppendSerializedIndexFileInfo(
|
||||
SerializedIndexFileInfo(key, value->size));
|
||||
}
|
||||
|
||||
return index_ret;
|
||||
}
|
||||
|
||||
|
|
|
@ -153,7 +153,7 @@ class HybridScalarIndex : public ScalarIndex<T> {
|
|||
return internal_index_->HasRawData();
|
||||
}
|
||||
|
||||
BinarySet
|
||||
IndexStatsPtr
|
||||
Upload(const Config& config = {}) override;
|
||||
|
||||
private:
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
#include "common/Tracer.h"
|
||||
#include "common/Types.h"
|
||||
#include "index/Meta.h"
|
||||
#include "index/IndexStats.h"
|
||||
|
||||
namespace milvus::index {
|
||||
|
||||
|
@ -57,7 +58,7 @@ class IndexBase {
|
|||
virtual int64_t
|
||||
Count() = 0;
|
||||
|
||||
virtual BinarySet
|
||||
virtual IndexStatsPtr
|
||||
Upload(const Config& config = {}) = 0;
|
||||
|
||||
virtual const bool
|
||||
|
|
|
@ -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
|
|
@ -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>
|
||||
BinarySet
|
||||
IndexStatsPtr
|
||||
InvertedIndexTantivy<T>::Upload(const Config& config) {
|
||||
finish();
|
||||
|
||||
|
@ -156,20 +156,25 @@ InvertedIndexTantivy<T>::Upload(const Config& config) {
|
|||
}
|
||||
}
|
||||
|
||||
BinarySet ret;
|
||||
|
||||
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);
|
||||
mem_file_manager_->AddFile(binary_set);
|
||||
auto remote_mem_path_to_size =
|
||||
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>
|
||||
|
|
|
@ -89,7 +89,7 @@ class InvertedIndexTantivy : public ScalarIndex<T> {
|
|||
BinarySet
|
||||
Serialize(const Config& config) override;
|
||||
|
||||
BinarySet
|
||||
IndexStatsPtr
|
||||
Upload(const Config& config = {}) override;
|
||||
|
||||
/*
|
||||
|
|
|
@ -151,18 +151,14 @@ ScalarIndexSort<T>::Serialize(const Config& config) {
|
|||
}
|
||||
|
||||
template <typename T>
|
||||
BinarySet
|
||||
IndexStatsPtr
|
||||
ScalarIndexSort<T>::Upload(const Config& config) {
|
||||
auto binary_set = Serialize(config);
|
||||
file_manager_->AddFile(binary_set);
|
||||
|
||||
auto remote_paths_to_size = file_manager_->GetRemotePathsToFileSize();
|
||||
BinarySet ret;
|
||||
for (auto& file : remote_paths_to_size) {
|
||||
ret.Append(file.first, nullptr, file.second);
|
||||
}
|
||||
|
||||
return ret;
|
||||
return IndexStats::NewFromSizeMap(file_manager_->GetAddedTotalMemSize(),
|
||||
remote_paths_to_size);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
|
|
|
@ -90,7 +90,7 @@ class ScalarIndexSort : public ScalarIndex<T> {
|
|||
return (int64_t)data_.size();
|
||||
}
|
||||
|
||||
BinarySet
|
||||
IndexStatsPtr
|
||||
Upload(const Config& config = {}) override;
|
||||
|
||||
const bool
|
||||
|
|
|
@ -174,18 +174,14 @@ StringIndexMarisa::Serialize(const Config& config) {
|
|||
return res_set;
|
||||
}
|
||||
|
||||
BinarySet
|
||||
IndexStatsPtr
|
||||
StringIndexMarisa::Upload(const Config& config) {
|
||||
auto binary_set = Serialize(config);
|
||||
file_manager_->AddFile(binary_set);
|
||||
|
||||
auto remote_paths_to_size = file_manager_->GetRemotePathsToFileSize();
|
||||
BinarySet ret;
|
||||
for (auto& file : remote_paths_to_size) {
|
||||
ret.Append(file.first, nullptr, file.second);
|
||||
}
|
||||
|
||||
return ret;
|
||||
return IndexStats::NewFromSizeMap(file_manager_->GetAddedTotalMemSize(),
|
||||
remote_paths_to_size);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -92,7 +92,7 @@ class StringIndexMarisa : public StringIndex {
|
|||
std::optional<std::string>
|
||||
Reverse_Lookup(size_t offset) const override;
|
||||
|
||||
BinarySet
|
||||
IndexStatsPtr
|
||||
Upload(const Config& config = {}) override;
|
||||
|
||||
const bool
|
||||
|
|
|
@ -78,7 +78,7 @@ TextMatchIndex::TextMatchIndex(const storage::FileManagerContext& ctx)
|
|||
d_type_ = TantivyDataType::Text;
|
||||
}
|
||||
|
||||
BinarySet
|
||||
IndexStatsPtr
|
||||
TextMatchIndex::Upload(const Config& config) {
|
||||
finish();
|
||||
|
||||
|
@ -98,21 +98,25 @@ TextMatchIndex::Upload(const Config& config) {
|
|||
}
|
||||
}
|
||||
|
||||
BinarySet ret;
|
||||
|
||||
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);
|
||||
mem_file_manager_->AddFile(binary_set);
|
||||
auto remote_mem_path_to_size =
|
||||
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
|
||||
|
|
|
@ -15,6 +15,7 @@
|
|||
#include <boost/filesystem.hpp>
|
||||
|
||||
#include "index/InvertedIndexTantivy.h"
|
||||
#include "index/IndexStats.h"
|
||||
|
||||
namespace milvus::index {
|
||||
|
||||
|
@ -39,7 +40,7 @@ class TextMatchIndex : public InvertedIndexTantivy<std::string> {
|
|||
explicit TextMatchIndex(const storage::FileManagerContext& ctx);
|
||||
|
||||
public:
|
||||
BinarySet
|
||||
IndexStatsPtr
|
||||
Upload(const Config& config) override;
|
||||
|
||||
void
|
||||
|
|
|
@ -115,7 +115,7 @@ VectorDiskAnnIndex<T>::Load(milvus::tracer::TraceContext ctx,
|
|||
}
|
||||
|
||||
template <typename T>
|
||||
BinarySet
|
||||
IndexStatsPtr
|
||||
VectorDiskAnnIndex<T>::Upload(const Config& config) {
|
||||
BinarySet ret;
|
||||
auto stat = index_.Serialize(ret);
|
||||
|
@ -124,11 +124,8 @@ VectorDiskAnnIndex<T>::Upload(const Config& config) {
|
|||
"failed to serialize index, " + KnowhereStatusString(stat));
|
||||
}
|
||||
auto remote_paths_to_size = file_manager_->GetRemotePathsToFileSize();
|
||||
for (auto& file : remote_paths_to_size) {
|
||||
ret.Append(file.first, nullptr, file.second);
|
||||
}
|
||||
|
||||
return ret;
|
||||
return IndexStats::NewFromSizeMap(file_manager_->GetAddedTotalFileSize(),
|
||||
remote_paths_to_size);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
|
|
|
@ -46,7 +46,7 @@ class VectorDiskAnnIndex : public VectorIndex {
|
|||
return binary_set;
|
||||
}
|
||||
|
||||
BinarySet
|
||||
IndexStatsPtr
|
||||
Upload(const Config& config = {}) override;
|
||||
|
||||
int64_t
|
||||
|
|
|
@ -92,18 +92,14 @@ VectorMemIndex<T>::VectorIterators(const milvus::DatasetPtr dataset,
|
|||
}
|
||||
|
||||
template <typename T>
|
||||
BinarySet
|
||||
IndexStatsPtr
|
||||
VectorMemIndex<T>::Upload(const Config& config) {
|
||||
auto binary_set = Serialize(config);
|
||||
file_manager_->AddFile(binary_set);
|
||||
|
||||
auto remote_paths_to_size = file_manager_->GetRemotePathsToFileSize();
|
||||
BinarySet ret;
|
||||
for (auto& file : remote_paths_to_size) {
|
||||
ret.Append(file.first, nullptr, file.second);
|
||||
}
|
||||
|
||||
return ret;
|
||||
return IndexStats::NewFromSizeMap(file_manager_->GetAddedTotalMemSize(),
|
||||
remote_paths_to_size);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
|
|
|
@ -78,7 +78,7 @@ class VectorMemIndex : public VectorIndex {
|
|||
std::unique_ptr<const knowhere::sparse::SparseRow<float>[]>
|
||||
GetSparseVector(const DatasetPtr dataset) const override;
|
||||
|
||||
BinarySet
|
||||
IndexStatsPtr
|
||||
Upload(const Config& config = {}) override;
|
||||
|
||||
knowhere::expected<std::vector<knowhere::IndexNode::IteratorPtr>>
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
|
||||
#include <memory>
|
||||
#include "common/Types.h"
|
||||
#include "index/Index.h"
|
||||
#include "storage/FileManager.h"
|
||||
|
||||
namespace milvus::indexbuilder {
|
||||
|
@ -33,7 +34,7 @@ class IndexCreatorBase {
|
|||
virtual void
|
||||
Load(const milvus::BinarySet&) = 0;
|
||||
|
||||
virtual BinarySet
|
||||
virtual index::IndexStatsPtr
|
||||
Upload() = 0;
|
||||
};
|
||||
|
||||
|
|
|
@ -63,7 +63,7 @@ ScalarIndexCreator::index_type() {
|
|||
return index_type_;
|
||||
}
|
||||
|
||||
BinarySet
|
||||
index::IndexStatsPtr
|
||||
ScalarIndexCreator::Upload() {
|
||||
return index_->Upload();
|
||||
}
|
||||
|
|
|
@ -38,7 +38,7 @@ class ScalarIndexCreator : public IndexCreatorBase {
|
|||
void
|
||||
Load(const milvus::BinarySet&) override;
|
||||
|
||||
BinarySet
|
||||
index::IndexStatsPtr
|
||||
Upload() override;
|
||||
|
||||
private:
|
||||
|
|
|
@ -84,7 +84,7 @@ VecIndexCreator::Query(const milvus::DatasetPtr& dataset,
|
|||
return search_result;
|
||||
}
|
||||
|
||||
BinarySet
|
||||
index::IndexStatsPtr
|
||||
VecIndexCreator::Upload() {
|
||||
return index_->Upload();
|
||||
}
|
||||
|
|
|
@ -58,7 +58,7 @@ class VecIndexCreator : public IndexCreatorBase {
|
|||
const SearchInfo& search_info,
|
||||
const BitsetView& bitset);
|
||||
|
||||
BinarySet
|
||||
index::IndexStatsPtr
|
||||
Upload() override;
|
||||
|
||||
public:
|
||||
|
|
|
@ -238,7 +238,7 @@ CreateIndex(CIndex* res_index,
|
|||
}
|
||||
|
||||
CStatus
|
||||
BuildTextIndex(CBinarySet* c_binary_set,
|
||||
BuildTextIndex(ProtoLayoutInterface result,
|
||||
const uint8_t* serialized_build_index_info,
|
||||
const uint64_t len) {
|
||||
try {
|
||||
|
@ -286,9 +286,9 @@ BuildTextIndex(CBinarySet* c_binary_set,
|
|||
"milvus_tokenizer",
|
||||
field_schema.get_analyzer_params().c_str());
|
||||
index->Build(config);
|
||||
auto binary =
|
||||
std::make_unique<knowhere::BinarySet>(index->Upload(config));
|
||||
*c_binary_set = binary.release();
|
||||
auto create_index_result = index->Upload(config);
|
||||
create_index_result->SerializeAt(
|
||||
reinterpret_cast<milvus::ProtoLayout*>(result));
|
||||
auto status = CStatus();
|
||||
status.error_code = Success;
|
||||
status.error_msg = "";
|
||||
|
@ -776,7 +776,7 @@ AppendIndexStorageInfo(CBuildIndexInfo c_build_index_info,
|
|||
}
|
||||
|
||||
CStatus
|
||||
SerializeIndexAndUpLoad(CIndex index, CBinarySet* c_binary_set) {
|
||||
SerializeIndexAndUpLoad(CIndex index, ProtoLayoutInterface result) {
|
||||
auto status = CStatus();
|
||||
try {
|
||||
AssertInfo(
|
||||
|
@ -784,9 +784,9 @@ SerializeIndexAndUpLoad(CIndex index, CBinarySet* c_binary_set) {
|
|||
"failed to serialize index to binary set, passed index was null");
|
||||
auto real_index =
|
||||
reinterpret_cast<milvus::indexbuilder::IndexCreatorBase*>(index);
|
||||
auto binary =
|
||||
std::make_unique<knowhere::BinarySet>(real_index->Upload());
|
||||
*c_binary_set = binary.release();
|
||||
auto create_index_result = real_index->Upload();
|
||||
create_index_result->SerializeAt(
|
||||
reinterpret_cast<milvus::ProtoLayout*>(result));
|
||||
status.error_code = Success;
|
||||
status.error_msg = "";
|
||||
} catch (std::exception& e) {
|
||||
|
|
|
@ -17,6 +17,7 @@ extern "C" {
|
|||
|
||||
#include <stdint.h>
|
||||
#include "common/type_c.h"
|
||||
#include "common/protobuf_utils_c.h"
|
||||
#include "common/binary_set_c.h"
|
||||
#include "indexbuilder/type_c.h"
|
||||
|
||||
|
@ -36,7 +37,7 @@ CStatus
|
|||
DeleteIndex(CIndex index);
|
||||
|
||||
CStatus
|
||||
BuildTextIndex(CBinarySet* c_binary_set,
|
||||
BuildTextIndex(ProtoLayoutInterface c_binary_set,
|
||||
const uint8_t* serialized_build_index_info,
|
||||
const uint64_t len);
|
||||
|
||||
|
@ -131,7 +132,7 @@ AppendOptionalFieldDataPath(CBuildIndexInfo c_build_index_info,
|
|||
const char* c_file_path);
|
||||
|
||||
CStatus
|
||||
SerializeIndexAndUpLoad(CIndex index, CBinarySet* c_binary_set);
|
||||
SerializeIndexAndUpLoad(CIndex index, ProtoLayoutInterface result);
|
||||
|
||||
CStatus
|
||||
AppendIndexStorageInfo(CBuildIndexInfo c_build_index_info,
|
||||
|
|
|
@ -47,7 +47,10 @@ struct LoadIndexInfo {
|
|||
int64_t index_store_version;
|
||||
IndexVersion index_engine_version;
|
||||
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
|
||||
|
|
|
@ -94,6 +94,7 @@ DiskFileManagerImpl::AddFile(const std::string& file) noexcept {
|
|||
|
||||
auto fileName = GetFileName(file);
|
||||
auto fileSize = local_chunk_manager->Size(file);
|
||||
added_total_file_size_ += fileSize;
|
||||
|
||||
std::vector<std::string> batch_remote_files;
|
||||
std::vector<int64_t> remote_file_sizes;
|
||||
|
@ -146,6 +147,7 @@ DiskFileManagerImpl::AddTextLog(const std::string& file) noexcept {
|
|||
|
||||
auto fileName = GetFileName(file);
|
||||
auto fileSize = local_chunk_manager->Size(file);
|
||||
added_total_file_size_ += fileSize;
|
||||
|
||||
std::vector<std::string> batch_remote_files;
|
||||
std::vector<int64_t> remote_file_sizes;
|
||||
|
|
|
@ -110,6 +110,11 @@ class DiskFileManagerImpl : public FileManagerImpl {
|
|||
return GetRemoteIndexObjectPrefix();
|
||||
}
|
||||
|
||||
size_t
|
||||
GetAddedTotalFileSize() const {
|
||||
return added_total_file_size_;
|
||||
}
|
||||
|
||||
private:
|
||||
int64_t
|
||||
GetIndexBuildId() {
|
||||
|
@ -131,6 +136,8 @@ class DiskFileManagerImpl : public FileManagerImpl {
|
|||
|
||||
// remote file path
|
||||
std::map<std::string, int64_t> remote_paths_to_size_;
|
||||
|
||||
size_t added_total_file_size_ = 0;
|
||||
};
|
||||
|
||||
using DiskANNFileManagerImplPtr = std::shared_ptr<DiskFileManagerImpl>;
|
||||
|
|
|
@ -73,6 +73,7 @@ MemFileManagerImpl::AddFile(const BinarySet& binary_set) {
|
|||
slice_sizes.emplace_back(iter->second->size);
|
||||
slice_names.emplace_back(remotePrefix + "/" + iter->first);
|
||||
batch_size += iter->second->size;
|
||||
added_total_mem_size_ += iter->second->size;
|
||||
}
|
||||
|
||||
if (data_slices.size() > 0) {
|
||||
|
|
|
@ -64,9 +64,16 @@ class MemFileManagerImpl : public FileManagerImpl {
|
|||
return remote_paths_to_size_;
|
||||
}
|
||||
|
||||
size_t
|
||||
GetAddedTotalMemSize() const {
|
||||
return added_total_mem_size_;
|
||||
}
|
||||
|
||||
private:
|
||||
// remote file path
|
||||
std::map<std::string, int64_t> remote_paths_to_size_;
|
||||
|
||||
size_t added_total_mem_size_ = 0;
|
||||
};
|
||||
|
||||
using MemFileManagerImplPtr = std::shared_ptr<MemFileManagerImpl>;
|
||||
|
|
|
@ -236,10 +236,12 @@ class ArrayBitmapIndexTest : public testing::Test {
|
|||
DataType::ARRAY, config, ctx);
|
||||
build_index->Build();
|
||||
|
||||
auto binary_set = build_index->Upload();
|
||||
for (const auto& [key, _] : binary_set.binary_map_) {
|
||||
index_files.push_back(key);
|
||||
}
|
||||
auto create_index_result = build_index->Upload();
|
||||
auto memSize = create_index_result->GetMemSize();
|
||||
auto serializedSize = create_index_result->GetSerializedSize();
|
||||
ASSERT_GT(memSize, 0);
|
||||
ASSERT_GT(serializedSize, 0);
|
||||
index_files = create_index_result->GetIndexFiles();
|
||||
}
|
||||
|
||||
index::CreateIndexInfo index_info{};
|
||||
|
|
|
@ -134,7 +134,6 @@ class BitmapIndexTest : public testing::Test {
|
|||
log_path, serialized_bytes.data(), serialized_bytes.size());
|
||||
|
||||
storage::FileManagerContext ctx(field_meta, index_meta, chunk_manager_);
|
||||
std::vector<std::string> index_files;
|
||||
|
||||
Config config;
|
||||
config["index_type"] = milvus::index::BITMAP_INDEX_TYPE;
|
||||
|
@ -145,10 +144,12 @@ class BitmapIndexTest : public testing::Test {
|
|||
type_, config, ctx);
|
||||
build_index->Build();
|
||||
|
||||
auto binary_set = build_index->Upload();
|
||||
for (const auto& [key, _] : binary_set.binary_map_) {
|
||||
index_files.push_back(key);
|
||||
}
|
||||
auto create_index_result = build_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::CreateIndexInfo index_info{};
|
||||
index_info.index_type = milvus::index::BITMAP_INDEX_TYPE;
|
||||
|
|
|
@ -149,10 +149,12 @@ class HybridIndexTestV1 : public testing::Test {
|
|||
type_, config, ctx);
|
||||
build_index->Build();
|
||||
|
||||
auto binary_set = build_index->Upload();
|
||||
for (const auto& [key, _] : binary_set.binary_map_) {
|
||||
index_files.push_back(key);
|
||||
}
|
||||
auto create_index_result = build_index->Upload();
|
||||
auto memSize = create_index_result->GetMemSize();
|
||||
auto serializedSize = create_index_result->GetSerializedSize();
|
||||
ASSERT_GT(memSize, 0);
|
||||
ASSERT_GT(serializedSize, 0);
|
||||
index_files = create_index_result->GetIndexFiles();
|
||||
}
|
||||
|
||||
index::CreateIndexInfo index_info{};
|
||||
|
|
|
@ -486,17 +486,18 @@ TEST_P(IndexTest, BuildAndQuery) {
|
|||
milvus::index::IndexBasePtr new_index;
|
||||
milvus::index::VectorIndex* vec_index = nullptr;
|
||||
|
||||
auto binary_set = index->Upload();
|
||||
auto create_index_result = index->Upload();
|
||||
index.reset();
|
||||
|
||||
new_index = milvus::index::IndexFactory::GetInstance().CreateIndex(
|
||||
create_index_info, file_manager_context);
|
||||
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 index_files = create_index_result->GetIndexFiles();
|
||||
auto memSize = create_index_result->GetMemSize();
|
||||
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["index_files"] = index_files;
|
||||
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::VectorIndex* vec_index = nullptr;
|
||||
|
||||
auto binary_set = index->Upload();
|
||||
auto create_index_result = index->Upload();
|
||||
index.reset();
|
||||
|
||||
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());
|
||||
|
||||
std::vector<std::string> index_files;
|
||||
for (auto& binary : binary_set.binary_map_) {
|
||||
index_files.emplace_back(binary.first);
|
||||
}
|
||||
auto index_files = create_index_result->GetIndexFiles();
|
||||
auto memSize = create_index_result->GetMemSize();
|
||||
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["index_files"] = index_files;
|
||||
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::VectorIndex* vec_index = nullptr;
|
||||
|
||||
auto binary_set = index->Upload();
|
||||
auto create_index_result = index->Upload();
|
||||
index.reset();
|
||||
std::vector<std::string> index_files;
|
||||
for (auto& binary : binary_set.binary_map_) {
|
||||
index_files.emplace_back(binary.first);
|
||||
}
|
||||
auto index_files = create_index_result->GetIndexFiles();
|
||||
auto memSize = create_index_result->GetMemSize();
|
||||
auto serializedSize = create_index_result->GetSerializedSize();
|
||||
ASSERT_GT(memSize, 0);
|
||||
ASSERT_GT(serializedSize, 0);
|
||||
new_index = milvus::index::IndexFactory::GetInstance().CreateIndex(
|
||||
create_index_info, file_manager_context);
|
||||
load_conf = generate_load_conf(index_type, metric_type, 0);
|
||||
load_conf["index_files"] = index_files;
|
||||
|
||||
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) {
|
||||
EXPECT_EQ(vec_index->GetDim(), DIM);
|
||||
}
|
||||
|
@ -716,12 +714,13 @@ TEST_P(IndexTest, GetVector_EmptySparseVector) {
|
|||
milvus::index::IndexBasePtr new_index;
|
||||
milvus::index::VectorIndex* vec_index = nullptr;
|
||||
|
||||
auto binary_set = index->Upload();
|
||||
auto create_index_result = index->Upload();
|
||||
index.reset();
|
||||
std::vector<std::string> index_files;
|
||||
for (auto& binary : binary_set.binary_map_) {
|
||||
index_files.emplace_back(binary.first);
|
||||
}
|
||||
auto index_files = create_index_result->GetIndexFiles();
|
||||
auto memSize = create_index_result->GetMemSize();
|
||||
auto serializedSize = create_index_result->GetSerializedSize();
|
||||
ASSERT_GT(memSize, 0);
|
||||
ASSERT_GT(serializedSize, 0);
|
||||
new_index = milvus::index::IndexFactory::GetInstance().CreateIndex(
|
||||
create_index_info, file_manager_context);
|
||||
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));
|
||||
|
||||
// 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();
|
||||
|
||||
auto new_index = milvus::index::IndexFactory::GetInstance().CreateIndex(
|
||||
create_index_info, file_manager_context);
|
||||
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);
|
||||
load_conf["index_files"] = index_files;
|
||||
vec_index->Load(milvus::tracer::TraceContext{}, load_conf);
|
||||
|
@ -880,16 +880,17 @@ TEST(Indexing, SearchDiskAnnWithFloat16) {
|
|||
ASSERT_NO_THROW(index->BuildWithDataset(xb_dataset, build_conf));
|
||||
|
||||
// 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();
|
||||
|
||||
auto new_index = milvus::index::IndexFactory::GetInstance().CreateIndex(
|
||||
create_index_info, file_manager_context);
|
||||
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);
|
||||
load_conf["index_files"] = index_files;
|
||||
vec_index->Load(milvus::tracer::TraceContext{}, load_conf);
|
||||
|
@ -962,16 +963,17 @@ TEST(Indexing, SearchDiskAnnWithBFloat16) {
|
|||
ASSERT_NO_THROW(index->BuildWithDataset(xb_dataset, build_conf));
|
||||
|
||||
// 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();
|
||||
|
||||
auto new_index = milvus::index::IndexFactory::GetInstance().CreateIndex(
|
||||
create_index_info, file_manager_context);
|
||||
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);
|
||||
load_conf["index_files"] = index_files;
|
||||
vec_index->Load(milvus::tracer::TraceContext{}, load_conf);
|
||||
|
@ -992,4 +994,21 @@ TEST(Indexing, SearchDiskAnnWithBFloat16) {
|
|||
SearchResult 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);
|
||||
index->Build();
|
||||
|
||||
auto bs = index->Upload();
|
||||
for (const auto& [key, _] : bs.binary_map_) {
|
||||
index_files.push_back(key);
|
||||
}
|
||||
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);
|
||||
index_files = create_index_result->GetIndexFiles();
|
||||
}
|
||||
|
||||
{
|
||||
|
@ -466,10 +468,12 @@ test_string() {
|
|||
dtype, config, ctx);
|
||||
index->Build();
|
||||
|
||||
auto bs = index->Upload();
|
||||
for (const auto& [key, _] : bs.binary_map_) {
|
||||
index_files.push_back(key);
|
||||
}
|
||||
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);
|
||||
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.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(),
|
||||
file_manager_context);
|
||||
indexing->BuildWithDataset(database, conf);
|
||||
auto binary_set = indexing->Upload();
|
||||
|
||||
std::vector<std::string> index_files;
|
||||
for (auto& binary : binary_set.binary_map_) {
|
||||
index_files.emplace_back(binary.first);
|
||||
}
|
||||
auto create_index_result = indexing->Upload();
|
||||
auto index_files = create_index_result->GetIndexFiles();
|
||||
conf["index_files"] = index_files;
|
||||
// we need a load stage to use index as the producation does
|
||||
// knowhere would do some data preparation in this stage
|
||||
|
|
|
@ -303,59 +303,59 @@ func Test_compactionTrigger_force(t *testing.T) {
|
|||
segmentIndexes: map[UniqueID]map[UniqueID]*model.SegmentIndex{
|
||||
1: {
|
||||
indexID: {
|
||||
SegmentID: 1,
|
||||
CollectionID: 2,
|
||||
PartitionID: 1,
|
||||
NumRows: 100,
|
||||
IndexID: indexID,
|
||||
BuildID: 1,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 0,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 0,
|
||||
WriteHandoff: false,
|
||||
SegmentID: 1,
|
||||
CollectionID: 2,
|
||||
PartitionID: 1,
|
||||
NumRows: 100,
|
||||
IndexID: indexID,
|
||||
BuildID: 1,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 0,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 0,
|
||||
WriteHandoff: false,
|
||||
},
|
||||
},
|
||||
2: {
|
||||
indexID: {
|
||||
SegmentID: 2,
|
||||
CollectionID: 2,
|
||||
PartitionID: 1,
|
||||
NumRows: 100,
|
||||
IndexID: indexID,
|
||||
BuildID: 2,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 0,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 0,
|
||||
WriteHandoff: false,
|
||||
SegmentID: 2,
|
||||
CollectionID: 2,
|
||||
PartitionID: 1,
|
||||
NumRows: 100,
|
||||
IndexID: indexID,
|
||||
BuildID: 2,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 0,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 0,
|
||||
WriteHandoff: false,
|
||||
},
|
||||
},
|
||||
3: {
|
||||
indexID: {
|
||||
SegmentID: 3,
|
||||
CollectionID: 1111,
|
||||
PartitionID: 1,
|
||||
NumRows: 100,
|
||||
IndexID: indexID,
|
||||
BuildID: 3,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 0,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 0,
|
||||
WriteHandoff: false,
|
||||
SegmentID: 3,
|
||||
CollectionID: 1111,
|
||||
PartitionID: 1,
|
||||
NumRows: 100,
|
||||
IndexID: indexID,
|
||||
BuildID: 3,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 0,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 0,
|
||||
WriteHandoff: false,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
|
@ -487,40 +487,40 @@ func createMetaForRecycleUnusedSegIndexes(catalog metastore.DataCoordCatalog) *m
|
|||
segmentIndexes: map[UniqueID]map[UniqueID]*model.SegmentIndex{
|
||||
segID: {
|
||||
indexID: {
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1026,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID,
|
||||
NodeID: 1,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 10,
|
||||
IndexFileKeys: []string{"file1", "file2"},
|
||||
IndexSize: 0,
|
||||
WriteHandoff: false,
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1026,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID,
|
||||
NodeID: 1,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 10,
|
||||
IndexFileKeys: []string{"file1", "file2"},
|
||||
IndexSerializedSize: 0,
|
||||
WriteHandoff: false,
|
||||
},
|
||||
},
|
||||
segID + 1: {
|
||||
indexID: {
|
||||
SegmentID: segID + 1,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1026,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID + 1,
|
||||
NodeID: 1,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 10,
|
||||
IndexFileKeys: []string{"file1", "file2"},
|
||||
IndexSize: 0,
|
||||
WriteHandoff: false,
|
||||
SegmentID: segID + 1,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1026,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID + 1,
|
||||
NodeID: 1,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 10,
|
||||
IndexFileKeys: []string{"file1", "file2"},
|
||||
IndexSerializedSize: 0,
|
||||
WriteHandoff: false,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
@ -532,37 +532,37 @@ func createMetaForRecycleUnusedSegIndexes(catalog metastore.DataCoordCatalog) *m
|
|||
}
|
||||
|
||||
meta.indexMeta.segmentBuildInfo.Add(&model.SegmentIndex{
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1026,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID,
|
||||
NodeID: 1,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 10,
|
||||
IndexFileKeys: []string{"file1", "file2"},
|
||||
IndexSize: 0,
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1026,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID,
|
||||
NodeID: 1,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 10,
|
||||
IndexFileKeys: []string{"file1", "file2"},
|
||||
IndexSerializedSize: 0,
|
||||
})
|
||||
|
||||
meta.indexMeta.segmentBuildInfo.Add(&model.SegmentIndex{
|
||||
SegmentID: segID + 1,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1026,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID + 1,
|
||||
NodeID: 1,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 10,
|
||||
IndexFileKeys: []string{"file1", "file2"},
|
||||
IndexSize: 0,
|
||||
SegmentID: segID + 1,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1026,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID + 1,
|
||||
NodeID: 1,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 10,
|
||||
IndexFileKeys: []string{"file1", "file2"},
|
||||
IndexSerializedSize: 0,
|
||||
})
|
||||
|
||||
for id, segment := range segments {
|
||||
|
@ -652,40 +652,40 @@ func createMetaTableForRecycleUnusedIndexFiles(catalog *datacoord.Catalog) *meta
|
|||
segmentIndexes: map[UniqueID]map[UniqueID]*model.SegmentIndex{
|
||||
segID: {
|
||||
indexID: {
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1026,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID,
|
||||
NodeID: 1,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 10,
|
||||
IndexFileKeys: []string{"file1", "file2"},
|
||||
IndexSize: 0,
|
||||
WriteHandoff: false,
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1026,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID,
|
||||
NodeID: 1,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 10,
|
||||
IndexFileKeys: []string{"file1", "file2"},
|
||||
IndexSerializedSize: 0,
|
||||
WriteHandoff: false,
|
||||
},
|
||||
},
|
||||
segID + 1: {
|
||||
indexID: {
|
||||
SegmentID: segID + 1,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1026,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID + 1,
|
||||
NodeID: 1,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_InProgress,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 10,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 0,
|
||||
WriteHandoff: false,
|
||||
SegmentID: segID + 1,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1026,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID + 1,
|
||||
NodeID: 1,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_InProgress,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 10,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 0,
|
||||
WriteHandoff: false,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
@ -710,38 +710,38 @@ func createMetaTableForRecycleUnusedIndexFiles(catalog *datacoord.Catalog) *meta
|
|||
},
|
||||
}
|
||||
meta.indexMeta.segmentBuildInfo.Add(&model.SegmentIndex{
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1026,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID,
|
||||
NodeID: 1,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 10,
|
||||
IndexFileKeys: []string{"file1", "file2"},
|
||||
IndexSize: 0,
|
||||
WriteHandoff: false,
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1026,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID,
|
||||
NodeID: 1,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 10,
|
||||
IndexFileKeys: []string{"file1", "file2"},
|
||||
IndexSerializedSize: 0,
|
||||
WriteHandoff: false,
|
||||
})
|
||||
meta.indexMeta.segmentBuildInfo.Add(&model.SegmentIndex{
|
||||
SegmentID: segID + 1,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1026,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID + 1,
|
||||
NodeID: 1,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_InProgress,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 10,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 0,
|
||||
WriteHandoff: false,
|
||||
SegmentID: segID + 1,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1026,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID + 1,
|
||||
NodeID: 1,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_InProgress,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 10,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 0,
|
||||
WriteHandoff: false,
|
||||
})
|
||||
for id, segment := range segments {
|
||||
meta.segments.SetSegment(id, segment)
|
||||
|
@ -1052,40 +1052,40 @@ func TestGarbageCollector_clearETCD(t *testing.T) {
|
|||
segmentIndexes: map[UniqueID]map[UniqueID]*model.SegmentIndex{
|
||||
segID: {
|
||||
indexID: {
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 5000,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 0,
|
||||
IndexFileKeys: []string{"file1", "file2"},
|
||||
IndexSize: 1024,
|
||||
WriteHandoff: false,
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 5000,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 0,
|
||||
IndexFileKeys: []string{"file1", "file2"},
|
||||
IndexSerializedSize: 1024,
|
||||
WriteHandoff: false,
|
||||
},
|
||||
},
|
||||
segID + 1: {
|
||||
indexID: {
|
||||
SegmentID: segID + 1,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 5000,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID + 1,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 0,
|
||||
IndexFileKeys: []string{"file3", "file4"},
|
||||
IndexSize: 1024,
|
||||
WriteHandoff: false,
|
||||
SegmentID: segID + 1,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 5000,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID + 1,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 0,
|
||||
IndexFileKeys: []string{"file3", "file4"},
|
||||
IndexSerializedSize: 1024,
|
||||
WriteHandoff: false,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
@ -1138,39 +1138,39 @@ func TestGarbageCollector_clearETCD(t *testing.T) {
|
|||
}
|
||||
|
||||
m.indexMeta.segmentBuildInfo.Add(&model.SegmentIndex{
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 5000,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 0,
|
||||
IndexFileKeys: []string{"file1", "file2"},
|
||||
IndexSize: 1024,
|
||||
WriteHandoff: false,
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 5000,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 0,
|
||||
IndexFileKeys: []string{"file1", "file2"},
|
||||
IndexSerializedSize: 1024,
|
||||
WriteHandoff: false,
|
||||
})
|
||||
|
||||
m.indexMeta.segmentBuildInfo.Add(&model.SegmentIndex{
|
||||
SegmentID: segID + 1,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 5000,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID + 1,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 0,
|
||||
IndexFileKeys: []string{"file3", "file4"},
|
||||
IndexSize: 1024,
|
||||
WriteHandoff: false,
|
||||
SegmentID: segID + 1,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 5000,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID + 1,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 0,
|
||||
IndexFileKeys: []string{"file3", "file4"},
|
||||
IndexSerializedSize: 1024,
|
||||
WriteHandoff: false,
|
||||
})
|
||||
|
||||
for id, segment := range segments {
|
||||
|
|
|
@ -45,6 +45,7 @@ import (
|
|||
"github.com/milvus-io/milvus/pkg/util/funcutil"
|
||||
"github.com/milvus-io/milvus/pkg/util/indexparams"
|
||||
"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/tsoutil"
|
||||
"github.com/milvus-io/milvus/pkg/util/typeutil"
|
||||
|
@ -74,7 +75,7 @@ func newIndexTaskStats(s *model.SegmentIndex) *metricsinfo.IndexTaskStats {
|
|||
BuildID: s.BuildID,
|
||||
IndexState: s.IndexState.String(),
|
||||
FailReason: s.FailReason,
|
||||
IndexSize: s.IndexSize,
|
||||
IndexSize: s.IndexMemSize,
|
||||
IndexVersion: s.IndexVersion,
|
||||
CreatedUTCTime: typeutil.TimestampToString(s.CreatedUTCTime * 1000),
|
||||
FinishedUTCTime: typeutil.TimestampToString(s.FinishedUTCTime * 1000),
|
||||
|
@ -154,6 +155,9 @@ func (m *indexMeta) reloadFromKV() error {
|
|||
return err
|
||||
}
|
||||
for _, segIdx := range segmentIndexes {
|
||||
if segIdx.IndexMemSize == 0 {
|
||||
segIdx.IndexMemSize = segIdx.IndexSerializedSize * paramtable.Get().DataCoordCfg.IndexMemSizeEstimateMultiplier.GetAsUint64()
|
||||
}
|
||||
m.updateSegmentIndex(segIdx)
|
||||
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.IndexFileKeys = common.CloneStringList(taskInfo.GetIndexFileKeys())
|
||||
segIdx.FailReason = taskInfo.GetFailReason()
|
||||
segIdx.IndexSize = taskInfo.GetSerializedSize()
|
||||
segIdx.IndexSerializedSize = taskInfo.GetSerializedSize()
|
||||
segIdx.IndexMemSize = taskInfo.GetMemSize()
|
||||
segIdx.CurrentIndexVersion = taskInfo.GetCurrentIndexVersion()
|
||||
segIdx.FinishedUTCTime = uint64(time.Now().Unix())
|
||||
return m.alterSegmentIndexes([]*model.SegmentIndex{segIdx})
|
||||
|
@ -885,8 +890,8 @@ func (m *indexMeta) SetStoredIndexFileSizeMetric(collections map[UniqueID]*colle
|
|||
coll, ok := collections[segmentIdx.CollectionID]
|
||||
if ok {
|
||||
metrics.DataCoordStoredIndexFilesSize.WithLabelValues(coll.DatabaseName, coll.Schema.GetName(),
|
||||
fmt.Sprint(segmentIdx.CollectionID)).Add(float64(segmentIdx.IndexSize))
|
||||
total += segmentIdx.IndexSize
|
||||
fmt.Sprint(segmentIdx.CollectionID)).Add(float64(segmentIdx.IndexSerializedSize))
|
||||
total += segmentIdx.IndexSerializedSize
|
||||
}
|
||||
}
|
||||
return total
|
||||
|
@ -1135,7 +1140,7 @@ func (m *indexMeta) GetSegmentIndexedFields(collectionID UniqueID, segmentID Uni
|
|||
IndexFieldID: index.IndexID,
|
||||
IndexID: index.IndexID,
|
||||
BuildID: buildID,
|
||||
IndexSize: int64(si.IndexSize),
|
||||
IndexSize: int64(si.IndexSerializedSize),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
@ -517,20 +517,20 @@ func TestMeta_AddSegmentIndex(t *testing.T) {
|
|||
}
|
||||
|
||||
segmentIndex := &model.SegmentIndex{
|
||||
SegmentID: 1,
|
||||
CollectionID: 2,
|
||||
PartitionID: 3,
|
||||
NumRows: 10240,
|
||||
IndexID: 4,
|
||||
BuildID: 5,
|
||||
NodeID: 6,
|
||||
IndexVersion: 0,
|
||||
IndexState: 0,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 12,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 0,
|
||||
SegmentID: 1,
|
||||
CollectionID: 2,
|
||||
PartitionID: 3,
|
||||
NumRows: 10240,
|
||||
IndexID: 4,
|
||||
BuildID: 5,
|
||||
NodeID: 6,
|
||||
IndexVersion: 0,
|
||||
IndexState: 0,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 12,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 0,
|
||||
}
|
||||
|
||||
t.Run("save meta fail", func(t *testing.T) {
|
||||
|
@ -664,20 +664,20 @@ func TestMeta_GetSegmentIndexState(t *testing.T) {
|
|||
|
||||
t.Run("unissued", func(t *testing.T) {
|
||||
m.updateSegmentIndex(&model.SegmentIndex{
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 10250,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID,
|
||||
NodeID: 1,
|
||||
IndexVersion: 0,
|
||||
IndexState: commonpb.IndexState_Unissued,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 12,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 0,
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 10250,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID,
|
||||
NodeID: 1,
|
||||
IndexVersion: 0,
|
||||
IndexState: commonpb.IndexState_Unissued,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 12,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 0,
|
||||
})
|
||||
|
||||
state := m.GetSegmentIndexState(collID, segID, indexID)
|
||||
|
@ -686,20 +686,20 @@ func TestMeta_GetSegmentIndexState(t *testing.T) {
|
|||
|
||||
t.Run("finish", func(t *testing.T) {
|
||||
m.updateSegmentIndex(&model.SegmentIndex{
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 10250,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID,
|
||||
NodeID: 1,
|
||||
IndexVersion: 0,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 12,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 0,
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 10250,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID,
|
||||
NodeID: 1,
|
||||
IndexVersion: 0,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 12,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 0,
|
||||
})
|
||||
|
||||
state := m.GetSegmentIndexState(collID, segID, indexID)
|
||||
|
@ -734,20 +734,20 @@ func TestMeta_GetIndexedSegment(t *testing.T) {
|
|||
m.segmentIndexes = map[UniqueID]map[UniqueID]*model.SegmentIndex{
|
||||
segID: {
|
||||
indexID: {
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1025,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID,
|
||||
NodeID: nodeID,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 10,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 0,
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1025,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID,
|
||||
NodeID: nodeID,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 10,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 0,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
@ -770,20 +770,20 @@ func TestMeta_GetIndexedSegment(t *testing.T) {
|
|||
}
|
||||
|
||||
m.segmentBuildInfo.Add(&model.SegmentIndex{
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1025,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID,
|
||||
NodeID: nodeID,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 10,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 0,
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1025,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID,
|
||||
NodeID: nodeID,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 10,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 0,
|
||||
})
|
||||
|
||||
t.Run("success", func(t *testing.T) {
|
||||
|
@ -1092,20 +1092,20 @@ func TestMeta_GetIndexParams(t *testing.T) {
|
|||
func TestMeta_GetIndexJob(t *testing.T) {
|
||||
m := newSegmentIndexMeta(nil)
|
||||
m.segmentBuildInfo.Add(&model.SegmentIndex{
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1025,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID,
|
||||
NodeID: 1,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Unissued,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 0,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 0,
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1025,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID,
|
||||
NodeID: 1,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Unissued,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 0,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 0,
|
||||
})
|
||||
|
||||
t.Run("exist", func(t *testing.T) {
|
||||
|
@ -1180,20 +1180,20 @@ func updateSegmentIndexMeta(t *testing.T) *indexMeta {
|
|||
|
||||
indexBuildInfo := newSegmentIndexBuildInfo()
|
||||
indexBuildInfo.Add(&model.SegmentIndex{
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1025,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID,
|
||||
NodeID: 0,
|
||||
IndexVersion: 0,
|
||||
IndexState: commonpb.IndexState_Unissued,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 0,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 0,
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1025,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID,
|
||||
NodeID: 0,
|
||||
IndexVersion: 0,
|
||||
IndexState: commonpb.IndexState_Unissued,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 0,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 0,
|
||||
})
|
||||
|
||||
return &indexMeta{
|
||||
|
@ -1201,20 +1201,20 @@ func updateSegmentIndexMeta(t *testing.T) *indexMeta {
|
|||
segmentIndexes: map[UniqueID]map[UniqueID]*model.SegmentIndex{
|
||||
segID: {
|
||||
indexID: {
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1025,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID,
|
||||
NodeID: 0,
|
||||
IndexVersion: 0,
|
||||
IndexState: commonpb.IndexState_Unissued,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 0,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 0,
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1025,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID,
|
||||
NodeID: 0,
|
||||
IndexVersion: 0,
|
||||
IndexState: commonpb.IndexState_Unissued,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 0,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 0,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
@ -1521,26 +1521,26 @@ func TestIndexMeta_GetUnindexedSegments(t *testing.T) {
|
|||
func TestBuildIndexTaskStatsJSON(t *testing.T) {
|
||||
im := &indexMeta{segmentBuildInfo: newSegmentIndexBuildInfo()}
|
||||
si1 := &model.SegmentIndex{
|
||||
BuildID: 1,
|
||||
CollectionID: 100,
|
||||
SegmentID: 1000,
|
||||
IndexID: 10,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IndexSize: 1024,
|
||||
IndexVersion: 1,
|
||||
CreatedUTCTime: uint64(time.Now().Unix()),
|
||||
BuildID: 1,
|
||||
CollectionID: 100,
|
||||
SegmentID: 1000,
|
||||
IndexID: 10,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IndexSerializedSize: 1024,
|
||||
IndexVersion: 1,
|
||||
CreatedUTCTime: uint64(time.Now().Unix()),
|
||||
}
|
||||
si2 := &model.SegmentIndex{
|
||||
BuildID: 2,
|
||||
CollectionID: 101,
|
||||
SegmentID: 1001,
|
||||
IndexID: 11,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IndexSize: 2048,
|
||||
IndexVersion: 1,
|
||||
CreatedUTCTime: uint64(time.Now().Unix()),
|
||||
BuildID: 2,
|
||||
CollectionID: 101,
|
||||
SegmentID: 1001,
|
||||
IndexID: 11,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IndexSerializedSize: 2048,
|
||||
IndexVersion: 1,
|
||||
CreatedUTCTime: uint64(time.Now().Unix()),
|
||||
}
|
||||
|
||||
actualJSON := im.TaskStatsJSON()
|
||||
|
@ -1638,20 +1638,20 @@ func TestMeta_GetSegmentIndexStatus(t *testing.T) {
|
|||
m.segmentIndexes = map[UniqueID]map[UniqueID]*model.SegmentIndex{
|
||||
segID: {
|
||||
indexID: {
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 10250,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID,
|
||||
NodeID: 1,
|
||||
IndexVersion: 0,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 12,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 0,
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 10250,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID,
|
||||
NodeID: 1,
|
||||
IndexVersion: 0,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 12,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 0,
|
||||
},
|
||||
},
|
||||
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),
|
||||
IndexParams: indexParams,
|
||||
IndexFilePaths: indexFilePaths,
|
||||
SerializedSize: segIdx.IndexSize,
|
||||
SerializedSize: segIdx.IndexSerializedSize,
|
||||
MemSize: segIdx.IndexMemSize,
|
||||
IndexVersion: segIdx.IndexVersion,
|
||||
NumRows: segIdx.NumRows,
|
||||
CurrentIndexVersion: segIdx.CurrentIndexVersion,
|
||||
|
|
|
@ -400,89 +400,89 @@ func TestServer_AlterIndex(t *testing.T) {
|
|||
segmentIndexes: map[UniqueID]map[UniqueID]*model.SegmentIndex{
|
||||
segID: {
|
||||
indexID: {
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 10000,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: createTS,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 0,
|
||||
WriteHandoff: false,
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 10000,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: createTS,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 0,
|
||||
WriteHandoff: false,
|
||||
},
|
||||
indexID + 1: {
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 10000,
|
||||
IndexID: indexID + 1,
|
||||
BuildID: buildID + 1,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: createTS,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 0,
|
||||
WriteHandoff: false,
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 10000,
|
||||
IndexID: indexID + 1,
|
||||
BuildID: buildID + 1,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: createTS,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 0,
|
||||
WriteHandoff: false,
|
||||
},
|
||||
indexID + 3: {
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 10000,
|
||||
IndexID: indexID + 3,
|
||||
BuildID: buildID + 3,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_InProgress,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: createTS,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 0,
|
||||
WriteHandoff: false,
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 10000,
|
||||
IndexID: indexID + 3,
|
||||
BuildID: buildID + 3,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_InProgress,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: createTS,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 0,
|
||||
WriteHandoff: false,
|
||||
},
|
||||
indexID + 4: {
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 10000,
|
||||
IndexID: indexID + 4,
|
||||
BuildID: buildID + 4,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Failed,
|
||||
FailReason: "mock failed",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: createTS,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 0,
|
||||
WriteHandoff: false,
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 10000,
|
||||
IndexID: indexID + 4,
|
||||
BuildID: buildID + 4,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Failed,
|
||||
FailReason: "mock failed",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: createTS,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 0,
|
||||
WriteHandoff: false,
|
||||
},
|
||||
indexID + 5: {
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 10000,
|
||||
IndexID: indexID + 5,
|
||||
BuildID: buildID + 5,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Unissued,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: createTS,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 0,
|
||||
WriteHandoff: false,
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 10000,
|
||||
IndexID: indexID + 5,
|
||||
BuildID: buildID + 5,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Unissued,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: createTS,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 0,
|
||||
WriteHandoff: false,
|
||||
},
|
||||
},
|
||||
segID - 1: {
|
||||
|
@ -843,21 +843,21 @@ func TestServer_GetIndexState(t *testing.T) {
|
|||
segmentIndexes: map[UniqueID]map[UniqueID]*model.SegmentIndex{
|
||||
segID: {
|
||||
indexID: {
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 3000,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_IndexStateNone,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 0,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 0,
|
||||
WriteHandoff: false,
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 3000,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_IndexStateNone,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 0,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 0,
|
||||
WriteHandoff: false,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
@ -968,21 +968,21 @@ func TestServer_GetSegmentIndexState(t *testing.T) {
|
|||
},
|
||||
}
|
||||
s.meta.indexMeta.updateSegmentIndex(&model.SegmentIndex{
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 10250,
|
||||
IndexID: indexID,
|
||||
BuildID: 10,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_InProgress,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: createTS,
|
||||
IndexFileKeys: []string{"file1", "file2"},
|
||||
IndexSize: 1025,
|
||||
WriteHandoff: false,
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 10250,
|
||||
IndexID: indexID,
|
||||
BuildID: 10,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_InProgress,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: createTS,
|
||||
IndexFileKeys: []string{"file1", "file2"},
|
||||
IndexSerializedSize: 1025,
|
||||
WriteHandoff: false,
|
||||
})
|
||||
s.meta.segments.SetSegment(segID, &SegmentInfo{
|
||||
SegmentInfo: &datapb.SegmentInfo{
|
||||
|
@ -1005,21 +1005,21 @@ func TestServer_GetSegmentIndexState(t *testing.T) {
|
|||
|
||||
t.Run("finish", func(t *testing.T) {
|
||||
s.meta.indexMeta.updateSegmentIndex(&model.SegmentIndex{
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 10250,
|
||||
IndexID: indexID,
|
||||
BuildID: 10,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: createTS,
|
||||
IndexFileKeys: []string{"file1", "file2"},
|
||||
IndexSize: 1025,
|
||||
WriteHandoff: false,
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 10250,
|
||||
IndexID: indexID,
|
||||
BuildID: 10,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: createTS,
|
||||
IndexFileKeys: []string{"file1", "file2"},
|
||||
IndexSerializedSize: 1025,
|
||||
WriteHandoff: false,
|
||||
})
|
||||
resp, err := s.GetSegmentIndexState(ctx, req)
|
||||
assert.NoError(t, err)
|
||||
|
@ -1127,21 +1127,21 @@ func TestServer_GetIndexBuildProgress(t *testing.T) {
|
|||
|
||||
t.Run("finish", func(t *testing.T) {
|
||||
s.meta.indexMeta.updateSegmentIndex(&model.SegmentIndex{
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 10250,
|
||||
IndexID: indexID,
|
||||
BuildID: 10,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: createTS,
|
||||
IndexFileKeys: []string{"file1", "file2"},
|
||||
IndexSize: 0,
|
||||
WriteHandoff: false,
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 10250,
|
||||
IndexID: indexID,
|
||||
BuildID: 10,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: createTS,
|
||||
IndexFileKeys: []string{"file1", "file2"},
|
||||
IndexSerializedSize: 0,
|
||||
WriteHandoff: false,
|
||||
})
|
||||
s.meta.segments = NewSegmentsInfo()
|
||||
s.meta.segments.SetSegment(segID, &SegmentInfo{
|
||||
|
@ -1389,89 +1389,89 @@ func TestServer_DescribeIndex(t *testing.T) {
|
|||
segmentIndexes: map[UniqueID]map[UniqueID]*model.SegmentIndex{
|
||||
segID: {
|
||||
indexID: {
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 10000,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: createTS,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 0,
|
||||
WriteHandoff: false,
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 10000,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: createTS,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 0,
|
||||
WriteHandoff: false,
|
||||
},
|
||||
indexID + 1: {
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 10000,
|
||||
IndexID: indexID + 1,
|
||||
BuildID: buildID + 1,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: createTS,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 0,
|
||||
WriteHandoff: false,
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 10000,
|
||||
IndexID: indexID + 1,
|
||||
BuildID: buildID + 1,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: createTS,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 0,
|
||||
WriteHandoff: false,
|
||||
},
|
||||
indexID + 3: {
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 10000,
|
||||
IndexID: indexID + 3,
|
||||
BuildID: buildID + 3,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_InProgress,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: createTS,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 0,
|
||||
WriteHandoff: false,
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 10000,
|
||||
IndexID: indexID + 3,
|
||||
BuildID: buildID + 3,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_InProgress,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: createTS,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 0,
|
||||
WriteHandoff: false,
|
||||
},
|
||||
indexID + 4: {
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 10000,
|
||||
IndexID: indexID + 4,
|
||||
BuildID: buildID + 4,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Failed,
|
||||
FailReason: "mock failed",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: createTS,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 0,
|
||||
WriteHandoff: false,
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 10000,
|
||||
IndexID: indexID + 4,
|
||||
BuildID: buildID + 4,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Failed,
|
||||
FailReason: "mock failed",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: createTS,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 0,
|
||||
WriteHandoff: false,
|
||||
},
|
||||
indexID + 5: {
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 10000,
|
||||
IndexID: indexID + 5,
|
||||
BuildID: buildID + 5,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Unissued,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: createTS,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 0,
|
||||
WriteHandoff: false,
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 10000,
|
||||
IndexID: indexID + 5,
|
||||
BuildID: buildID + 5,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Unissued,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: createTS,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 0,
|
||||
WriteHandoff: false,
|
||||
},
|
||||
},
|
||||
segID - 1: {
|
||||
|
@ -1894,89 +1894,89 @@ func TestServer_GetIndexStatistics(t *testing.T) {
|
|||
segmentIndexes: map[UniqueID]map[UniqueID]*model.SegmentIndex{
|
||||
segID: {
|
||||
indexID: {
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 10000,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: createTS,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 0,
|
||||
WriteHandoff: false,
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 10000,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: createTS,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 0,
|
||||
WriteHandoff: false,
|
||||
},
|
||||
indexID + 1: {
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 10000,
|
||||
IndexID: indexID + 1,
|
||||
BuildID: buildID + 1,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: createTS,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 0,
|
||||
WriteHandoff: false,
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 10000,
|
||||
IndexID: indexID + 1,
|
||||
BuildID: buildID + 1,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: createTS,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 0,
|
||||
WriteHandoff: false,
|
||||
},
|
||||
indexID + 3: {
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 10000,
|
||||
IndexID: indexID + 3,
|
||||
BuildID: buildID + 3,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_InProgress,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: createTS,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 0,
|
||||
WriteHandoff: false,
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 10000,
|
||||
IndexID: indexID + 3,
|
||||
BuildID: buildID + 3,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_InProgress,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: createTS,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 0,
|
||||
WriteHandoff: false,
|
||||
},
|
||||
indexID + 4: {
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 10000,
|
||||
IndexID: indexID + 4,
|
||||
BuildID: buildID + 4,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Failed,
|
||||
FailReason: "mock failed",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: createTS,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 0,
|
||||
WriteHandoff: false,
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 10000,
|
||||
IndexID: indexID + 4,
|
||||
BuildID: buildID + 4,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Failed,
|
||||
FailReason: "mock failed",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: createTS,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 0,
|
||||
WriteHandoff: false,
|
||||
},
|
||||
indexID + 5: {
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 10000,
|
||||
IndexID: indexID + 5,
|
||||
BuildID: buildID + 5,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Unissued,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: createTS,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 0,
|
||||
WriteHandoff: false,
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 10000,
|
||||
IndexID: indexID + 5,
|
||||
BuildID: buildID + 5,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Unissued,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: createTS,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 0,
|
||||
WriteHandoff: false,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
@ -2286,21 +2286,21 @@ func TestServer_GetIndexInfos(t *testing.T) {
|
|||
segmentIndexes: map[UniqueID]map[UniqueID]*model.SegmentIndex{
|
||||
segID: {
|
||||
indexID: {
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 10000,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: createTS,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 0,
|
||||
WriteHandoff: false,
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 10000,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: createTS,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 0,
|
||||
WriteHandoff: false,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
|
@ -706,20 +706,20 @@ func TestServer_getSegmentsJSON(t *testing.T) {
|
|||
segmentIndexes: map[UniqueID]map[UniqueID]*model.SegmentIndex{
|
||||
1000: {
|
||||
10: &model.SegmentIndex{
|
||||
SegmentID: 1000,
|
||||
CollectionID: 1,
|
||||
PartitionID: 2,
|
||||
NumRows: 10250,
|
||||
IndexID: 10,
|
||||
BuildID: 10000,
|
||||
NodeID: 1,
|
||||
IndexVersion: 0,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 12,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 0,
|
||||
SegmentID: 1000,
|
||||
CollectionID: 1,
|
||||
PartitionID: 2,
|
||||
NumRows: 10250,
|
||||
IndexID: 10,
|
||||
BuildID: 10000,
|
||||
NodeID: 1,
|
||||
IndexVersion: 0,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 12,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 0,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
|
|
@ -1633,20 +1633,20 @@ func TestGetRecoveryInfo(t *testing.T) {
|
|||
})
|
||||
assert.NoError(t, err)
|
||||
svr.meta.indexMeta.updateSegmentIndex(&model.SegmentIndex{
|
||||
SegmentID: seg4.ID,
|
||||
CollectionID: 0,
|
||||
PartitionID: 0,
|
||||
NumRows: 100,
|
||||
IndexID: 0,
|
||||
BuildID: 0,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 0,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 0,
|
||||
SegmentID: seg4.ID,
|
||||
CollectionID: 0,
|
||||
PartitionID: 0,
|
||||
NumRows: 100,
|
||||
IndexID: 0,
|
||||
BuildID: 0,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 0,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 0,
|
||||
})
|
||||
|
||||
req := &datapb.GetRecoveryInfoRequest{
|
||||
|
|
|
@ -1258,20 +1258,20 @@ func TestGetRecoveryInfoV2(t *testing.T) {
|
|||
})
|
||||
assert.NoError(t, err)
|
||||
svr.meta.indexMeta.updateSegmentIndex(&model.SegmentIndex{
|
||||
SegmentID: seg4.ID,
|
||||
CollectionID: 0,
|
||||
PartitionID: 0,
|
||||
NumRows: 100,
|
||||
IndexID: 0,
|
||||
BuildID: 0,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 0,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 0,
|
||||
SegmentID: seg4.ID,
|
||||
CollectionID: 0,
|
||||
PartitionID: 0,
|
||||
NumRows: 100,
|
||||
IndexID: 0,
|
||||
BuildID: 0,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 0,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 0,
|
||||
})
|
||||
|
||||
ch := &channelMeta{Name: "vchan1", CollectionID: 0}
|
||||
|
|
|
@ -58,190 +58,190 @@ var (
|
|||
func createIndexMeta(catalog metastore.DataCoordCatalog) *indexMeta {
|
||||
indexBuildInfo := newSegmentIndexBuildInfo()
|
||||
indexBuildInfo.Add(&model.SegmentIndex{
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1025,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID,
|
||||
NodeID: 0,
|
||||
IndexVersion: 0,
|
||||
IndexState: commonpb.IndexState_Unissued,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 0,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 1,
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1025,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID,
|
||||
NodeID: 0,
|
||||
IndexVersion: 0,
|
||||
IndexState: commonpb.IndexState_Unissued,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 0,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 1,
|
||||
})
|
||||
|
||||
indexBuildInfo.Add(&model.SegmentIndex{
|
||||
SegmentID: segID + 1,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1026,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID + 1,
|
||||
NodeID: nodeID,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_InProgress,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 1111,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 1,
|
||||
SegmentID: segID + 1,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1026,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID + 1,
|
||||
NodeID: nodeID,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_InProgress,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 1111,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 1,
|
||||
})
|
||||
|
||||
indexBuildInfo.Add(&model.SegmentIndex{
|
||||
SegmentID: segID + 2,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1026,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID + 2,
|
||||
NodeID: nodeID,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_InProgress,
|
||||
FailReason: "",
|
||||
IsDeleted: true,
|
||||
CreatedUTCTime: 1111,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 1,
|
||||
SegmentID: segID + 2,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1026,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID + 2,
|
||||
NodeID: nodeID,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_InProgress,
|
||||
FailReason: "",
|
||||
IsDeleted: true,
|
||||
CreatedUTCTime: 1111,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 1,
|
||||
})
|
||||
|
||||
indexBuildInfo.Add(&model.SegmentIndex{
|
||||
SegmentID: segID + 3,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 500,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID + 3,
|
||||
NodeID: 0,
|
||||
IndexVersion: 0,
|
||||
IndexState: commonpb.IndexState_Unissued,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 1111,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 1,
|
||||
SegmentID: segID + 3,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 500,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID + 3,
|
||||
NodeID: 0,
|
||||
IndexVersion: 0,
|
||||
IndexState: commonpb.IndexState_Unissued,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 1111,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 1,
|
||||
})
|
||||
|
||||
indexBuildInfo.Add(&model.SegmentIndex{
|
||||
SegmentID: segID + 4,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1026,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID + 4,
|
||||
NodeID: nodeID,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 1111,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 1,
|
||||
SegmentID: segID + 4,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1026,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID + 4,
|
||||
NodeID: nodeID,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 1111,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 1,
|
||||
})
|
||||
|
||||
indexBuildInfo.Add(&model.SegmentIndex{
|
||||
SegmentID: segID + 5,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1026,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID + 5,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 1111,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 1,
|
||||
SegmentID: segID + 5,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1026,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID + 5,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 1111,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 1,
|
||||
})
|
||||
|
||||
indexBuildInfo.Add(&model.SegmentIndex{
|
||||
SegmentID: segID + 6,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1026,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID + 6,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 1111,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 1,
|
||||
SegmentID: segID + 6,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1026,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID + 6,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 1111,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 1,
|
||||
})
|
||||
|
||||
indexBuildInfo.Add(&model.SegmentIndex{
|
||||
SegmentID: segID + 7,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1026,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID + 7,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Failed,
|
||||
FailReason: "error",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 1111,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 1,
|
||||
SegmentID: segID + 7,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1026,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID + 7,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Failed,
|
||||
FailReason: "error",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 1111,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 1,
|
||||
})
|
||||
|
||||
indexBuildInfo.Add(&model.SegmentIndex{
|
||||
SegmentID: segID + 8,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1026,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID + 8,
|
||||
NodeID: nodeID + 1,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_InProgress,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 1111,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 1,
|
||||
SegmentID: segID + 8,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1026,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID + 8,
|
||||
NodeID: nodeID + 1,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_InProgress,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 1111,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 1,
|
||||
})
|
||||
|
||||
indexBuildInfo.Add(&model.SegmentIndex{
|
||||
SegmentID: segID + 9,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 500,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID + 9,
|
||||
NodeID: 0,
|
||||
IndexVersion: 0,
|
||||
IndexState: commonpb.IndexState_Unissued,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 1111,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 1,
|
||||
SegmentID: segID + 9,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 500,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID + 9,
|
||||
NodeID: 0,
|
||||
IndexVersion: 0,
|
||||
IndexState: commonpb.IndexState_Unissued,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 1111,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 1,
|
||||
})
|
||||
|
||||
indexBuildInfo.Add(&model.SegmentIndex{
|
||||
SegmentID: segID + 10,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 500,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID + 10,
|
||||
NodeID: nodeID,
|
||||
IndexVersion: 0,
|
||||
IndexState: commonpb.IndexState_Unissued,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 1111,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 1,
|
||||
SegmentID: segID + 10,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 500,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID + 10,
|
||||
NodeID: nodeID,
|
||||
IndexVersion: 0,
|
||||
IndexState: commonpb.IndexState_Unissued,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 1111,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 1,
|
||||
})
|
||||
|
||||
return &indexMeta{
|
||||
|
@ -278,200 +278,200 @@ func createIndexMeta(catalog metastore.DataCoordCatalog) *indexMeta {
|
|||
segmentIndexes: map[UniqueID]map[UniqueID]*model.SegmentIndex{
|
||||
segID: {
|
||||
indexID: {
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1025,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID,
|
||||
NodeID: 0,
|
||||
IndexVersion: 0,
|
||||
IndexState: commonpb.IndexState_Unissued,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 0,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 1,
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1025,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID,
|
||||
NodeID: 0,
|
||||
IndexVersion: 0,
|
||||
IndexState: commonpb.IndexState_Unissued,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 0,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 1,
|
||||
},
|
||||
},
|
||||
segID + 1: {
|
||||
indexID: {
|
||||
SegmentID: segID + 1,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1026,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID + 1,
|
||||
NodeID: nodeID,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_InProgress,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 1111,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 1,
|
||||
SegmentID: segID + 1,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1026,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID + 1,
|
||||
NodeID: nodeID,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_InProgress,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 1111,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 1,
|
||||
},
|
||||
},
|
||||
segID + 2: {
|
||||
indexID: {
|
||||
SegmentID: segID + 2,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1026,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID + 2,
|
||||
NodeID: nodeID,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_InProgress,
|
||||
FailReason: "",
|
||||
IsDeleted: true,
|
||||
CreatedUTCTime: 1111,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 1,
|
||||
SegmentID: segID + 2,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1026,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID + 2,
|
||||
NodeID: nodeID,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_InProgress,
|
||||
FailReason: "",
|
||||
IsDeleted: true,
|
||||
CreatedUTCTime: 1111,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 1,
|
||||
},
|
||||
},
|
||||
segID + 3: {
|
||||
indexID: {
|
||||
SegmentID: segID + 3,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 500,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID + 3,
|
||||
NodeID: 0,
|
||||
IndexVersion: 0,
|
||||
IndexState: commonpb.IndexState_Unissued,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 1111,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 1,
|
||||
SegmentID: segID + 3,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 500,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID + 3,
|
||||
NodeID: 0,
|
||||
IndexVersion: 0,
|
||||
IndexState: commonpb.IndexState_Unissued,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 1111,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 1,
|
||||
},
|
||||
},
|
||||
segID + 4: {
|
||||
indexID: {
|
||||
SegmentID: segID + 4,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1026,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID + 4,
|
||||
NodeID: nodeID,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 1111,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 1,
|
||||
SegmentID: segID + 4,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1026,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID + 4,
|
||||
NodeID: nodeID,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 1111,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 1,
|
||||
},
|
||||
},
|
||||
segID + 5: {
|
||||
indexID: {
|
||||
SegmentID: segID + 5,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1026,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID + 5,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 1111,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 1,
|
||||
SegmentID: segID + 5,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1026,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID + 5,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 1111,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 1,
|
||||
},
|
||||
},
|
||||
segID + 6: {
|
||||
indexID: {
|
||||
SegmentID: segID + 6,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1026,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID + 6,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 1111,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 1,
|
||||
SegmentID: segID + 6,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1026,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID + 6,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 1111,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 1,
|
||||
},
|
||||
},
|
||||
segID + 7: {
|
||||
indexID: {
|
||||
SegmentID: segID + 7,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1026,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID + 7,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Failed,
|
||||
FailReason: "error",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 1111,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 1,
|
||||
SegmentID: segID + 7,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1026,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID + 7,
|
||||
NodeID: 0,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_Failed,
|
||||
FailReason: "error",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 1111,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 1,
|
||||
},
|
||||
},
|
||||
segID + 8: {
|
||||
indexID: {
|
||||
SegmentID: segID + 8,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1026,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID + 8,
|
||||
NodeID: nodeID + 1,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_InProgress,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 1111,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 1,
|
||||
SegmentID: segID + 8,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 1026,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID + 8,
|
||||
NodeID: nodeID + 1,
|
||||
IndexVersion: 1,
|
||||
IndexState: commonpb.IndexState_InProgress,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 1111,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 1,
|
||||
},
|
||||
},
|
||||
segID + 9: {
|
||||
indexID: {
|
||||
SegmentID: segID + 9,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 500,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID + 9,
|
||||
NodeID: 0,
|
||||
IndexVersion: 0,
|
||||
IndexState: commonpb.IndexState_Unissued,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 1111,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 1,
|
||||
SegmentID: segID + 9,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 500,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID + 9,
|
||||
NodeID: 0,
|
||||
IndexVersion: 0,
|
||||
IndexState: commonpb.IndexState_Unissued,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 1111,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 1,
|
||||
},
|
||||
},
|
||||
segID + 10: {
|
||||
indexID: {
|
||||
SegmentID: segID + 10,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 500,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID + 10,
|
||||
NodeID: nodeID,
|
||||
IndexVersion: 0,
|
||||
IndexState: commonpb.IndexState_Unissued,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 1111,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 1,
|
||||
SegmentID: segID + 10,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: 500,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID + 10,
|
||||
NodeID: nodeID,
|
||||
IndexVersion: 0,
|
||||
IndexState: commonpb.IndexState_Unissued,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 1111,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 1,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
@ -1541,20 +1541,20 @@ func (s *taskSchedulerSuite) Test_indexTaskWithMvOptionalScalarField() {
|
|||
segmentIndexes: map[UniqueID]map[UniqueID]*model.SegmentIndex{
|
||||
segID: {
|
||||
indexID: {
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: minNumberOfRowsToBuild,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID,
|
||||
NodeID: 0,
|
||||
IndexVersion: 0,
|
||||
IndexState: commonpb.IndexState_Unissued,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 0,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 0,
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: minNumberOfRowsToBuild,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID,
|
||||
NodeID: 0,
|
||||
IndexVersion: 0,
|
||||
IndexState: commonpb.IndexState_Unissued,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 0,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 0,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
@ -1583,20 +1583,20 @@ func (s *taskSchedulerSuite) Test_indexTaskWithMvOptionalScalarField() {
|
|||
}
|
||||
|
||||
mt.indexMeta.segmentBuildInfo.Add(&model.SegmentIndex{
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: minNumberOfRowsToBuild,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID,
|
||||
NodeID: 0,
|
||||
IndexVersion: 0,
|
||||
IndexState: commonpb.IndexState_Unissued,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 0,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 0,
|
||||
SegmentID: segID,
|
||||
CollectionID: collID,
|
||||
PartitionID: partID,
|
||||
NumRows: minNumberOfRowsToBuild,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID,
|
||||
NodeID: 0,
|
||||
IndexVersion: 0,
|
||||
IndexState: commonpb.IndexState_Unissued,
|
||||
FailReason: "",
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 0,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 0,
|
||||
})
|
||||
cm := mocks.NewChunkManager(s.T())
|
||||
cm.EXPECT().RootPath().Return("ut-index")
|
||||
|
|
|
@ -132,6 +132,7 @@ func (i *IndexNode) QueryJobs(ctx context.Context, req *workerpb.QueryJobsReques
|
|||
state: info.state,
|
||||
fileKeys: common.CloneStringList(info.fileKeys),
|
||||
serializedSize: info.serializedSize,
|
||||
memSize: info.memSize,
|
||||
failReason: info.failReason,
|
||||
currentIndexVersion: info.currentIndexVersion,
|
||||
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].IndexFileKeys = info.fileKeys
|
||||
ret.IndexInfos[i].SerializedSize = info.serializedSize
|
||||
ret.IndexInfos[i].MemSize = info.memSize
|
||||
ret.IndexInfos[i].FailReason = info.failReason
|
||||
ret.IndexInfos[i].CurrentIndexVersion = info.currentIndexVersion
|
||||
ret.IndexInfos[i].IndexStoreVersion = info.indexStoreVersion
|
||||
|
@ -444,6 +446,7 @@ func (i *IndexNode) QueryJobsV2(ctx context.Context, req *workerpb.QueryJobsV2Re
|
|||
state: info.state,
|
||||
fileKeys: common.CloneStringList(info.fileKeys),
|
||||
serializedSize: info.serializedSize,
|
||||
memSize: info.memSize,
|
||||
failReason: info.failReason,
|
||||
currentIndexVersion: info.currentIndexVersion,
|
||||
indexStoreVersion: info.indexStoreVersion,
|
||||
|
@ -462,6 +465,7 @@ func (i *IndexNode) QueryJobsV2(ctx context.Context, req *workerpb.QueryJobsV2Re
|
|||
results[i].State = info.state
|
||||
results[i].IndexFileKeys = info.fileKeys
|
||||
results[i].SerializedSize = info.serializedSize
|
||||
results[i].MemSize = info.memSize
|
||||
results[i].FailReason = info.failReason
|
||||
results[i].CurrentIndexVersion = info.currentIndexVersion
|
||||
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))
|
||||
}
|
||||
}
|
||||
indexFilePath2Size, err := it.index.UpLoad()
|
||||
indexStats, err := it.index.UpLoad()
|
||||
if err != nil {
|
||||
log.Warn("failed to upload index", zap.Error(err))
|
||||
gcIndex()
|
||||
|
@ -347,19 +347,21 @@ func (it *indexBuildTask) PostExecute(ctx context.Context) error {
|
|||
// use serialized size before encoding
|
||||
var serializedSize uint64
|
||||
saveFileKeys := make([]string, 0)
|
||||
for filePath, fileSize := range indexFilePath2Size {
|
||||
serializedSize += uint64(fileSize)
|
||||
parts := strings.Split(filePath, "/")
|
||||
for _, indexInfo := range indexStats.GetSerializedIndexInfos() {
|
||||
serializedSize += uint64(indexInfo.FileSize)
|
||||
parts := strings.Split(indexInfo.FileName, "/")
|
||||
fileKey := parts[len(parts)-1]
|
||||
saveFileKeys = append(saveFileKeys, fileKey)
|
||||
}
|
||||
|
||||
it.node.storeIndexFilesAndStatistic(it.req.GetClusterID(), it.req.GetBuildID(), saveFileKeys, serializedSize, it.req.GetCurrentIndexVersion())
|
||||
log.Debug("save index files done", zap.Strings("IndexFiles", saveFileKeys))
|
||||
it.node.storeIndexFilesAndStatistic(it.req.GetClusterID(), it.req.GetBuildID(), saveFileKeys, serializedSize, uint64(indexStats.MemSize), it.req.GetCurrentIndexVersion())
|
||||
saveIndexFileDur := it.tr.RecordSpan()
|
||||
metrics.IndexNodeSaveIndexFileLatency.WithLabelValues(strconv.FormatInt(paramtable.GetNodeID(), 10)).Observe(saveIndexFileDur.Seconds())
|
||||
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
|
||||
}
|
||||
|
||||
|
|
|
@ -34,6 +34,7 @@ type indexTaskInfo struct {
|
|||
state commonpb.IndexState
|
||||
fileKeys []string
|
||||
serializedSize uint64
|
||||
memSize uint64
|
||||
failReason string
|
||||
currentIndexVersion int32
|
||||
indexStoreVersion int64
|
||||
|
@ -90,6 +91,7 @@ func (i *IndexNode) storeIndexFilesAndStatistic(
|
|||
buildID UniqueID,
|
||||
fileKeys []string,
|
||||
serializedSize uint64,
|
||||
memSize uint64,
|
||||
currentIndexVersion int32,
|
||||
) {
|
||||
key := taskKey{ClusterID: ClusterID, TaskID: buildID}
|
||||
|
@ -98,31 +100,12 @@ func (i *IndexNode) storeIndexFilesAndStatistic(
|
|||
if info, ok := i.indexTasks[key]; ok {
|
||||
info.fileKeys = common.CloneStringList(fileKeys)
|
||||
info.serializedSize = serializedSize
|
||||
info.memSize = memSize
|
||||
info.currentIndexVersion = currentIndexVersion
|
||||
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 {
|
||||
i.stateLock.Lock()
|
||||
defer i.stateLock.Unlock()
|
||||
|
|
|
@ -1013,20 +1013,20 @@ func TestCatalog_DropIndex(t *testing.T) {
|
|||
|
||||
func TestCatalog_CreateSegmentIndex(t *testing.T) {
|
||||
segIdx := &model.SegmentIndex{
|
||||
SegmentID: 1,
|
||||
CollectionID: 2,
|
||||
PartitionID: 3,
|
||||
NumRows: 1024,
|
||||
IndexID: 4,
|
||||
BuildID: 5,
|
||||
NodeID: 6,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IndexVersion: 0,
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 0,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 0,
|
||||
SegmentID: 1,
|
||||
CollectionID: 2,
|
||||
PartitionID: 3,
|
||||
NumRows: 1024,
|
||||
IndexID: 4,
|
||||
BuildID: 5,
|
||||
NodeID: 6,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IndexVersion: 0,
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 0,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 0,
|
||||
}
|
||||
|
||||
t.Run("success", func(t *testing.T) {
|
||||
|
@ -1113,20 +1113,20 @@ func TestCatalog_ListSegmentIndexes(t *testing.T) {
|
|||
|
||||
func TestCatalog_AlterSegmentIndexes(t *testing.T) {
|
||||
segIdx := &model.SegmentIndex{
|
||||
SegmentID: 0,
|
||||
CollectionID: 0,
|
||||
PartitionID: 0,
|
||||
NumRows: 0,
|
||||
IndexID: 0,
|
||||
BuildID: 0,
|
||||
NodeID: 0,
|
||||
IndexState: 0,
|
||||
FailReason: "",
|
||||
IndexVersion: 0,
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 0,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 0,
|
||||
SegmentID: 0,
|
||||
CollectionID: 0,
|
||||
PartitionID: 0,
|
||||
NumRows: 0,
|
||||
IndexID: 0,
|
||||
BuildID: 0,
|
||||
NodeID: 0,
|
||||
IndexState: 0,
|
||||
FailReason: "",
|
||||
IndexVersion: 0,
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 0,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 0,
|
||||
}
|
||||
|
||||
t.Run("add", func(t *testing.T) {
|
||||
|
|
|
@ -20,7 +20,12 @@ type SegmentIndex struct {
|
|||
IsDeleted bool
|
||||
CreatedUTCTime uint64
|
||||
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
|
||||
WriteHandoff bool
|
||||
CurrentIndexVersion int32
|
||||
|
@ -32,7 +37,6 @@ func UnmarshalSegmentIndexModel(segIndex *indexpb.SegmentIndex) *SegmentIndex {
|
|||
if segIndex == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
return &SegmentIndex{
|
||||
SegmentID: segIndex.SegmentID,
|
||||
CollectionID: segIndex.CollectionID,
|
||||
|
@ -47,7 +51,8 @@ func UnmarshalSegmentIndexModel(segIndex *indexpb.SegmentIndex) *SegmentIndex {
|
|||
IsDeleted: segIndex.Deleted,
|
||||
CreatedUTCTime: segIndex.CreateTime,
|
||||
IndexFileKeys: common.CloneStringList(segIndex.IndexFileKeys),
|
||||
IndexSize: segIndex.SerializeSize,
|
||||
IndexSerializedSize: segIndex.SerializeSize,
|
||||
IndexMemSize: segIndex.MemSize,
|
||||
WriteHandoff: segIndex.WriteHandoff,
|
||||
CurrentIndexVersion: segIndex.GetCurrentIndexVersion(),
|
||||
FinishedUTCTime: segIndex.FinishedTime,
|
||||
|
@ -73,7 +78,8 @@ func MarshalSegmentIndexModel(segIdx *SegmentIndex) *indexpb.SegmentIndex {
|
|||
IndexFileKeys: common.CloneStringList(segIdx.IndexFileKeys),
|
||||
Deleted: segIdx.IsDeleted,
|
||||
CreateTime: segIdx.CreatedUTCTime,
|
||||
SerializeSize: segIdx.IndexSize,
|
||||
SerializeSize: segIdx.IndexSerializedSize,
|
||||
MemSize: segIdx.IndexMemSize,
|
||||
WriteHandoff: segIdx.WriteHandoff,
|
||||
CurrentIndexVersion: segIdx.CurrentIndexVersion,
|
||||
FinishedTime: segIdx.FinishedUTCTime,
|
||||
|
@ -95,7 +101,8 @@ func CloneSegmentIndex(segIndex *SegmentIndex) *SegmentIndex {
|
|||
IsDeleted: segIndex.IsDeleted,
|
||||
CreatedUTCTime: segIndex.CreatedUTCTime,
|
||||
IndexFileKeys: common.CloneStringList(segIndex.IndexFileKeys),
|
||||
IndexSize: segIndex.IndexSize,
|
||||
IndexSerializedSize: segIndex.IndexSerializedSize,
|
||||
IndexMemSize: segIndex.IndexMemSize,
|
||||
WriteHandoff: segIndex.WriteHandoff,
|
||||
CurrentIndexVersion: segIndex.CurrentIndexVersion,
|
||||
FinishedUTCTime: segIndex.FinishedUTCTime,
|
||||
|
|
|
@ -31,20 +31,20 @@ var (
|
|||
}
|
||||
|
||||
indexModel2 = &SegmentIndex{
|
||||
CollectionID: colID,
|
||||
PartitionID: partID,
|
||||
SegmentID: segmentID,
|
||||
NumRows: 1025,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID,
|
||||
NodeID: 0,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IndexVersion: 0,
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 1,
|
||||
IndexFileKeys: nil,
|
||||
IndexSize: 0,
|
||||
CollectionID: colID,
|
||||
PartitionID: partID,
|
||||
SegmentID: segmentID,
|
||||
NumRows: 1025,
|
||||
IndexID: indexID,
|
||||
BuildID: buildID,
|
||||
NodeID: 0,
|
||||
IndexState: commonpb.IndexState_Finished,
|
||||
FailReason: "",
|
||||
IndexVersion: 0,
|
||||
IsDeleted: false,
|
||||
CreatedUTCTime: 1,
|
||||
IndexFileKeys: nil,
|
||||
IndexSerializedSize: 0,
|
||||
}
|
||||
)
|
||||
|
||||
|
|
|
@ -356,7 +356,7 @@ func (broker *CoordinatorBroker) GetIndexInfo(ctx context.Context, collectionID
|
|||
BuildID: info.GetBuildID(),
|
||||
IndexParams: info.GetIndexParams(),
|
||||
IndexFilePaths: info.GetIndexFilePaths(),
|
||||
IndexSize: int64(info.GetSerializedSize()),
|
||||
IndexSize: int64(info.GetMemSize()),
|
||||
IndexVersion: info.GetIndexVersion(),
|
||||
NumRows: info.GetNumRows(),
|
||||
CurrentIndexVersion: info.GetCurrentIndexVersion(),
|
||||
|
|
|
@ -965,8 +965,7 @@ func GetCLoadInfoWithFunc(ctx context.Context,
|
|||
IndexFiles: indexInfo.GetIndexFilePaths(),
|
||||
IndexEngineVersion: indexInfo.GetCurrentIndexVersion(),
|
||||
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: int64(paramtable.Get().DataCoordCfg.IndexMemSizeEstimateMultiplier.GetAsFloat() * float64(indexInfo.GetIndexSize())),
|
||||
IndexFileSize: indexInfo.GetIndexSize(),
|
||||
}
|
||||
|
||||
// 2.
|
||||
|
|
|
@ -5,6 +5,7 @@ package indexcgowrapper
|
|||
|
||||
#include <stdlib.h> // free
|
||||
#include "indexbuilder/index_c.h"
|
||||
#include "common/type_c.h"
|
||||
*/
|
||||
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/schemapb"
|
||||
"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/proto/cgopb"
|
||||
"github.com/milvus-io/milvus/pkg/proto/indexcgopb"
|
||||
)
|
||||
|
||||
|
@ -40,7 +43,7 @@ type CodecIndex interface {
|
|||
Load([]*Blob) error
|
||||
Delete() error
|
||||
CleanLocalData() error
|
||||
UpLoad() (map[string]int64, error)
|
||||
UpLoad() (*cgopb.IndexStats, error)
|
||||
}
|
||||
|
||||
var _ CodecIndex = (*CgoIndex)(nil)
|
||||
|
@ -135,31 +138,21 @@ func CreateTextIndex(ctx context.Context, buildIndexInfo *indexcgopb.BuildIndexI
|
|||
zap.Error(err))
|
||||
return nil, err
|
||||
}
|
||||
var cBinarySet C.CBinarySet
|
||||
status := C.BuildTextIndex(&cBinarySet, (*C.uint8_t)(unsafe.Pointer(&buildIndexInfoBlob[0])), (C.uint64_t)(len(buildIndexInfoBlob)))
|
||||
result := C.CreateProtoLayout()
|
||||
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 {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
defer func() {
|
||||
if cBinarySet != nil {
|
||||
C.DeleteBinarySet(cBinarySet)
|
||||
}
|
||||
}()
|
||||
|
||||
res := make(map[string]int64)
|
||||
indexFilePaths, err := GetBinarySetKeys(cBinarySet)
|
||||
if err != nil {
|
||||
var indexStats cgopb.IndexStats
|
||||
if err := segcore.UnmarshalProtoLayout(result, &indexStats); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, path := range indexFilePaths {
|
||||
size, err := GetBinarySetSize(cBinarySet, path)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
res[path] = size
|
||||
}
|
||||
|
||||
res := make(map[string]int64)
|
||||
for _, indexInfo := range indexStats.GetSerializedIndexInfos() {
|
||||
res[indexInfo.FileName] = indexInfo.FileSize
|
||||
}
|
||||
return res, nil
|
||||
}
|
||||
|
||||
|
@ -405,31 +398,17 @@ func (index *CgoIndex) CleanLocalData() error {
|
|||
return HandleCStatus(&status, "failed to clean cached data on disk")
|
||||
}
|
||||
|
||||
func (index *CgoIndex) UpLoad() (map[string]int64, error) {
|
||||
var cBinarySet C.CBinarySet
|
||||
|
||||
status := C.SerializeIndexAndUpLoad(index.indexPtr, &cBinarySet)
|
||||
defer func() {
|
||||
if cBinarySet != nil {
|
||||
C.DeleteBinarySet(cBinarySet)
|
||||
}
|
||||
}()
|
||||
func (index *CgoIndex) UpLoad() (*cgopb.IndexStats, error) {
|
||||
result := C.CreateProtoLayout()
|
||||
defer C.ReleaseProtoLayout(result)
|
||||
status := C.SerializeIndexAndUpLoad(index.indexPtr, result)
|
||||
if err := HandleCStatus(&status, "failed to serialize index and upload index"); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
res := make(map[string]int64)
|
||||
indexFilePaths, err := GetBinarySetKeys(cBinarySet)
|
||||
if err != nil {
|
||||
var indexStats cgopb.IndexStats
|
||||
if err := segcore.UnmarshalProtoLayout(result, &indexStats); err != nil {
|
||||
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 &indexStats, nil
|
||||
}
|
||||
|
|
|
@ -21,6 +21,7 @@ package segcore
|
|||
|
||||
#include "segcore/collection_c.h"
|
||||
#include "common/type_c.h"
|
||||
#include "common/protobuf_utils_c.h"
|
||||
#include "segcore/segment_c.h"
|
||||
#include "storage/storage_c.h"
|
||||
*/
|
||||
|
@ -29,6 +30,7 @@ import "C"
|
|||
import (
|
||||
"context"
|
||||
"math"
|
||||
"reflect"
|
||||
"unsafe"
|
||||
|
||||
"google.golang.org/protobuf/proto"
|
||||
|
@ -50,6 +52,13 @@ func ConsumeCStatusIntoError(status *C.CStatus) error {
|
|||
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
|
||||
func unmarshalCProto(cRes *C.CProto, msg proto.Message) error {
|
||||
blob := (*(*[math.MaxInt32]byte)(cRes.proto_blob))[:int(cRes.proto_size):int(cRes.proto_size)]
|
||||
|
|
|
@ -2,9 +2,13 @@ package segcore
|
|||
|
||||
import (
|
||||
"context"
|
||||
"runtime"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"google.golang.org/protobuf/proto"
|
||||
|
||||
"github.com/milvus-io/milvus/pkg/proto/cgopb"
|
||||
)
|
||||
|
||||
func TestConsumeCStatusIntoError(t *testing.T) {
|
||||
|
@ -17,3 +21,28 @@ func TestGetLocalUsedSize(t *testing.T) {
|
|||
assert.NoError(t, err)
|
||||
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)
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
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
|
||||
}
|
||||
|
||||
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_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,
|
||||
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,
|
||||
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,
|
||||
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,
|
||||
|
@ -246,20 +370,23 @@ func file_cgo_msg_proto_rawDescGZIP() []byte {
|
|||
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{}{
|
||||
(*LoadIndexInfo)(nil), // 0: milvus.proto.cgo.LoadIndexInfo
|
||||
nil, // 1: milvus.proto.cgo.LoadIndexInfo.IndexParamsEntry
|
||||
(*schemapb.FieldSchema)(nil), // 2: milvus.proto.schema.FieldSchema
|
||||
(*LoadIndexInfo)(nil), // 0: milvus.proto.cgo.LoadIndexInfo
|
||||
(*IndexStats)(nil), // 1: milvus.proto.cgo.IndexStats
|
||||
(*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{
|
||||
2, // 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
|
||||
2, // [2:2] is the sub-list for method output_type
|
||||
2, // [2:2] is the sub-list for method input_type
|
||||
2, // [2:2] is the sub-list for extension type_name
|
||||
2, // [2:2] is the sub-list for extension extendee
|
||||
0, // [0:2] is the sub-list for field type_name
|
||||
4, // 0: milvus.proto.cgo.LoadIndexInfo.field:type_name -> milvus.proto.schema.FieldSchema
|
||||
3, // 1: milvus.proto.cgo.LoadIndexInfo.index_params:type_name -> milvus.proto.cgo.LoadIndexInfo.IndexParamsEntry
|
||||
2, // 2: milvus.proto.cgo.IndexStats.serialized_index_infos:type_name -> milvus.proto.cgo.SerializedIndexFileInfo
|
||||
3, // [3:3] is the sub-list for method output_type
|
||||
3, // [3:3] is the sub-list for method input_type
|
||||
3, // [3:3] is the sub-list for extension 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() }
|
||||
|
@ -280,6 +407,30 @@ func file_cgo_msg_proto_init() {
|
|||
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{}
|
||||
out := protoimpl.TypeBuilder{
|
||||
|
@ -287,7 +438,7 @@ func file_cgo_msg_proto_init() {
|
|||
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
||||
RawDescriptor: file_cgo_msg_proto_rawDesc,
|
||||
NumEnums: 0,
|
||||
NumMessages: 2,
|
||||
NumMessages: 4,
|
||||
NumExtensions: 0,
|
||||
NumServices: 0,
|
||||
},
|
||||
|
|
|
@ -76,11 +76,12 @@ message SegmentIndex {
|
|||
repeated string index_file_keys = 11;
|
||||
bool deleted = 12;
|
||||
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;
|
||||
int32 current_index_version = 16;
|
||||
int64 index_store_version = 17;
|
||||
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 {
|
||||
|
@ -160,6 +161,7 @@ message IndexFilePathInfo {
|
|||
int64 index_version = 9;
|
||||
int64 num_rows = 10;
|
||||
int32 current_index_version = 11;
|
||||
uint64 mem_size = 12;
|
||||
}
|
||||
|
||||
message SegmentInfo {
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -169,6 +169,7 @@ message IndexTaskInfo {
|
|||
string fail_reason = 5;
|
||||
int32 current_index_version = 6;
|
||||
int64 index_store_version = 7;
|
||||
uint64 mem_size = 8;
|
||||
}
|
||||
|
||||
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"`
|
||||
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"`
|
||||
MemSize uint64 `protobuf:"varint,8,opt,name=mem_size,json=memSize,proto3" json:"mem_size,omitempty"`
|
||||
}
|
||||
|
||||
func (x *IndexTaskInfo) Reset() {
|
||||
|
@ -1222,6 +1223,13 @@ func (x *IndexTaskInfo) GetIndexStoreVersion() int64 {
|
|||
return 0
|
||||
}
|
||||
|
||||
func (x *IndexTaskInfo) GetMemSize() uint64 {
|
||||
if x != nil {
|
||||
return x.MemSize
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
type IndexJobResults struct {
|
||||
state protoimpl.MessageState
|
||||
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,
|
||||
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,
|
||||
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,
|
||||
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,
|
||||
|
@ -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,
|
||||
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,
|
||||
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,
|
||||
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, 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, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52,
|
||||
0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0x91, 0x05, 0x0a, 0x0b, 0x53, 0x74, 0x61,
|
||||
0x74, 0x73, 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, 0x22, 0x0a, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74,
|
||||
0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x63, 0x6f, 0x6c,
|
||||
0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x61, 0x72,
|
||||
0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b,
|
||||
0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x73,
|
||||
0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09,
|
||||
0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x68, 0x61,
|
||||
0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e,
|
||||
0x6e, 0x65, 0x6c, 0x12, 0x3f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x5f, 0x6c, 0x6f,
|
||||
0x67, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75,
|
||||
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x41, 0x6e, 0x61,
|
||||
0x6c, 0x79, 0x7a, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75,
|
||||
0x6c, 0x74, 0x73, 0x22, 0x91, 0x05, 0x0a, 0x0b, 0x53, 0x74, 0x61, 0x74, 0x73, 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, 0x22, 0x0a, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44,
|
||||
0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69,
|
||||
0x6f, 0x6e, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f,
|
||||
0x6e, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x70, 0x61, 0x72, 0x74, 0x69,
|
||||
0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e,
|
||||
0x74, 0x49, 0x44, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x65, 0x67, 0x6d, 0x65,
|
||||
0x6e, 0x74, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18,
|
||||
0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x3f,
|
||||
0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x5f, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x08, 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, 0x6c, 0x64, 0x42, 0x69, 0x6e,
|
||||
0x6c, 0x6f, 0x67, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x12,
|
||||
0x3d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x73, 0x5f, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x09, 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, 0x6c, 0x64, 0x42, 0x69, 0x6e,
|
||||
0x6c, 0x6f, 0x67, 0x52, 0x09, 0x73, 0x74, 0x61, 0x74, 0x73, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x5a,
|
||||
0x0a, 0x0f, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x5f, 0x6c, 0x6f, 0x67,
|
||||
0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 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, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x53, 0x74, 0x61,
|
||||
0x74, 0x73, 0x4c, 0x6f, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x74, 0x65, 0x78,
|
||||
0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x6e, 0x75,
|
||||
0x6d, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6e, 0x75,
|
||||
0x6d, 0x52, 0x6f, 0x77, 0x73, 0x12, 0x3b, 0x0a, 0x09, 0x62, 0x6d, 0x32, 0x35, 0x5f, 0x6c, 0x6f,
|
||||
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,
|
||||
0x6c, 0x64, 0x42, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74,
|
||||
0x4c, 0x6f, 0x67, 0x73, 0x12, 0x3d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x73, 0x5f, 0x6c, 0x6f,
|
||||
0x67, 0x73, 0x18, 0x09, 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,
|
||||
0x6c, 0x64, 0x42, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x52, 0x09, 0x73, 0x74, 0x61, 0x74, 0x73, 0x4c,
|
||||
0x6f, 0x67, 0x73, 0x12, 0x5a, 0x0a, 0x0f, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74,
|
||||
0x73, 0x5f, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 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, 0x2e, 0x54, 0x65,
|
||||
0x78, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x4c, 0x6f, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79,
|
||||
0x52, 0x0d, 0x74, 0x65, 0x78, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x4c, 0x6f, 0x67, 0x73, 0x12,
|
||||
0x19, 0x0a, 0x08, 0x6e, 0x75, 0x6d, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28,
|
||||
0x03, 0x52, 0x07, 0x6e, 0x75, 0x6d, 0x52, 0x6f, 0x77, 0x73, 0x12, 0x3b, 0x0a, 0x09, 0x62, 0x6d,
|
||||
0x32, 0x35, 0x5f, 0x6c, 0x6f, 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, 0x6c, 0x64, 0x42, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x52, 0x08, 0x62,
|
||||
0x6d, 0x32, 0x35, 0x4c, 0x6f, 0x67, 0x73, 0x1a, 0x63, 0x0a, 0x12, 0x54, 0x65, 0x78, 0x74, 0x53,
|
||||
0x74, 0x61, 0x74, 0x73, 0x4c, 0x6f, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a,
|
||||
0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,
|
||||
0x37, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21,
|
||||
0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x64, 0x61,
|
||||
0x74, 0x61, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x74, 0x61, 0x74,
|
||||
0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x49, 0x0a, 0x0c,
|
||||
0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x39, 0x0a, 0x07,
|
||||
0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e,
|
||||
0x6c, 0x64, 0x42, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x52, 0x08, 0x62, 0x6d, 0x32, 0x35, 0x4c, 0x6f,
|
||||
0x67, 0x73, 0x1a, 0x63, 0x0a, 0x12, 0x54, 0x65, 0x78, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x4c,
|
||||
0x6f, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18,
|
||||
0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x37, 0x0a, 0x05, 0x76, 0x61,
|
||||
0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6d, 0x69, 0x6c, 0x76,
|
||||
0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x65,
|
||||
0x78, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x05, 0x76, 0x61,
|
||||
0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x49, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x74, 0x73,
|
||||
0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x39, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c,
|
||||
0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 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, 0x72, 0x65, 0x73, 0x75, 0x6c,
|
||||
0x74, 0x73, 0x22, 0xeb, 0x02, 0x0a, 0x13, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4a, 0x6f, 0x62, 0x73,
|
||||
0x56, 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x06, 0x73, 0x74,
|
||||
0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 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, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12,
|
||||
0x1c, 0x0a, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01,
|
||||
0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x12, 0x51, 0x0a,
|
||||
0x11, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x6a, 0x6f, 0x62, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c,
|
||||
0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 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, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x48, 0x00, 0x52,
|
||||
0x0f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73,
|
||||
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,
|
||||
0x65, 0x78, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x07,
|
||||
0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0xeb, 0x02, 0x0a, 0x13, 0x51, 0x75, 0x65, 0x72,
|
||||
0x79, 0x4a, 0x6f, 0x62, 0x73, 0x56, 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
|
||||
0x33, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
|
||||
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, 0x52, 0x06, 0x73, 0x74,
|
||||
0x61, 0x74, 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49,
|
||||
0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72,
|
||||
0x49, 0x44, 0x12, 0x51, 0x0a, 0x11, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x6a, 0x6f, 0x62, 0x5f,
|
||||
0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 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, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x75, 0x6c,
|
||||
0x74, 0x73, 0x48, 0x00, 0x52, 0x0f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4a, 0x6f, 0x62, 0x52, 0x65,
|
||||
0x73, 0x75, 0x6c, 0x74, 0x73, 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, 0x65, 0x78, 0x2e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x52,
|
||||
0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x48, 0x00, 0x52, 0x11, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a,
|
||||
0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x4e, 0x0a, 0x11, 0x73,
|
||||
0x74, 0x61, 0x74, 0x73, 0x5f, 0x6a, 0x6f, 0x62, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73,
|
||||
0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 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, 0x73, 0x48, 0x00, 0x52, 0x0f, 0x73, 0x74, 0x61, 0x74,
|
||||
0x73, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x42, 0x08, 0x0a, 0x06, 0x72,
|
||||
0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x83, 0x01, 0x0a, 0x11, 0x44, 0x72, 0x6f, 0x70, 0x4a, 0x6f,
|
||||
0x62, 0x73, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x63,
|
||||
0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09,
|
||||
0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x61, 0x73,
|
||||
0x6b, 0x49, 0x44, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x07, 0x74, 0x61, 0x73, 0x6b,
|
||||
0x49, 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, 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, 0x32, 0xb6, 0x08, 0x0a, 0x09,
|
||||
0x49, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x6c, 0x0a, 0x12, 0x47, 0x65, 0x74,
|
||||
0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x12,
|
||||
0x2e, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d,
|
||||
0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65,
|
||||
0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
|
||||
0x24, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d,
|
||||
0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x53,
|
||||
0x74, 0x61, 0x74, 0x65, 0x73, 0x22, 0x00, 0x12, 0x71, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x53, 0x74,
|
||||
0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12,
|
||||
0x32, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69,
|
||||
0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69,
|
||||
0x73, 0x74, 0x69, 0x63, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75,
|
||||
0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f,
|
||||
0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67,
|
||||
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x50, 0x0a, 0x09, 0x43, 0x72,
|
||||
0x65, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x12, 0x24, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73,
|
||||
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x43, 0x72, 0x65,
|
||||
0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 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, 0x12, 0x5a, 0x0a, 0x09,
|
||||
0x51, 0x75, 0x65, 0x72, 0x79, 0x4a, 0x6f, 0x62, 0x73, 0x12, 0x24, 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, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
|
||||
0x25, 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, 0x52, 0x65,
|
||||
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x08, 0x44, 0x72, 0x6f, 0x70,
|
||||
0x4a, 0x6f, 0x62, 0x73, 0x12, 0x23, 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, 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, 0x12, 0x60, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4a,
|
||||
0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73,
|
||||
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x47, 0x65, 0x74,
|
||||
0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x73, 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, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x73,
|
||||
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x7b, 0x0a, 0x12, 0x53, 0x68,
|
||||
0x6f, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
|
||||
0x12, 0x30, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
|
||||
0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x6f, 0x6e,
|
||||
0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
|
||||
0x73, 0x74, 0x1a, 0x31, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
||||
0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x43,
|
||||
0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73,
|
||||
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5f, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x4d, 0x65,
|
||||
0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70,
|
||||
0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4d,
|
||||
0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e,
|
||||
0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c,
|
||||
0x76, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65,
|
||||
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61,
|
||||
0x74, 0x65, 0x4a, 0x6f, 0x62, 0x56, 0x32, 0x12, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73,
|
||||
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x43, 0x72, 0x65,
|
||||
0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 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, 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,
|
||||
0x65, 0x78, 0x2e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74,
|
||||
0x73, 0x48, 0x00, 0x52, 0x11, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x4a, 0x6f, 0x62, 0x52,
|
||||
0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x4e, 0x0a, 0x11, 0x73, 0x74, 0x61, 0x74, 0x73, 0x5f,
|
||||
0x6a, 0x6f, 0x62, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28,
|
||||
0x0b, 0x32, 0x20, 0x2e, 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, 0x73, 0x48, 0x00, 0x52, 0x0f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x4a, 0x6f, 0x62, 0x52,
|
||||
0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x42, 0x08, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74,
|
||||
0x22, 0x83, 0x01, 0x0a, 0x11, 0x44, 0x72, 0x6f, 0x70, 0x4a, 0x6f, 0x62, 0x73, 0x56, 0x32, 0x52,
|
||||
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65,
|
||||
0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74,
|
||||
0x65, 0x72, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x44, 0x73, 0x18,
|
||||
0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x49, 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, 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, 0x32, 0xb6, 0x08, 0x0a, 0x09, 0x49, 0x6e, 0x64, 0x65, 0x78,
|
||||
0x4e, 0x6f, 0x64, 0x65, 0x12, 0x6c, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6f,
|
||||
0x6e, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x12, 0x2e, 0x2e, 0x6d, 0x69, 0x6c,
|
||||
0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73,
|
||||
0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61,
|
||||
0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x6d, 0x69, 0x6c,
|
||||
0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73,
|
||||
0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73,
|
||||
0x22, 0x00, 0x12, 0x71, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74,
|
||||
0x69, 0x63, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x32, 0x2e, 0x6d, 0x69, 0x6c,
|
||||
0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e,
|
||||
0x61, 0x6c, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73,
|
||||
0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23,
|
||||
0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69,
|
||||
0x6c, 0x76, 0x75, 0x73, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f,
|
||||
0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x50, 0x0a, 0x09, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4a,
|
||||
0x6f, 0x62, 0x12, 0x24, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
||||
0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4a, 0x6f,
|
||||
0x62, 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, 0x12, 0x5a, 0x0a, 0x09, 0x51, 0x75, 0x65, 0x72, 0x79,
|
||||
0x4a, 0x6f, 0x62, 0x73, 0x12, 0x24, 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, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 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, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
|
||||
0x65, 0x22, 0x00, 0x12, 0x4e, 0x0a, 0x08, 0x44, 0x72, 0x6f, 0x70, 0x4a, 0x6f, 0x62, 0x73, 0x12,
|
||||
0x23, 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, 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, 0x12, 0x60, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61,
|
||||
0x74, 0x73, 0x12, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
||||
0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x53, 0x74,
|
||||
0x61, 0x74, 0x73, 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,
|
||||
0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
|
||||
0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x7b, 0x0a, 0x12, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x6f, 0x6e,
|
||||
0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x30, 0x2e, 0x6d, 0x69,
|
||||
0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72,
|
||||
0x6e, 0x61, 0x6c, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72,
|
||||
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e,
|
||||
0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74,
|
||||
0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
|
||||
0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
|
||||
0x22, 0x00, 0x12, 0x5f, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73,
|
||||
0x12, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
|
||||
0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63,
|
||||
0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75,
|
||||
0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x47,
|
||||
0x65, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
|
||||
0x65, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62,
|
||||
0x56, 0x32, 0x12, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
||||
0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4a, 0x6f,
|
||||
0x62, 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, 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 (
|
||||
|
|
Loading…
Reference in New Issue