mirror of
https://gitee.com/milvus-io/milvus.git
synced 2025-12-06 17:18:35 +08:00
enhance: add storage resource usage for vector search (#44308)
issue: #44212 Implement search/query storage usage statistics in go side(result reduce), only record storage usage in vector search C++ path. Need to be implemented in query c++ path in next prs. --------- Signed-off-by: chasingegg <chao.gao@zilliz.com> Signed-off-by: marcelo.chen <marcelo.chen@zilliz.com> Co-authored-by: marcelo.chen <marcelo.chen@zilliz.com>
This commit is contained in:
parent
92d2fb6360
commit
d3784c6515
@ -33,6 +33,64 @@
|
|||||||
|
|
||||||
namespace milvus {
|
namespace milvus {
|
||||||
|
|
||||||
|
// scan cost in each search/query
|
||||||
|
struct StorageCost {
|
||||||
|
int64_t scanned_remote_bytes = 0;
|
||||||
|
int64_t scanned_total_bytes = 0;
|
||||||
|
|
||||||
|
StorageCost() = default;
|
||||||
|
|
||||||
|
StorageCost(int64_t scanned_remote_bytes, int64_t scanned_total_bytes)
|
||||||
|
: scanned_remote_bytes(scanned_remote_bytes),
|
||||||
|
scanned_total_bytes(scanned_total_bytes) {
|
||||||
|
}
|
||||||
|
|
||||||
|
StorageCost
|
||||||
|
operator+(const StorageCost& rhs) const {
|
||||||
|
return {scanned_remote_bytes + rhs.scanned_remote_bytes,
|
||||||
|
scanned_total_bytes + rhs.scanned_total_bytes};
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
operator+=(const StorageCost& rhs) {
|
||||||
|
scanned_remote_bytes += rhs.scanned_remote_bytes;
|
||||||
|
scanned_total_bytes += rhs.scanned_total_bytes;
|
||||||
|
}
|
||||||
|
|
||||||
|
StorageCost
|
||||||
|
operator*(const double factor) const {
|
||||||
|
return {static_cast<int64_t>(scanned_remote_bytes * factor),
|
||||||
|
static_cast<int64_t>(scanned_total_bytes * factor)};
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
operator*=(const double factor) {
|
||||||
|
scanned_remote_bytes =
|
||||||
|
static_cast<int64_t>(scanned_remote_bytes * factor);
|
||||||
|
scanned_total_bytes =
|
||||||
|
static_cast<int64_t>(scanned_total_bytes * factor);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
operator=(const StorageCost& rhs) {
|
||||||
|
scanned_remote_bytes = rhs.scanned_remote_bytes;
|
||||||
|
scanned_total_bytes = rhs.scanned_total_bytes;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string
|
||||||
|
ToString() const {
|
||||||
|
return fmt::format("scanned_remote_bytes: {}, scanned_total_bytes: {}",
|
||||||
|
scanned_remote_bytes,
|
||||||
|
scanned_total_bytes);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
inline std::ostream&
|
||||||
|
operator<<(std::ostream& os, const StorageCost& cost) {
|
||||||
|
os << cost.ToString();
|
||||||
|
return os;
|
||||||
|
}
|
||||||
|
|
||||||
struct OffsetDisPair {
|
struct OffsetDisPair {
|
||||||
private:
|
private:
|
||||||
std::pair<int64_t, float> off_dis_;
|
std::pair<int64_t, float> off_dis_;
|
||||||
@ -215,6 +273,8 @@ struct SearchResult {
|
|||||||
//Vector iterators, used for group by
|
//Vector iterators, used for group by
|
||||||
std::optional<std::vector<std::shared_ptr<VectorIterator>>>
|
std::optional<std::vector<std::shared_ptr<VectorIterator>>>
|
||||||
vector_iterators_;
|
vector_iterators_;
|
||||||
|
// record the storage usage in search
|
||||||
|
StorageCost search_storage_cost_;
|
||||||
};
|
};
|
||||||
|
|
||||||
using SearchResultPtr = std::shared_ptr<SearchResult>;
|
using SearchResultPtr = std::shared_ptr<SearchResult>;
|
||||||
@ -229,6 +289,8 @@ struct RetrieveResult {
|
|||||||
std::vector<int64_t> result_offsets_;
|
std::vector<int64_t> result_offsets_;
|
||||||
std::vector<DataArray> field_data_;
|
std::vector<DataArray> field_data_;
|
||||||
bool has_more_result = true;
|
bool has_more_result = true;
|
||||||
|
// record the storage usage in retrieve
|
||||||
|
StorageCost retrieve_storage_cost_;
|
||||||
};
|
};
|
||||||
|
|
||||||
using RetrieveResultPtr = std::shared_ptr<RetrieveResult>;
|
using RetrieveResultPtr = std::shared_ptr<RetrieveResult>;
|
||||||
|
|||||||
@ -342,10 +342,14 @@ TEST_F(TestVectorArrayStorageV2, BuildEmbListHNSWIndex) {
|
|||||||
searchInfo.metric_type_ = knowhere::metric::MAX_SIM;
|
searchInfo.metric_type_ = knowhere::metric::MAX_SIM;
|
||||||
searchInfo.search_params_ = search_conf;
|
searchInfo.search_params_ = search_conf;
|
||||||
SearchResult result;
|
SearchResult result;
|
||||||
vec_index->Query(query_dataset, searchInfo, nullptr, result);
|
milvus::OpContext op_context;
|
||||||
|
vec_index->Query(
|
||||||
|
query_dataset, searchInfo, nullptr, &op_context, result);
|
||||||
auto ref_result = SearchResultToJson(result);
|
auto ref_result = SearchResultToJson(result);
|
||||||
std::cout << ref_result.dump(1) << std::endl;
|
std::cout << ref_result.dump(1) << std::endl;
|
||||||
EXPECT_EQ(result.total_nq_, 2);
|
EXPECT_EQ(result.total_nq_, 2);
|
||||||
EXPECT_EQ(result.distances_.size(), 2 * searchInfo.topk_);
|
EXPECT_EQ(result.distances_.size(), 2 * searchInfo.topk_);
|
||||||
|
EXPECT_EQ(op_context.storage_usage.scanned_cold_bytes, 0);
|
||||||
|
EXPECT_EQ(op_context.storage_usage.scanned_total_bytes, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -84,15 +84,21 @@ PhyVectorSearchNode::GetOutput() {
|
|||||||
// TODO: uniform knowhere BitsetView and milvus BitsetView
|
// TODO: uniform knowhere BitsetView and milvus BitsetView
|
||||||
milvus::BitsetView final_view((uint8_t*)col_input->GetRawData(),
|
milvus::BitsetView final_view((uint8_t*)col_input->GetRawData(),
|
||||||
col_input->size());
|
col_input->size());
|
||||||
|
milvus::OpContext op_context;
|
||||||
segment_->vector_search(search_info_,
|
segment_->vector_search(search_info_,
|
||||||
src_data,
|
src_data,
|
||||||
src_lims,
|
src_lims,
|
||||||
num_queries,
|
num_queries,
|
||||||
query_timestamp_,
|
query_timestamp_,
|
||||||
final_view,
|
final_view,
|
||||||
|
&op_context,
|
||||||
search_result);
|
search_result);
|
||||||
|
|
||||||
search_result.total_data_cnt_ = final_view.size();
|
search_result.total_data_cnt_ = final_view.size();
|
||||||
|
search_result.search_storage_cost_.scanned_remote_bytes =
|
||||||
|
op_context.storage_usage.scanned_cold_bytes.load();
|
||||||
|
search_result.search_storage_cost_.scanned_total_bytes =
|
||||||
|
op_context.storage_usage.scanned_total_bytes.load();
|
||||||
query_context_->set_search_result(std::move(search_result));
|
query_context_->set_search_result(std::move(search_result));
|
||||||
std::chrono::high_resolution_clock::time_point vector_end =
|
std::chrono::high_resolution_clock::time_point vector_end =
|
||||||
std::chrono::high_resolution_clock::now();
|
std::chrono::high_resolution_clock::now();
|
||||||
|
|||||||
@ -25,7 +25,7 @@ SkipIndex::GetFieldChunkMetrics(milvus::FieldId field_id, int chunk_id) const {
|
|||||||
if (field_metrics != fieldChunkMetrics_.end()) {
|
if (field_metrics != fieldChunkMetrics_.end()) {
|
||||||
auto& field_chunk_metrics = field_metrics->second;
|
auto& field_chunk_metrics = field_metrics->second;
|
||||||
auto ca = cachinglayer::SemiInlineGet(
|
auto ca = cachinglayer::SemiInlineGet(
|
||||||
field_chunk_metrics->PinCells({chunk_id}));
|
field_chunk_metrics->PinCells(nullptr, {chunk_id}));
|
||||||
auto metrics = ca->get_cell_of(chunk_id);
|
auto metrics = ca->get_cell_of(chunk_id);
|
||||||
return cachinglayer::PinWrapper<const FieldChunkMetrics*>(ca, metrics);
|
return cachinglayer::PinWrapper<const FieldChunkMetrics*>(ca, metrics);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -11,6 +11,7 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
|
|
||||||
#include "cachinglayer/CacheSlot.h"
|
#include "cachinglayer/CacheSlot.h"
|
||||||
@ -112,6 +113,12 @@ class FieldChunkMetricsTranslator
|
|||||||
return &meta_;
|
return &meta_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int64_t
|
||||||
|
cells_storage_bytes(
|
||||||
|
const std::vector<milvus::cachinglayer::cid_t>& cids) const override {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// todo: support some null_count_ skip
|
// todo: support some null_count_ skip
|
||||||
|
|
||||||
|
|||||||
@ -245,6 +245,7 @@ void
|
|||||||
VectorDiskAnnIndex<T>::Query(const DatasetPtr dataset,
|
VectorDiskAnnIndex<T>::Query(const DatasetPtr dataset,
|
||||||
const SearchInfo& search_info,
|
const SearchInfo& search_info,
|
||||||
const BitsetView& bitset,
|
const BitsetView& bitset,
|
||||||
|
milvus::OpContext* op_context,
|
||||||
SearchResult& search_result) const {
|
SearchResult& search_result) const {
|
||||||
AssertInfo(GetMetricType() == search_info.metric_type_,
|
AssertInfo(GetMetricType() == search_info.metric_type_,
|
||||||
"Metric type of field index isn't the same with search info");
|
"Metric type of field index isn't the same with search info");
|
||||||
@ -272,7 +273,8 @@ VectorDiskAnnIndex<T>::Query(const DatasetPtr dataset,
|
|||||||
auto final = [&] {
|
auto final = [&] {
|
||||||
if (CheckAndUpdateKnowhereRangeSearchParam(
|
if (CheckAndUpdateKnowhereRangeSearchParam(
|
||||||
search_info, topk, GetMetricType(), search_config)) {
|
search_info, topk, GetMetricType(), search_config)) {
|
||||||
auto res = index_.RangeSearch(dataset, search_config, bitset);
|
auto res =
|
||||||
|
index_.RangeSearch(dataset, search_config, bitset, op_context);
|
||||||
if (!res.has_value()) {
|
if (!res.has_value()) {
|
||||||
ThrowInfo(ErrorCode::UnexpectedError,
|
ThrowInfo(ErrorCode::UnexpectedError,
|
||||||
fmt::format("failed to range search: {}: {}",
|
fmt::format("failed to range search: {}: {}",
|
||||||
@ -282,7 +284,8 @@ VectorDiskAnnIndex<T>::Query(const DatasetPtr dataset,
|
|||||||
return ReGenRangeSearchResult(
|
return ReGenRangeSearchResult(
|
||||||
res.value(), topk, num_rows, GetMetricType());
|
res.value(), topk, num_rows, GetMetricType());
|
||||||
} else {
|
} else {
|
||||||
auto res = index_.Search(dataset, search_config, bitset);
|
auto res =
|
||||||
|
index_.Search(dataset, search_config, bitset, op_context);
|
||||||
if (!res.has_value()) {
|
if (!res.has_value()) {
|
||||||
ThrowInfo(ErrorCode::UnexpectedError,
|
ThrowInfo(ErrorCode::UnexpectedError,
|
||||||
fmt::format("failed to search: {}: {}",
|
fmt::format("failed to search: {}: {}",
|
||||||
|
|||||||
@ -72,6 +72,7 @@ class VectorDiskAnnIndex : public VectorIndex {
|
|||||||
Query(const DatasetPtr dataset,
|
Query(const DatasetPtr dataset,
|
||||||
const SearchInfo& search_info,
|
const SearchInfo& search_info,
|
||||||
const BitsetView& bitset,
|
const BitsetView& bitset,
|
||||||
|
milvus::OpContext* op_context,
|
||||||
SearchResult& search_result) const override;
|
SearchResult& search_result) const override;
|
||||||
|
|
||||||
const bool
|
const bool
|
||||||
|
|||||||
@ -29,6 +29,7 @@
|
|||||||
#include "common/BitsetView.h"
|
#include "common/BitsetView.h"
|
||||||
#include "common/QueryResult.h"
|
#include "common/QueryResult.h"
|
||||||
#include "common/QueryInfo.h"
|
#include "common/QueryInfo.h"
|
||||||
|
#include "common/OpContext.h"
|
||||||
#include "knowhere/version.h"
|
#include "knowhere/version.h"
|
||||||
|
|
||||||
namespace milvus::index {
|
namespace milvus::index {
|
||||||
@ -58,6 +59,7 @@ class VectorIndex : public IndexBase {
|
|||||||
Query(const DatasetPtr dataset,
|
Query(const DatasetPtr dataset,
|
||||||
const SearchInfo& search_info,
|
const SearchInfo& search_info,
|
||||||
const BitsetView& bitset,
|
const BitsetView& bitset,
|
||||||
|
milvus::OpContext* op_context,
|
||||||
SearchResult& search_result) const = 0;
|
SearchResult& search_result) const = 0;
|
||||||
|
|
||||||
virtual knowhere::expected<std::vector<knowhere::IndexNode::IteratorPtr>>
|
virtual knowhere::expected<std::vector<knowhere::IndexNode::IteratorPtr>>
|
||||||
|
|||||||
@ -473,6 +473,7 @@ void
|
|||||||
VectorMemIndex<T>::Query(const DatasetPtr dataset,
|
VectorMemIndex<T>::Query(const DatasetPtr dataset,
|
||||||
const SearchInfo& search_info,
|
const SearchInfo& search_info,
|
||||||
const BitsetView& bitset,
|
const BitsetView& bitset,
|
||||||
|
milvus::OpContext* op_context,
|
||||||
SearchResult& search_result) const {
|
SearchResult& search_result) const {
|
||||||
// AssertInfo(GetMetricType() == search_info.metric_type_,
|
// AssertInfo(GetMetricType() == search_info.metric_type_,
|
||||||
// "Metric type of field index isn't the same with search info");
|
// "Metric type of field index isn't the same with search info");
|
||||||
@ -486,7 +487,8 @@ VectorMemIndex<T>::Query(const DatasetPtr dataset,
|
|||||||
if (CheckAndUpdateKnowhereRangeSearchParam(
|
if (CheckAndUpdateKnowhereRangeSearchParam(
|
||||||
search_info, topk, GetMetricType(), search_conf)) {
|
search_info, topk, GetMetricType(), search_conf)) {
|
||||||
milvus::tracer::AddEvent("start_knowhere_index_range_search");
|
milvus::tracer::AddEvent("start_knowhere_index_range_search");
|
||||||
auto res = index_.RangeSearch(dataset, search_conf, bitset);
|
auto res =
|
||||||
|
index_.RangeSearch(dataset, search_conf, bitset, op_context);
|
||||||
milvus::tracer::AddEvent("finish_knowhere_index_range_search");
|
milvus::tracer::AddEvent("finish_knowhere_index_range_search");
|
||||||
if (!res.has_value()) {
|
if (!res.has_value()) {
|
||||||
ThrowInfo(ErrorCode::UnexpectedError,
|
ThrowInfo(ErrorCode::UnexpectedError,
|
||||||
@ -500,7 +502,7 @@ VectorMemIndex<T>::Query(const DatasetPtr dataset,
|
|||||||
return result;
|
return result;
|
||||||
} else {
|
} else {
|
||||||
milvus::tracer::AddEvent("start_knowhere_index_search");
|
milvus::tracer::AddEvent("start_knowhere_index_search");
|
||||||
auto res = index_.Search(dataset, search_conf, bitset);
|
auto res = index_.Search(dataset, search_conf, bitset, op_context);
|
||||||
milvus::tracer::AddEvent("finish_knowhere_index_search");
|
milvus::tracer::AddEvent("finish_knowhere_index_search");
|
||||||
if (!res.has_value()) {
|
if (!res.has_value()) {
|
||||||
ThrowInfo(
|
ThrowInfo(
|
||||||
|
|||||||
@ -79,6 +79,7 @@ class VectorMemIndex : public VectorIndex {
|
|||||||
Query(const DatasetPtr dataset,
|
Query(const DatasetPtr dataset,
|
||||||
const SearchInfo& search_info,
|
const SearchInfo& search_info,
|
||||||
const BitsetView& bitset,
|
const BitsetView& bitset,
|
||||||
|
milvus::OpContext* op_context,
|
||||||
SearchResult& search_result) const override;
|
SearchResult& search_result) const override;
|
||||||
|
|
||||||
const bool
|
const bool
|
||||||
|
|||||||
@ -84,10 +84,12 @@ VecIndexCreator::Load(const milvus::BinarySet& binary_set) {
|
|||||||
std::unique_ptr<SearchResult>
|
std::unique_ptr<SearchResult>
|
||||||
VecIndexCreator::Query(const milvus::DatasetPtr& dataset,
|
VecIndexCreator::Query(const milvus::DatasetPtr& dataset,
|
||||||
const SearchInfo& search_info,
|
const SearchInfo& search_info,
|
||||||
const BitsetView& bitset) {
|
const BitsetView& bitset,
|
||||||
|
milvus::OpContext* op_context) {
|
||||||
auto vector_index = dynamic_cast<index::VectorIndex*>(index_.get());
|
auto vector_index = dynamic_cast<index::VectorIndex*>(index_.get());
|
||||||
auto search_result = std::make_unique<SearchResult>();
|
auto search_result = std::make_unique<SearchResult>();
|
||||||
vector_index->Query(dataset, search_info, bitset, *search_result);
|
vector_index->Query(
|
||||||
|
dataset, search_info, bitset, op_context, *search_result);
|
||||||
return search_result;
|
return search_result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -56,7 +56,8 @@ class VecIndexCreator : public IndexCreatorBase {
|
|||||||
std::unique_ptr<SearchResult>
|
std::unique_ptr<SearchResult>
|
||||||
Query(const milvus::DatasetPtr& dataset,
|
Query(const milvus::DatasetPtr& dataset,
|
||||||
const SearchInfo& search_info,
|
const SearchInfo& search_info,
|
||||||
const BitsetView& bitset);
|
const BitsetView& bitset,
|
||||||
|
milvus::OpContext* op_context);
|
||||||
|
|
||||||
index::IndexStatsPtr
|
index::IndexStatsPtr
|
||||||
Upload() override;
|
Upload() override;
|
||||||
|
|||||||
@ -135,7 +135,7 @@ class ChunkedColumnBase : public ChunkedColumnInterface {
|
|||||||
|
|
||||||
PinWrapper<const char*>
|
PinWrapper<const char*>
|
||||||
DataOfChunk(int chunk_id) const override {
|
DataOfChunk(int chunk_id) const override {
|
||||||
auto ca = SemiInlineGet(slot_->PinCells({chunk_id}));
|
auto ca = SemiInlineGet(slot_->PinCells(nullptr, {chunk_id}));
|
||||||
auto chunk = ca->get_cell_of(chunk_id);
|
auto chunk = ca->get_cell_of(chunk_id);
|
||||||
return PinWrapper<const char*>(ca, chunk->Data());
|
return PinWrapper<const char*>(ca, chunk->Data());
|
||||||
}
|
}
|
||||||
@ -146,8 +146,8 @@ class ChunkedColumnBase : public ChunkedColumnInterface {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
auto [chunk_id, offset_in_chunk] = GetChunkIDByOffset(offset);
|
auto [chunk_id, offset_in_chunk] = GetChunkIDByOffset(offset);
|
||||||
auto ca =
|
auto ca = SemiInlineGet(
|
||||||
SemiInlineGet(slot_->PinCells({static_cast<cid_t>(chunk_id)}));
|
slot_->PinCells(nullptr, {static_cast<cid_t>(chunk_id)}));
|
||||||
auto chunk = ca->get_cell_of(chunk_id);
|
auto chunk = ca->get_cell_of(chunk_id);
|
||||||
return chunk->isValid(offset_in_chunk);
|
return chunk->isValid(offset_in_chunk);
|
||||||
}
|
}
|
||||||
@ -169,7 +169,7 @@ class ChunkedColumnBase : public ChunkedColumnInterface {
|
|||||||
}
|
}
|
||||||
// nullable:
|
// nullable:
|
||||||
if (offsets == nullptr) {
|
if (offsets == nullptr) {
|
||||||
auto ca = SemiInlineGet(slot_->PinAllCells());
|
auto ca = SemiInlineGet(slot_->PinAllCells(nullptr));
|
||||||
for (int64_t i = 0; i < num_rows_; i++) {
|
for (int64_t i = 0; i < num_rows_; i++) {
|
||||||
auto [cid, offset_in_chunk] = GetChunkIDByOffset(i);
|
auto [cid, offset_in_chunk] = GetChunkIDByOffset(i);
|
||||||
auto chunk = ca->get_cell_of(cid);
|
auto chunk = ca->get_cell_of(cid);
|
||||||
@ -178,7 +178,7 @@ class ChunkedColumnBase : public ChunkedColumnInterface {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
auto [cids, offsets_in_chunk] = ToChunkIdAndOffset(offsets, count);
|
auto [cids, offsets_in_chunk] = ToChunkIdAndOffset(offsets, count);
|
||||||
auto ca = SemiInlineGet(slot_->PinCells(cids));
|
auto ca = SemiInlineGet(slot_->PinCells(nullptr, cids));
|
||||||
for (int64_t i = 0; i < count; i++) {
|
for (int64_t i = 0; i < count; i++) {
|
||||||
auto chunk = ca->get_cell_of(cids[i]);
|
auto chunk = ca->get_cell_of(cids[i]);
|
||||||
auto valid = chunk->isValid(offsets_in_chunk[i]);
|
auto valid = chunk->isValid(offsets_in_chunk[i]);
|
||||||
@ -322,14 +322,14 @@ class ChunkedColumnBase : public ChunkedColumnInterface {
|
|||||||
|
|
||||||
PinWrapper<Chunk*>
|
PinWrapper<Chunk*>
|
||||||
GetChunk(int64_t chunk_id) const override {
|
GetChunk(int64_t chunk_id) const override {
|
||||||
auto ca = SemiInlineGet(slot_->PinCells({chunk_id}));
|
auto ca = SemiInlineGet(slot_->PinCells(nullptr, {chunk_id}));
|
||||||
auto chunk = ca->get_cell_of(chunk_id);
|
auto chunk = ca->get_cell_of(chunk_id);
|
||||||
return PinWrapper<Chunk*>(ca, chunk);
|
return PinWrapper<Chunk*>(ca, chunk);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<PinWrapper<Chunk*>>
|
std::vector<PinWrapper<Chunk*>>
|
||||||
GetAllChunks() const override {
|
GetAllChunks() const override {
|
||||||
auto ca = SemiInlineGet(slot_->PinAllCells());
|
auto ca = SemiInlineGet(slot_->PinAllCells(nullptr));
|
||||||
std::vector<PinWrapper<Chunk*>> ret;
|
std::vector<PinWrapper<Chunk*>> ret;
|
||||||
ret.reserve(num_chunks_);
|
ret.reserve(num_chunks_);
|
||||||
for (size_t i = 0; i < num_chunks_; i++) {
|
for (size_t i = 0; i < num_chunks_; i++) {
|
||||||
@ -373,7 +373,7 @@ class ChunkedColumn : public ChunkedColumnBase {
|
|||||||
const int64_t* offsets,
|
const int64_t* offsets,
|
||||||
int64_t count) override {
|
int64_t count) override {
|
||||||
auto [cids, offsets_in_chunk] = ToChunkIdAndOffset(offsets, count);
|
auto [cids, offsets_in_chunk] = ToChunkIdAndOffset(offsets, count);
|
||||||
auto ca = SemiInlineGet(slot_->PinCells(cids));
|
auto ca = SemiInlineGet(slot_->PinCells(nullptr, cids));
|
||||||
for (int64_t i = 0; i < count; i++) {
|
for (int64_t i = 0; i < count; i++) {
|
||||||
fn(ca->get_cell_of(cids[i])->ValueAt(offsets_in_chunk[i]), i);
|
fn(ca->get_cell_of(cids[i])->ValueAt(offsets_in_chunk[i]), i);
|
||||||
}
|
}
|
||||||
@ -384,7 +384,7 @@ class ChunkedColumn : public ChunkedColumnBase {
|
|||||||
BulkPrimitiveValueAtImpl(void* dst, const int64_t* offsets, int64_t count) {
|
BulkPrimitiveValueAtImpl(void* dst, const int64_t* offsets, int64_t count) {
|
||||||
static_assert(std::is_fundamental_v<S> && std::is_fundamental_v<T>);
|
static_assert(std::is_fundamental_v<S> && std::is_fundamental_v<T>);
|
||||||
auto [cids, offsets_in_chunk] = ToChunkIdAndOffset(offsets, count);
|
auto [cids, offsets_in_chunk] = ToChunkIdAndOffset(offsets, count);
|
||||||
auto ca = SemiInlineGet(slot_->PinCells(cids));
|
auto ca = SemiInlineGet(slot_->PinCells(nullptr, cids));
|
||||||
auto typed_dst = static_cast<T*>(dst);
|
auto typed_dst = static_cast<T*>(dst);
|
||||||
for (int64_t i = 0; i < count; i++) {
|
for (int64_t i = 0; i < count; i++) {
|
||||||
auto chunk = ca->get_cell_of(cids[i]);
|
auto chunk = ca->get_cell_of(cids[i]);
|
||||||
@ -443,7 +443,7 @@ class ChunkedColumn : public ChunkedColumnBase {
|
|||||||
int64_t element_sizeof,
|
int64_t element_sizeof,
|
||||||
int64_t count) override {
|
int64_t count) override {
|
||||||
auto [cids, offsets_in_chunk] = ToChunkIdAndOffset(offsets, count);
|
auto [cids, offsets_in_chunk] = ToChunkIdAndOffset(offsets, count);
|
||||||
auto ca = SemiInlineGet(slot_->PinCells(cids));
|
auto ca = SemiInlineGet(slot_->PinCells(nullptr, cids));
|
||||||
auto dst_vec = reinterpret_cast<char*>(dst);
|
auto dst_vec = reinterpret_cast<char*>(dst);
|
||||||
for (int64_t i = 0; i < count; i++) {
|
for (int64_t i = 0; i < count; i++) {
|
||||||
auto chunk = ca->get_cell_of(cids[i]);
|
auto chunk = ca->get_cell_of(cids[i]);
|
||||||
@ -454,7 +454,7 @@ class ChunkedColumn : public ChunkedColumnBase {
|
|||||||
|
|
||||||
PinWrapper<SpanBase>
|
PinWrapper<SpanBase>
|
||||||
Span(int64_t chunk_id) const override {
|
Span(int64_t chunk_id) const override {
|
||||||
auto ca = SemiInlineGet(slot_->PinCells({chunk_id}));
|
auto ca = SemiInlineGet(slot_->PinCells(nullptr, {chunk_id}));
|
||||||
auto chunk = ca->get_cell_of(chunk_id);
|
auto chunk = ca->get_cell_of(chunk_id);
|
||||||
return PinWrapper<SpanBase>(
|
return PinWrapper<SpanBase>(
|
||||||
ca, static_cast<FixedWidthChunk*>(chunk)->Span());
|
ca, static_cast<FixedWidthChunk*>(chunk)->Span());
|
||||||
@ -479,7 +479,7 @@ class ChunkedVariableColumn : public ChunkedColumnBase {
|
|||||||
StringViews(int64_t chunk_id,
|
StringViews(int64_t chunk_id,
|
||||||
std::optional<std::pair<int64_t, int64_t>> offset_len =
|
std::optional<std::pair<int64_t, int64_t>> offset_len =
|
||||||
std::nullopt) const override {
|
std::nullopt) const override {
|
||||||
auto ca = SemiInlineGet(slot_->PinCells({chunk_id}));
|
auto ca = SemiInlineGet(slot_->PinCells(nullptr, {chunk_id}));
|
||||||
auto chunk = ca->get_cell_of(chunk_id);
|
auto chunk = ca->get_cell_of(chunk_id);
|
||||||
return PinWrapper<
|
return PinWrapper<
|
||||||
std::pair<std::vector<std::string_view>, FixedVector<bool>>>(
|
std::pair<std::vector<std::string_view>, FixedVector<bool>>>(
|
||||||
@ -489,7 +489,7 @@ class ChunkedVariableColumn : public ChunkedColumnBase {
|
|||||||
PinWrapper<std::pair<std::vector<std::string_view>, FixedVector<bool>>>
|
PinWrapper<std::pair<std::vector<std::string_view>, FixedVector<bool>>>
|
||||||
StringViewsByOffsets(int64_t chunk_id,
|
StringViewsByOffsets(int64_t chunk_id,
|
||||||
const FixedVector<int32_t>& offsets) const override {
|
const FixedVector<int32_t>& offsets) const override {
|
||||||
auto ca = SemiInlineGet(slot_->PinCells({chunk_id}));
|
auto ca = SemiInlineGet(slot_->PinCells(nullptr, {chunk_id}));
|
||||||
auto chunk = ca->get_cell_of(chunk_id);
|
auto chunk = ca->get_cell_of(chunk_id);
|
||||||
return PinWrapper<
|
return PinWrapper<
|
||||||
std::pair<std::vector<std::string_view>, FixedVector<bool>>>(
|
std::pair<std::vector<std::string_view>, FixedVector<bool>>>(
|
||||||
@ -507,7 +507,7 @@ class ChunkedVariableColumn : public ChunkedColumnBase {
|
|||||||
}
|
}
|
||||||
std::shared_ptr<CellAccessor<Chunk>> ca{nullptr};
|
std::shared_ptr<CellAccessor<Chunk>> ca{nullptr};
|
||||||
if (offsets == nullptr) {
|
if (offsets == nullptr) {
|
||||||
ca = SemiInlineGet(slot_->PinAllCells());
|
auto ca = SemiInlineGet(slot_->PinAllCells(nullptr));
|
||||||
for (int64_t i = 0; i < num_rows_; i++) {
|
for (int64_t i = 0; i < num_rows_; i++) {
|
||||||
auto [cid, offset_in_chunk] = GetChunkIDByOffset(i);
|
auto [cid, offset_in_chunk] = GetChunkIDByOffset(i);
|
||||||
auto chunk = ca->get_cell_of(cid);
|
auto chunk = ca->get_cell_of(cid);
|
||||||
@ -519,7 +519,7 @@ class ChunkedVariableColumn : public ChunkedColumnBase {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
auto [cids, offsets_in_chunk] = ToChunkIdAndOffset(offsets, count);
|
auto [cids, offsets_in_chunk] = ToChunkIdAndOffset(offsets, count);
|
||||||
ca = SemiInlineGet(slot_->PinCells(cids));
|
auto ca = SemiInlineGet(slot_->PinCells(nullptr, cids));
|
||||||
for (int64_t i = 0; i < count; i++) {
|
for (int64_t i = 0; i < count; i++) {
|
||||||
auto chunk = ca->get_cell_of(cids[i]);
|
auto chunk = ca->get_cell_of(cids[i]);
|
||||||
auto valid =
|
auto valid =
|
||||||
@ -545,7 +545,7 @@ class ChunkedVariableColumn : public ChunkedColumnBase {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
auto [cids, offsets_in_chunk] = ToChunkIdAndOffset(offsets, count);
|
auto [cids, offsets_in_chunk] = ToChunkIdAndOffset(offsets, count);
|
||||||
auto ca = SemiInlineGet(slot_->PinCells(cids));
|
auto ca = SemiInlineGet(slot_->PinCells(nullptr, cids));
|
||||||
for (int64_t i = 0; i < count; i++) {
|
for (int64_t i = 0; i < count; i++) {
|
||||||
auto chunk = ca->get_cell_of(cids[i]);
|
auto chunk = ca->get_cell_of(cids[i]);
|
||||||
auto valid = nullable_ ? chunk->isValid(offsets_in_chunk[i]) : true;
|
auto valid = nullable_ ? chunk->isValid(offsets_in_chunk[i]) : true;
|
||||||
@ -567,7 +567,7 @@ class ChunkedVariableColumn : public ChunkedColumnBase {
|
|||||||
"row_offsets and value_offsets must be provided");
|
"row_offsets and value_offsets must be provided");
|
||||||
|
|
||||||
auto [cids, offsets_in_chunk] = ToChunkIdAndOffset(row_offsets, count);
|
auto [cids, offsets_in_chunk] = ToChunkIdAndOffset(row_offsets, count);
|
||||||
auto ca = SemiInlineGet(slot_->PinCells(cids));
|
auto ca = SemiInlineGet(slot_->PinCells(nullptr, cids));
|
||||||
for (int64_t i = 0; i < count; i++) {
|
for (int64_t i = 0; i < count; i++) {
|
||||||
auto chunk = ca->get_cell_of(cids[i]);
|
auto chunk = ca->get_cell_of(cids[i]);
|
||||||
auto str_view = static_cast<StringChunk*>(chunk)->operator[](
|
auto str_view = static_cast<StringChunk*>(chunk)->operator[](
|
||||||
@ -593,7 +593,7 @@ class ChunkedArrayColumn : public ChunkedColumnBase {
|
|||||||
const int64_t* offsets,
|
const int64_t* offsets,
|
||||||
int64_t count) const override {
|
int64_t count) const override {
|
||||||
auto [cids, offsets_in_chunk] = ToChunkIdAndOffset(offsets, count);
|
auto [cids, offsets_in_chunk] = ToChunkIdAndOffset(offsets, count);
|
||||||
auto ca = SemiInlineGet(slot_->PinCells(cids));
|
auto ca = SemiInlineGet(slot_->PinCells(nullptr, cids));
|
||||||
for (int64_t i = 0; i < count; i++) {
|
for (int64_t i = 0; i < count; i++) {
|
||||||
auto array = static_cast<ArrayChunk*>(ca->get_cell_of(cids[i]))
|
auto array = static_cast<ArrayChunk*>(ca->get_cell_of(cids[i]))
|
||||||
->View(offsets_in_chunk[i])
|
->View(offsets_in_chunk[i])
|
||||||
@ -606,8 +606,8 @@ class ChunkedArrayColumn : public ChunkedColumnBase {
|
|||||||
ArrayViews(int64_t chunk_id,
|
ArrayViews(int64_t chunk_id,
|
||||||
std::optional<std::pair<int64_t, int64_t>> offset_len =
|
std::optional<std::pair<int64_t, int64_t>> offset_len =
|
||||||
std::nullopt) const override {
|
std::nullopt) const override {
|
||||||
auto ca =
|
auto ca = SemiInlineGet(
|
||||||
SemiInlineGet(slot_->PinCells({static_cast<cid_t>(chunk_id)}));
|
slot_->PinCells(nullptr, {static_cast<cid_t>(chunk_id)}));
|
||||||
auto chunk = ca->get_cell_of(chunk_id);
|
auto chunk = ca->get_cell_of(chunk_id);
|
||||||
return PinWrapper<std::pair<std::vector<ArrayView>, FixedVector<bool>>>(
|
return PinWrapper<std::pair<std::vector<ArrayView>, FixedVector<bool>>>(
|
||||||
ca, static_cast<ArrayChunk*>(chunk)->Views(offset_len));
|
ca, static_cast<ArrayChunk*>(chunk)->Views(offset_len));
|
||||||
@ -616,7 +616,7 @@ class ChunkedArrayColumn : public ChunkedColumnBase {
|
|||||||
PinWrapper<std::pair<std::vector<ArrayView>, FixedVector<bool>>>
|
PinWrapper<std::pair<std::vector<ArrayView>, FixedVector<bool>>>
|
||||||
ArrayViewsByOffsets(int64_t chunk_id,
|
ArrayViewsByOffsets(int64_t chunk_id,
|
||||||
const FixedVector<int32_t>& offsets) const override {
|
const FixedVector<int32_t>& offsets) const override {
|
||||||
auto ca = SemiInlineGet(slot_->PinCells({chunk_id}));
|
auto ca = SemiInlineGet(slot_->PinCells(nullptr, {chunk_id}));
|
||||||
auto chunk = ca->get_cell_of(chunk_id);
|
auto chunk = ca->get_cell_of(chunk_id);
|
||||||
return PinWrapper<std::pair<std::vector<ArrayView>, FixedVector<bool>>>(
|
return PinWrapper<std::pair<std::vector<ArrayView>, FixedVector<bool>>>(
|
||||||
ca, static_cast<ArrayChunk*>(chunk)->ViewsByOffsets(offsets));
|
ca, static_cast<ArrayChunk*>(chunk)->ViewsByOffsets(offsets));
|
||||||
@ -636,7 +636,7 @@ class ChunkedVectorArrayColumn : public ChunkedColumnBase {
|
|||||||
const int64_t* offsets,
|
const int64_t* offsets,
|
||||||
int64_t count) const override {
|
int64_t count) const override {
|
||||||
auto [cids, offsets_in_chunk] = ToChunkIdAndOffset(offsets, count);
|
auto [cids, offsets_in_chunk] = ToChunkIdAndOffset(offsets, count);
|
||||||
auto ca = SemiInlineGet(slot_->PinCells(cids));
|
auto ca = SemiInlineGet(slot_->PinCells(nullptr, cids));
|
||||||
for (int64_t i = 0; i < count; i++) {
|
for (int64_t i = 0; i < count; i++) {
|
||||||
auto array =
|
auto array =
|
||||||
static_cast<VectorArrayChunk*>(ca->get_cell_of(cids[i]))
|
static_cast<VectorArrayChunk*>(ca->get_cell_of(cids[i]))
|
||||||
@ -650,8 +650,8 @@ class ChunkedVectorArrayColumn : public ChunkedColumnBase {
|
|||||||
VectorArrayViews(int64_t chunk_id,
|
VectorArrayViews(int64_t chunk_id,
|
||||||
std::optional<std::pair<int64_t, int64_t>> offset_len =
|
std::optional<std::pair<int64_t, int64_t>> offset_len =
|
||||||
std::nullopt) const override {
|
std::nullopt) const override {
|
||||||
auto ca =
|
auto ca = SemiInlineGet(
|
||||||
SemiInlineGet(slot_->PinCells({static_cast<cid_t>(chunk_id)}));
|
slot_->PinCells(nullptr, {static_cast<cid_t>(chunk_id)}));
|
||||||
auto chunk = ca->get_cell_of(chunk_id);
|
auto chunk = ca->get_cell_of(chunk_id);
|
||||||
return PinWrapper<
|
return PinWrapper<
|
||||||
std::pair<std::vector<VectorArrayView>, FixedVector<bool>>>(
|
std::pair<std::vector<VectorArrayView>, FixedVector<bool>>>(
|
||||||
@ -660,8 +660,8 @@ class ChunkedVectorArrayColumn : public ChunkedColumnBase {
|
|||||||
|
|
||||||
PinWrapper<const size_t*>
|
PinWrapper<const size_t*>
|
||||||
VectorArrayLims(int64_t chunk_id) const override {
|
VectorArrayLims(int64_t chunk_id) const override {
|
||||||
auto ca =
|
auto ca = SemiInlineGet(
|
||||||
SemiInlineGet(slot_->PinCells({static_cast<cid_t>(chunk_id)}));
|
slot_->PinCells(nullptr, {static_cast<cid_t>(chunk_id)}));
|
||||||
auto chunk = ca->get_cell_of(chunk_id);
|
auto chunk = ca->get_cell_of(chunk_id);
|
||||||
return PinWrapper<const size_t*>(
|
return PinWrapper<const size_t*>(
|
||||||
ca, static_cast<VectorArrayChunk*>(chunk)->Lims());
|
ca, static_cast<VectorArrayChunk*>(chunk)->Lims());
|
||||||
|
|||||||
@ -67,20 +67,20 @@ class ChunkedColumnGroup {
|
|||||||
|
|
||||||
PinWrapper<GroupChunk*>
|
PinWrapper<GroupChunk*>
|
||||||
GetGroupChunk(int64_t chunk_id) const {
|
GetGroupChunk(int64_t chunk_id) const {
|
||||||
auto ca = SemiInlineGet(slot_->PinCells({chunk_id}));
|
auto ca = SemiInlineGet(slot_->PinCells(nullptr, {chunk_id}));
|
||||||
auto chunk = ca->get_cell_of(chunk_id);
|
auto chunk = ca->get_cell_of(chunk_id);
|
||||||
return PinWrapper<GroupChunk*>(ca, chunk);
|
return PinWrapper<GroupChunk*>(ca, chunk);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<CellAccessor<GroupChunk>>
|
std::shared_ptr<CellAccessor<GroupChunk>>
|
||||||
GetGroupChunks(std::vector<int64_t> chunk_ids) {
|
GetGroupChunks(std::vector<int64_t> chunk_ids) {
|
||||||
return SemiInlineGet(slot_->PinCells(chunk_ids));
|
return SemiInlineGet(slot_->PinCells(nullptr, chunk_ids));
|
||||||
}
|
}
|
||||||
|
|
||||||
// std::shared_ptr<CellAccessor<GroupChunk>>
|
// std::shared_ptr<CellAccessor<GroupChunk>>
|
||||||
std::vector<PinWrapper<GroupChunk*>>
|
std::vector<PinWrapper<GroupChunk*>>
|
||||||
GetAllGroupChunks() {
|
GetAllGroupChunks() {
|
||||||
auto ca = SemiInlineGet(slot_->PinAllCells());
|
auto ca = SemiInlineGet(slot_->PinAllCells(nullptr));
|
||||||
std::vector<PinWrapper<GroupChunk*>> ret;
|
std::vector<PinWrapper<GroupChunk*>> ret;
|
||||||
ret.reserve(num_chunks_);
|
ret.reserve(num_chunks_);
|
||||||
for (size_t i = 0; i < num_chunks_; i++) {
|
for (size_t i = 0; i < num_chunks_; i++) {
|
||||||
|
|||||||
@ -27,48 +27,6 @@
|
|||||||
#include "common/Tracer.h"
|
#include "common/Tracer.h"
|
||||||
namespace milvus::query {
|
namespace milvus::query {
|
||||||
|
|
||||||
namespace impl {
|
|
||||||
|
|
||||||
class ExecPlanNodeVisitor : PlanNodeVisitor {
|
|
||||||
public:
|
|
||||||
ExecPlanNodeVisitor(const segcore::SegmentInterface& segment,
|
|
||||||
Timestamp timestamp,
|
|
||||||
const PlaceholderGroup& placeholder_group,
|
|
||||||
int32_t consystency_level,
|
|
||||||
Timestamp collection_ttl)
|
|
||||||
: segment_(segment),
|
|
||||||
timestamp_(timestamp),
|
|
||||||
placeholder_group_(placeholder_group),
|
|
||||||
consystency_level_(consystency_level),
|
|
||||||
collection_ttl_timestamp_(collection_ttl_timestamp_) {
|
|
||||||
}
|
|
||||||
|
|
||||||
SearchResult
|
|
||||||
get_moved_result(PlanNode& node) {
|
|
||||||
assert(!search_result_opt_.has_value());
|
|
||||||
node.accept(*this);
|
|
||||||
assert(search_result_opt_.has_value());
|
|
||||||
auto ret = std::move(search_result_opt_).value();
|
|
||||||
search_result_opt_ = std::nullopt;
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
template <typename VectorType>
|
|
||||||
void
|
|
||||||
VectorVisitorImpl(VectorPlanNode& node);
|
|
||||||
|
|
||||||
private:
|
|
||||||
const segcore::SegmentInterface& segment_;
|
|
||||||
Timestamp timestamp_;
|
|
||||||
Timestamp collection_ttl_timestamp_;
|
|
||||||
const PlaceholderGroup& placeholder_group_;
|
|
||||||
|
|
||||||
SearchResultOpt search_result_opt_;
|
|
||||||
int32_t consystency_level_ = 0;
|
|
||||||
};
|
|
||||||
} // namespace impl
|
|
||||||
|
|
||||||
static SearchResult
|
static SearchResult
|
||||||
empty_search_result(int64_t num_queries) {
|
empty_search_result(int64_t num_queries) {
|
||||||
SearchResult final_result;
|
SearchResult final_result;
|
||||||
|
|||||||
@ -121,7 +121,8 @@ BruteForceSearch(const dataset::SearchDataset& query_ds,
|
|||||||
const std::map<std::string, std::string>& index_info,
|
const std::map<std::string, std::string>& index_info,
|
||||||
const BitsetView& bitset,
|
const BitsetView& bitset,
|
||||||
DataType data_type,
|
DataType data_type,
|
||||||
DataType element_type) {
|
DataType element_type,
|
||||||
|
milvus::OpContext* op_context) {
|
||||||
SubSearchResult sub_result(query_ds.num_queries,
|
SubSearchResult sub_result(query_ds.num_queries,
|
||||||
query_ds.topk,
|
query_ds.topk,
|
||||||
query_ds.metric_type,
|
query_ds.metric_type,
|
||||||
@ -158,23 +159,23 @@ BruteForceSearch(const dataset::SearchDataset& query_ds,
|
|||||||
knowhere::expected<knowhere::DataSetPtr> res;
|
knowhere::expected<knowhere::DataSetPtr> res;
|
||||||
if (data_type == DataType::VECTOR_FLOAT) {
|
if (data_type == DataType::VECTOR_FLOAT) {
|
||||||
res = knowhere::BruteForce::RangeSearch<float>(
|
res = knowhere::BruteForce::RangeSearch<float>(
|
||||||
base_dataset, query_dataset, search_cfg, bitset);
|
base_dataset, query_dataset, search_cfg, bitset, op_context);
|
||||||
} else if (data_type == DataType::VECTOR_FLOAT16) {
|
} else if (data_type == DataType::VECTOR_FLOAT16) {
|
||||||
res = knowhere::BruteForce::RangeSearch<float16>(
|
res = knowhere::BruteForce::RangeSearch<float16>(
|
||||||
base_dataset, query_dataset, search_cfg, bitset);
|
base_dataset, query_dataset, search_cfg, bitset, op_context);
|
||||||
} else if (data_type == DataType::VECTOR_BFLOAT16) {
|
} else if (data_type == DataType::VECTOR_BFLOAT16) {
|
||||||
res = knowhere::BruteForce::RangeSearch<bfloat16>(
|
res = knowhere::BruteForce::RangeSearch<bfloat16>(
|
||||||
base_dataset, query_dataset, search_cfg, bitset);
|
base_dataset, query_dataset, search_cfg, bitset, op_context);
|
||||||
} else if (data_type == DataType::VECTOR_BINARY) {
|
} else if (data_type == DataType::VECTOR_BINARY) {
|
||||||
res = knowhere::BruteForce::RangeSearch<bin1>(
|
res = knowhere::BruteForce::RangeSearch<bin1>(
|
||||||
base_dataset, query_dataset, search_cfg, bitset);
|
base_dataset, query_dataset, search_cfg, bitset, op_context);
|
||||||
} else if (data_type == DataType::VECTOR_SPARSE_U32_F32) {
|
} else if (data_type == DataType::VECTOR_SPARSE_U32_F32) {
|
||||||
res = knowhere::BruteForce::RangeSearch<
|
res = knowhere::BruteForce::RangeSearch<
|
||||||
knowhere::sparse::SparseRow<SparseValueType>>(
|
knowhere::sparse::SparseRow<SparseValueType>>(
|
||||||
base_dataset, query_dataset, search_cfg, bitset);
|
base_dataset, query_dataset, search_cfg, bitset, op_context);
|
||||||
} else if (data_type == DataType::VECTOR_INT8) {
|
} else if (data_type == DataType::VECTOR_INT8) {
|
||||||
res = knowhere::BruteForce::RangeSearch<int8>(
|
res = knowhere::BruteForce::RangeSearch<int8>(
|
||||||
base_dataset, query_dataset, search_cfg, bitset);
|
base_dataset, query_dataset, search_cfg, bitset, op_context);
|
||||||
} else {
|
} else {
|
||||||
ThrowInfo(
|
ThrowInfo(
|
||||||
ErrorCode::Unsupported,
|
ErrorCode::Unsupported,
|
||||||
@ -204,7 +205,8 @@ BruteForceSearch(const dataset::SearchDataset& query_ds,
|
|||||||
sub_result.mutable_seg_offsets().data(),
|
sub_result.mutable_seg_offsets().data(),
|
||||||
sub_result.mutable_distances().data(),
|
sub_result.mutable_distances().data(),
|
||||||
search_cfg,
|
search_cfg,
|
||||||
bitset);
|
bitset,
|
||||||
|
op_context);
|
||||||
} else if (data_type == DataType::VECTOR_FLOAT16) {
|
} else if (data_type == DataType::VECTOR_FLOAT16) {
|
||||||
stat = knowhere::BruteForce::SearchWithBuf<float16>(
|
stat = knowhere::BruteForce::SearchWithBuf<float16>(
|
||||||
base_dataset,
|
base_dataset,
|
||||||
@ -212,7 +214,8 @@ BruteForceSearch(const dataset::SearchDataset& query_ds,
|
|||||||
sub_result.mutable_seg_offsets().data(),
|
sub_result.mutable_seg_offsets().data(),
|
||||||
sub_result.mutable_distances().data(),
|
sub_result.mutable_distances().data(),
|
||||||
search_cfg,
|
search_cfg,
|
||||||
bitset);
|
bitset,
|
||||||
|
op_context);
|
||||||
} else if (data_type == DataType::VECTOR_BFLOAT16) {
|
} else if (data_type == DataType::VECTOR_BFLOAT16) {
|
||||||
stat = knowhere::BruteForce::SearchWithBuf<bfloat16>(
|
stat = knowhere::BruteForce::SearchWithBuf<bfloat16>(
|
||||||
base_dataset,
|
base_dataset,
|
||||||
@ -220,7 +223,8 @@ BruteForceSearch(const dataset::SearchDataset& query_ds,
|
|||||||
sub_result.mutable_seg_offsets().data(),
|
sub_result.mutable_seg_offsets().data(),
|
||||||
sub_result.mutable_distances().data(),
|
sub_result.mutable_distances().data(),
|
||||||
search_cfg,
|
search_cfg,
|
||||||
bitset);
|
bitset,
|
||||||
|
op_context);
|
||||||
} else if (data_type == DataType::VECTOR_BINARY) {
|
} else if (data_type == DataType::VECTOR_BINARY) {
|
||||||
stat = knowhere::BruteForce::SearchWithBuf<bin1>(
|
stat = knowhere::BruteForce::SearchWithBuf<bin1>(
|
||||||
base_dataset,
|
base_dataset,
|
||||||
@ -228,7 +232,8 @@ BruteForceSearch(const dataset::SearchDataset& query_ds,
|
|||||||
sub_result.mutable_seg_offsets().data(),
|
sub_result.mutable_seg_offsets().data(),
|
||||||
sub_result.mutable_distances().data(),
|
sub_result.mutable_distances().data(),
|
||||||
search_cfg,
|
search_cfg,
|
||||||
bitset);
|
bitset,
|
||||||
|
op_context);
|
||||||
} else if (data_type == DataType::VECTOR_SPARSE_U32_F32) {
|
} else if (data_type == DataType::VECTOR_SPARSE_U32_F32) {
|
||||||
stat = knowhere::BruteForce::SearchSparseWithBuf(
|
stat = knowhere::BruteForce::SearchSparseWithBuf(
|
||||||
base_dataset,
|
base_dataset,
|
||||||
@ -236,7 +241,8 @@ BruteForceSearch(const dataset::SearchDataset& query_ds,
|
|||||||
sub_result.mutable_seg_offsets().data(),
|
sub_result.mutable_seg_offsets().data(),
|
||||||
sub_result.mutable_distances().data(),
|
sub_result.mutable_distances().data(),
|
||||||
search_cfg,
|
search_cfg,
|
||||||
bitset);
|
bitset,
|
||||||
|
op_context);
|
||||||
} else if (data_type == DataType::VECTOR_INT8) {
|
} else if (data_type == DataType::VECTOR_INT8) {
|
||||||
stat = knowhere::BruteForce::SearchWithBuf<int8>(
|
stat = knowhere::BruteForce::SearchWithBuf<int8>(
|
||||||
base_dataset,
|
base_dataset,
|
||||||
@ -244,7 +250,8 @@ BruteForceSearch(const dataset::SearchDataset& query_ds,
|
|||||||
sub_result.mutable_seg_offsets().data(),
|
sub_result.mutable_seg_offsets().data(),
|
||||||
sub_result.mutable_distances().data(),
|
sub_result.mutable_distances().data(),
|
||||||
search_cfg,
|
search_cfg,
|
||||||
bitset);
|
bitset,
|
||||||
|
op_context);
|
||||||
} else {
|
} else {
|
||||||
ThrowInfo(ErrorCode::Unsupported,
|
ThrowInfo(ErrorCode::Unsupported,
|
||||||
"Unsupported dataType for chunk brute force search:{}",
|
"Unsupported dataType for chunk brute force search:{}",
|
||||||
|
|||||||
@ -14,6 +14,7 @@
|
|||||||
#include "common/BitsetView.h"
|
#include "common/BitsetView.h"
|
||||||
#include "common/FieldMeta.h"
|
#include "common/FieldMeta.h"
|
||||||
#include "common/QueryInfo.h"
|
#include "common/QueryInfo.h"
|
||||||
|
#include "common/OpContext.h"
|
||||||
#include "query/SubSearchResult.h"
|
#include "query/SubSearchResult.h"
|
||||||
#include "query/helper.h"
|
#include "query/helper.h"
|
||||||
|
|
||||||
@ -30,7 +31,8 @@ BruteForceSearch(const dataset::SearchDataset& query_ds,
|
|||||||
const std::map<std::string, std::string>& index_info,
|
const std::map<std::string, std::string>& index_info,
|
||||||
const BitsetView& bitset,
|
const BitsetView& bitset,
|
||||||
DataType data_type,
|
DataType data_type,
|
||||||
DataType element_type);
|
DataType element_type,
|
||||||
|
milvus::OpContext* op_context);
|
||||||
|
|
||||||
knowhere::expected<std::vector<knowhere::IndexNode::IteratorPtr>>
|
knowhere::expected<std::vector<knowhere::IndexNode::IteratorPtr>>
|
||||||
GetBruteForceSearchIterators(
|
GetBruteForceSearchIterators(
|
||||||
|
|||||||
@ -115,7 +115,8 @@ class TestSparseFloatSearchBruteForce : public ::testing::Test {
|
|||||||
index_info,
|
index_info,
|
||||||
bitset_view,
|
bitset_view,
|
||||||
DataType::VECTOR_SPARSE_U32_F32,
|
DataType::VECTOR_SPARSE_U32_F32,
|
||||||
DataType::NONE));
|
DataType::NONE,
|
||||||
|
nullptr));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
auto result = BruteForceSearch(query_dataset,
|
auto result = BruteForceSearch(query_dataset,
|
||||||
@ -124,7 +125,8 @@ class TestSparseFloatSearchBruteForce : public ::testing::Test {
|
|||||||
index_info,
|
index_info,
|
||||||
bitset_view,
|
bitset_view,
|
||||||
DataType::VECTOR_SPARSE_U32_F32,
|
DataType::VECTOR_SPARSE_U32_F32,
|
||||||
DataType::NONE);
|
DataType::NONE,
|
||||||
|
nullptr);
|
||||||
for (int i = 0; i < nq; i++) {
|
for (int i = 0; i < nq; i++) {
|
||||||
auto ref = SearchRef(base.get(), *(query.get() + i), nb, topk);
|
auto ref = SearchRef(base.get(), *(query.get() + i), nb, topk);
|
||||||
auto ans = result.get_seg_offsets() + i * topk;
|
auto ans = result.get_seg_offsets() + i * topk;
|
||||||
@ -139,7 +141,8 @@ class TestSparseFloatSearchBruteForce : public ::testing::Test {
|
|||||||
index_info,
|
index_info,
|
||||||
bitset_view,
|
bitset_view,
|
||||||
DataType::VECTOR_SPARSE_U32_F32,
|
DataType::VECTOR_SPARSE_U32_F32,
|
||||||
DataType::NONE);
|
DataType::NONE,
|
||||||
|
nullptr);
|
||||||
for (int i = 0; i < nq; i++) {
|
for (int i = 0; i < nq; i++) {
|
||||||
auto ref = RangeSearchRef(
|
auto ref = RangeSearchRef(
|
||||||
base.get(), *(query.get() + i), nb, 0.1, 0.5, topk);
|
base.get(), *(query.get() + i), nb, 0.1, 0.5, topk);
|
||||||
|
|||||||
@ -142,7 +142,8 @@ class TestFloatSearchBruteForce : public ::testing::Test {
|
|||||||
index_info,
|
index_info,
|
||||||
bitset_view,
|
bitset_view,
|
||||||
DataType::VECTOR_FLOAT,
|
DataType::VECTOR_FLOAT,
|
||||||
DataType::NONE);
|
DataType::NONE,
|
||||||
|
nullptr);
|
||||||
for (int i = 0; i < nq; i++) {
|
for (int i = 0; i < nq; i++) {
|
||||||
auto ref = Ref(base.data(),
|
auto ref = Ref(base.data(),
|
||||||
query.data() + i * dim,
|
query.data() + i * dim,
|
||||||
|
|||||||
@ -31,6 +31,7 @@ FloatSegmentIndexSearch(const segcore::SegmentGrowingImpl& segment,
|
|||||||
const void* query_data,
|
const void* query_data,
|
||||||
int64_t num_queries,
|
int64_t num_queries,
|
||||||
const BitsetView& bitset,
|
const BitsetView& bitset,
|
||||||
|
milvus::OpContext* op_context,
|
||||||
SearchResult& search_result) {
|
SearchResult& search_result) {
|
||||||
auto& schema = segment.get_schema();
|
auto& schema = segment.get_schema();
|
||||||
auto& indexing_record = segment.get_indexing_record();
|
auto& indexing_record = segment.get_indexing_record();
|
||||||
@ -62,6 +63,7 @@ FloatSegmentIndexSearch(const segcore::SegmentGrowingImpl& segment,
|
|||||||
*vec_index,
|
*vec_index,
|
||||||
search_conf,
|
search_conf,
|
||||||
bitset,
|
bitset,
|
||||||
|
op_context,
|
||||||
search_result,
|
search_result,
|
||||||
is_sparse);
|
is_sparse);
|
||||||
}
|
}
|
||||||
@ -75,6 +77,7 @@ SearchOnGrowing(const segcore::SegmentGrowingImpl& segment,
|
|||||||
int64_t num_queries,
|
int64_t num_queries,
|
||||||
Timestamp timestamp,
|
Timestamp timestamp,
|
||||||
const BitsetView& bitset,
|
const BitsetView& bitset,
|
||||||
|
milvus::OpContext* op_context,
|
||||||
SearchResult& search_result) {
|
SearchResult& search_result) {
|
||||||
auto& schema = segment.get_schema();
|
auto& schema = segment.get_schema();
|
||||||
auto& record = segment.get_insert_record();
|
auto& record = segment.get_insert_record();
|
||||||
@ -103,8 +106,13 @@ SearchOnGrowing(const segcore::SegmentGrowingImpl& segment,
|
|||||||
"vector array(embedding list) is not supported for growing segment "
|
"vector array(embedding list) is not supported for growing segment "
|
||||||
"indexing search");
|
"indexing search");
|
||||||
|
|
||||||
FloatSegmentIndexSearch(
|
FloatSegmentIndexSearch(segment,
|
||||||
segment, info, query_data, num_queries, bitset, search_result);
|
info,
|
||||||
|
query_data,
|
||||||
|
num_queries,
|
||||||
|
bitset,
|
||||||
|
op_context,
|
||||||
|
search_result);
|
||||||
} else {
|
} else {
|
||||||
std::shared_lock<std::shared_mutex> read_chunk_mutex(
|
std::shared_lock<std::shared_mutex> read_chunk_mutex(
|
||||||
segment.get_chunk_mutex());
|
segment.get_chunk_mutex());
|
||||||
@ -114,8 +122,13 @@ SearchOnGrowing(const segcore::SegmentGrowingImpl& segment,
|
|||||||
"vector array(embedding list) is not supported for "
|
"vector array(embedding list) is not supported for "
|
||||||
"growing segment indexing search");
|
"growing segment indexing search");
|
||||||
|
|
||||||
return FloatSegmentIndexSearch(
|
return FloatSegmentIndexSearch(segment,
|
||||||
segment, info, query_data, num_queries, bitset, search_result);
|
info,
|
||||||
|
query_data,
|
||||||
|
num_queries,
|
||||||
|
bitset,
|
||||||
|
op_context,
|
||||||
|
search_result);
|
||||||
}
|
}
|
||||||
SubSearchResult final_qr(num_queries, topk, metric_type, round_decimal);
|
SubSearchResult final_qr(num_queries, topk, metric_type, round_decimal);
|
||||||
// TODO(SPARSE): see todo in PlanImpl.h::PlaceHolder.
|
// TODO(SPARSE): see todo in PlanImpl.h::PlaceHolder.
|
||||||
@ -233,7 +246,8 @@ SearchOnGrowing(const segcore::SegmentGrowingImpl& segment,
|
|||||||
index_info,
|
index_info,
|
||||||
bitset,
|
bitset,
|
||||||
data_type,
|
data_type,
|
||||||
element_type);
|
element_type,
|
||||||
|
op_context);
|
||||||
final_qr.merge(sub_qr);
|
final_qr.merge(sub_qr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -12,6 +12,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "common/BitsetView.h"
|
#include "common/BitsetView.h"
|
||||||
|
#include "common/OpContext.h"
|
||||||
#include "segcore/SegmentGrowingImpl.h"
|
#include "segcore/SegmentGrowingImpl.h"
|
||||||
|
|
||||||
namespace milvus::query {
|
namespace milvus::query {
|
||||||
@ -24,6 +25,7 @@ SearchOnGrowing(const segcore::SegmentGrowingImpl& segment,
|
|||||||
int64_t num_queries,
|
int64_t num_queries,
|
||||||
Timestamp timestamp,
|
Timestamp timestamp,
|
||||||
const BitsetView& bitset,
|
const BitsetView& bitset,
|
||||||
|
milvus::OpContext* op_context,
|
||||||
SearchResult& search_result);
|
SearchResult& search_result);
|
||||||
|
|
||||||
} // namespace milvus::query
|
} // namespace milvus::query
|
||||||
|
|||||||
@ -19,6 +19,7 @@ SearchOnIndex(const dataset::SearchDataset& search_dataset,
|
|||||||
const index::VectorIndex& indexing,
|
const index::VectorIndex& indexing,
|
||||||
const SearchInfo& search_conf,
|
const SearchInfo& search_conf,
|
||||||
const BitsetView& bitset,
|
const BitsetView& bitset,
|
||||||
|
milvus::OpContext* op_context,
|
||||||
SearchResult& search_result,
|
SearchResult& search_result,
|
||||||
bool is_sparse) {
|
bool is_sparse) {
|
||||||
auto num_queries = search_dataset.num_queries;
|
auto num_queries = search_dataset.num_queries;
|
||||||
@ -43,7 +44,7 @@ SearchOnIndex(const dataset::SearchDataset& search_dataset,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
indexing.Query(dataset, search_conf, bitset, search_result);
|
indexing.Query(dataset, search_conf, bitset, op_context, search_result);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace milvus::query
|
} // namespace milvus::query
|
||||||
|
|||||||
@ -24,6 +24,7 @@ SearchOnIndex(const dataset::SearchDataset& search_dataset,
|
|||||||
const index::VectorIndex& indexing,
|
const index::VectorIndex& indexing,
|
||||||
const SearchInfo& search_conf,
|
const SearchInfo& search_conf,
|
||||||
const BitsetView& bitset,
|
const BitsetView& bitset,
|
||||||
|
milvus::OpContext* op_context,
|
||||||
SearchResult& search_result,
|
SearchResult& search_result,
|
||||||
bool is_sparse = false);
|
bool is_sparse = false);
|
||||||
|
|
||||||
|
|||||||
@ -34,6 +34,7 @@ SearchOnSealedIndex(const Schema& schema,
|
|||||||
const size_t* query_lims,
|
const size_t* query_lims,
|
||||||
int64_t num_queries,
|
int64_t num_queries,
|
||||||
const BitsetView& bitset,
|
const BitsetView& bitset,
|
||||||
|
milvus::OpContext* op_context,
|
||||||
SearchResult& search_result) {
|
SearchResult& search_result) {
|
||||||
auto topK = search_info.topk_;
|
auto topK = search_info.topk_;
|
||||||
auto round_decimal = search_info.round_decimal_;
|
auto round_decimal = search_info.round_decimal_;
|
||||||
@ -66,7 +67,8 @@ SearchOnSealedIndex(const Schema& schema,
|
|||||||
}
|
}
|
||||||
|
|
||||||
dataset->SetIsSparse(is_sparse);
|
dataset->SetIsSparse(is_sparse);
|
||||||
auto accessor = SemiInlineGet(field_indexing->indexing_->PinCells({0}));
|
auto accessor =
|
||||||
|
SemiInlineGet(field_indexing->indexing_->PinCells(nullptr, {0}));
|
||||||
auto vec_index =
|
auto vec_index =
|
||||||
dynamic_cast<index::VectorIndex*>(accessor->get_cell_of(0));
|
dynamic_cast<index::VectorIndex*>(accessor->get_cell_of(0));
|
||||||
|
|
||||||
@ -83,7 +85,8 @@ SearchOnSealedIndex(const Schema& schema,
|
|||||||
search_result,
|
search_result,
|
||||||
bitset,
|
bitset,
|
||||||
*vec_index)) {
|
*vec_index)) {
|
||||||
vec_index->Query(dataset, search_info, bitset, search_result);
|
vec_index->Query(
|
||||||
|
dataset, search_info, bitset, op_context, search_result);
|
||||||
float* distances = search_result.distances_.data();
|
float* distances = search_result.distances_.data();
|
||||||
auto total_num = num_queries * topK;
|
auto total_num = num_queries * topK;
|
||||||
if (round_decimal != -1) {
|
if (round_decimal != -1) {
|
||||||
@ -108,6 +111,7 @@ SearchOnSealedColumn(const Schema& schema,
|
|||||||
int64_t num_queries,
|
int64_t num_queries,
|
||||||
int64_t row_count,
|
int64_t row_count,
|
||||||
const BitsetView& bitview,
|
const BitsetView& bitview,
|
||||||
|
milvus::OpContext* op_context,
|
||||||
SearchResult& result) {
|
SearchResult& result) {
|
||||||
auto field_id = search_info.field_id_;
|
auto field_id = search_info.field_id_;
|
||||||
auto& field = schema[field_id];
|
auto& field = schema[field_id];
|
||||||
@ -182,7 +186,8 @@ SearchOnSealedColumn(const Schema& schema,
|
|||||||
index_info,
|
index_info,
|
||||||
bitview,
|
bitview,
|
||||||
data_type,
|
data_type,
|
||||||
element_type);
|
element_type,
|
||||||
|
op_context);
|
||||||
final_qr.merge(sub_qr);
|
final_qr.merge(sub_qr);
|
||||||
}
|
}
|
||||||
offset += chunk_size;
|
offset += chunk_size;
|
||||||
|
|||||||
@ -26,6 +26,7 @@ SearchOnSealedIndex(const Schema& schema,
|
|||||||
const size_t* query_lims,
|
const size_t* query_lims,
|
||||||
int64_t num_queries,
|
int64_t num_queries,
|
||||||
const BitsetView& view,
|
const BitsetView& view,
|
||||||
|
milvus::OpContext* op_context,
|
||||||
SearchResult& search_result);
|
SearchResult& search_result);
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -38,6 +39,7 @@ SearchOnSealedColumn(const Schema& schema,
|
|||||||
int64_t num_queries,
|
int64_t num_queries,
|
||||||
int64_t row_count,
|
int64_t row_count,
|
||||||
const BitsetView& bitset,
|
const BitsetView& bitset,
|
||||||
|
milvus::OpContext* op_context,
|
||||||
SearchResult& result);
|
SearchResult& result);
|
||||||
|
|
||||||
} // namespace milvus::query
|
} // namespace milvus::query
|
||||||
|
|||||||
@ -685,7 +685,8 @@ ChunkedSegmentSealedImpl::GetNgramIndex(FieldId field_id) const {
|
|||||||
auto slot = iter->second.get();
|
auto slot = iter->second.get();
|
||||||
lck.unlock();
|
lck.unlock();
|
||||||
|
|
||||||
auto ca = SemiInlineGet(slot->PinCells({0}));
|
milvus::OpContext ctx;
|
||||||
|
auto ca = SemiInlineGet(slot->PinCells(&ctx, {0}));
|
||||||
auto index = dynamic_cast<index::NgramInvertedIndex*>(ca->get_cell_of(0));
|
auto index = dynamic_cast<index::NgramInvertedIndex*>(ca->get_cell_of(0));
|
||||||
AssertInfo(index != nullptr,
|
AssertInfo(index != nullptr,
|
||||||
"ngram index cache is corrupted, field_id: {}",
|
"ngram index cache is corrupted, field_id: {}",
|
||||||
@ -706,7 +707,8 @@ ChunkedSegmentSealedImpl::GetNgramIndexForJson(
|
|||||||
|
|
||||||
auto slot = iter->second.at(nested_path).get();
|
auto slot = iter->second.at(nested_path).get();
|
||||||
|
|
||||||
auto ca = SemiInlineGet(slot->PinCells({0}));
|
milvus::OpContext ctx;
|
||||||
|
auto ca = SemiInlineGet(slot->PinCells(&ctx, {0}));
|
||||||
auto index =
|
auto index =
|
||||||
dynamic_cast<index::NgramInvertedIndex*>(ca->get_cell_of(0));
|
dynamic_cast<index::NgramInvertedIndex*>(ca->get_cell_of(0));
|
||||||
AssertInfo(index != nullptr,
|
AssertInfo(index != nullptr,
|
||||||
@ -749,6 +751,7 @@ ChunkedSegmentSealedImpl::vector_search(SearchInfo& search_info,
|
|||||||
int64_t query_count,
|
int64_t query_count,
|
||||||
Timestamp timestamp,
|
Timestamp timestamp,
|
||||||
const BitsetView& bitset,
|
const BitsetView& bitset,
|
||||||
|
milvus::OpContext* op_context,
|
||||||
SearchResult& output) const {
|
SearchResult& output) const {
|
||||||
AssertInfo(is_system_field_ready(), "System field is not ready");
|
AssertInfo(is_system_field_ready(), "System field is not ready");
|
||||||
auto field_id = search_info.field_id_;
|
auto field_id = search_info.field_id_;
|
||||||
@ -774,6 +777,7 @@ ChunkedSegmentSealedImpl::vector_search(SearchInfo& search_info,
|
|||||||
query_lims,
|
query_lims,
|
||||||
query_count,
|
query_count,
|
||||||
bitset,
|
bitset,
|
||||||
|
op_context,
|
||||||
output);
|
output);
|
||||||
milvus::tracer::AddEvent(
|
milvus::tracer::AddEvent(
|
||||||
"finish_searching_vector_temperate_binlog_index");
|
"finish_searching_vector_temperate_binlog_index");
|
||||||
@ -788,6 +792,7 @@ ChunkedSegmentSealedImpl::vector_search(SearchInfo& search_info,
|
|||||||
query_lims,
|
query_lims,
|
||||||
query_count,
|
query_count,
|
||||||
bitset,
|
bitset,
|
||||||
|
op_context,
|
||||||
output);
|
output);
|
||||||
milvus::tracer::AddEvent("finish_searching_vector_index");
|
milvus::tracer::AddEvent("finish_searching_vector_index");
|
||||||
} else {
|
} else {
|
||||||
@ -816,6 +821,7 @@ ChunkedSegmentSealedImpl::vector_search(SearchInfo& search_info,
|
|||||||
query_count,
|
query_count,
|
||||||
row_count,
|
row_count,
|
||||||
bitset,
|
bitset,
|
||||||
|
op_context,
|
||||||
output);
|
output);
|
||||||
milvus::tracer::AddEvent("finish_searching_vector_data");
|
milvus::tracer::AddEvent("finish_searching_vector_data");
|
||||||
}
|
}
|
||||||
@ -837,7 +843,8 @@ ChunkedSegmentSealedImpl::get_vector(FieldId field_id,
|
|||||||
"vector index is not ready");
|
"vector index is not ready");
|
||||||
auto field_indexing = vector_indexings_.get_field_indexing(field_id);
|
auto field_indexing = vector_indexings_.get_field_indexing(field_id);
|
||||||
auto cache_index = field_indexing->indexing_;
|
auto cache_index = field_indexing->indexing_;
|
||||||
auto ca = SemiInlineGet(cache_index->PinCells({0}));
|
milvus::OpContext ctx;
|
||||||
|
auto ca = SemiInlineGet(cache_index->PinCells(&ctx, {0}));
|
||||||
auto vec_index = dynamic_cast<index::VectorIndex*>(ca->get_cell_of(0));
|
auto vec_index = dynamic_cast<index::VectorIndex*>(ca->get_cell_of(0));
|
||||||
AssertInfo(vec_index, "invalid vector indexing");
|
AssertInfo(vec_index, "invalid vector indexing");
|
||||||
|
|
||||||
@ -1612,8 +1619,9 @@ ChunkedSegmentSealedImpl::CreateTextIndex(FieldId field_id) {
|
|||||||
"index are found");
|
"index are found");
|
||||||
return iter;
|
return iter;
|
||||||
});
|
});
|
||||||
|
milvus::OpContext ctx;
|
||||||
auto accessor =
|
auto accessor =
|
||||||
SemiInlineGet(field_index_iter->second->PinCells({0}));
|
SemiInlineGet(field_index_iter->second->PinCells(&ctx, {0}));
|
||||||
auto ptr = accessor->get_cell_of(0);
|
auto ptr = accessor->get_cell_of(0);
|
||||||
AssertInfo(ptr->HasRawData(),
|
AssertInfo(ptr->HasRawData(),
|
||||||
"text raw data not found, trying to create text index "
|
"text raw data not found, trying to create text index "
|
||||||
|
|||||||
@ -92,7 +92,7 @@ class ChunkedSegmentSealedImpl : public SegmentSealed {
|
|||||||
if (iter == scalar_indexings->end()) {
|
if (iter == scalar_indexings->end()) {
|
||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
auto ca = SemiInlineGet(iter->second->PinCells({0}));
|
auto ca = SemiInlineGet(iter->second->PinCells(nullptr, {0}));
|
||||||
auto index = ca->get_cell_of(0);
|
auto index = ca->get_cell_of(0);
|
||||||
return {PinWrapper<const index::IndexBase*>(ca, index)};
|
return {PinWrapper<const index::IndexBase*>(ca, index)};
|
||||||
}
|
}
|
||||||
@ -425,6 +425,7 @@ class ChunkedSegmentSealedImpl : public SegmentSealed {
|
|||||||
int64_t query_count,
|
int64_t query_count,
|
||||||
Timestamp timestamp,
|
Timestamp timestamp,
|
||||||
const BitsetView& bitset,
|
const BitsetView& bitset,
|
||||||
|
milvus::OpContext* op_context,
|
||||||
SearchResult& output) const override;
|
SearchResult& output) const override;
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|||||||
@ -124,7 +124,7 @@ TEST(test_chunk_segment, TestSearchOnSealed) {
|
|||||||
auto query_data = col_query_data.data();
|
auto query_data = col_query_data.data();
|
||||||
auto index_info = std::map<std::string, std::string>{};
|
auto index_info = std::map<std::string, std::string>{};
|
||||||
SearchResult search_result;
|
SearchResult search_result;
|
||||||
|
milvus::OpContext op_context;
|
||||||
query::SearchOnSealedColumn(*schema,
|
query::SearchOnSealedColumn(*schema,
|
||||||
column.get(),
|
column.get(),
|
||||||
search_info,
|
search_info,
|
||||||
@ -134,6 +134,7 @@ TEST(test_chunk_segment, TestSearchOnSealed) {
|
|||||||
1,
|
1,
|
||||||
total_row_count,
|
total_row_count,
|
||||||
bv,
|
bv,
|
||||||
|
&op_context,
|
||||||
search_result);
|
search_result);
|
||||||
|
|
||||||
std::set<int64_t> offsets;
|
std::set<int64_t> offsets;
|
||||||
@ -160,6 +161,7 @@ TEST(test_chunk_segment, TestSearchOnSealed) {
|
|||||||
1,
|
1,
|
||||||
total_row_count,
|
total_row_count,
|
||||||
bv,
|
bv,
|
||||||
|
&op_context,
|
||||||
search_result);
|
search_result);
|
||||||
|
|
||||||
ASSERT_EQ(1, search_result.vector_iterators_->size());
|
ASSERT_EQ(1, search_result.vector_iterators_->size());
|
||||||
|
|||||||
@ -322,3 +322,101 @@ TEST(CApiTest, StreamReduceGroupBY) {
|
|||||||
DeleteStreamSearchReducer(c_search_stream_reducer);
|
DeleteStreamSearchReducer(c_search_stream_reducer);
|
||||||
DeleteStreamSearchReducer(nullptr);
|
DeleteStreamSearchReducer(nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(CApiTest, ReduceSearchResultsAndFillDataCost) {
|
||||||
|
int N = 100;
|
||||||
|
int topK = 10;
|
||||||
|
int num_queries = 2;
|
||||||
|
|
||||||
|
auto collection = NewCollection(get_default_schema_config().c_str());
|
||||||
|
|
||||||
|
CSegmentInterface segment;
|
||||||
|
auto status = NewSegment(collection, Growing, -1, &segment, false);
|
||||||
|
ASSERT_EQ(status.error_code, Success);
|
||||||
|
|
||||||
|
auto schema = ((milvus::segcore::Collection*)collection)->get_schema();
|
||||||
|
auto dataset = DataGen(schema, N, 77, 0, 1, 10, true);
|
||||||
|
int64_t offset;
|
||||||
|
PreInsert(segment, N, &offset);
|
||||||
|
auto insert_data = serialize(dataset.raw_);
|
||||||
|
auto ins_res = Insert(segment,
|
||||||
|
offset,
|
||||||
|
N,
|
||||||
|
dataset.row_ids_.data(),
|
||||||
|
dataset.timestamps_.data(),
|
||||||
|
insert_data.data(),
|
||||||
|
insert_data.size());
|
||||||
|
ASSERT_EQ(ins_res.error_code, Success);
|
||||||
|
|
||||||
|
auto fmt = boost::format(R"(vector_anns: <
|
||||||
|
field_id: 100
|
||||||
|
query_info: <
|
||||||
|
topk: %1%
|
||||||
|
metric_type: "L2"
|
||||||
|
search_params: "{\"nprobe\": 10}"
|
||||||
|
>
|
||||||
|
placeholder_tag: "$0">
|
||||||
|
output_field_ids: 100)") %
|
||||||
|
topK;
|
||||||
|
auto serialized_expr_plan = fmt.str();
|
||||||
|
auto blob = generate_query_data(num_queries);
|
||||||
|
void* plan = nullptr;
|
||||||
|
auto binary_plan =
|
||||||
|
translate_text_plan_to_binary_plan(serialized_expr_plan.data());
|
||||||
|
status = CreateSearchPlanByExpr(
|
||||||
|
collection, binary_plan.data(), binary_plan.size(), &plan);
|
||||||
|
ASSERT_EQ(status.error_code, Success);
|
||||||
|
void* placeholderGroup = nullptr;
|
||||||
|
|
||||||
|
status = ParsePlaceholderGroup(
|
||||||
|
plan, blob.data(), blob.length(), &placeholderGroup);
|
||||||
|
ASSERT_EQ(status.error_code, Success);
|
||||||
|
|
||||||
|
dataset.timestamps_.clear();
|
||||||
|
dataset.timestamps_.push_back(1);
|
||||||
|
CSearchResult res;
|
||||||
|
auto stats = CSearch(
|
||||||
|
segment, plan, placeholderGroup, dataset.timestamps_[N - 1], &res);
|
||||||
|
ASSERT_EQ(stats.error_code, Success);
|
||||||
|
|
||||||
|
// Reduce and fetch blob + scanned bytes
|
||||||
|
std::vector<int64_t> slice_nqs{num_queries};
|
||||||
|
std::vector<int64_t> slice_topKs{topK};
|
||||||
|
CSearchResultDataBlobs c_search_result_data_blobs;
|
||||||
|
uint8_t trace_id[16] = {0};
|
||||||
|
uint8_t span_id[8] = {0};
|
||||||
|
CTraceContext trace{
|
||||||
|
.traceID = trace_id,
|
||||||
|
.spanID = span_id,
|
||||||
|
.traceFlags = 0,
|
||||||
|
};
|
||||||
|
auto st = ReduceSearchResultsAndFillData(trace,
|
||||||
|
&c_search_result_data_blobs,
|
||||||
|
plan,
|
||||||
|
&res,
|
||||||
|
1,
|
||||||
|
slice_nqs.data(),
|
||||||
|
slice_topKs.data(),
|
||||||
|
slice_nqs.size());
|
||||||
|
ASSERT_EQ(st.error_code, Success);
|
||||||
|
|
||||||
|
CProto blob_proto;
|
||||||
|
int64_t scanned_remote_bytes = 0;
|
||||||
|
int64_t scanned_total_bytes = 0;
|
||||||
|
auto st2 = GetSearchResultDataBlob(&blob_proto,
|
||||||
|
&scanned_remote_bytes,
|
||||||
|
&scanned_total_bytes,
|
||||||
|
c_search_result_data_blobs,
|
||||||
|
0);
|
||||||
|
ASSERT_EQ(st2.error_code, Success);
|
||||||
|
ASSERT_EQ(scanned_remote_bytes, 0);
|
||||||
|
ASSERT_EQ(scanned_total_bytes, scanned_remote_bytes);
|
||||||
|
ASSERT_GT(blob_proto.proto_size, 0);
|
||||||
|
|
||||||
|
DeleteSearchResultDataBlobs(c_search_result_data_blobs);
|
||||||
|
DeleteSearchResult(res);
|
||||||
|
DeletePlaceholderGroup(placeholderGroup);
|
||||||
|
DeleteSearchPlan(plan);
|
||||||
|
DeleteSegment(segment);
|
||||||
|
DeleteCollection(collection);
|
||||||
|
}
|
||||||
|
|||||||
@ -679,6 +679,7 @@ SegmentGrowingImpl::vector_search(SearchInfo& search_info,
|
|||||||
int64_t query_count,
|
int64_t query_count,
|
||||||
Timestamp timestamp,
|
Timestamp timestamp,
|
||||||
const BitsetView& bitset,
|
const BitsetView& bitset,
|
||||||
|
milvus::OpContext* op_context,
|
||||||
SearchResult& output) const {
|
SearchResult& output) const {
|
||||||
query::SearchOnGrowing(*this,
|
query::SearchOnGrowing(*this,
|
||||||
search_info,
|
search_info,
|
||||||
@ -687,6 +688,7 @@ SegmentGrowingImpl::vector_search(SearchInfo& search_info,
|
|||||||
query_count,
|
query_count,
|
||||||
timestamp,
|
timestamp,
|
||||||
bitset,
|
bitset,
|
||||||
|
op_context,
|
||||||
output);
|
output);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -329,6 +329,7 @@ class SegmentGrowingImpl : public SegmentGrowing {
|
|||||||
int64_t query_count,
|
int64_t query_count,
|
||||||
Timestamp timestamp,
|
Timestamp timestamp,
|
||||||
const BitsetView& bitset,
|
const BitsetView& bitset,
|
||||||
|
milvus::OpContext* op_context,
|
||||||
SearchResult& output) const override;
|
SearchResult& output) const override;
|
||||||
|
|
||||||
DataType
|
DataType
|
||||||
|
|||||||
@ -23,6 +23,7 @@
|
|||||||
#include "cachinglayer/CacheSlot.h"
|
#include "cachinglayer/CacheSlot.h"
|
||||||
#include "common/EasyAssert.h"
|
#include "common/EasyAssert.h"
|
||||||
#include "common/Json.h"
|
#include "common/Json.h"
|
||||||
|
#include "common/OpContext.h"
|
||||||
#include "common/Schema.h"
|
#include "common/Schema.h"
|
||||||
#include "common/Span.h"
|
#include "common/Span.h"
|
||||||
#include "common/SystemProperty.h"
|
#include "common/SystemProperty.h"
|
||||||
@ -363,6 +364,7 @@ class SegmentInternalInterface : public SegmentInterface {
|
|||||||
int64_t query_count,
|
int64_t query_count,
|
||||||
Timestamp timestamp,
|
Timestamp timestamp,
|
||||||
const BitsetView& bitset,
|
const BitsetView& bitset,
|
||||||
|
milvus::OpContext* op_context,
|
||||||
SearchResult& output) const = 0;
|
SearchResult& output) const = 0;
|
||||||
|
|
||||||
virtual void
|
virtual void
|
||||||
|
|||||||
@ -113,7 +113,7 @@ class SegmentSealed : public SegmentInternalInterface {
|
|||||||
if (best_match == nullptr) {
|
if (best_match == nullptr) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
auto ca = SemiInlineGet(best_match->PinCells({0}));
|
auto ca = SemiInlineGet(best_match->PinCells(nullptr, {0}));
|
||||||
auto index = ca->get_cell_of(0);
|
auto index = ca->get_cell_of(0);
|
||||||
return PinWrapper<const index::IndexBase*>(ca, index);
|
return PinWrapper<const index::IndexBase*>(ca, index);
|
||||||
});
|
});
|
||||||
|
|||||||
@ -244,7 +244,8 @@ Test_Indexing_Without_Predicate() {
|
|||||||
auto search_plan = reinterpret_cast<milvus::query::Plan*>(plan);
|
auto search_plan = reinterpret_cast<milvus::query::Plan*>(plan);
|
||||||
SearchInfo search_info = search_plan->plan_node_->search_info_;
|
SearchInfo search_info = search_plan->plan_node_->search_info_;
|
||||||
SearchResult result_on_index;
|
SearchResult result_on_index;
|
||||||
vec_index->Query(query_dataset, search_info, nullptr, result_on_index);
|
vec_index->Query(
|
||||||
|
query_dataset, search_info, nullptr, nullptr, result_on_index);
|
||||||
auto ids = result_on_index.seg_offsets_.data();
|
auto ids = result_on_index.seg_offsets_.data();
|
||||||
auto dis = result_on_index.distances_.data();
|
auto dis = result_on_index.distances_.data();
|
||||||
std::vector<int64_t> vec_ids(ids, ids + TOPK * num_queries);
|
std::vector<int64_t> vec_ids(ids, ids + TOPK * num_queries);
|
||||||
@ -400,7 +401,8 @@ TEST(CApiTest, Indexing_Expr_Without_Predicate) {
|
|||||||
auto search_plan = reinterpret_cast<milvus::query::Plan*>(plan);
|
auto search_plan = reinterpret_cast<milvus::query::Plan*>(plan);
|
||||||
SearchInfo search_info = search_plan->plan_node_->search_info_;
|
SearchInfo search_info = search_plan->plan_node_->search_info_;
|
||||||
SearchResult result_on_index;
|
SearchResult result_on_index;
|
||||||
vec_index->Query(query_dataset, search_info, nullptr, result_on_index);
|
vec_index->Query(
|
||||||
|
query_dataset, search_info, nullptr, nullptr, result_on_index);
|
||||||
auto ids = result_on_index.seg_offsets_.data();
|
auto ids = result_on_index.seg_offsets_.data();
|
||||||
auto dis = result_on_index.distances_.data();
|
auto dis = result_on_index.distances_.data();
|
||||||
std::vector<int64_t> vec_ids(ids, ids + TOPK * num_queries);
|
std::vector<int64_t> vec_ids(ids, ids + TOPK * num_queries);
|
||||||
@ -578,7 +580,8 @@ TEST(CApiTest, Indexing_With_float_Predicate_Range) {
|
|||||||
auto search_plan = reinterpret_cast<milvus::query::Plan*>(plan);
|
auto search_plan = reinterpret_cast<milvus::query::Plan*>(plan);
|
||||||
SearchInfo search_info = search_plan->plan_node_->search_info_;
|
SearchInfo search_info = search_plan->plan_node_->search_info_;
|
||||||
SearchResult result_on_index;
|
SearchResult result_on_index;
|
||||||
vec_index->Query(query_dataset, search_info, nullptr, result_on_index);
|
vec_index->Query(
|
||||||
|
query_dataset, search_info, nullptr, nullptr, result_on_index);
|
||||||
auto ids = result_on_index.seg_offsets_.data();
|
auto ids = result_on_index.seg_offsets_.data();
|
||||||
auto dis = result_on_index.distances_.data();
|
auto dis = result_on_index.distances_.data();
|
||||||
std::vector<int64_t> vec_ids(ids, ids + TOPK * num_queries);
|
std::vector<int64_t> vec_ids(ids, ids + TOPK * num_queries);
|
||||||
@ -758,7 +761,8 @@ TEST(CApiTest, Indexing_Expr_With_float_Predicate_Range) {
|
|||||||
auto search_plan = reinterpret_cast<milvus::query::Plan*>(plan);
|
auto search_plan = reinterpret_cast<milvus::query::Plan*>(plan);
|
||||||
SearchInfo search_info = search_plan->plan_node_->search_info_;
|
SearchInfo search_info = search_plan->plan_node_->search_info_;
|
||||||
SearchResult result_on_index;
|
SearchResult result_on_index;
|
||||||
vec_index->Query(query_dataset, search_info, nullptr, result_on_index);
|
vec_index->Query(
|
||||||
|
query_dataset, search_info, nullptr, nullptr, result_on_index);
|
||||||
auto ids = result_on_index.seg_offsets_.data();
|
auto ids = result_on_index.seg_offsets_.data();
|
||||||
auto dis = result_on_index.distances_.data();
|
auto dis = result_on_index.distances_.data();
|
||||||
std::vector<int64_t> vec_ids(ids, ids + TOPK * num_queries);
|
std::vector<int64_t> vec_ids(ids, ids + TOPK * num_queries);
|
||||||
@ -930,7 +934,8 @@ TEST(CApiTest, Indexing_With_float_Predicate_Term) {
|
|||||||
auto search_plan = reinterpret_cast<milvus::query::Plan*>(plan);
|
auto search_plan = reinterpret_cast<milvus::query::Plan*>(plan);
|
||||||
SearchInfo search_info = search_plan->plan_node_->search_info_;
|
SearchInfo search_info = search_plan->plan_node_->search_info_;
|
||||||
SearchResult result_on_index;
|
SearchResult result_on_index;
|
||||||
vec_index->Query(query_dataset, search_info, nullptr, result_on_index);
|
vec_index->Query(
|
||||||
|
query_dataset, search_info, nullptr, nullptr, result_on_index);
|
||||||
auto ids = result_on_index.seg_offsets_.data();
|
auto ids = result_on_index.seg_offsets_.data();
|
||||||
auto dis = result_on_index.distances_.data();
|
auto dis = result_on_index.distances_.data();
|
||||||
std::vector<int64_t> vec_ids(ids, ids + TOPK * num_queries);
|
std::vector<int64_t> vec_ids(ids, ids + TOPK * num_queries);
|
||||||
@ -1103,7 +1108,8 @@ TEST(CApiTest, Indexing_Expr_With_float_Predicate_Term) {
|
|||||||
auto search_plan = reinterpret_cast<milvus::query::Plan*>(plan);
|
auto search_plan = reinterpret_cast<milvus::query::Plan*>(plan);
|
||||||
SearchInfo search_info = search_plan->plan_node_->search_info_;
|
SearchInfo search_info = search_plan->plan_node_->search_info_;
|
||||||
SearchResult result_on_index;
|
SearchResult result_on_index;
|
||||||
vec_index->Query(query_dataset, search_info, nullptr, result_on_index);
|
vec_index->Query(
|
||||||
|
query_dataset, search_info, nullptr, nullptr, result_on_index);
|
||||||
auto ids = result_on_index.seg_offsets_.data();
|
auto ids = result_on_index.seg_offsets_.data();
|
||||||
auto dis = result_on_index.distances_.data();
|
auto dis = result_on_index.distances_.data();
|
||||||
std::vector<int64_t> vec_ids(ids, ids + TOPK * num_queries);
|
std::vector<int64_t> vec_ids(ids, ids + TOPK * num_queries);
|
||||||
@ -1285,7 +1291,8 @@ TEST(CApiTest, Indexing_With_binary_Predicate_Range) {
|
|||||||
auto search_plan = reinterpret_cast<milvus::query::Plan*>(plan);
|
auto search_plan = reinterpret_cast<milvus::query::Plan*>(plan);
|
||||||
SearchInfo search_info = search_plan->plan_node_->search_info_;
|
SearchInfo search_info = search_plan->plan_node_->search_info_;
|
||||||
SearchResult result_on_index;
|
SearchResult result_on_index;
|
||||||
vec_index->Query(query_dataset, search_info, nullptr, result_on_index);
|
vec_index->Query(
|
||||||
|
query_dataset, search_info, nullptr, nullptr, result_on_index);
|
||||||
auto ids = result_on_index.seg_offsets_.data();
|
auto ids = result_on_index.seg_offsets_.data();
|
||||||
auto dis = result_on_index.distances_.data();
|
auto dis = result_on_index.distances_.data();
|
||||||
std::vector<int64_t> vec_ids(ids, ids + TOPK * num_queries);
|
std::vector<int64_t> vec_ids(ids, ids + TOPK * num_queries);
|
||||||
@ -1467,7 +1474,8 @@ TEST(CApiTest, Indexing_Expr_With_binary_Predicate_Range) {
|
|||||||
auto search_plan = reinterpret_cast<milvus::query::Plan*>(plan);
|
auto search_plan = reinterpret_cast<milvus::query::Plan*>(plan);
|
||||||
SearchInfo search_info = search_plan->plan_node_->search_info_;
|
SearchInfo search_info = search_plan->plan_node_->search_info_;
|
||||||
SearchResult result_on_index;
|
SearchResult result_on_index;
|
||||||
vec_index->Query(query_dataset, search_info, nullptr, result_on_index);
|
vec_index->Query(
|
||||||
|
query_dataset, search_info, nullptr, nullptr, result_on_index);
|
||||||
auto ids = result_on_index.seg_offsets_.data();
|
auto ids = result_on_index.seg_offsets_.data();
|
||||||
auto dis = result_on_index.distances_.data();
|
auto dis = result_on_index.distances_.data();
|
||||||
std::vector<int64_t> vec_ids(ids, ids + TOPK * num_queries);
|
std::vector<int64_t> vec_ids(ids, ids + TOPK * num_queries);
|
||||||
@ -1643,7 +1651,8 @@ TEST(CApiTest, Indexing_With_binary_Predicate_Term) {
|
|||||||
auto search_plan = reinterpret_cast<milvus::query::Plan*>(plan);
|
auto search_plan = reinterpret_cast<milvus::query::Plan*>(plan);
|
||||||
SearchInfo search_info = search_plan->plan_node_->search_info_;
|
SearchInfo search_info = search_plan->plan_node_->search_info_;
|
||||||
SearchResult result_on_index;
|
SearchResult result_on_index;
|
||||||
vec_index->Query(query_dataset, search_info, nullptr, result_on_index);
|
vec_index->Query(
|
||||||
|
query_dataset, search_info, nullptr, nullptr, result_on_index);
|
||||||
auto ids = result_on_index.seg_offsets_.data();
|
auto ids = result_on_index.seg_offsets_.data();
|
||||||
auto dis = result_on_index.distances_.data();
|
auto dis = result_on_index.distances_.data();
|
||||||
std::vector<int64_t> vec_ids(ids, ids + TOPK * num_queries);
|
std::vector<int64_t> vec_ids(ids, ids + TOPK * num_queries);
|
||||||
@ -1842,7 +1851,8 @@ TEST(CApiTest, Indexing_Expr_With_binary_Predicate_Term) {
|
|||||||
auto search_plan = reinterpret_cast<milvus::query::Plan*>(plan);
|
auto search_plan = reinterpret_cast<milvus::query::Plan*>(plan);
|
||||||
SearchInfo search_info = search_plan->plan_node_->search_info_;
|
SearchInfo search_info = search_plan->plan_node_->search_info_;
|
||||||
SearchResult result_on_index;
|
SearchResult result_on_index;
|
||||||
vec_index->Query(query_dataset, search_info, nullptr, result_on_index);
|
vec_index->Query(
|
||||||
|
query_dataset, search_info, nullptr, nullptr, result_on_index);
|
||||||
auto ids = result_on_index.seg_offsets_.data();
|
auto ids = result_on_index.seg_offsets_.data();
|
||||||
auto dis = result_on_index.distances_.data();
|
auto dis = result_on_index.distances_.data();
|
||||||
std::vector<int64_t> vec_ids(ids, ids + TOPK * num_queries);
|
std::vector<int64_t> vec_ids(ids, ids + TOPK * num_queries);
|
||||||
|
|||||||
@ -37,6 +37,7 @@ ReduceHelper::Initialize() {
|
|||||||
|
|
||||||
// prefix sum, get slices offsets
|
// prefix sum, get slices offsets
|
||||||
AssertInfo(num_slices_ > 0, "empty slice_nqs is not allowed");
|
AssertInfo(num_slices_ > 0, "empty slice_nqs is not allowed");
|
||||||
|
AssertInfo(total_nq_ > 0, "empty nq is not allowed");
|
||||||
slice_nqs_prefix_sum_.resize(num_slices_ + 1);
|
slice_nqs_prefix_sum_.resize(num_slices_ + 1);
|
||||||
std::partial_sum(slice_nqs_.begin(),
|
std::partial_sum(slice_nqs_.begin(),
|
||||||
slice_nqs_.end(),
|
slice_nqs_.end(),
|
||||||
@ -55,10 +56,11 @@ ReduceHelper::Initialize() {
|
|||||||
|
|
||||||
void
|
void
|
||||||
ReduceHelper::Reduce() {
|
ReduceHelper::Reduce() {
|
||||||
FillPrimaryKey();
|
GetTotalStorageCost();
|
||||||
|
FillPrimaryKey(); // retrieve primary keys, need to record the cost
|
||||||
ReduceResultData();
|
ReduceResultData();
|
||||||
RefreshSearchResults();
|
RefreshSearchResults();
|
||||||
FillEntryData();
|
FillEntryData(); // retrieve other scalar data, need to record the cost
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -68,9 +70,12 @@ ReduceHelper::Marshal() {
|
|||||||
search_result_data_blobs_ =
|
search_result_data_blobs_ =
|
||||||
std::make_unique<milvus::segcore::SearchResultDataBlobs>();
|
std::make_unique<milvus::segcore::SearchResultDataBlobs>();
|
||||||
search_result_data_blobs_->blobs.resize(num_slices_);
|
search_result_data_blobs_->blobs.resize(num_slices_);
|
||||||
|
search_result_data_blobs_->costs.resize(num_slices_);
|
||||||
for (int i = 0; i < num_slices_; i++) {
|
for (int i = 0; i < num_slices_; i++) {
|
||||||
auto proto = GetSearchResultDataSlice(i);
|
auto [proto, cost] =
|
||||||
search_result_data_blobs_->blobs[i] = proto;
|
GetSearchResultDataSlice(i, total_search_storage_cost_);
|
||||||
|
search_result_data_blobs_->blobs[i] = std::move(proto);
|
||||||
|
search_result_data_blobs_->costs[i] = cost;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -138,6 +143,7 @@ ReduceHelper::FillPrimaryKey() {
|
|||||||
search_result->seg_offsets_.size());
|
search_result->seg_offsets_.size());
|
||||||
auto segment = static_cast<SegmentInterface*>(search_result->segment_);
|
auto segment = static_cast<SegmentInterface*>(search_result->segment_);
|
||||||
if (search_result->get_total_result_count() > 0) {
|
if (search_result->get_total_result_count() > 0) {
|
||||||
|
// TODO: support storage usage recording in op_context
|
||||||
segment->FillPrimaryKeys(plan_, *search_result);
|
segment->FillPrimaryKeys(plan_, *search_result);
|
||||||
search_results_[valid_index++] = search_result;
|
search_results_[valid_index++] = search_result;
|
||||||
}
|
}
|
||||||
@ -192,6 +198,7 @@ ReduceHelper::FillEntryData() {
|
|||||||
search_result->segment_);
|
search_result->segment_);
|
||||||
std::chrono::high_resolution_clock::time_point get_target_entry_start =
|
std::chrono::high_resolution_clock::time_point get_target_entry_start =
|
||||||
std::chrono::high_resolution_clock::now();
|
std::chrono::high_resolution_clock::now();
|
||||||
|
// TODO: support storage usage recording in op_context
|
||||||
segment->FillTargetEntry(plan_, *search_result);
|
segment->FillTargetEntry(plan_, *search_result);
|
||||||
std::chrono::high_resolution_clock::time_point get_target_entry_end =
|
std::chrono::high_resolution_clock::time_point get_target_entry_end =
|
||||||
std::chrono::high_resolution_clock::now();
|
std::chrono::high_resolution_clock::now();
|
||||||
@ -307,8 +314,9 @@ ReduceHelper::FillOtherData(
|
|||||||
//simple batch reduce do nothing for other data
|
//simple batch reduce do nothing for other data
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<char>
|
std::pair<std::vector<char>, StorageCost>
|
||||||
ReduceHelper::GetSearchResultDataSlice(int slice_index) {
|
ReduceHelper::GetSearchResultDataSlice(const int slice_index,
|
||||||
|
const StorageCost& total_cost) {
|
||||||
auto nq_begin = slice_nqs_prefix_sum_[slice_index];
|
auto nq_begin = slice_nqs_prefix_sum_[slice_index];
|
||||||
auto nq_end = slice_nqs_prefix_sum_[slice_index + 1];
|
auto nq_end = slice_nqs_prefix_sum_[slice_index + 1];
|
||||||
|
|
||||||
@ -322,6 +330,8 @@ ReduceHelper::GetSearchResultDataSlice(int slice_index) {
|
|||||||
search_result->topk_per_nq_prefix_sum_[nq_begin];
|
search_result->topk_per_nq_prefix_sum_[nq_begin];
|
||||||
all_search_count += search_result->total_data_cnt_;
|
all_search_count += search_result->total_data_cnt_;
|
||||||
}
|
}
|
||||||
|
// calculate the cost based on this slice's nq and total nq
|
||||||
|
StorageCost cost = total_cost * (1.0 * (nq_end - nq_begin) / total_nq_);
|
||||||
|
|
||||||
auto search_result_data =
|
auto search_result_data =
|
||||||
std::make_unique<milvus::proto::schema::SearchResultData>();
|
std::make_unique<milvus::proto::schema::SearchResultData>();
|
||||||
@ -448,13 +458,19 @@ ReduceHelper::GetSearchResultDataSlice(int slice_index) {
|
|||||||
search_result_data->mutable_fields_data()->AddAllocated(
|
search_result_data->mutable_fields_data()->AddAllocated(
|
||||||
field_data.release());
|
field_data.release());
|
||||||
}
|
}
|
||||||
|
|
||||||
// SearchResultData to blob
|
// SearchResultData to blob
|
||||||
auto size = search_result_data->ByteSizeLong();
|
auto size = search_result_data->ByteSizeLong();
|
||||||
auto buffer = std::vector<char>(size);
|
auto buffer = std::vector<char>(size);
|
||||||
search_result_data->SerializePartialToArray(buffer.data(), size);
|
search_result_data->SerializePartialToArray(buffer.data(), size);
|
||||||
|
|
||||||
return buffer;
|
return {std::move(buffer), cost};
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ReduceHelper::GetTotalStorageCost() {
|
||||||
|
for (auto search_result : search_results_) {
|
||||||
|
total_search_storage_cost_ += search_result->search_storage_cost_;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace milvus::segcore
|
} // namespace milvus::segcore
|
||||||
|
|||||||
@ -29,7 +29,8 @@ namespace milvus::segcore {
|
|||||||
|
|
||||||
// SearchResultDataBlobs contains the marshal blobs of many `milvus::proto::schema::SearchResultData`
|
// SearchResultDataBlobs contains the marshal blobs of many `milvus::proto::schema::SearchResultData`
|
||||||
struct SearchResultDataBlobs {
|
struct SearchResultDataBlobs {
|
||||||
std::vector<std::vector<char>> blobs;
|
std::vector<std::vector<char>> blobs; // the marshal blobs of each slice
|
||||||
|
std::vector<StorageCost> costs; // the cost of each slice
|
||||||
};
|
};
|
||||||
|
|
||||||
class ReduceHelper {
|
class ReduceHelper {
|
||||||
@ -96,8 +97,12 @@ class ReduceHelper {
|
|||||||
void
|
void
|
||||||
FillEntryData();
|
FillEntryData();
|
||||||
|
|
||||||
std::vector<char>
|
std::pair<std::vector<char>, StorageCost>
|
||||||
GetSearchResultDataSlice(int slice_index_);
|
GetSearchResultDataSlice(const int slice_index,
|
||||||
|
const StorageCost& total_cost);
|
||||||
|
|
||||||
|
void
|
||||||
|
GetTotalStorageCost();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
std::vector<SearchResult*>& search_results_;
|
std::vector<SearchResult*>& search_results_;
|
||||||
@ -117,6 +122,7 @@ class ReduceHelper {
|
|||||||
// output
|
// output
|
||||||
std::unique_ptr<SearchResultDataBlobs> search_result_data_blobs_;
|
std::unique_ptr<SearchResultDataBlobs> search_result_data_blobs_;
|
||||||
tracer::TraceContext* trace_ctx_;
|
tracer::TraceContext* trace_ctx_;
|
||||||
|
StorageCost total_search_storage_cost_;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace milvus::segcore
|
} // namespace milvus::segcore
|
||||||
|
|||||||
@ -171,6 +171,7 @@ StreamReducerHelper::AssembleMergedResult() {
|
|||||||
|
|
||||||
void
|
void
|
||||||
StreamReducerHelper::MergeReduce() {
|
StreamReducerHelper::MergeReduce() {
|
||||||
|
GetTotalStorageCost();
|
||||||
FilterSearchResults();
|
FilterSearchResults();
|
||||||
FillPrimaryKeys();
|
FillPrimaryKeys();
|
||||||
InitializeReduceRecords();
|
InitializeReduceRecords();
|
||||||
@ -189,9 +190,12 @@ StreamReducerHelper::SerializeMergedResult() {
|
|||||||
"Wrong state for num_slice in streamReducer, num_slice:{}",
|
"Wrong state for num_slice in streamReducer, num_slice:{}",
|
||||||
num_slice_);
|
num_slice_);
|
||||||
search_result_blobs->blobs.resize(num_slice_);
|
search_result_blobs->blobs.resize(num_slice_);
|
||||||
|
search_result_blobs->costs.resize(num_slice_);
|
||||||
for (int i = 0; i < num_slice_; i++) {
|
for (int i = 0; i < num_slice_; i++) {
|
||||||
auto proto = GetSearchResultDataSlice(i);
|
auto [proto, cost] =
|
||||||
search_result_blobs->blobs[i] = proto;
|
GetSearchResultDataSlice(i, total_search_storage_cost_);
|
||||||
|
search_result_blobs->blobs[i] = std::move(proto);
|
||||||
|
search_result_blobs->costs[i] = cost;
|
||||||
}
|
}
|
||||||
return search_result_blobs.release();
|
return search_result_blobs.release();
|
||||||
}
|
}
|
||||||
@ -527,8 +531,9 @@ StreamReducerHelper::RefreshSearchResult() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<char>
|
std::pair<std::vector<char>, StorageCost>
|
||||||
StreamReducerHelper::GetSearchResultDataSlice(int slice_index) {
|
StreamReducerHelper::GetSearchResultDataSlice(int slice_index,
|
||||||
|
const StorageCost& total_cost) {
|
||||||
auto nq_begin = slice_nqs_prefix_sum_[slice_index];
|
auto nq_begin = slice_nqs_prefix_sum_[slice_index];
|
||||||
auto nq_end = slice_nqs_prefix_sum_[slice_index + 1];
|
auto nq_end = slice_nqs_prefix_sum_[slice_index + 1];
|
||||||
|
|
||||||
@ -555,6 +560,7 @@ StreamReducerHelper::GetSearchResultDataSlice(int slice_index) {
|
|||||||
result_count = merged_search_result->topk_per_nq_prefix_sum_[nq_end] -
|
result_count = merged_search_result->topk_per_nq_prefix_sum_[nq_end] -
|
||||||
merged_search_result->topk_per_nq_prefix_sum_[nq_begin];
|
merged_search_result->topk_per_nq_prefix_sum_[nq_begin];
|
||||||
}
|
}
|
||||||
|
StorageCost cost = total_cost * (1.0 * (nq_end - nq_begin) / total_nq_);
|
||||||
|
|
||||||
// `result_pairs` contains the SearchResult and result_offset info, used for filling output fields
|
// `result_pairs` contains the SearchResult and result_offset info, used for filling output fields
|
||||||
std::vector<MergeBase> result_pairs(result_count);
|
std::vector<MergeBase> result_pairs(result_count);
|
||||||
@ -690,7 +696,14 @@ StreamReducerHelper::GetSearchResultDataSlice(int slice_index) {
|
|||||||
auto size = search_result_data->ByteSizeLong();
|
auto size = search_result_data->ByteSizeLong();
|
||||||
auto buffer = std::vector<char>(size);
|
auto buffer = std::vector<char>(size);
|
||||||
search_result_data->SerializePartialToArray(buffer.data(), size);
|
search_result_data->SerializePartialToArray(buffer.data(), size);
|
||||||
return buffer;
|
return {std::move(buffer), cost};
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
StreamReducerHelper::GetTotalStorageCost() {
|
||||||
|
for (auto search_result : search_results_to_merge_) {
|
||||||
|
total_search_storage_cost_ += search_result->search_storage_cost_;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|||||||
@ -152,6 +152,7 @@ class StreamReducerHelper {
|
|||||||
slice_nqs_.end(),
|
slice_nqs_.end(),
|
||||||
slice_nqs_prefix_sum_.begin() + 1);
|
slice_nqs_prefix_sum_.begin() + 1);
|
||||||
total_nq_ = slice_nqs_prefix_sum_[num_slice_];
|
total_nq_ = slice_nqs_prefix_sum_[num_slice_];
|
||||||
|
AssertInfo(total_nq_ > 0, "empty nq is not allowed");
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -196,8 +197,12 @@ class StreamReducerHelper {
|
|||||||
void
|
void
|
||||||
AssembleMergedResult();
|
AssembleMergedResult();
|
||||||
|
|
||||||
std::vector<char>
|
std::pair<std::vector<char>, StorageCost>
|
||||||
GetSearchResultDataSlice(int slice_index);
|
GetSearchResultDataSlice(const int slice_index,
|
||||||
|
const StorageCost& total_cost);
|
||||||
|
|
||||||
|
void
|
||||||
|
GetTotalStorageCost();
|
||||||
|
|
||||||
void
|
void
|
||||||
CleanReduceStatus();
|
CleanReduceStatus();
|
||||||
@ -218,5 +223,6 @@ class StreamReducerHelper {
|
|||||||
std::unordered_set<milvus::GroupByValueType> group_by_val_set_;
|
std::unordered_set<milvus::GroupByValueType> group_by_val_set_;
|
||||||
std::vector<std::vector<std::vector<int64_t>>> final_search_records_;
|
std::vector<std::vector<std::vector<int64_t>>> final_search_records_;
|
||||||
int64_t total_nq_{0};
|
int64_t total_nq_{0};
|
||||||
|
StorageCost total_search_storage_cost_;
|
||||||
};
|
};
|
||||||
} // namespace milvus::segcore
|
} // namespace milvus::segcore
|
||||||
|
|||||||
@ -137,6 +137,8 @@ ReduceSearchResultsAndFillData(CTraceContext c_trace,
|
|||||||
|
|
||||||
CStatus
|
CStatus
|
||||||
GetSearchResultDataBlob(CProto* searchResultDataBlob,
|
GetSearchResultDataBlob(CProto* searchResultDataBlob,
|
||||||
|
int64_t* scanned_remote_bytes,
|
||||||
|
int64_t* scanned_total_bytes,
|
||||||
CSearchResultDataBlobs cSearchResultDataBlobs,
|
CSearchResultDataBlobs cSearchResultDataBlobs,
|
||||||
int32_t blob_index) {
|
int32_t blob_index) {
|
||||||
SCOPE_CGO_CALL_METRIC();
|
SCOPE_CGO_CALL_METRIC();
|
||||||
@ -151,6 +153,10 @@ GetSearchResultDataBlob(CProto* searchResultDataBlob,
|
|||||||
search_result_data_blobs->blobs[blob_index].data();
|
search_result_data_blobs->blobs[blob_index].data();
|
||||||
searchResultDataBlob->proto_size =
|
searchResultDataBlob->proto_size =
|
||||||
search_result_data_blobs->blobs[blob_index].size();
|
search_result_data_blobs->blobs[blob_index].size();
|
||||||
|
*scanned_remote_bytes =
|
||||||
|
search_result_data_blobs->costs[blob_index].scanned_remote_bytes;
|
||||||
|
*scanned_total_bytes =
|
||||||
|
search_result_data_blobs->costs[blob_index].scanned_total_bytes;
|
||||||
return milvus::SuccessCStatus();
|
return milvus::SuccessCStatus();
|
||||||
} catch (std::exception& e) {
|
} catch (std::exception& e) {
|
||||||
searchResultDataBlob->proto_blob = nullptr;
|
searchResultDataBlob->proto_blob = nullptr;
|
||||||
|
|||||||
@ -48,6 +48,8 @@ ReduceSearchResultsAndFillData(CTraceContext c_trace,
|
|||||||
|
|
||||||
CStatus
|
CStatus
|
||||||
GetSearchResultDataBlob(CProto* searchResultDataBlob,
|
GetSearchResultDataBlob(CProto* searchResultDataBlob,
|
||||||
|
int64_t* scanned_remote_bytes,
|
||||||
|
int64_t* scanned_total_bytes,
|
||||||
CSearchResultDataBlobs cSearchResultDataBlobs,
|
CSearchResultDataBlobs cSearchResultDataBlobs,
|
||||||
int32_t blob_index);
|
int32_t blob_index);
|
||||||
|
|
||||||
|
|||||||
@ -1219,7 +1219,8 @@ TEST(CApiTest, SealedSegment_search_float_Predicate_Range) {
|
|||||||
search_info.search_params_ = generate_search_conf(
|
search_info.search_params_ = generate_search_conf(
|
||||||
IndexEnum::INDEX_FAISS_IVFSQ8, knowhere::metric::L2);
|
IndexEnum::INDEX_FAISS_IVFSQ8, knowhere::metric::L2);
|
||||||
SearchResult result_on_index;
|
SearchResult result_on_index;
|
||||||
vec_index->Query(query_dataset, search_info, nullptr, result_on_index);
|
vec_index->Query(
|
||||||
|
query_dataset, search_info, nullptr, nullptr, result_on_index);
|
||||||
EXPECT_EQ(result_on_index.distances_.size(), num_queries * TOPK);
|
EXPECT_EQ(result_on_index.distances_.size(), num_queries * TOPK);
|
||||||
|
|
||||||
auto cm = milvus::storage::RemoteChunkManagerSingleton::GetInstance()
|
auto cm = milvus::storage::RemoteChunkManagerSingleton::GetInstance()
|
||||||
@ -1454,7 +1455,8 @@ TEST(CApiTest, SealedSegment_search_float_With_Expr_Predicate_Range) {
|
|||||||
auto search_plan = reinterpret_cast<milvus::query::Plan*>(plan);
|
auto search_plan = reinterpret_cast<milvus::query::Plan*>(plan);
|
||||||
SearchInfo search_info = search_plan->plan_node_->search_info_;
|
SearchInfo search_info = search_plan->plan_node_->search_info_;
|
||||||
SearchResult result_on_index;
|
SearchResult result_on_index;
|
||||||
vec_index->Query(query_dataset, search_info, nullptr, result_on_index);
|
vec_index->Query(
|
||||||
|
query_dataset, search_info, nullptr, nullptr, result_on_index);
|
||||||
auto ids = result_on_index.seg_offsets_.data();
|
auto ids = result_on_index.seg_offsets_.data();
|
||||||
auto dis = result_on_index.distances_.data();
|
auto dis = result_on_index.distances_.data();
|
||||||
std::vector<int64_t> vec_ids(ids, ids + TOPK * num_queries);
|
std::vector<int64_t> vec_ids(ids, ids + TOPK * num_queries);
|
||||||
|
|||||||
@ -84,6 +84,13 @@ class ChunkTranslator : public milvus::cachinglayer::Translator<milvus::Chunk> {
|
|||||||
return &meta_;
|
return &meta_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: implement this
|
||||||
|
int64_t
|
||||||
|
cells_storage_bytes(
|
||||||
|
const std::vector<milvus::cachinglayer::cid_t>& cids) const override {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::vector<FileInfo> file_infos_;
|
std::vector<FileInfo> file_infos_;
|
||||||
int64_t segment_id_;
|
int64_t segment_id_;
|
||||||
|
|||||||
@ -52,6 +52,13 @@ class DefaultValueChunkTranslator
|
|||||||
return &meta_;
|
return &meta_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: implement this
|
||||||
|
int64_t
|
||||||
|
cells_storage_bytes(
|
||||||
|
const std::vector<milvus::cachinglayer::cid_t>& cids) const override {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int64_t segment_id_;
|
int64_t segment_id_;
|
||||||
std::string key_;
|
std::string key_;
|
||||||
|
|||||||
@ -48,12 +48,13 @@ std::pair<milvus::cachinglayer::ResourceUsage,
|
|||||||
milvus::cachinglayer::ResourceUsage>
|
milvus::cachinglayer::ResourceUsage>
|
||||||
InterimSealedIndexTranslator::estimated_byte_size_of_cell(
|
InterimSealedIndexTranslator::estimated_byte_size_of_cell(
|
||||||
milvus::cachinglayer::cid_t cid) const {
|
milvus::cachinglayer::cid_t cid) const {
|
||||||
auto size = vec_data_->DataByteSize();
|
int64_t size = vec_data_->DataByteSize();
|
||||||
auto row_count = vec_data_->NumRows();
|
int64_t row_count = vec_data_->NumRows();
|
||||||
// TODO: hack, move these estimate logic to knowhere
|
// TODO: hack, move these estimate logic to knowhere
|
||||||
// ignore the size of centroids
|
// ignore the size of centroids
|
||||||
if (index_type_ == knowhere::IndexEnum::INDEX_FAISS_SCANN_DVR) {
|
if (index_type_ == knowhere::IndexEnum::INDEX_FAISS_SCANN_DVR) {
|
||||||
auto vec_size = size_t(index::GetValueFromConfig<int>(
|
int64_t vec_size =
|
||||||
|
int64_t(index::GetValueFromConfig<int>(
|
||||||
build_config_, knowhere::indexparam::SUB_DIM)
|
build_config_, knowhere::indexparam::SUB_DIM)
|
||||||
.value() /
|
.value() /
|
||||||
8 * dim_);
|
8 * dim_);
|
||||||
@ -70,7 +71,7 @@ InterimSealedIndexTranslator::estimated_byte_size_of_cell(
|
|||||||
{static_cast<int64_t>(vec_size * row_count + size * 0.5), 0}};
|
{static_cast<int64_t>(vec_size * row_count + size * 0.5), 0}};
|
||||||
} else if (index_type_ == knowhere::IndexEnum::INDEX_FAISS_IVFFLAT_CC) {
|
} else if (index_type_ == knowhere::IndexEnum::INDEX_FAISS_IVFFLAT_CC) {
|
||||||
// fp16/bf16 all use float32 to build index
|
// fp16/bf16 all use float32 to build index
|
||||||
auto fp32_size = row_count * sizeof(float) * dim_;
|
int64_t fp32_size = row_count * sizeof(float) * dim_;
|
||||||
return {{fp32_size, 0},
|
return {{fp32_size, 0},
|
||||||
{static_cast<int64_t>(fp32_size + fp32_size * 0.5), 0}};
|
{static_cast<int64_t>(fp32_size + fp32_size * 0.5), 0}};
|
||||||
} else {
|
} else {
|
||||||
@ -95,6 +96,7 @@ InterimSealedIndexTranslator::get_cells(
|
|||||||
vec_data_](size_t id) {
|
vec_data_](size_t id) {
|
||||||
const void* data;
|
const void* data;
|
||||||
int64_t data_id = id;
|
int64_t data_id = id;
|
||||||
|
|
||||||
field_raw_data_ptr->BulkValueAt(
|
field_raw_data_ptr->BulkValueAt(
|
||||||
[&data, &data_id](const char* value, size_t i) {
|
[&data, &data_id](const char* value, size_t i) {
|
||||||
data = static_cast<const void*>(value);
|
data = static_cast<const void*>(value);
|
||||||
|
|||||||
@ -44,6 +44,13 @@ class InterimSealedIndexTranslator
|
|||||||
Meta*
|
Meta*
|
||||||
meta() override;
|
meta() override;
|
||||||
|
|
||||||
|
// TODO: implement this
|
||||||
|
int64_t
|
||||||
|
cells_storage_bytes(
|
||||||
|
const std::vector<milvus::cachinglayer::cid_t>& cids) const override {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::shared_ptr<ChunkedColumnInterface> vec_data_;
|
std::shared_ptr<ChunkedColumnInterface> vec_data_;
|
||||||
std::string segment_id_;
|
std::string segment_id_;
|
||||||
|
|||||||
@ -75,8 +75,10 @@ SealedIndexTranslator::estimated_byte_size_of_cell(
|
|||||||
index_load_info_.num_rows,
|
index_load_info_.num_rows,
|
||||||
index_load_info_.dim);
|
index_load_info_.dim);
|
||||||
// this is an estimation, error could be up to 20%.
|
// this is an estimation, error could be up to 20%.
|
||||||
return {{request.final_memory_cost, request.final_disk_cost},
|
return {milvus::cachinglayer::ResourceUsage(request.final_memory_cost,
|
||||||
{request.max_memory_cost, request.max_disk_cost}};
|
request.final_disk_cost),
|
||||||
|
milvus::cachinglayer::ResourceUsage(request.max_memory_cost,
|
||||||
|
request.max_disk_cost)};
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::string&
|
const std::string&
|
||||||
@ -100,7 +102,8 @@ SealedIndexTranslator::get_cells(const std::vector<cid_t>& cids) {
|
|||||||
index_load_info_.enable_mmap,
|
index_load_info_.enable_mmap,
|
||||||
index_load_info_.num_rows,
|
index_load_info_.num_rows,
|
||||||
index_load_info_.dim);
|
index_load_info_.dim);
|
||||||
index->SetCellSize({request.final_memory_cost, request.final_disk_cost});
|
index->SetCellSize(milvus::cachinglayer::ResourceUsage(
|
||||||
|
request.final_memory_cost, request.final_disk_cost));
|
||||||
if (index_load_info_.enable_mmap && index->IsMmapSupported()) {
|
if (index_load_info_.enable_mmap && index->IsMmapSupported()) {
|
||||||
AssertInfo(!index_load_info_.mmap_dir_path.empty(),
|
AssertInfo(!index_load_info_.mmap_dir_path.empty(),
|
||||||
"mmap directory path is empty");
|
"mmap directory path is empty");
|
||||||
|
|||||||
@ -41,6 +41,13 @@ class SealedIndexTranslator
|
|||||||
Meta*
|
Meta*
|
||||||
meta() override;
|
meta() override;
|
||||||
|
|
||||||
|
// TODO: implement this
|
||||||
|
int64_t
|
||||||
|
cells_storage_bytes(
|
||||||
|
const std::vector<milvus::cachinglayer::cid_t>& cids) const override {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
struct IndexLoadInfo {
|
struct IndexLoadInfo {
|
||||||
bool enable_mmap;
|
bool enable_mmap;
|
||||||
|
|||||||
@ -40,6 +40,13 @@ class V1SealedIndexTranslator : public Translator<milvus::index::IndexBase> {
|
|||||||
Meta*
|
Meta*
|
||||||
meta() override;
|
meta() override;
|
||||||
|
|
||||||
|
// TODO: implement this
|
||||||
|
int64_t
|
||||||
|
cells_storage_bytes(
|
||||||
|
const std::vector<milvus::cachinglayer::cid_t>& cids) const override {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
struct IndexLoadInfo {
|
struct IndexLoadInfo {
|
||||||
bool enable_mmap;
|
bool enable_mmap;
|
||||||
|
|||||||
@ -75,6 +75,12 @@ class GroupChunkTranslator
|
|||||||
return &meta_;
|
return &meta_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int64_t
|
||||||
|
cells_storage_bytes(
|
||||||
|
const std::vector<milvus::cachinglayer::cid_t>& cids) const override {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::unique_ptr<milvus::GroupChunk>
|
std::unique_ptr<milvus::GroupChunk>
|
||||||
load_group_chunk(const std::shared_ptr<arrow::Table>& table,
|
load_group_chunk(const std::shared_ptr<arrow::Table>& table,
|
||||||
|
|||||||
@ -14,7 +14,7 @@
|
|||||||
# Update KNOWHERE_VERSION for the first occurrence
|
# Update KNOWHERE_VERSION for the first occurrence
|
||||||
milvus_add_pkg_config("knowhere")
|
milvus_add_pkg_config("knowhere")
|
||||||
set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES "")
|
set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES "")
|
||||||
set( KNOWHERE_VERSION 77487c2 )
|
set( KNOWHERE_VERSION v2.6.3 )
|
||||||
set( GIT_REPOSITORY "https://github.com/zilliztech/knowhere.git")
|
set( GIT_REPOSITORY "https://github.com/zilliztech/knowhere.git")
|
||||||
|
|
||||||
message(STATUS "Knowhere repo: ${GIT_REPOSITORY}")
|
message(STATUS "Knowhere repo: ${GIT_REPOSITORY}")
|
||||||
|
|||||||
@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
milvus_add_pkg_config("milvus-common")
|
milvus_add_pkg_config("milvus-common")
|
||||||
set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES "")
|
set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES "")
|
||||||
set( MILVUS-COMMON-VERSION 0590476 )
|
set( MILVUS-COMMON-VERSION 4767d68 )
|
||||||
set( GIT_REPOSITORY "https://github.com/zilliztech/milvus-common.git")
|
set( GIT_REPOSITORY "https://github.com/zilliztech/milvus-common.git")
|
||||||
|
|
||||||
message(STATUS "milvus-common repo: ${GIT_REPOSITORY}")
|
message(STATUS "milvus-common repo: ${GIT_REPOSITORY}")
|
||||||
|
|||||||
@ -186,7 +186,7 @@ TEST_P(IndexWrapperTest, BuildAndQuery) {
|
|||||||
auto xb_data = dataset.get_col<float>(milvus::FieldId(100));
|
auto xb_data = dataset.get_col<float>(milvus::FieldId(100));
|
||||||
auto xq_dataset =
|
auto xq_dataset =
|
||||||
knowhere::GenDataSet(NQ, DIM, xb_data.data() + DIM * query_offset);
|
knowhere::GenDataSet(NQ, DIM, xb_data.data() + DIM * query_offset);
|
||||||
result = vec_index->Query(xq_dataset, search_info, nullptr);
|
result = vec_index->Query(xq_dataset, search_info, nullptr, nullptr);
|
||||||
} else if (vec_field_data_type == DataType::VECTOR_SPARSE_U32_F32) {
|
} else if (vec_field_data_type == DataType::VECTOR_SPARSE_U32_F32) {
|
||||||
auto dataset = GenFieldData(NQ, metric_type, vec_field_data_type);
|
auto dataset = GenFieldData(NQ, metric_type, vec_field_data_type);
|
||||||
auto xb_data =
|
auto xb_data =
|
||||||
@ -196,7 +196,7 @@ TEST_P(IndexWrapperTest, BuildAndQuery) {
|
|||||||
auto xq_dataset =
|
auto xq_dataset =
|
||||||
knowhere::GenDataSet(NQ, kTestSparseDim, xb_data.data());
|
knowhere::GenDataSet(NQ, kTestSparseDim, xb_data.data());
|
||||||
xq_dataset->SetIsSparse(true);
|
xq_dataset->SetIsSparse(true);
|
||||||
result = vec_index->Query(xq_dataset, search_info, nullptr);
|
result = vec_index->Query(xq_dataset, search_info, nullptr, nullptr);
|
||||||
} else {
|
} else {
|
||||||
auto nb_for_nq = NQ + query_offset;
|
auto nb_for_nq = NQ + query_offset;
|
||||||
auto dataset = GenFieldData(
|
auto dataset = GenFieldData(
|
||||||
@ -207,7 +207,7 @@ TEST_P(IndexWrapperTest, BuildAndQuery) {
|
|||||||
NQ,
|
NQ,
|
||||||
BINARY_DIM,
|
BINARY_DIM,
|
||||||
xb_bin_data.data() + ((BINARY_DIM + 7) / 8) * query_offset);
|
xb_bin_data.data() + ((BINARY_DIM + 7) / 8) * query_offset);
|
||||||
result = vec_index->Query(xq_dataset, search_info, nullptr);
|
result = vec_index->Query(xq_dataset, search_info, nullptr, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPECT_EQ(result->total_nq_, NQ);
|
EXPECT_EQ(result->total_nq_, NQ);
|
||||||
|
|||||||
@ -185,7 +185,8 @@ TEST(Indexing, BinaryBruteForce) {
|
|||||||
index_info,
|
index_info,
|
||||||
nullptr,
|
nullptr,
|
||||||
DataType::VECTOR_BINARY,
|
DataType::VECTOR_BINARY,
|
||||||
DataType::NONE);
|
DataType::NONE,
|
||||||
|
nullptr);
|
||||||
|
|
||||||
SearchResult sr;
|
SearchResult sr;
|
||||||
sr.total_nq_ = num_queries;
|
sr.total_nq_ = num_queries;
|
||||||
@ -296,7 +297,7 @@ TEST(Indexing, Naive) {
|
|||||||
searchInfo.search_params_ = search_conf;
|
searchInfo.search_params_ = search_conf;
|
||||||
auto vec_index = dynamic_cast<index::VectorIndex*>(index.get());
|
auto vec_index = dynamic_cast<index::VectorIndex*>(index.get());
|
||||||
SearchResult result;
|
SearchResult result;
|
||||||
vec_index->Query(query_ds, searchInfo, view, result);
|
vec_index->Query(query_ds, searchInfo, view, nullptr, result);
|
||||||
|
|
||||||
for (int i = 0; i < TOPK; ++i) {
|
for (int i = 0; i < TOPK; ++i) {
|
||||||
ASSERT_FALSE(result.seg_offsets_[i] < N / 2);
|
ASSERT_FALSE(result.seg_offsets_[i] < N / 2);
|
||||||
@ -519,7 +520,7 @@ TEST_P(IndexTest, BuildAndQuery) {
|
|||||||
search_info.metric_type_ = metric_type;
|
search_info.metric_type_ = metric_type;
|
||||||
search_info.search_params_ = search_conf;
|
search_info.search_params_ = search_conf;
|
||||||
SearchResult result;
|
SearchResult result;
|
||||||
vec_index->Query(xq_dataset, search_info, nullptr, result);
|
vec_index->Query(xq_dataset, search_info, nullptr, nullptr, result);
|
||||||
EXPECT_EQ(result.total_nq_, NQ);
|
EXPECT_EQ(result.total_nq_, NQ);
|
||||||
EXPECT_EQ(result.unity_topK_, K);
|
EXPECT_EQ(result.unity_topK_, K);
|
||||||
EXPECT_EQ(result.distances_.size(), NQ * K);
|
EXPECT_EQ(result.distances_.size(), NQ * K);
|
||||||
@ -535,7 +536,7 @@ TEST_P(IndexTest, BuildAndQuery) {
|
|||||||
if (!is_sparse) {
|
if (!is_sparse) {
|
||||||
// sparse doesn't support range search yet
|
// sparse doesn't support range search yet
|
||||||
search_info.search_params_ = range_search_conf;
|
search_info.search_params_ = range_search_conf;
|
||||||
vec_index->Query(xq_dataset, search_info, nullptr, result);
|
vec_index->Query(xq_dataset, search_info, nullptr, nullptr, result);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -590,7 +591,7 @@ TEST_P(IndexTest, Mmap) {
|
|||||||
search_info.metric_type_ = metric_type;
|
search_info.metric_type_ = metric_type;
|
||||||
search_info.search_params_ = search_conf;
|
search_info.search_params_ = search_conf;
|
||||||
SearchResult result;
|
SearchResult result;
|
||||||
vec_index->Query(xq_dataset, search_info, nullptr, result);
|
vec_index->Query(xq_dataset, search_info, nullptr, nullptr, result);
|
||||||
EXPECT_EQ(result.total_nq_, NQ);
|
EXPECT_EQ(result.total_nq_, NQ);
|
||||||
EXPECT_EQ(result.unity_topK_, K);
|
EXPECT_EQ(result.unity_topK_, K);
|
||||||
EXPECT_EQ(result.distances_.size(), NQ * K);
|
EXPECT_EQ(result.distances_.size(), NQ * K);
|
||||||
@ -599,7 +600,7 @@ TEST_P(IndexTest, Mmap) {
|
|||||||
EXPECT_EQ(result.seg_offsets_[0], query_offset);
|
EXPECT_EQ(result.seg_offsets_[0], query_offset);
|
||||||
}
|
}
|
||||||
search_info.search_params_ = range_search_conf;
|
search_info.search_params_ = range_search_conf;
|
||||||
vec_index->Query(xq_dataset, search_info, nullptr, result);
|
vec_index->Query(xq_dataset, search_info, nullptr, nullptr, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_P(IndexTest, GetVector) {
|
TEST_P(IndexTest, GetVector) {
|
||||||
@ -842,7 +843,8 @@ TEST(Indexing, SearchDiskAnnWithInvalidParam) {
|
|||||||
{milvus::index::DISK_ANN_QUERY_LIST, K - 1},
|
{milvus::index::DISK_ANN_QUERY_LIST, K - 1},
|
||||||
};
|
};
|
||||||
SearchResult result;
|
SearchResult result;
|
||||||
EXPECT_THROW(vec_index->Query(xq_dataset, search_info, nullptr, result),
|
EXPECT_THROW(
|
||||||
|
vec_index->Query(xq_dataset, search_info, nullptr, nullptr, result),
|
||||||
std::runtime_error);
|
std::runtime_error);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -928,7 +930,8 @@ TEST(Indexing, SearchDiskAnnWithFloat16) {
|
|||||||
{milvus::index::DISK_ANN_QUERY_LIST, K * 2},
|
{milvus::index::DISK_ANN_QUERY_LIST, K * 2},
|
||||||
};
|
};
|
||||||
SearchResult result;
|
SearchResult result;
|
||||||
EXPECT_NO_THROW(vec_index->Query(xq_dataset, search_info, nullptr, result));
|
EXPECT_NO_THROW(
|
||||||
|
vec_index->Query(xq_dataset, search_info, nullptr, nullptr, result));
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(Indexing, SearchDiskAnnWithBFloat16) {
|
TEST(Indexing, SearchDiskAnnWithBFloat16) {
|
||||||
@ -1013,7 +1016,8 @@ TEST(Indexing, SearchDiskAnnWithBFloat16) {
|
|||||||
{milvus::index::DISK_ANN_QUERY_LIST, K * 2},
|
{milvus::index::DISK_ANN_QUERY_LIST, K * 2},
|
||||||
};
|
};
|
||||||
SearchResult result;
|
SearchResult result;
|
||||||
EXPECT_NO_THROW(vec_index->Query(xq_dataset, search_info, nullptr, result));
|
EXPECT_NO_THROW(
|
||||||
|
vec_index->Query(xq_dataset, search_info, nullptr, nullptr, result));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@ -125,7 +125,7 @@ TEST(Sealed, without_predicate) {
|
|||||||
searchInfo.metric_type_ = knowhere::metric::L2;
|
searchInfo.metric_type_ = knowhere::metric::L2;
|
||||||
searchInfo.search_params_ = search_conf;
|
searchInfo.search_params_ = search_conf;
|
||||||
SearchResult result;
|
SearchResult result;
|
||||||
vec_index->Query(query_dataset, searchInfo, nullptr, result);
|
vec_index->Query(query_dataset, searchInfo, nullptr, nullptr, result);
|
||||||
auto ref_result = SearchResultToJson(result);
|
auto ref_result = SearchResultToJson(result);
|
||||||
|
|
||||||
LoadIndexInfo load_info;
|
LoadIndexInfo load_info;
|
||||||
@ -330,7 +330,7 @@ TEST(Sealed, with_predicate) {
|
|||||||
searchInfo.metric_type_ = knowhere::metric::L2;
|
searchInfo.metric_type_ = knowhere::metric::L2;
|
||||||
searchInfo.search_params_ = search_conf;
|
searchInfo.search_params_ = search_conf;
|
||||||
SearchResult result;
|
SearchResult result;
|
||||||
vec_index->Query(query_dataset, searchInfo, nullptr, result);
|
vec_index->Query(query_dataset, searchInfo, nullptr, nullptr, result);
|
||||||
|
|
||||||
LoadIndexInfo load_info;
|
LoadIndexInfo load_info;
|
||||||
load_info.field_id = fake_id.get();
|
load_info.field_id = fake_id.get();
|
||||||
@ -2460,7 +2460,7 @@ TEST(Sealed, SearchVectorArray) {
|
|||||||
searchInfo.metric_type_ = knowhere::metric::MAX_SIM;
|
searchInfo.metric_type_ = knowhere::metric::MAX_SIM;
|
||||||
searchInfo.search_params_ = search_conf;
|
searchInfo.search_params_ = search_conf;
|
||||||
SearchResult result;
|
SearchResult result;
|
||||||
vec_index->Query(query_dataset, searchInfo, nullptr, result);
|
vec_index->Query(query_dataset, searchInfo, nullptr, nullptr, result);
|
||||||
auto ref_result = SearchResultToJson(result);
|
auto ref_result = SearchResultToJson(result);
|
||||||
std::cout << ref_result.dump(1) << std::endl;
|
std::cout << ref_result.dump(1) << std::endl;
|
||||||
EXPECT_EQ(result.total_nq_, 2);
|
EXPECT_EQ(result.total_nq_, 2);
|
||||||
|
|||||||
@ -1563,7 +1563,8 @@ TEST(AlwaysTrueStringPlan, SearchWithOutputFields) {
|
|||||||
index_info,
|
index_info,
|
||||||
nullptr,
|
nullptr,
|
||||||
DataType::VECTOR_FLOAT,
|
DataType::VECTOR_FLOAT,
|
||||||
DataType::NONE);
|
DataType::NONE,
|
||||||
|
nullptr);
|
||||||
|
|
||||||
auto sr = segment->Search(plan.get(), ph_group.get(), MAX_TIMESTAMP);
|
auto sr = segment->Search(plan.get(), ph_group.get(), MAX_TIMESTAMP);
|
||||||
segment->FillPrimaryKeys(plan.get(), *sr);
|
segment->FillPrimaryKeys(plan.get(), *sr);
|
||||||
|
|||||||
@ -77,6 +77,11 @@ class TestChunkTranslator : public Translator<milvus::Chunk> {
|
|||||||
return {{0, 0}, {0, 0}};
|
return {{0, 0}, {0, 0}};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int64_t
|
||||||
|
cells_storage_bytes(const std::vector<cid_t>& cids) const override {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
const std::string&
|
const std::string&
|
||||||
key() const override {
|
key() const override {
|
||||||
return key_;
|
return key_;
|
||||||
@ -148,6 +153,11 @@ class TestGroupChunkTranslator : public Translator<milvus::GroupChunk> {
|
|||||||
return {{0, 0}, {0, 0}};
|
return {{0, 0}, {0, 0}};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int64_t
|
||||||
|
cells_storage_bytes(const std::vector<cid_t>& cids) const override {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
const std::string&
|
const std::string&
|
||||||
key() const override {
|
key() const override {
|
||||||
return key_;
|
return key_;
|
||||||
@ -208,6 +218,11 @@ class TestIndexTranslator : public Translator<milvus::index::IndexBase> {
|
|||||||
return {{0, 0}, {0, 0}};
|
return {{0, 0}, {0, 0}};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int64_t
|
||||||
|
cells_storage_bytes(const std::vector<cid_t>& cids) const override {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
const std::string&
|
const std::string&
|
||||||
key() const override {
|
key() const override {
|
||||||
return key_;
|
return key_;
|
||||||
|
|||||||
@ -1092,7 +1092,7 @@ func CheckSearchResult(ctx context.Context, nq int64, plan *segcore.SearchPlan,
|
|||||||
}
|
}
|
||||||
|
|
||||||
for i := 0; i < len(sInfo.SliceNQs); i++ {
|
for i := 0; i < len(sInfo.SliceNQs); i++ {
|
||||||
blob, err := segcore.GetSearchResultDataBlob(ctx, res, i)
|
blob, _, err := segcore.GetSearchResultDataBlob(ctx, res, i)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|||||||
@ -47,6 +47,7 @@ import (
|
|||||||
"github.com/milvus-io/milvus/internal/types"
|
"github.com/milvus-io/milvus/internal/types"
|
||||||
"github.com/milvus-io/milvus/internal/util/analyzer"
|
"github.com/milvus-io/milvus/internal/util/analyzer"
|
||||||
"github.com/milvus-io/milvus/internal/util/hookutil"
|
"github.com/milvus-io/milvus/internal/util/hookutil"
|
||||||
|
"github.com/milvus-io/milvus/internal/util/segcore"
|
||||||
"github.com/milvus-io/milvus/pkg/v2/common"
|
"github.com/milvus-io/milvus/pkg/v2/common"
|
||||||
"github.com/milvus-io/milvus/pkg/v2/log"
|
"github.com/milvus-io/milvus/pkg/v2/log"
|
||||||
"github.com/milvus-io/milvus/pkg/v2/metrics"
|
"github.com/milvus-io/milvus/pkg/v2/metrics"
|
||||||
@ -2880,6 +2881,20 @@ func (node *Proxy) search(ctx context.Context, request *milvuspb.SearchRequest,
|
|||||||
collectionName,
|
collectionName,
|
||||||
).Observe(float64(searchDur))
|
).Observe(float64(searchDur))
|
||||||
|
|
||||||
|
metrics.ProxyScannedRemoteBytes.WithLabelValues(
|
||||||
|
nodeID,
|
||||||
|
metrics.SearchLabel,
|
||||||
|
dbName,
|
||||||
|
collectionName,
|
||||||
|
).Add(float64(qt.storageCost.ScannedRemoteBytes))
|
||||||
|
|
||||||
|
metrics.ProxyScannedTotalBytes.WithLabelValues(
|
||||||
|
nodeID,
|
||||||
|
metrics.SearchLabel,
|
||||||
|
dbName,
|
||||||
|
collectionName,
|
||||||
|
).Add(float64(qt.storageCost.ScannedTotalBytes))
|
||||||
|
|
||||||
if qt.result != nil {
|
if qt.result != nil {
|
||||||
username := GetCurUserFromContextOrDefault(ctx)
|
username := GetCurUserFromContextOrDefault(ctx)
|
||||||
sentSize := proto.Size(qt.result)
|
sentSize := proto.Size(qt.result)
|
||||||
@ -2892,6 +2907,7 @@ func (node *Proxy) search(ctx context.Context, request *milvuspb.SearchRequest,
|
|||||||
hookutil.RelatedCntKey: qt.result.GetResults().GetAllSearchCount(),
|
hookutil.RelatedCntKey: qt.result.GetResults().GetAllSearchCount(),
|
||||||
})
|
})
|
||||||
SetReportValue(qt.result.GetStatus(), v)
|
SetReportValue(qt.result.GetStatus(), v)
|
||||||
|
SetStorageCost(qt.result.GetStatus(), qt.storageCost)
|
||||||
if merr.Ok(qt.result.GetStatus()) {
|
if merr.Ok(qt.result.GetStatus()) {
|
||||||
metrics.ProxyReportValue.WithLabelValues(nodeID, hookutil.OpTypeSearch, dbName, username).Add(float64(v))
|
metrics.ProxyReportValue.WithLabelValues(nodeID, hookutil.OpTypeSearch, dbName, username).Add(float64(v))
|
||||||
}
|
}
|
||||||
@ -3087,6 +3103,20 @@ func (node *Proxy) hybridSearch(ctx context.Context, request *milvuspb.HybridSea
|
|||||||
collectionName,
|
collectionName,
|
||||||
).Observe(float64(searchDur))
|
).Observe(float64(searchDur))
|
||||||
|
|
||||||
|
metrics.ProxyScannedRemoteBytes.WithLabelValues(
|
||||||
|
nodeID,
|
||||||
|
metrics.HybridSearchLabel,
|
||||||
|
dbName,
|
||||||
|
collectionName,
|
||||||
|
).Add(float64(qt.storageCost.ScannedRemoteBytes))
|
||||||
|
|
||||||
|
metrics.ProxyScannedTotalBytes.WithLabelValues(
|
||||||
|
nodeID,
|
||||||
|
metrics.HybridSearchLabel,
|
||||||
|
dbName,
|
||||||
|
collectionName,
|
||||||
|
).Add(float64(qt.storageCost.ScannedTotalBytes))
|
||||||
|
|
||||||
if qt.result != nil {
|
if qt.result != nil {
|
||||||
sentSize := proto.Size(qt.result)
|
sentSize := proto.Size(qt.result)
|
||||||
username := GetCurUserFromContextOrDefault(ctx)
|
username := GetCurUserFromContextOrDefault(ctx)
|
||||||
@ -3099,6 +3129,7 @@ func (node *Proxy) hybridSearch(ctx context.Context, request *milvuspb.HybridSea
|
|||||||
hookutil.RelatedCntKey: qt.result.GetResults().GetAllSearchCount(),
|
hookutil.RelatedCntKey: qt.result.GetResults().GetAllSearchCount(),
|
||||||
})
|
})
|
||||||
SetReportValue(qt.result.GetStatus(), v)
|
SetReportValue(qt.result.GetStatus(), v)
|
||||||
|
SetStorageCost(qt.result.GetStatus(), qt.storageCost)
|
||||||
if merr.Ok(qt.result.GetStatus()) {
|
if merr.Ok(qt.result.GetStatus()) {
|
||||||
metrics.ProxyReportValue.WithLabelValues(nodeID, hookutil.OpTypeHybridSearch, dbName, username).Add(float64(v))
|
metrics.ProxyReportValue.WithLabelValues(nodeID, hookutil.OpTypeHybridSearch, dbName, username).Add(float64(v))
|
||||||
}
|
}
|
||||||
@ -3226,14 +3257,14 @@ func (node *Proxy) Flush(ctx context.Context, request *milvuspb.FlushRequest) (*
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Query get the records by primary keys.
|
// Query get the records by primary keys.
|
||||||
func (node *Proxy) query(ctx context.Context, qt *queryTask, sp trace.Span) (*milvuspb.QueryResults, error) {
|
func (node *Proxy) query(ctx context.Context, qt *queryTask, sp trace.Span) (*milvuspb.QueryResults, segcore.StorageCost, error) {
|
||||||
request := qt.request
|
request := qt.request
|
||||||
method := "Query"
|
method := "Query"
|
||||||
|
|
||||||
if err := merr.CheckHealthy(node.GetStateCode()); err != nil {
|
if err := merr.CheckHealthy(node.GetStateCode()); err != nil {
|
||||||
return &milvuspb.QueryResults{
|
return &milvuspb.QueryResults{
|
||||||
Status: merr.Status(err),
|
Status: merr.Status(err),
|
||||||
}, nil
|
}, segcore.StorageCost{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
log := log.Ctx(ctx).With(
|
log := log.Ctx(ctx).With(
|
||||||
@ -3291,7 +3322,7 @@ func (node *Proxy) query(ctx context.Context, qt *queryTask, sp trace.Span) (*mi
|
|||||||
|
|
||||||
return &milvuspb.QueryResults{
|
return &milvuspb.QueryResults{
|
||||||
Status: merr.Status(err),
|
Status: merr.Status(err),
|
||||||
}, nil
|
}, segcore.StorageCost{}, nil
|
||||||
}
|
}
|
||||||
tr.CtxRecord(ctx, "query request enqueue")
|
tr.CtxRecord(ctx, "query request enqueue")
|
||||||
|
|
||||||
@ -3304,7 +3335,7 @@ func (node *Proxy) query(ctx context.Context, qt *queryTask, sp trace.Span) (*mi
|
|||||||
|
|
||||||
return &milvuspb.QueryResults{
|
return &milvuspb.QueryResults{
|
||||||
Status: merr.Status(err),
|
Status: merr.Status(err),
|
||||||
}, nil
|
}, segcore.StorageCost{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if !qt.reQuery {
|
if !qt.reQuery {
|
||||||
@ -3327,9 +3358,23 @@ func (node *Proxy) query(ctx context.Context, qt *queryTask, sp trace.Span) (*mi
|
|||||||
request.DbName,
|
request.DbName,
|
||||||
request.CollectionName,
|
request.CollectionName,
|
||||||
).Observe(float64(tr.ElapseSpan().Milliseconds()))
|
).Observe(float64(tr.ElapseSpan().Milliseconds()))
|
||||||
|
|
||||||
|
metrics.ProxyScannedRemoteBytes.WithLabelValues(
|
||||||
|
strconv.FormatInt(paramtable.GetNodeID(), 10),
|
||||||
|
metrics.QueryLabel,
|
||||||
|
request.DbName,
|
||||||
|
request.CollectionName,
|
||||||
|
).Add(float64(qt.storageCost.ScannedRemoteBytes))
|
||||||
|
|
||||||
|
metrics.ProxyScannedTotalBytes.WithLabelValues(
|
||||||
|
strconv.FormatInt(paramtable.GetNodeID(), 10),
|
||||||
|
metrics.QueryLabel,
|
||||||
|
request.DbName,
|
||||||
|
request.CollectionName,
|
||||||
|
).Add(float64(qt.storageCost.ScannedTotalBytes))
|
||||||
}
|
}
|
||||||
|
|
||||||
return qt.result, nil
|
return qt.result, qt.storageCost, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Query get the records by primary keys.
|
// Query get the records by primary keys.
|
||||||
@ -3376,7 +3421,7 @@ func (node *Proxy) Query(ctx context.Context, request *milvuspb.QueryRequest) (*
|
|||||||
defer sp.End()
|
defer sp.End()
|
||||||
method := "Query"
|
method := "Query"
|
||||||
|
|
||||||
res, err := node.query(ctx, qt, sp)
|
res, storageCost, err := node.query(ctx, qt, sp)
|
||||||
if err != nil || !merr.Ok(res.Status) {
|
if err != nil || !merr.Ok(res.Status) {
|
||||||
return res, err
|
return res, err
|
||||||
}
|
}
|
||||||
@ -3394,6 +3439,7 @@ func (node *Proxy) Query(ctx context.Context, request *milvuspb.QueryRequest) (*
|
|||||||
hookutil.RelatedCntKey: qt.allQueryCnt,
|
hookutil.RelatedCntKey: qt.allQueryCnt,
|
||||||
})
|
})
|
||||||
SetReportValue(res.Status, v)
|
SetReportValue(res.Status, v)
|
||||||
|
SetStorageCost(res.Status, storageCost)
|
||||||
metrics.ProxyReportValue.WithLabelValues(nodeID, hookutil.OpTypeQuery, request.DbName, username).Add(float64(v))
|
metrics.ProxyReportValue.WithLabelValues(nodeID, hookutil.OpTypeQuery, request.DbName, username).Add(float64(v))
|
||||||
|
|
||||||
if log.Ctx(ctx).Core().Enabled(zap.DebugLevel) && matchCountRule(request.GetOutputFields()) {
|
if log.Ctx(ctx).Core().Enabled(zap.DebugLevel) && matchCountRule(request.GetOutputFields()) {
|
||||||
|
|||||||
@ -32,6 +32,7 @@ import (
|
|||||||
"github.com/milvus-io/milvus/internal/parser/planparserv2"
|
"github.com/milvus-io/milvus/internal/parser/planparserv2"
|
||||||
"github.com/milvus-io/milvus/internal/types"
|
"github.com/milvus-io/milvus/internal/types"
|
||||||
"github.com/milvus-io/milvus/internal/util/function/rerank"
|
"github.com/milvus-io/milvus/internal/util/function/rerank"
|
||||||
|
"github.com/milvus-io/milvus/internal/util/segcore"
|
||||||
"github.com/milvus-io/milvus/pkg/v2/log"
|
"github.com/milvus-io/milvus/pkg/v2/log"
|
||||||
"github.com/milvus-io/milvus/pkg/v2/proto/internalpb"
|
"github.com/milvus-io/milvus/pkg/v2/proto/internalpb"
|
||||||
"github.com/milvus-io/milvus/pkg/v2/proto/planpb"
|
"github.com/milvus-io/milvus/pkg/v2/proto/planpb"
|
||||||
@ -243,7 +244,6 @@ func (op *hybridSearchReduceOperator) run(ctx context.Context, span trace.Span,
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
searchMetrics = append(searchMetrics, subMetricType)
|
searchMetrics = append(searchMetrics, subMetricType)
|
||||||
multipleMilvusResults[index] = result
|
multipleMilvusResults[index] = result
|
||||||
}
|
}
|
||||||
@ -357,18 +357,21 @@ func newRequeryOperator(t *searchTask, _ map[string]any) (operator, error) {
|
|||||||
|
|
||||||
func (op *requeryOperator) run(ctx context.Context, span trace.Span, inputs ...any) ([]any, error) {
|
func (op *requeryOperator) run(ctx context.Context, span trace.Span, inputs ...any) ([]any, error) {
|
||||||
allIDs := inputs[0].(*schemapb.IDs)
|
allIDs := inputs[0].(*schemapb.IDs)
|
||||||
|
storageCostFromLastOp := inputs[1].(segcore.StorageCost)
|
||||||
if typeutil.GetSizeOfIDs(allIDs) == 0 {
|
if typeutil.GetSizeOfIDs(allIDs) == 0 {
|
||||||
return []any{[]*schemapb.FieldData{}}, nil
|
return []any{[]*schemapb.FieldData{}, storageCostFromLastOp}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
queryResult, err := op.requery(ctx, span, allIDs, op.outputFieldNames)
|
queryResult, storageCost, err := op.requery(ctx, span, allIDs, op.outputFieldNames)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return []any{queryResult.GetFieldsData()}, nil
|
storageCost.ScannedRemoteBytes += storageCostFromLastOp.ScannedRemoteBytes
|
||||||
|
storageCost.ScannedTotalBytes += storageCostFromLastOp.ScannedTotalBytes
|
||||||
|
return []any{queryResult.GetFieldsData(), storageCost}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (op *requeryOperator) requery(ctx context.Context, span trace.Span, ids *schemapb.IDs, outputFields []string) (*milvuspb.QueryResults, error) {
|
func (op *requeryOperator) requery(ctx context.Context, span trace.Span, ids *schemapb.IDs, outputFields []string) (*milvuspb.QueryResults, segcore.StorageCost, error) {
|
||||||
queryReq := &milvuspb.QueryRequest{
|
queryReq := &milvuspb.QueryRequest{
|
||||||
Base: &commonpb.MsgBase{
|
Base: &commonpb.MsgBase{
|
||||||
MsgType: commonpb.MsgType_Retrieve,
|
MsgType: commonpb.MsgType_Retrieve,
|
||||||
@ -409,15 +412,15 @@ func (op *requeryOperator) requery(ctx context.Context, span trace.Span, ids *sc
|
|||||||
fastSkip: true,
|
fastSkip: true,
|
||||||
reQuery: true,
|
reQuery: true,
|
||||||
}
|
}
|
||||||
queryResult, err := op.node.(*Proxy).query(op.traceCtx, qt, span)
|
queryResult, storageCost, err := op.node.(*Proxy).query(op.traceCtx, qt, span)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, segcore.StorageCost{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if queryResult.GetStatus().GetErrorCode() != commonpb.ErrorCode_Success {
|
if queryResult.GetStatus().GetErrorCode() != commonpb.ErrorCode_Success {
|
||||||
return nil, merr.Error(queryResult.GetStatus())
|
return nil, segcore.StorageCost{}, merr.Error(queryResult.GetStatus())
|
||||||
}
|
}
|
||||||
return queryResult, nil
|
return queryResult, storageCost, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
type organizeOperator struct {
|
type organizeOperator struct {
|
||||||
@ -632,20 +635,21 @@ func newPipeline(pipeDef *pipelineDef, t *searchTask) (*pipeline, error) {
|
|||||||
return &pipeline{name: pipeDef.name, nodes: nodes}, nil
|
return &pipeline{name: pipeDef.name, nodes: nodes}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *pipeline) Run(ctx context.Context, span trace.Span, toReduceResults []*internalpb.SearchResults) (*milvuspb.SearchResults, error) {
|
func (p *pipeline) Run(ctx context.Context, span trace.Span, toReduceResults []*internalpb.SearchResults, storageCost segcore.StorageCost) (*milvuspb.SearchResults, segcore.StorageCost, error) {
|
||||||
log.Ctx(ctx).Debug("SearchPipeline run", zap.String("pipeline", p.String()))
|
log.Ctx(ctx).Debug("SearchPipeline run", zap.String("pipeline", p.String()))
|
||||||
msg := opMsg{}
|
msg := opMsg{}
|
||||||
msg["input"] = toReduceResults
|
msg["input"] = toReduceResults
|
||||||
|
msg["storage_cost"] = storageCost
|
||||||
for _, node := range p.nodes {
|
for _, node := range p.nodes {
|
||||||
var err error
|
var err error
|
||||||
log.Ctx(ctx).Debug("SearchPipeline run node", zap.String("node", node.name))
|
log.Ctx(ctx).Debug("SearchPipeline run node", zap.String("node", node.name))
|
||||||
msg, err = node.Run(ctx, span, msg)
|
msg, err = node.Run(ctx, span, msg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Ctx(ctx).Error("Run node failed: ", zap.String("err", err.Error()))
|
log.Ctx(ctx).Error("Run node failed: ", zap.String("err", err.Error()))
|
||||||
return nil, err
|
return nil, storageCost, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return msg["output"].(*milvuspb.SearchResults), nil
|
return msg["output"].(*milvuspb.SearchResults), msg["storage_cost"].(segcore.StorageCost), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *pipeline) String() string {
|
func (p *pipeline) String() string {
|
||||||
@ -666,7 +670,7 @@ var searchPipe = &pipelineDef{
|
|||||||
nodes: []*nodeDef{
|
nodes: []*nodeDef{
|
||||||
{
|
{
|
||||||
name: "reduce",
|
name: "reduce",
|
||||||
inputs: []string{"input"},
|
inputs: []string{"input", "storage_cost"},
|
||||||
outputs: []string{"reduced", "metrics"},
|
outputs: []string{"reduced", "metrics"},
|
||||||
opName: searchReduceOp,
|
opName: searchReduceOp,
|
||||||
},
|
},
|
||||||
@ -696,7 +700,7 @@ var searchWithRequeryPipe = &pipelineDef{
|
|||||||
nodes: []*nodeDef{
|
nodes: []*nodeDef{
|
||||||
{
|
{
|
||||||
name: "reduce",
|
name: "reduce",
|
||||||
inputs: []string{"input"},
|
inputs: []string{"input", "storage_cost"},
|
||||||
outputs: []string{"reduced", "metrics"},
|
outputs: []string{"reduced", "metrics"},
|
||||||
opName: searchReduceOp,
|
opName: searchReduceOp,
|
||||||
},
|
},
|
||||||
@ -711,8 +715,8 @@ var searchWithRequeryPipe = &pipelineDef{
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "requery",
|
name: "requery",
|
||||||
inputs: []string{"unique_ids"},
|
inputs: []string{"unique_ids", "storage_cost"},
|
||||||
outputs: []string{"fields"},
|
outputs: []string{"fields", "storage_cost"},
|
||||||
opName: requeryOp,
|
opName: requeryOp,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -760,7 +764,7 @@ var searchWithRerankPipe = &pipelineDef{
|
|||||||
nodes: []*nodeDef{
|
nodes: []*nodeDef{
|
||||||
{
|
{
|
||||||
name: "reduce",
|
name: "reduce",
|
||||||
inputs: []string{"input"},
|
inputs: []string{"input", "storage_cost"},
|
||||||
outputs: []string{"reduced", "metrics"},
|
outputs: []string{"reduced", "metrics"},
|
||||||
opName: searchReduceOp,
|
opName: searchReduceOp,
|
||||||
},
|
},
|
||||||
@ -818,7 +822,7 @@ var searchWithRerankRequeryPipe = &pipelineDef{
|
|||||||
nodes: []*nodeDef{
|
nodes: []*nodeDef{
|
||||||
{
|
{
|
||||||
name: "reduce",
|
name: "reduce",
|
||||||
inputs: []string{"input"},
|
inputs: []string{"input", "storage_cost"},
|
||||||
outputs: []string{"reduced", "metrics"},
|
outputs: []string{"reduced", "metrics"},
|
||||||
opName: searchReduceOp,
|
opName: searchReduceOp,
|
||||||
},
|
},
|
||||||
@ -843,8 +847,8 @@ var searchWithRerankRequeryPipe = &pipelineDef{
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "requery",
|
name: "requery",
|
||||||
inputs: []string{"ids"},
|
inputs: []string{"ids", "storage_cost"},
|
||||||
outputs: []string{"fields"},
|
outputs: []string{"fields", "storage_cost"},
|
||||||
opName: requeryOp,
|
opName: requeryOp,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -892,7 +896,7 @@ var hybridSearchPipe = &pipelineDef{
|
|||||||
nodes: []*nodeDef{
|
nodes: []*nodeDef{
|
||||||
{
|
{
|
||||||
name: "reduce",
|
name: "reduce",
|
||||||
inputs: []string{"input"},
|
inputs: []string{"input", "storage_cost"},
|
||||||
outputs: []string{"reduced", "metrics"},
|
outputs: []string{"reduced", "metrics"},
|
||||||
opName: hybridSearchReduceOp,
|
opName: hybridSearchReduceOp,
|
||||||
},
|
},
|
||||||
@ -910,7 +914,7 @@ var hybridSearchWithRequeryPipe = &pipelineDef{
|
|||||||
nodes: []*nodeDef{
|
nodes: []*nodeDef{
|
||||||
{
|
{
|
||||||
name: "reduce",
|
name: "reduce",
|
||||||
inputs: []string{"input"},
|
inputs: []string{"input", "storage_cost"},
|
||||||
outputs: []string{"reduced", "metrics"},
|
outputs: []string{"reduced", "metrics"},
|
||||||
opName: hybridSearchReduceOp,
|
opName: hybridSearchReduceOp,
|
||||||
},
|
},
|
||||||
@ -925,8 +929,8 @@ var hybridSearchWithRequeryPipe = &pipelineDef{
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "requery",
|
name: "requery",
|
||||||
inputs: []string{"ids"},
|
inputs: []string{"ids", "storage_cost"},
|
||||||
outputs: []string{"fields"},
|
outputs: []string{"fields", "storage_cost"},
|
||||||
opName: requeryOp,
|
opName: requeryOp,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@ -32,6 +32,7 @@ import (
|
|||||||
"github.com/milvus-io/milvus-proto/go-api/v2/milvuspb"
|
"github.com/milvus-io/milvus-proto/go-api/v2/milvuspb"
|
||||||
"github.com/milvus-io/milvus-proto/go-api/v2/schemapb"
|
"github.com/milvus-io/milvus-proto/go-api/v2/schemapb"
|
||||||
"github.com/milvus-io/milvus/internal/util/function/rerank"
|
"github.com/milvus-io/milvus/internal/util/function/rerank"
|
||||||
|
"github.com/milvus-io/milvus/internal/util/segcore"
|
||||||
"github.com/milvus-io/milvus/pkg/v2/proto/internalpb"
|
"github.com/milvus-io/milvus/pkg/v2/proto/internalpb"
|
||||||
"github.com/milvus-io/milvus/pkg/v2/proto/planpb"
|
"github.com/milvus-io/milvus/pkg/v2/proto/planpb"
|
||||||
"github.com/milvus-io/milvus/pkg/v2/util/testutils"
|
"github.com/milvus-io/milvus/pkg/v2/util/testutils"
|
||||||
@ -192,7 +193,7 @@ func (s *SearchPipelineSuite) TestRequeryOp() {
|
|||||||
|
|
||||||
mocker := mockey.Mock((*requeryOperator).requery).Return(&milvuspb.QueryResults{
|
mocker := mockey.Mock((*requeryOperator).requery).Return(&milvuspb.QueryResults{
|
||||||
FieldsData: []*schemapb.FieldData{f1},
|
FieldsData: []*schemapb.FieldData{f1},
|
||||||
}, nil).Build()
|
}, segcore.StorageCost{}, nil).Build()
|
||||||
defer mocker.UnPatch()
|
defer mocker.UnPatch()
|
||||||
|
|
||||||
op := requeryOperator{
|
op := requeryOperator{
|
||||||
@ -206,7 +207,7 @@ func (s *SearchPipelineSuite) TestRequeryOp() {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
_, err := op.run(context.Background(), s.span, ids, []string{"int64"})
|
_, err := op.run(context.Background(), s.span, ids, segcore.StorageCost{})
|
||||||
s.NoError(err)
|
s.NoError(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -296,9 +297,8 @@ func (s *SearchPipelineSuite) TestSearchPipeline() {
|
|||||||
}
|
}
|
||||||
pipeline, err := newPipeline(searchPipe, task)
|
pipeline, err := newPipeline(searchPipe, task)
|
||||||
s.NoError(err)
|
s.NoError(err)
|
||||||
results, err := pipeline.Run(context.Background(), s.span, []*internalpb.SearchResults{
|
sr := genTestSearchResultData(2, 10, schemapb.DataType_Int64, "intField", 101, false)
|
||||||
genTestSearchResultData(2, 10, schemapb.DataType_Int64, "intField", 101, false),
|
results, storageCost, err := pipeline.Run(context.Background(), s.span, []*internalpb.SearchResults{sr}, segcore.StorageCost{ScannedRemoteBytes: 100, ScannedTotalBytes: 250})
|
||||||
})
|
|
||||||
s.NoError(err)
|
s.NoError(err)
|
||||||
s.NotNil(results)
|
s.NotNil(results)
|
||||||
s.NotNil(results.Results)
|
s.NotNil(results.Results)
|
||||||
@ -314,6 +314,8 @@ func (s *SearchPipelineSuite) TestSearchPipeline() {
|
|||||||
s.Len(results.Results.FieldsData, 1) // One output field
|
s.Len(results.Results.FieldsData, 1) // One output field
|
||||||
s.Equal("intField", results.Results.FieldsData[0].FieldName)
|
s.Equal("intField", results.Results.FieldsData[0].FieldName)
|
||||||
s.Equal(int64(101), results.Results.FieldsData[0].FieldId)
|
s.Equal(int64(101), results.Results.FieldsData[0].FieldId)
|
||||||
|
s.Equal(int64(100), storageCost.ScannedRemoteBytes)
|
||||||
|
s.Equal(int64(250), storageCost.ScannedTotalBytes)
|
||||||
fmt.Println(results)
|
fmt.Println(results)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -355,14 +357,14 @@ func (s *SearchPipelineSuite) TestSearchPipelineWithRequery() {
|
|||||||
f2.FieldId = 100
|
f2.FieldId = 100
|
||||||
mocker := mockey.Mock((*requeryOperator).requery).Return(&milvuspb.QueryResults{
|
mocker := mockey.Mock((*requeryOperator).requery).Return(&milvuspb.QueryResults{
|
||||||
FieldsData: []*schemapb.FieldData{f1, f2},
|
FieldsData: []*schemapb.FieldData{f1, f2},
|
||||||
}, nil).Build()
|
}, segcore.StorageCost{ScannedRemoteBytes: 100, ScannedTotalBytes: 200}, nil).Build()
|
||||||
defer mocker.UnPatch()
|
defer mocker.UnPatch()
|
||||||
|
|
||||||
pipeline, err := newPipeline(searchWithRequeryPipe, task)
|
pipeline, err := newPipeline(searchWithRequeryPipe, task)
|
||||||
s.NoError(err)
|
s.NoError(err)
|
||||||
results, err := pipeline.Run(context.Background(), s.span, []*internalpb.SearchResults{
|
results, storageCost, err := pipeline.Run(context.Background(), s.span, []*internalpb.SearchResults{
|
||||||
genTestSearchResultData(2, 10, schemapb.DataType_Int64, "intField", 101, false),
|
genTestSearchResultData(2, 10, schemapb.DataType_Int64, "intField", 101, false),
|
||||||
})
|
}, segcore.StorageCost{ScannedRemoteBytes: 100, ScannedTotalBytes: 200})
|
||||||
s.NoError(err)
|
s.NoError(err)
|
||||||
s.NotNil(results)
|
s.NotNil(results)
|
||||||
s.NotNil(results.Results)
|
s.NotNil(results.Results)
|
||||||
@ -378,6 +380,8 @@ func (s *SearchPipelineSuite) TestSearchPipelineWithRequery() {
|
|||||||
s.Len(results.Results.FieldsData, 1) // One output field
|
s.Len(results.Results.FieldsData, 1) // One output field
|
||||||
s.Equal("intField", results.Results.FieldsData[0].FieldName)
|
s.Equal("intField", results.Results.FieldsData[0].FieldName)
|
||||||
s.Equal(int64(101), results.Results.FieldsData[0].FieldId)
|
s.Equal(int64(101), results.Results.FieldsData[0].FieldId)
|
||||||
|
s.Equal(int64(200), storageCost.ScannedRemoteBytes)
|
||||||
|
s.Equal(int64(400), storageCost.ScannedTotalBytes)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *SearchPipelineSuite) TestSearchWithRerankPipe() {
|
func (s *SearchPipelineSuite) TestSearchWithRerankPipe() {
|
||||||
@ -431,7 +435,7 @@ func (s *SearchPipelineSuite) TestSearchWithRerankPipe() {
|
|||||||
s.NoError(err)
|
s.NoError(err)
|
||||||
|
|
||||||
searchResults := genTestSearchResultData(2, 10, schemapb.DataType_Int64, "intField", 101, false)
|
searchResults := genTestSearchResultData(2, 10, schemapb.DataType_Int64, "intField", 101, false)
|
||||||
results, err := pipeline.Run(context.Background(), s.span, []*internalpb.SearchResults{searchResults})
|
results, _, err := pipeline.Run(context.Background(), s.span, []*internalpb.SearchResults{searchResults}, segcore.StorageCost{})
|
||||||
|
|
||||||
s.NoError(err)
|
s.NoError(err)
|
||||||
s.NotNil(results)
|
s.NotNil(results)
|
||||||
@ -506,14 +510,14 @@ func (s *SearchPipelineSuite) TestSearchWithRerankRequeryPipe() {
|
|||||||
f2.FieldId = 100
|
f2.FieldId = 100
|
||||||
mocker := mockey.Mock((*requeryOperator).requery).Return(&milvuspb.QueryResults{
|
mocker := mockey.Mock((*requeryOperator).requery).Return(&milvuspb.QueryResults{
|
||||||
FieldsData: []*schemapb.FieldData{f1, f2},
|
FieldsData: []*schemapb.FieldData{f1, f2},
|
||||||
}, nil).Build()
|
}, segcore.StorageCost{}, nil).Build()
|
||||||
defer mocker.UnPatch()
|
defer mocker.UnPatch()
|
||||||
|
|
||||||
pipeline, err := newPipeline(searchWithRerankRequeryPipe, task)
|
pipeline, err := newPipeline(searchWithRerankRequeryPipe, task)
|
||||||
s.NoError(err)
|
s.NoError(err)
|
||||||
|
|
||||||
searchResults := genTestSearchResultData(2, 10, schemapb.DataType_Int64, "intField", 101, false)
|
searchResults := genTestSearchResultData(2, 10, schemapb.DataType_Int64, "intField", 101, false)
|
||||||
results, err := pipeline.Run(context.Background(), s.span, []*internalpb.SearchResults{searchResults})
|
results, storageCost, err := pipeline.Run(context.Background(), s.span, []*internalpb.SearchResults{searchResults}, segcore.StorageCost{})
|
||||||
|
|
||||||
s.NoError(err)
|
s.NoError(err)
|
||||||
s.NotNil(results)
|
s.NotNil(results)
|
||||||
@ -530,6 +534,8 @@ func (s *SearchPipelineSuite) TestSearchWithRerankRequeryPipe() {
|
|||||||
s.Len(results.Results.FieldsData, 1) // One output field
|
s.Len(results.Results.FieldsData, 1) // One output field
|
||||||
s.Equal("intField", results.Results.FieldsData[0].FieldName)
|
s.Equal("intField", results.Results.FieldsData[0].FieldName)
|
||||||
s.Equal(int64(101), results.Results.FieldsData[0].FieldId)
|
s.Equal(int64(101), results.Results.FieldsData[0].FieldId)
|
||||||
|
s.Equal(int64(0), storageCost.ScannedRemoteBytes)
|
||||||
|
s.Equal(int64(0), storageCost.ScannedTotalBytes)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *SearchPipelineSuite) TestHybridSearchPipe() {
|
func (s *SearchPipelineSuite) TestHybridSearchPipe() {
|
||||||
@ -545,7 +551,7 @@ func (s *SearchPipelineSuite) TestHybridSearchPipe() {
|
|||||||
|
|
||||||
f1 := genTestSearchResultData(2, 10, schemapb.DataType_Int64, "intField", 101, true)
|
f1 := genTestSearchResultData(2, 10, schemapb.DataType_Int64, "intField", 101, true)
|
||||||
f2 := genTestSearchResultData(2, 10, schemapb.DataType_Int64, "intField", 101, true)
|
f2 := genTestSearchResultData(2, 10, schemapb.DataType_Int64, "intField", 101, true)
|
||||||
results, err := pipeline.Run(context.Background(), s.span, []*internalpb.SearchResults{f1, f2})
|
results, storageCost, err := pipeline.Run(context.Background(), s.span, []*internalpb.SearchResults{f1, f2}, segcore.StorageCost{ScannedRemoteBytes: 900, ScannedTotalBytes: 2000})
|
||||||
|
|
||||||
s.NoError(err)
|
s.NoError(err)
|
||||||
s.NotNil(results)
|
s.NotNil(results)
|
||||||
@ -558,6 +564,8 @@ func (s *SearchPipelineSuite) TestHybridSearchPipe() {
|
|||||||
s.Len(results.Results.Ids.GetIntId().Data, 20) // 2 queries * 10 topk
|
s.Len(results.Results.Ids.GetIntId().Data, 20) // 2 queries * 10 topk
|
||||||
s.NotNil(results.Results.Scores)
|
s.NotNil(results.Results.Scores)
|
||||||
s.Len(results.Results.Scores, 20) // 2 queries * 10 topk
|
s.Len(results.Results.Scores, 20) // 2 queries * 10 topk
|
||||||
|
s.Equal(int64(900), storageCost.ScannedRemoteBytes)
|
||||||
|
s.Equal(int64(2000), storageCost.ScannedTotalBytes)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *SearchPipelineSuite) TestFilterFieldOperatorWithStructArrayFields() {
|
func (s *SearchPipelineSuite) TestFilterFieldOperatorWithStructArrayFields() {
|
||||||
@ -647,7 +655,7 @@ func (s *SearchPipelineSuite) TestHybridSearchWithRequeryPipe() {
|
|||||||
f2.FieldId = 100
|
f2.FieldId = 100
|
||||||
mocker := mockey.Mock((*requeryOperator).requery).Return(&milvuspb.QueryResults{
|
mocker := mockey.Mock((*requeryOperator).requery).Return(&milvuspb.QueryResults{
|
||||||
FieldsData: []*schemapb.FieldData{f1, f2},
|
FieldsData: []*schemapb.FieldData{f1, f2},
|
||||||
}, nil).Build()
|
}, segcore.StorageCost{}, nil).Build()
|
||||||
defer mocker.UnPatch()
|
defer mocker.UnPatch()
|
||||||
|
|
||||||
pipeline, err := newPipeline(hybridSearchWithRequeryPipe, task)
|
pipeline, err := newPipeline(hybridSearchWithRequeryPipe, task)
|
||||||
@ -655,7 +663,7 @@ func (s *SearchPipelineSuite) TestHybridSearchWithRequeryPipe() {
|
|||||||
|
|
||||||
d1 := genTestSearchResultData(2, 10, schemapb.DataType_Int64, "intField", 101, true)
|
d1 := genTestSearchResultData(2, 10, schemapb.DataType_Int64, "intField", 101, true)
|
||||||
d2 := genTestSearchResultData(2, 10, schemapb.DataType_Int64, "intField", 101, true)
|
d2 := genTestSearchResultData(2, 10, schemapb.DataType_Int64, "intField", 101, true)
|
||||||
results, err := pipeline.Run(context.Background(), s.span, []*internalpb.SearchResults{d1, d2})
|
results, _, err := pipeline.Run(context.Background(), s.span, []*internalpb.SearchResults{d1, d2}, segcore.StorageCost{})
|
||||||
|
|
||||||
s.NoError(err)
|
s.NoError(err)
|
||||||
s.NotNil(results)
|
s.NotNil(results)
|
||||||
|
|||||||
@ -19,6 +19,7 @@ import (
|
|||||||
"github.com/milvus-io/milvus/internal/types"
|
"github.com/milvus-io/milvus/internal/types"
|
||||||
"github.com/milvus-io/milvus/internal/util/exprutil"
|
"github.com/milvus-io/milvus/internal/util/exprutil"
|
||||||
"github.com/milvus-io/milvus/internal/util/reduce"
|
"github.com/milvus-io/milvus/internal/util/reduce"
|
||||||
|
"github.com/milvus-io/milvus/internal/util/segcore"
|
||||||
typeutil2 "github.com/milvus-io/milvus/internal/util/typeutil"
|
typeutil2 "github.com/milvus-io/milvus/internal/util/typeutil"
|
||||||
"github.com/milvus-io/milvus/pkg/v2/common"
|
"github.com/milvus-io/milvus/pkg/v2/common"
|
||||||
"github.com/milvus-io/milvus/pkg/v2/log"
|
"github.com/milvus-io/milvus/pkg/v2/log"
|
||||||
@ -75,6 +76,8 @@ type queryTask struct {
|
|||||||
allQueryCnt int64
|
allQueryCnt int64
|
||||||
totalRelatedDataSize int64
|
totalRelatedDataSize int64
|
||||||
mustUsePartitionKey bool
|
mustUsePartitionKey bool
|
||||||
|
|
||||||
|
storageCost segcore.StorageCost
|
||||||
}
|
}
|
||||||
|
|
||||||
type queryParams struct {
|
type queryParams struct {
|
||||||
@ -624,6 +627,7 @@ func (t *queryTask) PostExecute(ctx context.Context) error {
|
|||||||
toReduceResults := make([]*internalpb.RetrieveResults, 0)
|
toReduceResults := make([]*internalpb.RetrieveResults, 0)
|
||||||
t.allQueryCnt = 0
|
t.allQueryCnt = 0
|
||||||
t.totalRelatedDataSize = 0
|
t.totalRelatedDataSize = 0
|
||||||
|
t.storageCost = segcore.StorageCost{}
|
||||||
select {
|
select {
|
||||||
case <-t.TraceCtx().Done():
|
case <-t.TraceCtx().Done():
|
||||||
log.Warn("proxy", zap.Int64("Query: wait to finish failed, timeout!, msgID:", t.ID()))
|
log.Warn("proxy", zap.Int64("Query: wait to finish failed, timeout!, msgID:", t.ID()))
|
||||||
@ -633,6 +637,8 @@ func (t *queryTask) PostExecute(ctx context.Context) error {
|
|||||||
t.resultBuf.Range(func(res *internalpb.RetrieveResults) bool {
|
t.resultBuf.Range(func(res *internalpb.RetrieveResults) bool {
|
||||||
toReduceResults = append(toReduceResults, res)
|
toReduceResults = append(toReduceResults, res)
|
||||||
t.allQueryCnt += res.GetAllRetrieveCount()
|
t.allQueryCnt += res.GetAllRetrieveCount()
|
||||||
|
t.storageCost.ScannedRemoteBytes += res.GetScannedRemoteBytes()
|
||||||
|
t.storageCost.ScannedTotalBytes += res.GetScannedTotalBytes()
|
||||||
t.totalRelatedDataSize += res.GetCostAggregation().GetTotalRelatedDataSize()
|
t.totalRelatedDataSize += res.GetCostAggregation().GetTotalRelatedDataSize()
|
||||||
log.Debug("proxy receives one query result", zap.Int64("sourceID", res.GetBase().GetSourceID()))
|
log.Debug("proxy receives one query result", zap.Int64("sourceID", res.GetBase().GetSourceID()))
|
||||||
return true
|
return true
|
||||||
|
|||||||
@ -21,6 +21,7 @@ import (
|
|||||||
"github.com/milvus-io/milvus/internal/util/exprutil"
|
"github.com/milvus-io/milvus/internal/util/exprutil"
|
||||||
"github.com/milvus-io/milvus/internal/util/function/embedding"
|
"github.com/milvus-io/milvus/internal/util/function/embedding"
|
||||||
"github.com/milvus-io/milvus/internal/util/function/rerank"
|
"github.com/milvus-io/milvus/internal/util/function/rerank"
|
||||||
|
"github.com/milvus-io/milvus/internal/util/segcore"
|
||||||
"github.com/milvus-io/milvus/pkg/v2/log"
|
"github.com/milvus-io/milvus/pkg/v2/log"
|
||||||
"github.com/milvus-io/milvus/pkg/v2/metrics"
|
"github.com/milvus-io/milvus/pkg/v2/metrics"
|
||||||
"github.com/milvus-io/milvus/pkg/v2/proto/internalpb"
|
"github.com/milvus-io/milvus/pkg/v2/proto/internalpb"
|
||||||
@ -94,6 +95,8 @@ type searchTask struct {
|
|||||||
// we always remove pk field from output fields, as search result already contains pk field.
|
// we always remove pk field from output fields, as search result already contains pk field.
|
||||||
// if the user explicitly set pk field in output fields, we add it back to the result.
|
// if the user explicitly set pk field in output fields, we add it back to the result.
|
||||||
userRequestedPkFieldExplicitly bool
|
userRequestedPkFieldExplicitly bool
|
||||||
|
|
||||||
|
storageCost segcore.StorageCost
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *searchTask) CanSkipAllocTimestamp() bool {
|
func (t *searchTask) CanSkipAllocTimestamp() bool {
|
||||||
@ -739,6 +742,7 @@ func (t *searchTask) PostExecute(ctx context.Context) error {
|
|||||||
t.relatedDataSize = 0
|
t.relatedDataSize = 0
|
||||||
isTopkReduce := false
|
isTopkReduce := false
|
||||||
isRecallEvaluation := false
|
isRecallEvaluation := false
|
||||||
|
storageCost := segcore.StorageCost{}
|
||||||
for _, r := range toReduceResults {
|
for _, r := range toReduceResults {
|
||||||
if r.GetIsTopkReduce() {
|
if r.GetIsTopkReduce() {
|
||||||
isTopkReduce = true
|
isTopkReduce = true
|
||||||
@ -750,6 +754,8 @@ func (t *searchTask) PostExecute(ctx context.Context) error {
|
|||||||
for ch, ts := range r.GetChannelsMvcc() {
|
for ch, ts := range r.GetChannelsMvcc() {
|
||||||
t.queryChannelsTs[ch] = ts
|
t.queryChannelsTs[ch] = ts
|
||||||
}
|
}
|
||||||
|
storageCost.ScannedRemoteBytes += r.GetScannedRemoteBytes()
|
||||||
|
storageCost.ScannedTotalBytes += r.GetScannedTotalBytes()
|
||||||
}
|
}
|
||||||
|
|
||||||
t.isTopkReduce = isTopkReduce
|
t.isTopkReduce = isTopkReduce
|
||||||
@ -761,7 +767,7 @@ func (t *searchTask) PostExecute(ctx context.Context) error {
|
|||||||
log.Warn("Faild to create post process pipeline")
|
log.Warn("Faild to create post process pipeline")
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if t.result, err = pipeline.Run(ctx, sp, toReduceResults); err != nil {
|
if t.result, t.storageCost, err = pipeline.Run(ctx, sp, toReduceResults, storageCost); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
t.fillResult()
|
t.fillResult()
|
||||||
|
|||||||
@ -43,6 +43,7 @@ import (
|
|||||||
"github.com/milvus-io/milvus/internal/util/dependency"
|
"github.com/milvus-io/milvus/internal/util/dependency"
|
||||||
"github.com/milvus-io/milvus/internal/util/function/embedding"
|
"github.com/milvus-io/milvus/internal/util/function/embedding"
|
||||||
"github.com/milvus-io/milvus/internal/util/reduce"
|
"github.com/milvus-io/milvus/internal/util/reduce"
|
||||||
|
"github.com/milvus-io/milvus/internal/util/segcore"
|
||||||
"github.com/milvus-io/milvus/pkg/v2/common"
|
"github.com/milvus-io/milvus/pkg/v2/common"
|
||||||
"github.com/milvus-io/milvus/pkg/v2/proto/internalpb"
|
"github.com/milvus-io/milvus/pkg/v2/proto/internalpb"
|
||||||
"github.com/milvus-io/milvus/pkg/v2/proto/planpb"
|
"github.com/milvus-io/milvus/pkg/v2/proto/planpb"
|
||||||
@ -395,7 +396,7 @@ func TestSearchTask_PostExecute(t *testing.T) {
|
|||||||
|
|
||||||
mocker := mockey.Mock((*requeryOperator).requery).Return(&milvuspb.QueryResults{
|
mocker := mockey.Mock((*requeryOperator).requery).Return(&milvuspb.QueryResults{
|
||||||
FieldsData: []*schemapb.FieldData{f1, f2, f3},
|
FieldsData: []*schemapb.FieldData{f1, f2, f3},
|
||||||
}, nil).Build()
|
}, segcore.StorageCost{}, nil).Build()
|
||||||
defer mocker.UnPatch()
|
defer mocker.UnPatch()
|
||||||
|
|
||||||
err := qt.PostExecute(context.TODO())
|
err := qt.PostExecute(context.TODO())
|
||||||
@ -435,7 +436,7 @@ func TestSearchTask_PostExecute(t *testing.T) {
|
|||||||
|
|
||||||
mocker := mockey.Mock((*requeryOperator).requery).Return(&milvuspb.QueryResults{
|
mocker := mockey.Mock((*requeryOperator).requery).Return(&milvuspb.QueryResults{
|
||||||
FieldsData: []*schemapb.FieldData{f1, f2, f3},
|
FieldsData: []*schemapb.FieldData{f1, f2, f3},
|
||||||
}, nil).Build()
|
}, segcore.StorageCost{}, nil).Build()
|
||||||
defer mocker.UnPatch()
|
defer mocker.UnPatch()
|
||||||
|
|
||||||
err := qt.PostExecute(context.TODO())
|
err := qt.PostExecute(context.TODO())
|
||||||
@ -475,7 +476,7 @@ func TestSearchTask_PostExecute(t *testing.T) {
|
|||||||
f4.FieldId = fieldNameId[testFloatField]
|
f4.FieldId = fieldNameId[testFloatField]
|
||||||
mocker := mockey.Mock((*requeryOperator).requery).Return(&milvuspb.QueryResults{
|
mocker := mockey.Mock((*requeryOperator).requery).Return(&milvuspb.QueryResults{
|
||||||
FieldsData: []*schemapb.FieldData{f1, f2, f3, f4},
|
FieldsData: []*schemapb.FieldData{f1, f2, f3, f4},
|
||||||
}, nil).Build()
|
}, segcore.StorageCost{}, nil).Build()
|
||||||
defer mocker.UnPatch()
|
defer mocker.UnPatch()
|
||||||
|
|
||||||
err := qt.PostExecute(context.TODO())
|
err := qt.PostExecute(context.TODO())
|
||||||
@ -4154,8 +4155,10 @@ func TestSearchTask_Requery(t *testing.T) {
|
|||||||
}
|
}
|
||||||
op, err := newRequeryOperator(qt, nil)
|
op, err := newRequeryOperator(qt, nil)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
queryResult, err := op.(*requeryOperator).requery(ctx, nil, qt.result.Results.Ids, outputFields)
|
queryResult, storageCost, err := op.(*requeryOperator).requery(ctx, nil, qt.result.Results.Ids, outputFields)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, int64(0), storageCost.ScannedRemoteBytes)
|
||||||
|
assert.Equal(t, int64(0), storageCost.ScannedTotalBytes)
|
||||||
assert.Len(t, queryResult.FieldsData, 2)
|
assert.Len(t, queryResult.FieldsData, 2)
|
||||||
for _, field := range qt.result.Results.FieldsData {
|
for _, field := range qt.result.Results.FieldsData {
|
||||||
fieldName := field.GetFieldName()
|
fieldName := field.GetFieldName()
|
||||||
@ -4219,7 +4222,7 @@ func TestSearchTask_Requery(t *testing.T) {
|
|||||||
|
|
||||||
op, err := newRequeryOperator(qt, nil)
|
op, err := newRequeryOperator(qt, nil)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
_, err = op.(*requeryOperator).requery(ctx, nil, &schemapb.IDs{}, []string{})
|
_, _, err = op.(*requeryOperator).requery(ctx, nil, &schemapb.IDs{}, []string{})
|
||||||
t.Logf("err = %s", err)
|
t.Logf("err = %s", err)
|
||||||
assert.Error(t, err)
|
assert.Error(t, err)
|
||||||
})
|
})
|
||||||
|
|||||||
@ -223,7 +223,8 @@ func retrieveByPKs(ctx context.Context, t *upsertTask, ids *schemapb.IDs, output
|
|||||||
defer func() {
|
defer func() {
|
||||||
sp.End()
|
sp.End()
|
||||||
}()
|
}()
|
||||||
queryResult, err := t.node.(*Proxy).query(ctx, qt, sp)
|
// ignore storage cost?
|
||||||
|
queryResult, _, err := t.node.(*Proxy).query(ctx, qt, sp)
|
||||||
if err := merr.CheckRPCCall(queryResult.GetStatus(), err); err != nil {
|
if err := merr.CheckRPCCall(queryResult.GetStatus(), err); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|||||||
@ -33,6 +33,7 @@ import (
|
|||||||
"github.com/milvus-io/milvus/internal/mocks"
|
"github.com/milvus-io/milvus/internal/mocks"
|
||||||
"github.com/milvus-io/milvus/internal/parser/planparserv2"
|
"github.com/milvus-io/milvus/internal/parser/planparserv2"
|
||||||
"github.com/milvus-io/milvus/internal/util/function/embedding"
|
"github.com/milvus-io/milvus/internal/util/function/embedding"
|
||||||
|
"github.com/milvus-io/milvus/internal/util/segcore"
|
||||||
"github.com/milvus-io/milvus/pkg/v2/mq/msgstream"
|
"github.com/milvus-io/milvus/pkg/v2/mq/msgstream"
|
||||||
"github.com/milvus-io/milvus/pkg/v2/proto/planpb"
|
"github.com/milvus-io/milvus/pkg/v2/proto/planpb"
|
||||||
"github.com/milvus-io/milvus/pkg/v2/proto/rootcoordpb"
|
"github.com/milvus-io/milvus/pkg/v2/proto/rootcoordpb"
|
||||||
@ -665,7 +666,7 @@ func TestRetrieveByPKs_Success(t *testing.T) {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}, nil).Build()
|
}, segcore.StorageCost{}, nil).Build()
|
||||||
|
|
||||||
globalMetaCache = &MetaCache{}
|
globalMetaCache = &MetaCache{}
|
||||||
mockey.Mock(globalMetaCache.GetPartitionID).Return(int64(1002), nil).Build()
|
mockey.Mock(globalMetaCache.GetPartitionID).Return(int64(1002), nil).Build()
|
||||||
@ -736,7 +737,7 @@ func TestRetrieveByPKs_PartitionKeyMode(t *testing.T) {
|
|||||||
mockey.Mock((*Proxy).query).Return(&milvuspb.QueryResults{
|
mockey.Mock((*Proxy).query).Return(&milvuspb.QueryResults{
|
||||||
Status: merr.Success(),
|
Status: merr.Success(),
|
||||||
FieldsData: []*schemapb.FieldData{},
|
FieldsData: []*schemapb.FieldData{},
|
||||||
}, nil).Build()
|
}, segcore.StorageCost{}, nil).Build()
|
||||||
|
|
||||||
task := createTestUpdateTask()
|
task := createTestUpdateTask()
|
||||||
task.partitionKeyMode = true
|
task.partitionKeyMode = true
|
||||||
|
|||||||
@ -42,6 +42,7 @@ import (
|
|||||||
"github.com/milvus-io/milvus/internal/util/function/embedding"
|
"github.com/milvus-io/milvus/internal/util/function/embedding"
|
||||||
"github.com/milvus-io/milvus/internal/util/hookutil"
|
"github.com/milvus-io/milvus/internal/util/hookutil"
|
||||||
"github.com/milvus-io/milvus/internal/util/indexparamcheck"
|
"github.com/milvus-io/milvus/internal/util/indexparamcheck"
|
||||||
|
"github.com/milvus-io/milvus/internal/util/segcore"
|
||||||
typeutil2 "github.com/milvus-io/milvus/internal/util/typeutil"
|
typeutil2 "github.com/milvus-io/milvus/internal/util/typeutil"
|
||||||
"github.com/milvus-io/milvus/pkg/v2/common"
|
"github.com/milvus-io/milvus/pkg/v2/common"
|
||||||
"github.com/milvus-io/milvus/pkg/v2/log"
|
"github.com/milvus-io/milvus/pkg/v2/log"
|
||||||
@ -2412,6 +2413,23 @@ func SetReportValue(status *commonpb.Status, value int) {
|
|||||||
status.ExtraInfo["report_value"] = strconv.Itoa(value)
|
status.ExtraInfo["report_value"] = strconv.Itoa(value)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func SetStorageCost(status *commonpb.Status, storageCost segcore.StorageCost) {
|
||||||
|
if storageCost.ScannedTotalBytes <= 0 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if !merr.Ok(status) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if status.ExtraInfo == nil {
|
||||||
|
status.ExtraInfo = make(map[string]string)
|
||||||
|
}
|
||||||
|
|
||||||
|
status.ExtraInfo["scanned_remote_bytes"] = strconv.FormatInt(storageCost.ScannedRemoteBytes, 10)
|
||||||
|
status.ExtraInfo["scanned_total_bytes"] = strconv.FormatInt(storageCost.ScannedTotalBytes, 10)
|
||||||
|
cacheHitRatio := float64(storageCost.ScannedTotalBytes-storageCost.ScannedRemoteBytes) / float64(storageCost.ScannedTotalBytes)
|
||||||
|
status.ExtraInfo["cache_hit_ratio"] = strconv.FormatFloat(cacheHitRatio, 'f', -1, 64)
|
||||||
|
}
|
||||||
|
|
||||||
func GetCostValue(status *commonpb.Status) int {
|
func GetCostValue(status *commonpb.Status) int {
|
||||||
if status == nil || status.ExtraInfo == nil {
|
if status == nil || status.ExtraInfo == nil {
|
||||||
return 0
|
return 0
|
||||||
|
|||||||
@ -15,9 +15,13 @@ func (r *cntReducer) Reduce(ctx context.Context, results []*internalpb.RetrieveR
|
|||||||
cnt := int64(0)
|
cnt := int64(0)
|
||||||
allRetrieveCount := int64(0)
|
allRetrieveCount := int64(0)
|
||||||
relatedDataSize := int64(0)
|
relatedDataSize := int64(0)
|
||||||
|
scannedRemoteBytes := int64(0)
|
||||||
|
scannedTotalBytes := int64(0)
|
||||||
for _, res := range results {
|
for _, res := range results {
|
||||||
allRetrieveCount += res.GetAllRetrieveCount()
|
allRetrieveCount += res.GetAllRetrieveCount()
|
||||||
relatedDataSize += res.GetCostAggregation().GetTotalRelatedDataSize()
|
relatedDataSize += res.GetCostAggregation().GetTotalRelatedDataSize()
|
||||||
|
scannedRemoteBytes += res.GetScannedRemoteBytes()
|
||||||
|
scannedTotalBytes += res.GetScannedTotalBytes()
|
||||||
c, err := funcutil.CntOfInternalResult(res)
|
c, err := funcutil.CntOfInternalResult(res)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -29,6 +33,8 @@ func (r *cntReducer) Reduce(ctx context.Context, results []*internalpb.RetrieveR
|
|||||||
res.CostAggregation = &internalpb.CostAggregation{
|
res.CostAggregation = &internalpb.CostAggregation{
|
||||||
TotalRelatedDataSize: relatedDataSize,
|
TotalRelatedDataSize: relatedDataSize,
|
||||||
}
|
}
|
||||||
|
res.ScannedRemoteBytes = scannedRemoteBytes
|
||||||
|
res.ScannedTotalBytes = scannedTotalBytes
|
||||||
return res, nil
|
return res, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -37,8 +43,12 @@ type cntReducerSegCore struct{}
|
|||||||
func (r *cntReducerSegCore) Reduce(ctx context.Context, results []*segcorepb.RetrieveResults, _ []Segment, _ *segcore.RetrievePlan) (*segcorepb.RetrieveResults, error) {
|
func (r *cntReducerSegCore) Reduce(ctx context.Context, results []*segcorepb.RetrieveResults, _ []Segment, _ *segcore.RetrievePlan) (*segcorepb.RetrieveResults, error) {
|
||||||
cnt := int64(0)
|
cnt := int64(0)
|
||||||
allRetrieveCount := int64(0)
|
allRetrieveCount := int64(0)
|
||||||
|
scannedRemoteBytes := int64(0)
|
||||||
|
scannedTotalBytes := int64(0)
|
||||||
for _, res := range results {
|
for _, res := range results {
|
||||||
allRetrieveCount += res.GetAllRetrieveCount()
|
allRetrieveCount += res.GetAllRetrieveCount()
|
||||||
|
scannedRemoteBytes += res.GetScannedRemoteBytes()
|
||||||
|
scannedTotalBytes += res.GetScannedTotalBytes()
|
||||||
c, err := funcutil.CntOfSegCoreResult(res)
|
c, err := funcutil.CntOfSegCoreResult(res)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -47,5 +57,7 @@ func (r *cntReducerSegCore) Reduce(ctx context.Context, results []*segcorepb.Ret
|
|||||||
}
|
}
|
||||||
res := funcutil.WrapCntToSegCoreResult(cnt)
|
res := funcutil.WrapCntToSegCoreResult(cnt)
|
||||||
res.AllRetrieveCount = allRetrieveCount
|
res.AllRetrieveCount = allRetrieveCount
|
||||||
|
res.ScannedRemoteBytes = scannedRemoteBytes
|
||||||
|
res.ScannedTotalBytes = scannedTotalBytes
|
||||||
return res, nil
|
return res, nil
|
||||||
}
|
}
|
||||||
|
|||||||
@ -125,10 +125,17 @@ func ReduceSearchResults(ctx context.Context, results []*internalpb.SearchResult
|
|||||||
relatedDataSize := lo.Reduce(results, func(acc int64, result *internalpb.SearchResults, _ int) int64 {
|
relatedDataSize := lo.Reduce(results, func(acc int64, result *internalpb.SearchResults, _ int) int64 {
|
||||||
return acc + result.GetCostAggregation().GetTotalRelatedDataSize()
|
return acc + result.GetCostAggregation().GetTotalRelatedDataSize()
|
||||||
}, 0)
|
}, 0)
|
||||||
|
storageCost := lo.Reduce(results, func(acc segcore.StorageCost, result *internalpb.SearchResults, _ int) segcore.StorageCost {
|
||||||
|
acc.ScannedRemoteBytes += result.GetScannedRemoteBytes()
|
||||||
|
acc.ScannedTotalBytes += result.GetScannedTotalBytes()
|
||||||
|
return acc
|
||||||
|
}, segcore.StorageCost{})
|
||||||
searchResults.CostAggregation.TotalRelatedDataSize = relatedDataSize
|
searchResults.CostAggregation.TotalRelatedDataSize = relatedDataSize
|
||||||
searchResults.ChannelsMvcc = channelsMvcc
|
searchResults.ChannelsMvcc = channelsMvcc
|
||||||
searchResults.IsTopkReduce = isTopkReduce
|
searchResults.IsTopkReduce = isTopkReduce
|
||||||
searchResults.IsRecallEvaluation = isRecallEvaluation
|
searchResults.IsRecallEvaluation = isRecallEvaluation
|
||||||
|
searchResults.ScannedRemoteBytes = storageCost.ScannedRemoteBytes
|
||||||
|
searchResults.ScannedTotalBytes = storageCost.ScannedTotalBytes
|
||||||
return searchResults, nil
|
return searchResults, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -142,12 +149,14 @@ func ReduceAdvancedSearchResults(ctx context.Context, results []*internalpb.Sear
|
|||||||
searchResults := &internalpb.SearchResults{
|
searchResults := &internalpb.SearchResults{
|
||||||
IsAdvanced: true,
|
IsAdvanced: true,
|
||||||
}
|
}
|
||||||
|
storageCost := segcore.StorageCost{}
|
||||||
for index, result := range results {
|
for index, result := range results {
|
||||||
if result.GetIsTopkReduce() {
|
if result.GetIsTopkReduce() {
|
||||||
isTopkReduce = true
|
isTopkReduce = true
|
||||||
}
|
}
|
||||||
relatedDataSize += result.GetCostAggregation().GetTotalRelatedDataSize()
|
relatedDataSize += result.GetCostAggregation().GetTotalRelatedDataSize()
|
||||||
|
storageCost.ScannedRemoteBytes += result.GetScannedRemoteBytes()
|
||||||
|
storageCost.ScannedTotalBytes += result.GetScannedTotalBytes()
|
||||||
for ch, ts := range result.GetChannelsMvcc() {
|
for ch, ts := range result.GetChannelsMvcc() {
|
||||||
channelsMvcc[ch] = ts
|
channelsMvcc[ch] = ts
|
||||||
}
|
}
|
||||||
@ -178,6 +187,8 @@ func ReduceAdvancedSearchResults(ctx context.Context, results []*internalpb.Sear
|
|||||||
}
|
}
|
||||||
searchResults.CostAggregation.TotalRelatedDataSize = relatedDataSize
|
searchResults.CostAggregation.TotalRelatedDataSize = relatedDataSize
|
||||||
searchResults.IsTopkReduce = isTopkReduce
|
searchResults.IsTopkReduce = isTopkReduce
|
||||||
|
searchResults.ScannedRemoteBytes = storageCost.ScannedRemoteBytes
|
||||||
|
searchResults.ScannedTotalBytes = storageCost.ScannedTotalBytes
|
||||||
return searchResults, nil
|
return searchResults, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -231,7 +242,6 @@ func DecodeSearchResults(ctx context.Context, searchResults []*internalpb.Search
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
results = append(results, &partialResultData)
|
results = append(results, &partialResultData)
|
||||||
}
|
}
|
||||||
return results, nil
|
return results, nil
|
||||||
@ -286,6 +296,8 @@ func MergeInternalRetrieveResult(ctx context.Context, retrieveResults []*interna
|
|||||||
hasMoreResult := false
|
hasMoreResult := false
|
||||||
for _, r := range retrieveResults {
|
for _, r := range retrieveResults {
|
||||||
ret.AllRetrieveCount += r.GetAllRetrieveCount()
|
ret.AllRetrieveCount += r.GetAllRetrieveCount()
|
||||||
|
ret.ScannedRemoteBytes += r.GetScannedRemoteBytes()
|
||||||
|
ret.ScannedTotalBytes += r.GetScannedTotalBytes()
|
||||||
relatedDataSize += r.GetCostAggregation().GetTotalRelatedDataSize()
|
relatedDataSize += r.GetCostAggregation().GetTotalRelatedDataSize()
|
||||||
size := typeutil.GetSizeOfIDs(r.GetIds())
|
size := typeutil.GetSizeOfIDs(r.GetIds())
|
||||||
if r == nil || len(r.GetFieldsData()) == 0 || size == 0 {
|
if r == nil || len(r.GetFieldsData()) == 0 || size == 0 {
|
||||||
@ -402,6 +414,8 @@ func MergeSegcoreRetrieveResults(ctx context.Context, retrieveResults []*segcore
|
|||||||
for i, r := range retrieveResults {
|
for i, r := range retrieveResults {
|
||||||
size := typeutil.GetSizeOfIDs(r.GetIds())
|
size := typeutil.GetSizeOfIDs(r.GetIds())
|
||||||
ret.AllRetrieveCount += r.GetAllRetrieveCount()
|
ret.AllRetrieveCount += r.GetAllRetrieveCount()
|
||||||
|
ret.ScannedRemoteBytes += r.GetScannedRemoteBytes()
|
||||||
|
ret.ScannedTotalBytes += r.GetScannedTotalBytes()
|
||||||
if r == nil || len(r.GetOffset()) == 0 || size == 0 {
|
if r == nil || len(r.GetOffset()) == 0 || size == 0 {
|
||||||
log.Debug("filter out invalid retrieve result")
|
log.Debug("filter out invalid retrieve result")
|
||||||
continue
|
continue
|
||||||
|
|||||||
@ -955,6 +955,8 @@ func (suite *ResultSuite) TestReduceSearchOnQueryNode() {
|
|||||||
NumQueries: nq,
|
NumQueries: nq,
|
||||||
TopK: topK,
|
TopK: topK,
|
||||||
SlicedBlob: mockBlob,
|
SlicedBlob: mockBlob,
|
||||||
|
ScannedRemoteBytes: 100,
|
||||||
|
ScannedTotalBytes: 200,
|
||||||
}
|
}
|
||||||
results = append(results, subRes1)
|
results = append(results, subRes1)
|
||||||
}
|
}
|
||||||
@ -964,6 +966,8 @@ func (suite *ResultSuite) TestReduceSearchOnQueryNode() {
|
|||||||
NumQueries: nq,
|
NumQueries: nq,
|
||||||
TopK: topK,
|
TopK: topK,
|
||||||
SlicedBlob: mockBlob,
|
SlicedBlob: mockBlob,
|
||||||
|
ScannedRemoteBytes: 100,
|
||||||
|
ScannedTotalBytes: 200,
|
||||||
}
|
}
|
||||||
results = append(results, subRes2)
|
results = append(results, subRes2)
|
||||||
}
|
}
|
||||||
@ -977,6 +981,44 @@ func (suite *ResultSuite) TestReduceSearchOnQueryNode() {
|
|||||||
suite.Equal(nq, subRes1.GetNumQueries())
|
suite.Equal(nq, subRes1.GetNumQueries())
|
||||||
suite.Equal(topK, subRes1.GetTopK())
|
suite.Equal(topK, subRes1.GetTopK())
|
||||||
suite.Equal(mockBlob, subRes1.GetSlicedBlob())
|
suite.Equal(mockBlob, subRes1.GetSlicedBlob())
|
||||||
|
suite.Equal(int64(200), reducedRes.GetScannedRemoteBytes())
|
||||||
|
suite.Equal(int64(400), reducedRes.GetScannedTotalBytes())
|
||||||
|
}
|
||||||
|
|
||||||
|
func (suite *ResultSuite) TestReduceSearchOnQueryNode_NonAdvanced() {
|
||||||
|
ctx := context.Background()
|
||||||
|
metricType := metric.IP
|
||||||
|
nq := int64(1)
|
||||||
|
topK := int64(1)
|
||||||
|
// build minimal valid blobs via encoder
|
||||||
|
srd1 := &schemapb.SearchResultData{
|
||||||
|
NumQueries: nq,
|
||||||
|
TopK: topK,
|
||||||
|
Ids: &schemapb.IDs{IdField: &schemapb.IDs_IntId{IntId: &schemapb.LongArray{Data: []int64{1}}}},
|
||||||
|
Scores: []float32{0.9},
|
||||||
|
Topks: []int64{1},
|
||||||
|
}
|
||||||
|
srd2 := &schemapb.SearchResultData{
|
||||||
|
NumQueries: nq,
|
||||||
|
TopK: topK,
|
||||||
|
Ids: &schemapb.IDs{IdField: &schemapb.IDs_IntId{IntId: &schemapb.LongArray{Data: []int64{2}}}},
|
||||||
|
Scores: []float32{0.8},
|
||||||
|
Topks: []int64{1},
|
||||||
|
}
|
||||||
|
rEnc1, err := EncodeSearchResultData(ctx, srd1, nq, topK, metricType)
|
||||||
|
suite.NoError(err)
|
||||||
|
rEnc1.ScannedRemoteBytes = 111
|
||||||
|
rEnc1.ScannedTotalBytes = 222
|
||||||
|
rEnc2, err := EncodeSearchResultData(ctx, srd2, nq, topK, metricType)
|
||||||
|
suite.NoError(err)
|
||||||
|
rEnc2.ScannedRemoteBytes = 333
|
||||||
|
rEnc2.ScannedTotalBytes = 444
|
||||||
|
|
||||||
|
out, err := ReduceSearchOnQueryNode(ctx, []*internalpb.SearchResults{rEnc1, rEnc2}, reduce.NewReduceSearchResultInfo(nq, topK).WithMetricType(metricType).WithPkType(schemapb.DataType_Int64))
|
||||||
|
suite.NoError(err)
|
||||||
|
// costs should aggregate across both included results
|
||||||
|
suite.Equal(int64(111+333), out.GetScannedRemoteBytes())
|
||||||
|
suite.Equal(int64(222+444), out.GetScannedTotalBytes())
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestResult_MergeRequestCost(t *testing.T) {
|
func TestResult_MergeRequestCost(t *testing.T) {
|
||||||
|
|||||||
@ -147,6 +147,8 @@ func retrieveOnSegmentsWithStream(ctx context.Context, mgr *Manager, segments []
|
|||||||
},
|
},
|
||||||
SealedSegmentIDsRetrieved: []int64{segment.ID()},
|
SealedSegmentIDsRetrieved: []int64{segment.ID()},
|
||||||
AllRetrieveCount: result.GetAllRetrieveCount(),
|
AllRetrieveCount: result.GetAllRetrieveCount(),
|
||||||
|
ScannedRemoteBytes: result.GetScannedRemoteBytes(),
|
||||||
|
ScannedTotalBytes: result.GetScannedTotalBytes(),
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
errs[i] = err
|
errs[i] = err
|
||||||
}
|
}
|
||||||
|
|||||||
@ -160,6 +160,8 @@ func (t *QueryTask) Execute() error {
|
|||||||
},
|
},
|
||||||
AllRetrieveCount: reducedResult.GetAllRetrieveCount(),
|
AllRetrieveCount: reducedResult.GetAllRetrieveCount(),
|
||||||
HasMoreResult: reducedResult.HasMoreResult,
|
HasMoreResult: reducedResult.HasMoreResult,
|
||||||
|
ScannedRemoteBytes: reducedResult.GetScannedRemoteBytes(),
|
||||||
|
ScannedTotalBytes: reducedResult.GetScannedTotalBytes(),
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@ -236,7 +236,7 @@ func (t *SearchTask) Execute() error {
|
|||||||
metrics.BatchReduce).
|
metrics.BatchReduce).
|
||||||
Observe(float64(tr.RecordSpan().Milliseconds()))
|
Observe(float64(tr.RecordSpan().Milliseconds()))
|
||||||
for i := range t.originNqs {
|
for i := range t.originNqs {
|
||||||
blob, err := segcore.GetSearchResultDataBlob(t.ctx, blobs, i)
|
blob, cost, err := segcore.GetSearchResultDataBlob(t.ctx, blobs, i)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -267,6 +267,8 @@ func (t *SearchTask) Execute() error {
|
|||||||
ServiceTime: tr.ElapseSpan().Milliseconds(),
|
ServiceTime: tr.ElapseSpan().Milliseconds(),
|
||||||
TotalRelatedDataSize: relatedDataSize,
|
TotalRelatedDataSize: relatedDataSize,
|
||||||
},
|
},
|
||||||
|
ScannedRemoteBytes: cost.ScannedRemoteBytes,
|
||||||
|
ScannedTotalBytes: cost.ScannedTotalBytes,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -516,7 +518,7 @@ func (t *StreamingSearchTask) Execute() error {
|
|||||||
|
|
||||||
// 2. reorganize blobs to original search request
|
// 2. reorganize blobs to original search request
|
||||||
for i := range t.originNqs {
|
for i := range t.originNqs {
|
||||||
blob, err := segcore.GetSearchResultDataBlob(t.ctx, t.resultBlobs, i)
|
blob, cost, err := segcore.GetSearchResultDataBlob(t.ctx, t.resultBlobs, i)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -547,6 +549,8 @@ func (t *StreamingSearchTask) Execute() error {
|
|||||||
ServiceTime: tr.ElapseSpan().Milliseconds(),
|
ServiceTime: tr.ElapseSpan().Milliseconds(),
|
||||||
TotalRelatedDataSize: relatedDataSize,
|
TotalRelatedDataSize: relatedDataSize,
|
||||||
},
|
},
|
||||||
|
ScannedRemoteBytes: cost.ScannedRemoteBytes,
|
||||||
|
ScannedTotalBytes: cost.ScannedTotalBytes,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -578,6 +582,8 @@ func (t *StreamingSearchTask) maybeReturnForEmptyResults(results []*segments.Sea
|
|||||||
CostAggregation: &internalpb.CostAggregation{
|
CostAggregation: &internalpb.CostAggregation{
|
||||||
ServiceTime: tr.ElapseSpan().Milliseconds(),
|
ServiceTime: tr.ElapseSpan().Milliseconds(),
|
||||||
},
|
},
|
||||||
|
ScannedRemoteBytes: 0,
|
||||||
|
ScannedTotalBytes: 0,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
|
|||||||
@ -42,6 +42,11 @@ type (
|
|||||||
StreamSearchReducer = C.CSearchStreamReducer
|
StreamSearchReducer = C.CSearchStreamReducer
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type StorageCost struct {
|
||||||
|
ScannedRemoteBytes int64
|
||||||
|
ScannedTotalBytes int64
|
||||||
|
}
|
||||||
|
|
||||||
func ParseSliceInfo(originNQs []int64, originTopKs []int64, nqPerSlice int64) *SliceInfo {
|
func ParseSliceInfo(originNQs []int64, originTopKs []int64, nqPerSlice int64) *SliceInfo {
|
||||||
sInfo := &SliceInfo{
|
sInfo := &SliceInfo{
|
||||||
SliceNQs: make([]int64, 0),
|
SliceNQs: make([]int64, 0),
|
||||||
@ -152,13 +157,15 @@ func ReduceSearchResultsAndFillData(ctx context.Context, plan *SearchPlan, searc
|
|||||||
return cSearchResultDataBlobs, nil
|
return cSearchResultDataBlobs, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetSearchResultDataBlob(ctx context.Context, cSearchResultDataBlobs SearchResultDataBlobs, blobIndex int) ([]byte, error) {
|
func GetSearchResultDataBlob(ctx context.Context, cSearchResultDataBlobs SearchResultDataBlobs, blobIndex int) ([]byte, StorageCost, error) {
|
||||||
var blob C.CProto
|
var blob C.CProto
|
||||||
status := C.GetSearchResultDataBlob(&blob, cSearchResultDataBlobs, C.int32_t(blobIndex))
|
var scannedRemoteBytes C.int64_t
|
||||||
|
var scannedTotalBytes C.int64_t
|
||||||
|
status := C.GetSearchResultDataBlob(&blob, &scannedRemoteBytes, &scannedTotalBytes, cSearchResultDataBlobs, C.int32_t(blobIndex))
|
||||||
if err := ConsumeCStatusIntoError(&status); err != nil {
|
if err := ConsumeCStatusIntoError(&status); err != nil {
|
||||||
return nil, errors.Wrap(err, "marshal failed")
|
return nil, StorageCost{ScannedRemoteBytes: 0, ScannedTotalBytes: 0}, errors.Wrap(err, "marshal failed")
|
||||||
}
|
}
|
||||||
return getCProtoBlob(&blob), nil
|
return getCProtoBlob(&blob), StorageCost{ScannedRemoteBytes: int64(scannedRemoteBytes), ScannedTotalBytes: int64(scannedTotalBytes)}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func DeleteSearchResultDataBlobs(cSearchResultDataBlobs SearchResultDataBlobs) {
|
func DeleteSearchResultDataBlobs(cSearchResultDataBlobs SearchResultDataBlobs) {
|
||||||
|
|||||||
@ -89,6 +89,8 @@ func (c *RetrieveResultCache) merge(result *internalpb.RetrieveResults) {
|
|||||||
}
|
}
|
||||||
c.result.AllRetrieveCount = c.result.AllRetrieveCount + result.AllRetrieveCount
|
c.result.AllRetrieveCount = c.result.AllRetrieveCount + result.AllRetrieveCount
|
||||||
c.result.CostAggregation = mergeCostAggregation(c.result.GetCostAggregation(), result.GetCostAggregation())
|
c.result.CostAggregation = mergeCostAggregation(c.result.GetCostAggregation(), result.GetCostAggregation())
|
||||||
|
c.result.ScannedRemoteBytes = c.result.GetScannedRemoteBytes() + result.GetScannedRemoteBytes()
|
||||||
|
c.result.ScannedTotalBytes = c.result.GetScannedTotalBytes() + result.GetScannedTotalBytes()
|
||||||
c.size = proto.Size(c.result)
|
c.size = proto.Size(c.result)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -160,6 +162,8 @@ func (s *ResultCacheServer) splitMsgToMaxSize(result *internalpb.RetrieveResults
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
results[len(results)-1].AllRetrieveCount = result.AllRetrieveCount
|
results[len(results)-1].AllRetrieveCount = result.AllRetrieveCount
|
||||||
|
results[len(results)-1].ScannedRemoteBytes = result.GetScannedRemoteBytes()
|
||||||
|
results[len(results)-1].ScannedTotalBytes = result.GetScannedTotalBytes()
|
||||||
results[len(results)-1].CostAggregation = result.CostAggregation
|
results[len(results)-1].CostAggregation = result.CostAggregation
|
||||||
return results
|
return results
|
||||||
}
|
}
|
||||||
|
|||||||
@ -464,6 +464,22 @@ var (
|
|||||||
Help: "latency of function call",
|
Help: "latency of function call",
|
||||||
Buckets: buckets,
|
Buckets: buckets,
|
||||||
}, []string{nodeIDLabelName, collectionName, functionTypeName, functionProvider, functionName})
|
}, []string{nodeIDLabelName, collectionName, functionTypeName, functionProvider, functionName})
|
||||||
|
|
||||||
|
ProxyScannedRemoteBytes = prometheus.NewCounterVec(
|
||||||
|
prometheus.CounterOpts{
|
||||||
|
Namespace: milvusNamespace,
|
||||||
|
Subsystem: typeutil.ProxyRole,
|
||||||
|
Name: "scanned_remote_bytes",
|
||||||
|
Help: "the scanned remote bytes",
|
||||||
|
}, []string{nodeIDLabelName, queryTypeLabelName, databaseLabelName, collectionName})
|
||||||
|
|
||||||
|
ProxyScannedTotalBytes = prometheus.NewCounterVec(
|
||||||
|
prometheus.CounterOpts{
|
||||||
|
Namespace: milvusNamespace,
|
||||||
|
Subsystem: typeutil.ProxyRole,
|
||||||
|
Name: "scanned_total_bytes",
|
||||||
|
Help: "the scanned total bytes",
|
||||||
|
}, []string{nodeIDLabelName, queryTypeLabelName, databaseLabelName, collectionName})
|
||||||
)
|
)
|
||||||
|
|
||||||
// RegisterProxy registers Proxy metrics
|
// RegisterProxy registers Proxy metrics
|
||||||
@ -534,6 +550,8 @@ func RegisterProxy(registry *prometheus.Registry) {
|
|||||||
|
|
||||||
registry.MustRegister(ProxyFunctionlatency)
|
registry.MustRegister(ProxyFunctionlatency)
|
||||||
|
|
||||||
|
registry.MustRegister(ProxyScannedRemoteBytes)
|
||||||
|
registry.MustRegister(ProxyScannedTotalBytes)
|
||||||
RegisterStreamingServiceClient(registry)
|
RegisterStreamingServiceClient(registry)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -696,4 +714,28 @@ func CleanupProxyCollectionMetrics(nodeID int64, dbName string, collection strin
|
|||||||
databaseLabelName: dbName,
|
databaseLabelName: dbName,
|
||||||
collectionName: collection,
|
collectionName: collection,
|
||||||
})
|
})
|
||||||
|
ProxyScannedRemoteBytes.Delete(prometheus.Labels{
|
||||||
|
nodeIDLabelName: strconv.FormatInt(nodeID, 10),
|
||||||
|
queryTypeLabelName: SearchLabel,
|
||||||
|
databaseLabelName: dbName,
|
||||||
|
collectionName: collection,
|
||||||
|
})
|
||||||
|
ProxyScannedRemoteBytes.Delete(prometheus.Labels{
|
||||||
|
nodeIDLabelName: strconv.FormatInt(nodeID, 10),
|
||||||
|
queryTypeLabelName: QueryLabel,
|
||||||
|
databaseLabelName: dbName,
|
||||||
|
collectionName: collection,
|
||||||
|
})
|
||||||
|
ProxyScannedTotalBytes.Delete(prometheus.Labels{
|
||||||
|
nodeIDLabelName: strconv.FormatInt(nodeID, 10),
|
||||||
|
queryTypeLabelName: SearchLabel,
|
||||||
|
databaseLabelName: dbName,
|
||||||
|
collectionName: collection,
|
||||||
|
})
|
||||||
|
ProxyScannedTotalBytes.Delete(prometheus.Labels{
|
||||||
|
nodeIDLabelName: strconv.FormatInt(nodeID, 10),
|
||||||
|
queryTypeLabelName: QueryLabel,
|
||||||
|
databaseLabelName: dbName,
|
||||||
|
collectionName: collection,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@ -171,6 +171,8 @@ message SearchResults {
|
|||||||
int64 all_search_count = 17;
|
int64 all_search_count = 17;
|
||||||
bool is_topk_reduce = 18;
|
bool is_topk_reduce = 18;
|
||||||
bool is_recall_evaluation = 19;
|
bool is_recall_evaluation = 19;
|
||||||
|
int64 scanned_remote_bytes = 20;
|
||||||
|
int64 scanned_total_bytes = 21;
|
||||||
}
|
}
|
||||||
|
|
||||||
message CostAggregation {
|
message CostAggregation {
|
||||||
@ -218,6 +220,8 @@ message RetrieveResults {
|
|||||||
CostAggregation costAggregation = 13;
|
CostAggregation costAggregation = 13;
|
||||||
int64 all_retrieve_count = 14;
|
int64 all_retrieve_count = 14;
|
||||||
bool has_more_result = 15;
|
bool has_more_result = 15;
|
||||||
|
int64 scanned_remote_bytes = 16;
|
||||||
|
int64 scanned_total_bytes = 17;
|
||||||
}
|
}
|
||||||
|
|
||||||
message LoadIndex {
|
message LoadIndex {
|
||||||
|
|||||||
@ -1521,6 +1521,8 @@ type SearchResults struct {
|
|||||||
AllSearchCount int64 `protobuf:"varint,17,opt,name=all_search_count,json=allSearchCount,proto3" json:"all_search_count,omitempty"`
|
AllSearchCount int64 `protobuf:"varint,17,opt,name=all_search_count,json=allSearchCount,proto3" json:"all_search_count,omitempty"`
|
||||||
IsTopkReduce bool `protobuf:"varint,18,opt,name=is_topk_reduce,json=isTopkReduce,proto3" json:"is_topk_reduce,omitempty"`
|
IsTopkReduce bool `protobuf:"varint,18,opt,name=is_topk_reduce,json=isTopkReduce,proto3" json:"is_topk_reduce,omitempty"`
|
||||||
IsRecallEvaluation bool `protobuf:"varint,19,opt,name=is_recall_evaluation,json=isRecallEvaluation,proto3" json:"is_recall_evaluation,omitempty"`
|
IsRecallEvaluation bool `protobuf:"varint,19,opt,name=is_recall_evaluation,json=isRecallEvaluation,proto3" json:"is_recall_evaluation,omitempty"`
|
||||||
|
ScannedRemoteBytes int64 `protobuf:"varint,20,opt,name=scanned_remote_bytes,json=scannedRemoteBytes,proto3" json:"scanned_remote_bytes,omitempty"`
|
||||||
|
ScannedTotalBytes int64 `protobuf:"varint,21,opt,name=scanned_total_bytes,json=scannedTotalBytes,proto3" json:"scanned_total_bytes,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *SearchResults) Reset() {
|
func (x *SearchResults) Reset() {
|
||||||
@ -1688,6 +1690,20 @@ func (x *SearchResults) GetIsRecallEvaluation() bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (x *SearchResults) GetScannedRemoteBytes() int64 {
|
||||||
|
if x != nil {
|
||||||
|
return x.ScannedRemoteBytes
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *SearchResults) GetScannedTotalBytes() int64 {
|
||||||
|
if x != nil {
|
||||||
|
return x.ScannedTotalBytes
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
type CostAggregation struct {
|
type CostAggregation struct {
|
||||||
state protoimpl.MessageState
|
state protoimpl.MessageState
|
||||||
sizeCache protoimpl.SizeCache
|
sizeCache protoimpl.SizeCache
|
||||||
@ -1975,6 +1991,8 @@ type RetrieveResults struct {
|
|||||||
CostAggregation *CostAggregation `protobuf:"bytes,13,opt,name=costAggregation,proto3" json:"costAggregation,omitempty"`
|
CostAggregation *CostAggregation `protobuf:"bytes,13,opt,name=costAggregation,proto3" json:"costAggregation,omitempty"`
|
||||||
AllRetrieveCount int64 `protobuf:"varint,14,opt,name=all_retrieve_count,json=allRetrieveCount,proto3" json:"all_retrieve_count,omitempty"`
|
AllRetrieveCount int64 `protobuf:"varint,14,opt,name=all_retrieve_count,json=allRetrieveCount,proto3" json:"all_retrieve_count,omitempty"`
|
||||||
HasMoreResult bool `protobuf:"varint,15,opt,name=has_more_result,json=hasMoreResult,proto3" json:"has_more_result,omitempty"`
|
HasMoreResult bool `protobuf:"varint,15,opt,name=has_more_result,json=hasMoreResult,proto3" json:"has_more_result,omitempty"`
|
||||||
|
ScannedRemoteBytes int64 `protobuf:"varint,16,opt,name=scanned_remote_bytes,json=scannedRemoteBytes,proto3" json:"scanned_remote_bytes,omitempty"`
|
||||||
|
ScannedTotalBytes int64 `protobuf:"varint,17,opt,name=scanned_total_bytes,json=scannedTotalBytes,proto3" json:"scanned_total_bytes,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *RetrieveResults) Reset() {
|
func (x *RetrieveResults) Reset() {
|
||||||
@ -2086,6 +2104,20 @@ func (x *RetrieveResults) GetHasMoreResult() bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (x *RetrieveResults) GetScannedRemoteBytes() int64 {
|
||||||
|
if x != nil {
|
||||||
|
return x.ScannedRemoteBytes
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *RetrieveResults) GetScannedTotalBytes() int64 {
|
||||||
|
if x != nil {
|
||||||
|
return x.ScannedTotalBytes
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
type LoadIndex struct {
|
type LoadIndex struct {
|
||||||
state protoimpl.MessageState
|
state protoimpl.MessageState
|
||||||
sizeCache protoimpl.SizeCache
|
sizeCache protoimpl.SizeCache
|
||||||
@ -4224,7 +4256,7 @@ var file_internal_proto_rawDesc = []byte{
|
|||||||
0x65, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x64,
|
0x65, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x64,
|
||||||
0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x71, 0x5f, 0x69, 0x6e,
|
0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x71, 0x5f, 0x69, 0x6e,
|
||||||
0x64, 0x65, 0x78, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x72, 0x65, 0x71, 0x49, 0x6e,
|
0x64, 0x65, 0x78, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x72, 0x65, 0x71, 0x49, 0x6e,
|
||||||
0x64, 0x65, 0x78, 0x22, 0xd9, 0x07, 0x0a, 0x0d, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65,
|
0x64, 0x65, 0x78, 0x22, 0xbb, 0x08, 0x0a, 0x0d, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65,
|
||||||
0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x30, 0x0a, 0x04, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20,
|
0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x30, 0x0a, 0x04, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20,
|
||||||
0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f,
|
0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f,
|
||||||
0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x73, 0x67, 0x42, 0x61, 0x73,
|
0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x73, 0x67, 0x42, 0x61, 0x73,
|
||||||
@ -4281,443 +4313,455 @@ var file_internal_proto_rawDesc = []byte{
|
|||||||
0x69, 0x73, 0x54, 0x6f, 0x70, 0x6b, 0x52, 0x65, 0x64, 0x75, 0x63, 0x65, 0x12, 0x30, 0x0a, 0x14,
|
0x69, 0x73, 0x54, 0x6f, 0x70, 0x6b, 0x52, 0x65, 0x64, 0x75, 0x63, 0x65, 0x12, 0x30, 0x0a, 0x14,
|
||||||
0x69, 0x73, 0x5f, 0x72, 0x65, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61,
|
0x69, 0x73, 0x5f, 0x72, 0x65, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x65, 0x76, 0x61, 0x6c, 0x75, 0x61,
|
||||||
0x74, 0x69, 0x6f, 0x6e, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x69, 0x73, 0x52, 0x65,
|
0x74, 0x69, 0x6f, 0x6e, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x69, 0x73, 0x52, 0x65,
|
||||||
0x63, 0x61, 0x6c, 0x6c, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x3f,
|
0x63, 0x61, 0x6c, 0x6c, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x30,
|
||||||
0x0a, 0x11, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x4d, 0x76, 0x63, 0x63, 0x45, 0x6e,
|
0x0a, 0x14, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65,
|
||||||
0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
|
0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x73, 0x63,
|
||||||
0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02,
|
0x61, 0x6e, 0x6e, 0x65, 0x64, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73,
|
||||||
0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22,
|
0x12, 0x2e, 0x0a, 0x13, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x5f, 0x74, 0x6f, 0x74, 0x61,
|
||||||
0xa5, 0x01, 0x0a, 0x0f, 0x43, 0x6f, 0x73, 0x74, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74,
|
0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x15, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x73,
|
||||||
0x69, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54,
|
0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73,
|
||||||
0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x70, 0x6f,
|
0x1a, 0x3f, 0x0a, 0x11, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x4d, 0x76, 0x63, 0x63,
|
||||||
0x6e, 0x73, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69,
|
0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01,
|
||||||
0x63, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x73, 0x65,
|
0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
|
||||||
0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x6f, 0x74,
|
0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38,
|
||||||
0x61, 0x6c, 0x4e, 0x51, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x74, 0x6f, 0x74, 0x61,
|
0x01, 0x22, 0xa5, 0x01, 0x0a, 0x0f, 0x43, 0x6f, 0x73, 0x74, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67,
|
||||||
0x6c, 0x4e, 0x51, 0x12, 0x32, 0x0a, 0x14, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x6c, 0x61,
|
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
|
||||||
0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28,
|
0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x72, 0x65, 0x73,
|
||||||
0x03, 0x52, 0x14, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x44,
|
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x65, 0x72,
|
||||||
0x61, 0x74, 0x61, 0x53, 0x69, 0x7a, 0x65, 0x22, 0xd3, 0x06, 0x0a, 0x0f, 0x52, 0x65, 0x74, 0x72,
|
0x76, 0x69, 0x63, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b,
|
||||||
0x69, 0x65, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x30, 0x0a, 0x04, 0x62,
|
0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x74,
|
||||||
0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6d, 0x69, 0x6c, 0x76,
|
0x6f, 0x74, 0x61, 0x6c, 0x4e, 0x51, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x74, 0x6f,
|
||||||
|
0x74, 0x61, 0x6c, 0x4e, 0x51, 0x12, 0x32, 0x0a, 0x14, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65,
|
||||||
|
0x6c, 0x61, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20,
|
||||||
|
0x01, 0x28, 0x03, 0x52, 0x14, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65,
|
||||||
|
0x64, 0x44, 0x61, 0x74, 0x61, 0x53, 0x69, 0x7a, 0x65, 0x22, 0xd3, 0x06, 0x0a, 0x0f, 0x52, 0x65,
|
||||||
|
0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x30, 0x0a,
|
||||||
|
0x04, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6d, 0x69,
|
||||||
|
0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f,
|
||||||
|
0x6e, 0x2e, 0x4d, 0x73, 0x67, 0x42, 0x61, 0x73, 0x65, 0x52, 0x04, 0x62, 0x61, 0x73, 0x65, 0x12,
|
||||||
|
0x14, 0x0a, 0x05, 0x72, 0x65, 0x71, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05,
|
||||||
|
0x72, 0x65, 0x71, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x62, 0x49, 0x44, 0x18, 0x03, 0x20,
|
||||||
|
0x01, 0x28, 0x03, 0x52, 0x04, 0x64, 0x62, 0x49, 0x44, 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, 0x22, 0x0a,
|
||||||
|
0x0c, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x73, 0x18, 0x05, 0x20,
|
||||||
|
0x03, 0x28, 0x03, 0x52, 0x0c, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44,
|
||||||
|
0x73, 0x12, 0x30, 0x0a, 0x14, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f,
|
||||||
|
0x65, 0x78, 0x70, 0x72, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52,
|
||||||
|
0x12, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x45, 0x78, 0x70, 0x72, 0x50,
|
||||||
|
0x6c, 0x61, 0x6e, 0x12, 0x28, 0x0a, 0x10, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x66, 0x69,
|
||||||
|
0x65, 0x6c, 0x64, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0e, 0x6f,
|
||||||
|
0x75, 0x74, 0x70, 0x75, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x49, 0x64, 0x12, 0x25, 0x0a,
|
||||||
|
0x0e, 0x6d, 0x76, 0x63, 0x63, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18,
|
||||||
|
0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x6d, 0x76, 0x63, 0x63, 0x54, 0x69, 0x6d, 0x65, 0x73,
|
||||||
|
0x74, 0x61, 0x6d, 0x70, 0x12, 0x2f, 0x0a, 0x13, 0x67, 0x75, 0x61, 0x72, 0x61, 0x6e, 0x74, 0x65,
|
||||||
|
0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x09, 0x20, 0x01, 0x28,
|
||||||
|
0x04, 0x52, 0x12, 0x67, 0x75, 0x61, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x65, 0x54, 0x69, 0x6d, 0x65,
|
||||||
|
0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x2b, 0x0a, 0x11, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74,
|
||||||
|
0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04,
|
||||||
|
0x52, 0x10, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61,
|
||||||
|
0x6d, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28,
|
||||||
|
0x03, 0x52, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x69, 0x67, 0x6e, 0x6f,
|
||||||
|
0x72, 0x65, 0x47, 0x72, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52,
|
||||||
|
0x0d, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x47, 0x72, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x12, 0x19,
|
||||||
|
0x0a, 0x08, 0x69, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08,
|
||||||
|
0x52, 0x07, 0x69, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x45, 0x0a, 0x1f, 0x69, 0x74, 0x65,
|
||||||
|
0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e,
|
||||||
|
0x5f, 0x72, 0x65, 0x64, 0x75, 0x63, 0x65, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x0e, 0x20, 0x01,
|
||||||
|
0x28, 0x03, 0x52, 0x1c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x74,
|
||||||
|
0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x64, 0x75, 0x63, 0x65, 0x52, 0x61, 0x74, 0x65,
|
||||||
|
0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0f, 0x20, 0x01,
|
||||||
|
0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x14,
|
||||||
|
0x72, 0x65, 0x64, 0x75, 0x63, 0x65, 0x5f, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x66, 0x6f, 0x72, 0x5f,
|
||||||
|
0x62, 0x65, 0x73, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x72, 0x65, 0x64, 0x75,
|
||||||
|
0x63, 0x65, 0x53, 0x74, 0x6f, 0x70, 0x46, 0x6f, 0x72, 0x42, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a,
|
||||||
|
0x0b, 0x72, 0x65, 0x64, 0x75, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x11, 0x20, 0x01,
|
||||||
|
0x28, 0x05, 0x52, 0x0a, 0x72, 0x65, 0x64, 0x75, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x52,
|
||||||
|
0x0a, 0x11, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6c, 0x65,
|
||||||
|
0x76, 0x65, 0x6c, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x6d, 0x69, 0x6c, 0x76,
|
||||||
0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e,
|
0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e,
|
||||||
0x4d, 0x73, 0x67, 0x42, 0x61, 0x73, 0x65, 0x52, 0x04, 0x62, 0x61, 0x73, 0x65, 0x12, 0x14, 0x0a,
|
0x43, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x4c, 0x65, 0x76, 0x65, 0x6c,
|
||||||
0x05, 0x72, 0x65, 0x71, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x72, 0x65,
|
0x52, 0x10, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x4c, 0x65, 0x76,
|
||||||
0x71, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x62, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28,
|
0x65, 0x6c, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f,
|
||||||
0x03, 0x52, 0x04, 0x64, 0x62, 0x49, 0x44, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65,
|
0x72, 0x18, 0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x49, 0x74, 0x65, 0x72, 0x61,
|
||||||
0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x63,
|
0x74, 0x6f, 0x72, 0x12, 0x3a, 0x0a, 0x19, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f,
|
||||||
0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x22, 0x0a, 0x0c, 0x70,
|
0x6e, 0x5f, 0x74, 0x74, 0x6c, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x73,
|
||||||
0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28,
|
0x18, 0x14, 0x20, 0x01, 0x28, 0x04, 0x52, 0x17, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69,
|
||||||
0x03, 0x52, 0x0c, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x73, 0x12,
|
0x6f, 0x6e, 0x54, 0x74, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x73, 0x22,
|
||||||
0x30, 0x0a, 0x14, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x65, 0x78,
|
0xb2, 0x05, 0x0a, 0x0f, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x52, 0x65, 0x73, 0x75,
|
||||||
0x70, 0x72, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x12, 0x73,
|
0x6c, 0x74, 0x73, 0x12, 0x30, 0x0a, 0x04, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
|
||||||
0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x45, 0x78, 0x70, 0x72, 0x50, 0x6c, 0x61,
|
|
||||||
0x6e, 0x12, 0x28, 0x0a, 0x10, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x66, 0x69, 0x65, 0x6c,
|
|
||||||
0x64, 0x73, 0x5f, 0x69, 0x64, 0x18, 0x07, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0e, 0x6f, 0x75, 0x74,
|
|
||||||
0x70, 0x75, 0x74, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x49, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x6d,
|
|
||||||
0x76, 0x63, 0x63, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x08, 0x20,
|
|
||||||
0x01, 0x28, 0x04, 0x52, 0x0d, 0x6d, 0x76, 0x63, 0x63, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61,
|
|
||||||
0x6d, 0x70, 0x12, 0x2f, 0x0a, 0x13, 0x67, 0x75, 0x61, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x65, 0x5f,
|
|
||||||
0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52,
|
|
||||||
0x12, 0x67, 0x75, 0x61, 0x72, 0x61, 0x6e, 0x74, 0x65, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74,
|
|
||||||
0x61, 0x6d, 0x70, 0x12, 0x2b, 0x0a, 0x11, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x5f, 0x74,
|
|
||||||
0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10,
|
|
||||||
0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70,
|
|
||||||
0x12, 0x14, 0x0a, 0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52,
|
|
||||||
0x05, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x24, 0x0a, 0x0d, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65,
|
|
||||||
0x47, 0x72, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x69,
|
|
||||||
0x67, 0x6e, 0x6f, 0x72, 0x65, 0x47, 0x72, 0x6f, 0x77, 0x69, 0x6e, 0x67, 0x12, 0x19, 0x0a, 0x08,
|
|
||||||
0x69, 0x73, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07,
|
|
||||||
0x69, 0x73, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x45, 0x0a, 0x1f, 0x69, 0x74, 0x65, 0x72, 0x61,
|
|
||||||
0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72,
|
|
||||||
0x65, 0x64, 0x75, 0x63, 0x65, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03,
|
|
||||||
0x52, 0x1c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x74, 0x65, 0x6e,
|
|
||||||
0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x64, 0x75, 0x63, 0x65, 0x52, 0x61, 0x74, 0x65, 0x12, 0x1a,
|
|
||||||
0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09,
|
|
||||||
0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2f, 0x0a, 0x14, 0x72, 0x65,
|
|
||||||
0x64, 0x75, 0x63, 0x65, 0x5f, 0x73, 0x74, 0x6f, 0x70, 0x5f, 0x66, 0x6f, 0x72, 0x5f, 0x62, 0x65,
|
|
||||||
0x73, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x72, 0x65, 0x64, 0x75, 0x63, 0x65,
|
|
||||||
0x53, 0x74, 0x6f, 0x70, 0x46, 0x6f, 0x72, 0x42, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x72,
|
|
||||||
0x65, 0x64, 0x75, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x05,
|
|
||||||
0x52, 0x0a, 0x72, 0x65, 0x64, 0x75, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x52, 0x0a, 0x11,
|
|
||||||
0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6c, 0x65, 0x76, 0x65,
|
|
||||||
0x6c, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73,
|
|
||||||
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x43, 0x6f,
|
|
||||||
0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x10,
|
|
||||||
0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x4c, 0x65, 0x76, 0x65, 0x6c,
|
|
||||||
0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x18,
|
|
||||||
0x13, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x49, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f,
|
|
||||||
0x72, 0x12, 0x3a, 0x0a, 0x19, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f,
|
|
||||||
0x74, 0x74, 0x6c, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x73, 0x18, 0x14,
|
|
||||||
0x20, 0x01, 0x28, 0x04, 0x52, 0x17, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
|
|
||||||
0x54, 0x74, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x73, 0x22, 0xd0, 0x04,
|
|
||||||
0x0a, 0x0f, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74,
|
|
||||||
0x73, 0x12, 0x30, 0x0a, 0x04, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
|
|
||||||
0x1c, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63,
|
|
||||||
0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x73, 0x67, 0x42, 0x61, 0x73, 0x65, 0x52, 0x04, 0x62,
|
|
||||||
0x61, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 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, 0x14, 0x0a, 0x05, 0x72, 0x65, 0x71, 0x49,
|
|
||||||
0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x72, 0x65, 0x71, 0x49, 0x44, 0x12, 0x2a,
|
|
||||||
0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6d, 0x69,
|
|
||||||
0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d,
|
|
||||||
0x61, 0x2e, 0x49, 0x44, 0x73, 0x52, 0x03, 0x69, 0x64, 0x73, 0x12, 0x3f, 0x0a, 0x0b, 0x66, 0x69,
|
|
||||||
0x65, 0x6c, 0x64, 0x73, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32,
|
|
||||||
0x1e, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73,
|
|
||||||
0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x44, 0x61, 0x74, 0x61, 0x52,
|
|
||||||
0x0a, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x44, 0x61, 0x74, 0x61, 0x12, 0x3e, 0x0a, 0x1b, 0x73,
|
|
||||||
0x65, 0x61, 0x6c, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x73,
|
|
||||||
0x5f, 0x72, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x64, 0x18, 0x06, 0x20, 0x03, 0x28, 0x03,
|
|
||||||
0x52, 0x19, 0x73, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49,
|
|
||||||
0x44, 0x73, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x64, 0x12, 0x31, 0x0a, 0x14, 0x63,
|
|
||||||
0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x44, 0x73, 0x5f, 0x72, 0x65, 0x74, 0x72, 0x69, 0x65,
|
|
||||||
0x76, 0x65, 0x64, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x63, 0x68, 0x61, 0x6e, 0x6e,
|
|
||||||
0x65, 0x6c, 0x49, 0x44, 0x73, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x64, 0x12, 0x38,
|
|
||||||
0x0a, 0x18, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x5f, 0x73, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x5f,
|
|
||||||
0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x03,
|
|
||||||
0x52, 0x16, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x53, 0x65,
|
|
||||||
0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x73, 0x12, 0x50, 0x0a, 0x0f, 0x63, 0x6f, 0x73, 0x74,
|
|
||||||
0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0d, 0x20, 0x01, 0x28,
|
|
||||||
0x0b, 0x32, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
|
||||||
0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x43, 0x6f, 0x73, 0x74, 0x41, 0x67,
|
|
||||||
0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x63, 0x6f, 0x73, 0x74, 0x41,
|
|
||||||
0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x0a, 0x12, 0x61, 0x6c,
|
|
||||||
0x6c, 0x5f, 0x72, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74,
|
|
||||||
0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x74, 0x72, 0x69,
|
|
||||||
0x65, 0x76, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x68, 0x61, 0x73, 0x5f,
|
|
||||||
0x6d, 0x6f, 0x72, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28,
|
|
||||||
0x08, 0x52, 0x0d, 0x68, 0x61, 0x73, 0x4d, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74,
|
|
||||||
0x22, 0xfa, 0x01, 0x0a, 0x09, 0x4c, 0x6f, 0x61, 0x64, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x30,
|
|
||||||
0x0a, 0x04, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6d,
|
|
||||||
0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d,
|
|
||||||
0x6f, 0x6e, 0x2e, 0x4d, 0x73, 0x67, 0x42, 0x61, 0x73, 0x65, 0x52, 0x04, 0x62, 0x61, 0x73, 0x65,
|
|
||||||
0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x18, 0x02, 0x20,
|
|
||||||
0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x12, 0x1c,
|
|
||||||
0x0a, 0x09, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
|
|
||||||
0x09, 0x52, 0x09, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07,
|
|
||||||
0x66, 0x69, 0x65, 0x6c, 0x64, 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x66,
|
|
||||||
0x69, 0x65, 0x6c, 0x64, 0x49, 0x44, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f,
|
|
||||||
0x70, 0x61, 0x74, 0x68, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x69, 0x6e, 0x64,
|
|
||||||
0x65, 0x78, 0x50, 0x61, 0x74, 0x68, 0x73, 0x12, 0x44, 0x0a, 0x0c, 0x69, 0x6e, 0x64, 0x65, 0x78,
|
|
||||||
0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e,
|
|
||||||
0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d,
|
|
||||||
0x6d, 0x6f, 0x6e, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x50, 0x61, 0x69, 0x72,
|
|
||||||
0x52, 0x0b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x84, 0x01,
|
|
||||||
0x0a, 0x0a, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x44, 0x0a, 0x0c,
|
|
||||||
0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x03,
|
|
||||||
0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
|
||||||
0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75,
|
|
||||||
0x65, 0x50, 0x61, 0x69, 0x72, 0x52, 0x0b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x50, 0x61, 0x72, 0x61,
|
|
||||||
0x6d, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x6e, 0x75, 0x6d, 0x5f, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x65,
|
|
||||||
0x64, 0x5f, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03,
|
|
||||||
0x52, 0x12, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x53, 0x65, 0x67, 0x6d,
|
|
||||||
0x65, 0x6e, 0x74, 0x73, 0x22, 0x8e, 0x01, 0x0a, 0x0a, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x53, 0x74,
|
|
||||||
0x61, 0x74, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f,
|
|
||||||
0x6e, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65,
|
|
||||||
0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64,
|
|
||||||
0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x49,
|
|
||||||
0x44, 0x12, 0x42, 0x0a, 0x0b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73,
|
|
||||||
0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e,
|
|
||||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x49,
|
|
||||||
0x6e, 0x64, 0x65, 0x78, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x0a, 0x69, 0x6e, 0x64, 0x65, 0x78,
|
|
||||||
0x53, 0x74, 0x61, 0x74, 0x73, 0x22, 0x95, 0x01, 0x0a, 0x0c, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e,
|
|
||||||
0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e,
|
|
||||||
0x74, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x65, 0x67, 0x6d, 0x65,
|
|
||||||
0x6e, 0x74, 0x49, 0x44, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x73,
|
|
||||||
0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x6d, 0x65, 0x6d, 0x6f, 0x72,
|
|
||||||
0x79, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6e, 0x75, 0x6d, 0x5f, 0x72, 0x6f, 0x77,
|
|
||||||
0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6e, 0x75, 0x6d, 0x52, 0x6f, 0x77, 0x73,
|
|
||||||
0x12, 0x2b, 0x0a, 0x11, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x5f, 0x6d, 0x6f, 0x64,
|
|
||||||
0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x72, 0x65, 0x63,
|
|
||||||
0x65, 0x6e, 0x74, 0x6c, 0x79, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x22, 0xb7, 0x01,
|
|
||||||
0x0a, 0x12, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x54, 0x69, 0x63,
|
|
||||||
0x6b, 0x4d, 0x73, 0x67, 0x12, 0x30, 0x0a, 0x04, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01,
|
|
||||||
0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
|
||||||
0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x73, 0x67, 0x42, 0x61, 0x73, 0x65,
|
|
||||||
0x52, 0x04, 0x62, 0x61, 0x73, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65,
|
|
||||||
0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x68,
|
|
||||||
0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x74, 0x69,
|
|
||||||
0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x04, 0x52, 0x0a,
|
|
||||||
0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x64, 0x65,
|
|
||||||
0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18,
|
|
||||||
0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x54, 0x69,
|
|
||||||
0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0xd4, 0x01, 0x0a, 0x0e, 0x43, 0x72, 0x65, 0x64,
|
|
||||||
0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73,
|
|
||||||
0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73,
|
|
||||||
0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x12, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70,
|
|
||||||
0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01,
|
|
||||||
0x28, 0x09, 0x52, 0x11, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x73,
|
|
||||||
0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x18,
|
|
||||||
0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x12, 0x19, 0x0a,
|
|
||||||
0x08, 0x69, 0x73, 0x5f, 0x73, 0x75, 0x70, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52,
|
|
||||||
0x07, 0x69, 0x73, 0x53, 0x75, 0x70, 0x65, 0x72, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x68, 0x61, 0x32,
|
|
||||||
0x35, 0x36, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28,
|
|
||||||
0x09, 0x52, 0x0e, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72,
|
|
||||||
0x64, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x74, 0x69, 0x63, 0x6b, 0x18, 0x06,
|
|
||||||
0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x74, 0x69, 0x6d, 0x65, 0x54, 0x69, 0x63, 0x6b, 0x22, 0x45,
|
|
||||||
0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75,
|
|
||||||
0x65, 0x73, 0x74, 0x12, 0x30, 0x0a, 0x04, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
|
|
||||||
0x0b, 0x32, 0x1c, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
0x0b, 0x32, 0x1c, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||||
0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x73, 0x67, 0x42, 0x61, 0x73, 0x65, 0x52,
|
0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x73, 0x67, 0x42, 0x61, 0x73, 0x65, 0x52,
|
||||||
0x04, 0x62, 0x61, 0x73, 0x65, 0x22, 0xdf, 0x01, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f,
|
0x04, 0x62, 0x61, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18,
|
||||||
0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x06,
|
0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70,
|
||||||
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, 0x21, 0x0a, 0x0c, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x69, 0x6e, 0x66, 0x6f,
|
|
||||||
0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x49,
|
|
||||||
0x6e, 0x66, 0x6f, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x72, 0x6f, 0x6c,
|
|
||||||
0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x52, 0x6f,
|
|
||||||
0x6c, 0x65, 0x73, 0x12, 0x52, 0x0a, 0x10, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65,
|
|
||||||
0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e,
|
|
||||||
0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c,
|
|
||||||
0x76, 0x75, 0x73, 0x2e, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67, 0x65, 0x47, 0x72, 0x6f,
|
|
||||||
0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0f, 0x70, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67,
|
|
||||||
0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x22, 0x67, 0x0a, 0x19, 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, 0x12, 0x30, 0x0a, 0x04, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01,
|
|
||||||
0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
|
||||||
0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x73, 0x67, 0x42, 0x61, 0x73, 0x65,
|
|
||||||
0x52, 0x04, 0x62, 0x61, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72,
|
|
||||||
0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e,
|
|
||||||
0x22, 0x9a, 0x01, 0x0a, 0x1a, 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, 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, 0x47, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x61,
|
|
||||||
0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6d, 0x69,
|
|
||||||
0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f,
|
|
||||||
0x6e, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x50, 0x61, 0x69, 0x72, 0x52, 0x0d,
|
|
||||||
0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x45, 0x0a,
|
|
||||||
0x04, 0x52, 0x61, 0x74, 0x65, 0x12, 0x2f, 0x0a, 0x02, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28,
|
|
||||||
0x0e, 0x32, 0x1f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
|
||||||
0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x52, 0x61, 0x74, 0x65, 0x54, 0x79,
|
|
||||||
0x70, 0x65, 0x52, 0x02, 0x72, 0x74, 0x12, 0x0c, 0x0a, 0x01, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28,
|
|
||||||
0x01, 0x52, 0x01, 0x72, 0x22, 0x32, 0x0a, 0x0a, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x46, 0x69,
|
|
||||||
0x6c, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02,
|
|
||||||
0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x61, 0x74, 0x68, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28,
|
|
||||||
0x09, 0x52, 0x05, 0x70, 0x61, 0x74, 0x68, 0x73, 0x22, 0xb7, 0x03, 0x0a, 0x15, 0x49, 0x6d, 0x70,
|
|
||||||
0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e,
|
|
||||||
0x61, 0x6c, 0x12, 0x16, 0x0a, 0x04, 0x64, 0x62, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03,
|
|
||||||
0x42, 0x02, 0x18, 0x01, 0x52, 0x04, 0x64, 0x62, 0x49, 0x44, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x6f,
|
|
||||||
0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03,
|
|
||||||
0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x27,
|
|
||||||
0x0a, 0x0f, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d,
|
|
||||||
0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74,
|
|
||||||
0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x61, 0x72, 0x74, 0x69,
|
|
||||||
0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0c, 0x70,
|
|
||||||
0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x63,
|
|
||||||
0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03,
|
|
||||||
0x28, 0x09, 0x52, 0x0c, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x73,
|
|
||||||
0x12, 0x3d, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b,
|
|
||||||
0x32, 0x25, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
|
|
||||||
0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f,
|
|
||||||
0x6e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12,
|
|
||||||
0x37, 0x0a, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21,
|
|
||||||
0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e,
|
|
||||||
0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x46, 0x69, 0x6c,
|
|
||||||
0x65, 0x52, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x3b, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69,
|
|
||||||
0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6d, 0x69, 0x6c, 0x76,
|
|
||||||
0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e,
|
|
||||||
0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x50, 0x61, 0x69, 0x72, 0x52, 0x07, 0x6f, 0x70,
|
|
||||||
0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x74, 0x69,
|
|
||||||
0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x64,
|
|
||||||
0x61, 0x74, 0x61, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x14, 0x0a, 0x05,
|
|
||||||
0x6a, 0x6f, 0x62, 0x49, 0x44, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x6a, 0x6f, 0x62,
|
|
||||||
0x49, 0x44, 0x22, 0xee, 0x01, 0x0a, 0x0d, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71,
|
|
||||||
0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x62, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18,
|
|
||||||
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x27, 0x0a,
|
|
||||||
0x0f, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65,
|
|
||||||
0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69,
|
|
||||||
0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74,
|
|
||||||
0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d,
|
|
||||||
0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x37, 0x0a,
|
|
||||||
0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6d,
|
|
||||||
0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65,
|
|
||||||
0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x52,
|
|
||||||
0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x3b, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e,
|
|
||||||
0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73,
|
|
||||||
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4b, 0x65,
|
|
||||||
0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x50, 0x61, 0x69, 0x72, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69,
|
|
||||||
0x6f, 0x6e, 0x73, 0x22, 0x5b, 0x0a, 0x0e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 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,
|
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, 0x14, 0x0a, 0x05, 0x6a, 0x6f,
|
0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x65,
|
||||||
0x62, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6a, 0x6f, 0x62, 0x49, 0x44,
|
0x71, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x72, 0x65, 0x71, 0x49, 0x44,
|
||||||
0x22, 0x49, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x50, 0x72, 0x6f,
|
0x12, 0x2a, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e,
|
||||||
0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07,
|
0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x63, 0x68,
|
||||||
0x64, 0x62, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64,
|
0x65, 0x6d, 0x61, 0x2e, 0x49, 0x44, 0x73, 0x52, 0x03, 0x69, 0x64, 0x73, 0x12, 0x3f, 0x0a, 0x0b,
|
||||||
0x62, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6a, 0x6f, 0x62, 0x49, 0x44, 0x18, 0x02,
|
0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x03, 0x28,
|
||||||
0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6a, 0x6f, 0x62, 0x49, 0x44, 0x22, 0x81, 0x02, 0x0a, 0x12,
|
0x0b, 0x32, 0x1e, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||||
0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65,
|
0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x44, 0x61, 0x74,
|
||||||
0x73, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18,
|
0x61, 0x52, 0x0a, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x44, 0x61, 0x74, 0x61, 0x12, 0x3e, 0x0a,
|
||||||
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12,
|
0x1b, 0x73, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49,
|
||||||
0x1b, 0x0a, 0x09, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01,
|
0x44, 0x73, 0x5f, 0x72, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x64, 0x18, 0x06, 0x20, 0x03,
|
||||||
0x28, 0x03, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x16, 0x0a, 0x06,
|
0x28, 0x03, 0x52, 0x19, 0x73, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e,
|
||||||
0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65,
|
0x74, 0x49, 0x44, 0x73, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x64, 0x12, 0x31, 0x0a,
|
||||||
0x61, 0x73, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73,
|
0x14, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x44, 0x73, 0x5f, 0x72, 0x65, 0x74, 0x72,
|
||||||
0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73,
|
0x69, 0x65, 0x76, 0x65, 0x64, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x13, 0x63, 0x68, 0x61,
|
||||||
0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d,
|
0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x44, 0x73, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x64,
|
||||||
0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74,
|
0x12, 0x38, 0x0a, 0x18, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x5f, 0x73, 0x65, 0x61, 0x6c, 0x65,
|
||||||
0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x06,
|
0x64, 0x5f, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x73, 0x18, 0x08, 0x20, 0x03,
|
||||||
0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x69,
|
0x28, 0x03, 0x52, 0x16, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x53, 0x65, 0x61, 0x6c, 0x65, 0x64,
|
||||||
0x6d, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x07, 0x20, 0x01,
|
0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x73, 0x12, 0x50, 0x0a, 0x0f, 0x63, 0x6f,
|
||||||
0x28, 0x03, 0x52, 0x0c, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x52, 0x6f, 0x77, 0x73,
|
0x73, 0x74, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0d, 0x20,
|
||||||
0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x08,
|
0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f,
|
||||||
0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x6f, 0x77, 0x73, 0x22,
|
0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x43, 0x6f, 0x73, 0x74,
|
||||||
0xc6, 0x03, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x50, 0x72, 0x6f,
|
0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0f, 0x63, 0x6f, 0x73,
|
||||||
0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a,
|
0x74, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x0a, 0x12,
|
||||||
0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e,
|
0x61, 0x6c, 0x6c, 0x5f, 0x72, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x5f, 0x63, 0x6f, 0x75,
|
||||||
0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d,
|
0x6e, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x74,
|
||||||
0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74,
|
0x72, 0x69, 0x65, 0x76, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x68, 0x61,
|
||||||
0x75, 0x73, 0x12, 0x3b, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
|
0x73, 0x5f, 0x6d, 0x6f, 0x72, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x0f, 0x20,
|
||||||
0x0e, 0x32, 0x25, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
0x01, 0x28, 0x08, 0x52, 0x0d, 0x68, 0x61, 0x73, 0x4d, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x73, 0x75,
|
||||||
0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74,
|
0x6c, 0x74, 0x12, 0x30, 0x0a, 0x14, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x5f, 0x72, 0x65,
|
||||||
0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12,
|
0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x03,
|
||||||
0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
|
0x52, 0x12, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x42,
|
||||||
0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72,
|
0x79, 0x74, 0x65, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x5f,
|
||||||
0x65, 0x73, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x67, 0x72,
|
0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28,
|
||||||
0x65, 0x73, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f,
|
0x03, 0x52, 0x11, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x42,
|
||||||
0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f,
|
0x79, 0x74, 0x65, 0x73, 0x22, 0xfa, 0x01, 0x0a, 0x09, 0x4c, 0x6f, 0x61, 0x64, 0x49, 0x6e, 0x64,
|
||||||
0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d,
|
0x65, 0x78, 0x12, 0x30, 0x0a, 0x04, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
|
||||||
0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, 0x20,
|
0x32, 0x1c, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
|
||||||
0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x69, 0x6d,
|
0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x73, 0x67, 0x42, 0x61, 0x73, 0x65, 0x52, 0x04,
|
||||||
0x65, 0x12, 0x52, 0x0a, 0x0f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65,
|
0x62, 0x61, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49,
|
||||||
0x73, 0x73, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6d, 0x69, 0x6c,
|
0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74,
|
||||||
|
0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x18,
|
||||||
|
0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x4e, 0x61, 0x6d, 0x65,
|
||||||
|
0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28,
|
||||||
|
0x03, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x49, 0x44, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e,
|
||||||
|
0x64, 0x65, 0x78, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52,
|
||||||
|
0x0a, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x50, 0x61, 0x74, 0x68, 0x73, 0x12, 0x44, 0x0a, 0x0c, 0x69,
|
||||||
|
0x6e, 0x64, 0x65, 0x78, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28,
|
||||||
|
0x0b, 0x32, 0x21, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||||
|
0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65,
|
||||||
|
0x50, 0x61, 0x69, 0x72, 0x52, 0x0b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x50, 0x61, 0x72, 0x61, 0x6d,
|
||||||
|
0x73, 0x22, 0x84, 0x01, 0x0a, 0x0a, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x74, 0x61, 0x74, 0x73,
|
||||||
|
0x12, 0x44, 0x0a, 0x0c, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73,
|
||||||
|
0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e,
|
||||||
|
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4b, 0x65, 0x79,
|
||||||
|
0x56, 0x61, 0x6c, 0x75, 0x65, 0x50, 0x61, 0x69, 0x72, 0x52, 0x0b, 0x69, 0x6e, 0x64, 0x65, 0x78,
|
||||||
|
0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x30, 0x0a, 0x14, 0x6e, 0x75, 0x6d, 0x5f, 0x72, 0x65,
|
||||||
|
0x6c, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02,
|
||||||
|
0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x65, 0x64,
|
||||||
|
0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x8e, 0x01, 0x0a, 0x0a, 0x46, 0x69, 0x65,
|
||||||
|
0x6c, 0x64, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65,
|
||||||
|
0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x63,
|
||||||
|
0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x66,
|
||||||
|
0x69, 0x65, 0x6c, 0x64, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x66, 0x69,
|
||||||
|
0x65, 0x6c, 0x64, 0x49, 0x44, 0x12, 0x42, 0x0a, 0x0b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x73,
|
||||||
|
0x74, 0x61, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6d, 0x69, 0x6c,
|
||||||
0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e,
|
0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e,
|
||||||
0x61, 0x6c, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f,
|
0x61, 0x6c, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x0a, 0x69,
|
||||||
0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0e, 0x74, 0x61, 0x73, 0x6b, 0x50, 0x72, 0x6f, 0x67, 0x72,
|
0x6e, 0x64, 0x65, 0x78, 0x53, 0x74, 0x61, 0x74, 0x73, 0x22, 0x95, 0x01, 0x0a, 0x0c, 0x53, 0x65,
|
||||||
0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x65,
|
0x67, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65,
|
||||||
0x64, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x69, 0x6d,
|
0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73,
|
||||||
0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x52, 0x6f, 0x77, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x6f,
|
0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x65, 0x6d, 0x6f,
|
||||||
0x74, 0x61, 0x6c, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09,
|
0x72, 0x79, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0a, 0x6d,
|
||||||
0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x6f, 0x77, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61,
|
0x65, 0x6d, 0x6f, 0x72, 0x79, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6e, 0x75, 0x6d,
|
||||||
0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73,
|
0x5f, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6e, 0x75, 0x6d,
|
||||||
0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x54, 0x0a, 0x1a, 0x4c, 0x69, 0x73, 0x74,
|
0x52, 0x6f, 0x77, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x6c, 0x79,
|
||||||
0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x6e,
|
0x5f, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52,
|
||||||
0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x62, 0x49, 0x44, 0x18, 0x01,
|
0x10, 0x72, 0x65, 0x63, 0x65, 0x6e, 0x74, 0x6c, 0x79, 0x4d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65,
|
||||||
0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x64, 0x62, 0x49, 0x44, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x6f,
|
0x64, 0x22, 0xb7, 0x01, 0x0a, 0x12, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x54, 0x69, 0x6d,
|
||||||
0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03,
|
0x65, 0x54, 0x69, 0x63, 0x6b, 0x4d, 0x73, 0x67, 0x12, 0x30, 0x0a, 0x04, 0x62, 0x61, 0x73, 0x65,
|
||||||
0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x22, 0x56,
|
0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e,
|
||||||
0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x52, 0x65, 0x71,
|
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x73, 0x67,
|
||||||
0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x62, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18,
|
0x42, 0x61, 0x73, 0x65, 0x52, 0x04, 0x62, 0x61, 0x73, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x68,
|
||||||
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x27, 0x0a,
|
0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09,
|
||||||
0x0f, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65,
|
0x52, 0x0c, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x1e,
|
||||||
0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69,
|
0x0a, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x73, 0x18, 0x03, 0x20, 0x03,
|
||||||
0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x86, 0x02, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x49,
|
0x28, 0x04, 0x52, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x73, 0x12, 0x2b,
|
||||||
0x6d, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33,
|
0x0a, 0x11, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74,
|
||||||
0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b,
|
0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x64, 0x65, 0x66, 0x61, 0x75,
|
||||||
0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f,
|
0x6c, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0xd4, 0x01, 0x0a, 0x0e,
|
||||||
0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61,
|
0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a,
|
||||||
0x74, 0x75, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6a, 0x6f, 0x62, 0x49, 0x44, 0x73, 0x18, 0x02, 0x20,
|
0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
|
||||||
0x03, 0x28, 0x09, 0x52, 0x06, 0x6a, 0x6f, 0x62, 0x49, 0x44, 0x73, 0x12, 0x3d, 0x0a, 0x06, 0x73,
|
0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x12, 0x65, 0x6e,
|
||||||
0x74, 0x61, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x6d, 0x69,
|
0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64,
|
||||||
0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72,
|
0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65,
|
||||||
0x6e, 0x61, 0x6c, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61,
|
0x64, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x65, 0x6e,
|
||||||
0x74, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65,
|
0x61, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x65, 0x6e, 0x61, 0x6e,
|
||||||
0x61, 0x73, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x61,
|
0x74, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x73, 0x75, 0x70, 0x65, 0x72, 0x18, 0x04, 0x20,
|
||||||
0x73, 0x6f, 0x6e, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73,
|
0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x53, 0x75, 0x70, 0x65, 0x72, 0x12, 0x27, 0x0a, 0x0f,
|
||||||
0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65,
|
0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18,
|
||||||
0x73, 0x73, 0x65, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69,
|
0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x50, 0x61, 0x73,
|
||||||
0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f,
|
0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x74, 0x69,
|
||||||
0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x22,
|
0x63, 0x6b, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x74, 0x69, 0x6d, 0x65, 0x54, 0x69,
|
||||||
0x74, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x49, 0x6e,
|
0x63, 0x6b, 0x22, 0x45, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79,
|
||||||
0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x62, 0x4e,
|
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x30, 0x0a, 0x04, 0x62, 0x61, 0x73, 0x65, 0x18,
|
||||||
|
0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70,
|
||||||
|
0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x73, 0x67, 0x42,
|
||||||
|
0x61, 0x73, 0x65, 0x52, 0x04, 0x62, 0x61, 0x73, 0x65, 0x22, 0xdf, 0x01, 0x0a, 0x12, 0x4c, 0x69,
|
||||||
|
0x73, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 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, 0x21, 0x0a, 0x0c, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f,
|
||||||
|
0x69, 0x6e, 0x66, 0x6f, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x6f, 0x6c,
|
||||||
|
0x69, 0x63, 0x79, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72,
|
||||||
|
0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x75, 0x73,
|
||||||
|
0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x52, 0x0a, 0x10, 0x70, 0x72, 0x69, 0x76, 0x69,
|
||||||
|
0x6c, 0x65, 0x67, 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28,
|
||||||
|
0x0b, 0x32, 0x27, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||||
|
0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x50, 0x72, 0x69, 0x76, 0x69, 0x6c, 0x65, 0x67,
|
||||||
|
0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0f, 0x70, 0x72, 0x69, 0x76,
|
||||||
|
0x69, 0x6c, 0x65, 0x67, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x22, 0x67, 0x0a, 0x19, 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, 0x12, 0x30, 0x0a, 0x04, 0x62, 0x61, 0x73, 0x65,
|
||||||
|
0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e,
|
||||||
|
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x73, 0x67,
|
||||||
|
0x42, 0x61, 0x73, 0x65, 0x52, 0x04, 0x62, 0x61, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61,
|
||||||
|
0x74, 0x74, 0x65, 0x72, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x61, 0x74,
|
||||||
|
0x74, 0x65, 0x72, 0x6e, 0x22, 0x9a, 0x01, 0x0a, 0x1a, 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, 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, 0x47, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66,
|
||||||
|
0x69, 0x67, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32,
|
||||||
|
0x21, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63,
|
||||||
|
0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x50, 0x61,
|
||||||
|
0x69, 0x72, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e,
|
||||||
|
0x73, 0x22, 0x45, 0x0a, 0x04, 0x52, 0x61, 0x74, 0x65, 0x12, 0x2f, 0x0a, 0x02, 0x72, 0x74, 0x18,
|
||||||
|
0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70,
|
||||||
|
0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x52, 0x61,
|
||||||
|
0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x02, 0x72, 0x74, 0x12, 0x0c, 0x0a, 0x01, 0x72, 0x18,
|
||||||
|
0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x01, 0x72, 0x22, 0x32, 0x0a, 0x0a, 0x49, 0x6d, 0x70, 0x6f,
|
||||||
|
0x72, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01,
|
||||||
|
0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x70, 0x61, 0x74, 0x68, 0x73, 0x18,
|
||||||
|
0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x70, 0x61, 0x74, 0x68, 0x73, 0x22, 0xb7, 0x03, 0x0a,
|
||||||
|
0x15, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x6e,
|
||||||
|
0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x12, 0x16, 0x0a, 0x04, 0x64, 0x62, 0x49, 0x44, 0x18, 0x01,
|
||||||
|
0x20, 0x01, 0x28, 0x03, 0x42, 0x02, 0x18, 0x01, 0x52, 0x04, 0x64, 0x62, 0x49, 0x44, 0x12, 0x22,
|
||||||
|
0x0a, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02,
|
||||||
|
0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
|
||||||
|
0x49, 0x44, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
|
||||||
|
0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6c,
|
||||||
|
0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x70,
|
||||||
|
0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28,
|
||||||
|
0x03, 0x52, 0x0c, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x73, 0x12,
|
||||||
|
0x23, 0x0a, 0x0d, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73,
|
||||||
|
0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4e,
|
||||||
|
0x61, 0x6d, 0x65, 0x73, 0x12, 0x3d, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x06,
|
||||||
|
0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72,
|
||||||
|
0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x43, 0x6f, 0x6c, 0x6c, 0x65,
|
||||||
|
0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x06, 0x73, 0x63, 0x68,
|
||||||
|
0x65, 0x6d, 0x61, 0x12, 0x37, 0x0a, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03,
|
||||||
|
0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
||||||
|
0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72,
|
||||||
|
0x74, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x3b, 0x0a, 0x07,
|
||||||
|
0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e,
|
||||||
|
0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d,
|
||||||
|
0x6d, 0x6f, 0x6e, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x50, 0x61, 0x69, 0x72,
|
||||||
|
0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x61, 0x74,
|
||||||
|
0x61, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x09, 0x20, 0x01, 0x28,
|
||||||
|
0x04, 0x52, 0x0d, 0x64, 0x61, 0x74, 0x61, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70,
|
||||||
|
0x12, 0x14, 0x0a, 0x05, 0x6a, 0x6f, 0x62, 0x49, 0x44, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x03, 0x52,
|
||||||
|
0x05, 0x6a, 0x6f, 0x62, 0x49, 0x44, 0x22, 0xee, 0x01, 0x0a, 0x0d, 0x49, 0x6d, 0x70, 0x6f, 0x72,
|
||||||
|
0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x62, 0x5f, 0x6e,
|
||||||
0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x62, 0x4e, 0x61, 0x6d,
|
0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x62, 0x4e, 0x61, 0x6d,
|
||||||
0x65, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49,
|
0x65, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f,
|
||||||
0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74,
|
0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6c, 0x6c,
|
||||||
0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74,
|
0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x61,
|
||||||
0x49, 0x44, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0a, 0x73, 0x65, 0x67, 0x6d, 0x65,
|
0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01,
|
||||||
0x6e, 0x74, 0x49, 0x44, 0x73, 0x22, 0x3f, 0x0a, 0x0b, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x69,
|
0x28, 0x09, 0x52, 0x0d, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d,
|
||||||
0x6e, 0x6c, 0x6f, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x49, 0x44, 0x18,
|
0x65, 0x12, 0x37, 0x0a, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b,
|
||||||
0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x49, 0x44, 0x12, 0x16,
|
|
||||||
0x0a, 0x06, 0x6c, 0x6f, 0x67, 0x49, 0x44, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x06,
|
|
||||||
0x6c, 0x6f, 0x67, 0x49, 0x44, 0x73, 0x22, 0x82, 0x04, 0x0a, 0x0b, 0x53, 0x65, 0x67, 0x6d, 0x65,
|
|
||||||
0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e,
|
|
||||||
0x74, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x65, 0x67, 0x6d, 0x65,
|
|
||||||
0x6e, 0x74, 0x49, 0x44, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69,
|
|
||||||
0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02, 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, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x70,
|
|
||||||
0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x76, 0x43,
|
|
||||||
0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x43,
|
|
||||||
0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x19, 0x0a, 0x08, 0x6e, 0x75, 0x6d, 0x5f, 0x72, 0x6f,
|
|
||||||
0x77, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6e, 0x75, 0x6d, 0x52, 0x6f, 0x77,
|
|
||||||
0x73, 0x12, 0x37, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e,
|
|
||||||
0x32, 0x21, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
|
0x32, 0x21, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
|
||||||
0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74,
|
0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x46,
|
||||||
0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x37, 0x0a, 0x05, 0x6c, 0x65,
|
0x69, 0x6c, 0x65, 0x52, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x3b, 0x0a, 0x07, 0x6f, 0x70,
|
||||||
0x76, 0x65, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x6d, 0x69, 0x6c, 0x76,
|
0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6d, 0x69,
|
||||||
|
0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f,
|
||||||
|
0x6e, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x50, 0x61, 0x69, 0x72, 0x52, 0x07,
|
||||||
|
0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x5b, 0x0a, 0x0e, 0x49, 0x6d, 0x70, 0x6f, 0x72,
|
||||||
|
0x74, 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,
|
0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e,
|
||||||
0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x52, 0x05, 0x6c, 0x65,
|
0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14,
|
||||||
0x76, 0x65, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x73, 0x6f, 0x72, 0x74, 0x65, 0x64,
|
0x0a, 0x05, 0x6a, 0x6f, 0x62, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6a,
|
||||||
0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x53, 0x6f, 0x72, 0x74, 0x65, 0x64,
|
0x6f, 0x62, 0x49, 0x44, 0x22, 0x49, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x49, 0x6d, 0x70, 0x6f, 0x72,
|
||||||
0x12, 0x43, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x5f, 0x6c, 0x6f, 0x67, 0x73, 0x18,
|
0x74, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
|
||||||
0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70,
|
0x12, 0x17, 0x0a, 0x07, 0x64, 0x62, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
|
||||||
0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x46, 0x69,
|
0x09, 0x52, 0x06, 0x64, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6a, 0x6f, 0x62,
|
||||||
0x65, 0x6c, 0x64, 0x42, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x65, 0x72,
|
0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6a, 0x6f, 0x62, 0x49, 0x44, 0x22,
|
||||||
0x74, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x41, 0x0a, 0x0a, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x5f, 0x6c,
|
0x81, 0x02, 0x0a, 0x12, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x50, 0x72,
|
||||||
0x6f, 0x67, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6d, 0x69, 0x6c, 0x76,
|
0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 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,
|
||||||
|
0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09,
|
||||||
|
0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x67,
|
||||||
|
0x72, 0x65, 0x73, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x67,
|
||||||
|
0x72, 0x65, 0x73, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65,
|
||||||
|
0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6d,
|
||||||
|
0x70, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61,
|
||||||
|
0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12,
|
||||||
|
0x23, 0x0a, 0x0d, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x72, 0x6f, 0x77, 0x73,
|
||||||
|
0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64,
|
||||||
|
0x52, 0x6f, 0x77, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x6f,
|
||||||
|
0x77, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52,
|
||||||
|
0x6f, 0x77, 0x73, 0x22, 0xc6, 0x03, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x49, 0x6d, 0x70, 0x6f, 0x72,
|
||||||
|
0x74, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 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, 0x3b, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18,
|
||||||
|
0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70,
|
||||||
|
0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x49, 0x6d,
|
||||||
|
0x70, 0x6f, 0x72, 0x74, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74,
|
||||||
|
0x61, 0x74, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x03, 0x20,
|
||||||
|
0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x70,
|
||||||
|
0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x70,
|
||||||
|
0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x6f, 0x6c, 0x6c, 0x65,
|
||||||
|
0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09,
|
||||||
|
0x52, 0x0e, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65,
|
||||||
|
0x12, 0x23, 0x0a, 0x0d, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d,
|
||||||
|
0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74,
|
||||||
|
0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x52, 0x0a, 0x0f, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x70, 0x72,
|
||||||
|
0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29,
|
||||||
|
0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e,
|
||||||
|
0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x61, 0x73,
|
||||||
|
0x6b, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x52, 0x0e, 0x74, 0x61, 0x73, 0x6b, 0x50,
|
||||||
|
0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6d, 0x70,
|
||||||
|
0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03,
|
||||||
|
0x52, 0x0c, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x52, 0x6f, 0x77, 0x73, 0x12, 0x1d,
|
||||||
|
0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x09, 0x20, 0x01,
|
||||||
|
0x28, 0x03, 0x52, 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x6f, 0x77, 0x73, 0x12, 0x1d, 0x0a,
|
||||||
|
0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28,
|
||||||
|
0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x54, 0x0a, 0x1a,
|
||||||
|
0x4c, 0x69, 0x73, 0x74, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
|
||||||
|
0x73, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x62,
|
||||||
|
0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x64, 0x62, 0x49, 0x44, 0x12, 0x22,
|
||||||
|
0x0a, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02,
|
||||||
|
0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
|
||||||
|
0x49, 0x44, 0x22, 0x56, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74,
|
||||||
|
0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x64, 0x62, 0x5f, 0x6e,
|
||||||
|
0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x62, 0x4e, 0x61, 0x6d,
|
||||||
|
0x65, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f,
|
||||||
|
0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6c, 0x6c,
|
||||||
|
0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x86, 0x02, 0x0a, 0x13, 0x4c,
|
||||||
|
0x69, 0x73, 0x74, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x73, 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, 0x16, 0x0a, 0x06, 0x6a, 0x6f, 0x62, 0x49, 0x44,
|
||||||
|
0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x6a, 0x6f, 0x62, 0x49, 0x44, 0x73, 0x12,
|
||||||
|
0x3d, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0e, 0x32,
|
||||||
|
0x25, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69,
|
||||||
|
0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x4a, 0x6f,
|
||||||
|
0x62, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x65, 0x73, 0x12, 0x18,
|
||||||
|
0x0a, 0x07, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52,
|
||||||
|
0x07, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x67,
|
||||||
|
0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0a, 0x70, 0x72,
|
||||||
|
0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x6f, 0x6c, 0x6c,
|
||||||
|
0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03,
|
||||||
|
0x28, 0x09, 0x52, 0x0f, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4e, 0x61,
|
||||||
|
0x6d, 0x65, 0x73, 0x22, 0x74, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e,
|
||||||
|
0x74, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a,
|
||||||
|
0x06, 0x64, 0x62, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64,
|
||||||
|
0x62, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74,
|
||||||
|
0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x63, 0x6f, 0x6c,
|
||||||
|
0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x65, 0x67,
|
||||||
|
0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0a, 0x73,
|
||||||
|
0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x73, 0x22, 0x3f, 0x0a, 0x0b, 0x46, 0x69, 0x65,
|
||||||
|
0x6c, 0x64, 0x42, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c,
|
||||||
|
0x64, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64,
|
||||||
|
0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x6f, 0x67, 0x49, 0x44, 0x73, 0x18, 0x02, 0x20, 0x03,
|
||||||
|
0x28, 0x03, 0x52, 0x06, 0x6c, 0x6f, 0x67, 0x49, 0x44, 0x73, 0x22, 0x82, 0x04, 0x0a, 0x0b, 0x53,
|
||||||
|
0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65,
|
||||||
|
0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73,
|
||||||
|
0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x6f, 0x6c, 0x6c,
|
||||||
|
0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02, 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, 0x03, 0x20, 0x01, 0x28,
|
||||||
|
0x03, 0x52, 0x0b, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x1a,
|
||||||
|
0x0a, 0x08, 0x76, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
|
||||||
|
0x52, 0x08, 0x76, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x19, 0x0a, 0x08, 0x6e, 0x75,
|
||||||
|
0x6d, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6e, 0x75,
|
||||||
|
0x6d, 0x52, 0x6f, 0x77, 0x73, 0x12, 0x37, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x06,
|
||||||
|
0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72,
|
||||||
|
0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65,
|
||||||
|
0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x37,
|
||||||
|
0x0a, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e,
|
||||||
|
0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d,
|
||||||
|
0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x4c, 0x65, 0x76, 0x65, 0x6c,
|
||||||
|
0x52, 0x05, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x73, 0x6f,
|
||||||
|
0x72, 0x74, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x53, 0x6f,
|
||||||
|
0x72, 0x74, 0x65, 0x64, 0x12, 0x43, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x5f, 0x6c,
|
||||||
|
0x6f, 0x67, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6d, 0x69, 0x6c, 0x76,
|
||||||
0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,
|
0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,
|
||||||
0x6c, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x52, 0x09, 0x64,
|
0x6c, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x52, 0x0a, 0x69,
|
||||||
0x65, 0x6c, 0x74, 0x61, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x41, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x74,
|
0x6e, 0x73, 0x65, 0x72, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x41, 0x0a, 0x0a, 0x64, 0x65, 0x6c,
|
||||||
0x73, 0x5f, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6d,
|
0x74, 0x61, 0x5f, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e,
|
||||||
0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65,
|
0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74,
|
||||||
0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x69, 0x6e, 0x6c, 0x6f, 0x67,
|
0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x69, 0x6e, 0x6c, 0x6f,
|
||||||
0x52, 0x09, 0x73, 0x74, 0x61, 0x74, 0x73, 0x4c, 0x6f, 0x67, 0x73, 0x22, 0x96, 0x01, 0x0a, 0x17,
|
0x67, 0x52, 0x09, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x41, 0x0a, 0x0a,
|
||||||
0x47, 0x65, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52,
|
0x73, 0x74, 0x61, 0x74, 0x73, 0x5f, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b,
|
||||||
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75,
|
0x32, 0x22, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
|
||||||
0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73,
|
0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x69,
|
||||||
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74,
|
0x6e, 0x6c, 0x6f, 0x67, 0x52, 0x09, 0x73, 0x74, 0x61, 0x74, 0x73, 0x4c, 0x6f, 0x67, 0x73, 0x22,
|
||||||
0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x46, 0x0a, 0x0c,
|
0x96, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x49,
|
||||||
0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x18, 0x02, 0x20, 0x03,
|
0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x06, 0x73,
|
||||||
0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
|
||||||
0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x53, 0x65, 0x67, 0x6d, 0x65,
|
|
||||||
0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0c, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49,
|
|
||||||
0x6e, 0x66, 0x6f, 0x73, 0x22, 0x4a, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x51, 0x75, 0x6f, 0x74, 0x61,
|
|
||||||
0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x30,
|
|
||||||
0x0a, 0x04, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6d,
|
|
||||||
0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d,
|
|
||||||
0x6f, 0x6e, 0x2e, 0x4d, 0x73, 0x67, 0x42, 0x61, 0x73, 0x65, 0x52, 0x04, 0x62, 0x61, 0x73, 0x65,
|
|
||||||
0x22, 0x71, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x51, 0x75, 0x6f, 0x74, 0x61, 0x4d, 0x65, 0x74, 0x72,
|
|
||||||
0x69, 0x63, 0x73, 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,
|
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,
|
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,
|
0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
|
||||||
0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x5f, 0x69, 0x6e, 0x66, 0x6f,
|
0x12, 0x46, 0x0a, 0x0c, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x73,
|
||||||
0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x49,
|
0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e,
|
||||||
0x6e, 0x66, 0x6f, 0x2a, 0x45, 0x0a, 0x09, 0x52, 0x61, 0x74, 0x65, 0x53, 0x63, 0x6f, 0x70, 0x65,
|
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x53,
|
||||||
0x12, 0x0b, 0x0a, 0x07, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x10, 0x00, 0x12, 0x0c, 0x0a,
|
0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0c, 0x73, 0x65, 0x67, 0x6d,
|
||||||
0x08, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x43,
|
0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x22, 0x4a, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x51,
|
||||||
0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x50,
|
0x75, 0x6f, 0x74, 0x61, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
|
||||||
0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x03, 0x2a, 0xc4, 0x01, 0x0a, 0x08, 0x52,
|
0x73, 0x74, 0x12, 0x30, 0x0a, 0x04, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
|
||||||
0x61, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x44, 0x4c, 0x43, 0x6f,
|
0x32, 0x1c, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
|
||||||
0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x44, 0x44,
|
0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x73, 0x67, 0x42, 0x61, 0x73, 0x65, 0x52, 0x04,
|
||||||
0x4c, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08,
|
0x62, 0x61, 0x73, 0x65, 0x22, 0x71, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x51, 0x75, 0x6f, 0x74, 0x61,
|
||||||
0x44, 0x44, 0x4c, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x44,
|
0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12,
|
||||||
0x4c, 0x46, 0x6c, 0x75, 0x73, 0x68, 0x10, 0x03, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x44, 0x4c, 0x43,
|
0x33, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
|
||||||
0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x04, 0x12, 0x0d, 0x0a, 0x09, 0x44,
|
0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63,
|
||||||
0x4d, 0x4c, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x10, 0x05, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x4d,
|
0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74,
|
||||||
0x4c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x10, 0x06, 0x12, 0x0f, 0x0a, 0x0b, 0x44, 0x4d, 0x4c,
|
0x61, 0x74, 0x75, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x5f,
|
||||||
0x42, 0x75, 0x6c, 0x6b, 0x4c, 0x6f, 0x61, 0x64, 0x10, 0x07, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x51,
|
0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6d, 0x65, 0x74, 0x72,
|
||||||
0x4c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x10, 0x08, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x51, 0x4c,
|
0x69, 0x63, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x2a, 0x45, 0x0a, 0x09, 0x52, 0x61, 0x74, 0x65, 0x53,
|
||||||
0x51, 0x75, 0x65, 0x72, 0x79, 0x10, 0x09, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x4d, 0x4c, 0x55, 0x70,
|
0x63, 0x6f, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x10,
|
||||||
0x73, 0x65, 0x72, 0x74, 0x10, 0x0a, 0x12, 0x09, 0x0a, 0x05, 0x44, 0x44, 0x4c, 0x44, 0x42, 0x10,
|
0x00, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x10, 0x01, 0x12,
|
||||||
0x0b, 0x2a, 0x83, 0x01, 0x0a, 0x0e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x4a, 0x6f, 0x62, 0x53,
|
0x0e, 0x0a, 0x0a, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x02, 0x12,
|
||||||
0x74, 0x61, 0x74, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x6f, 0x6e, 0x65, 0x10, 0x00, 0x12, 0x0b,
|
0x0d, 0x0a, 0x09, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x03, 0x2a, 0xc4,
|
||||||
0x0a, 0x07, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x50,
|
0x01, 0x0a, 0x08, 0x52, 0x61, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x11, 0x0a, 0x0d, 0x44,
|
||||||
0x72, 0x65, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x10, 0x02, 0x12, 0x0d, 0x0a,
|
0x44, 0x4c, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x00, 0x12, 0x10,
|
||||||
0x09, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06,
|
0x0a, 0x0c, 0x44, 0x44, 0x4c, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x01,
|
||||||
0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x10, 0x04, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x6f, 0x6d, 0x70,
|
0x12, 0x0c, 0x0a, 0x08, 0x44, 0x44, 0x4c, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x10, 0x02, 0x12, 0x0c,
|
||||||
0x6c, 0x65, 0x74, 0x65, 0x64, 0x10, 0x05, 0x12, 0x11, 0x0a, 0x0d, 0x49, 0x6e, 0x64, 0x65, 0x78,
|
0x0a, 0x08, 0x44, 0x44, 0x4c, 0x46, 0x6c, 0x75, 0x73, 0x68, 0x10, 0x03, 0x12, 0x11, 0x0a, 0x0d,
|
||||||
0x42, 0x75, 0x69, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x10, 0x06, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x6f,
|
0x44, 0x44, 0x4c, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x04, 0x12,
|
||||||
0x72, 0x74, 0x69, 0x6e, 0x67, 0x10, 0x07, 0x42, 0x35, 0x5a, 0x33, 0x67, 0x69, 0x74, 0x68, 0x75,
|
0x0d, 0x0a, 0x09, 0x44, 0x4d, 0x4c, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x10, 0x05, 0x12, 0x0d,
|
||||||
0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2d, 0x69, 0x6f, 0x2f,
|
0x0a, 0x09, 0x44, 0x4d, 0x4c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x10, 0x06, 0x12, 0x0f, 0x0a,
|
||||||
0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x76, 0x32, 0x2f, 0x70, 0x72,
|
0x0b, 0x44, 0x4d, 0x4c, 0x42, 0x75, 0x6c, 0x6b, 0x4c, 0x6f, 0x61, 0x64, 0x10, 0x07, 0x12, 0x0d,
|
||||||
0x6f, 0x74, 0x6f, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x70, 0x62, 0x62, 0x06,
|
0x0a, 0x09, 0x44, 0x51, 0x4c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x10, 0x08, 0x12, 0x0c, 0x0a,
|
||||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
0x08, 0x44, 0x51, 0x4c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x10, 0x09, 0x12, 0x0d, 0x0a, 0x09, 0x44,
|
||||||
|
0x4d, 0x4c, 0x55, 0x70, 0x73, 0x65, 0x72, 0x74, 0x10, 0x0a, 0x12, 0x09, 0x0a, 0x05, 0x44, 0x44,
|
||||||
|
0x4c, 0x44, 0x42, 0x10, 0x0b, 0x2a, 0x83, 0x01, 0x0a, 0x0e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74,
|
||||||
|
0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x6f, 0x6e, 0x65,
|
||||||
|
0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x10, 0x01, 0x12,
|
||||||
|
0x10, 0x0a, 0x0c, 0x50, 0x72, 0x65, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x10,
|
||||||
|
0x02, 0x12, 0x0d, 0x0a, 0x09, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x10, 0x03,
|
||||||
|
0x12, 0x0a, 0x0a, 0x06, 0x46, 0x61, 0x69, 0x6c, 0x65, 0x64, 0x10, 0x04, 0x12, 0x0d, 0x0a, 0x09,
|
||||||
|
0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x10, 0x05, 0x12, 0x11, 0x0a, 0x0d, 0x49,
|
||||||
|
0x6e, 0x64, 0x65, 0x78, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x10, 0x06, 0x12, 0x0b,
|
||||||
|
0x0a, 0x07, 0x53, 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x10, 0x07, 0x42, 0x35, 0x5a, 0x33, 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, 0x76,
|
||||||
|
0x32, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c,
|
||||||
|
0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|||||||
@ -11,6 +11,8 @@ message RetrieveResults {
|
|||||||
repeated schema.FieldData fields_data = 3;
|
repeated schema.FieldData fields_data = 3;
|
||||||
int64 all_retrieve_count = 4;
|
int64 all_retrieve_count = 4;
|
||||||
bool has_more_result = 5;
|
bool has_more_result = 5;
|
||||||
|
int64 scanned_remote_bytes = 6;
|
||||||
|
int64 scanned_total_bytes = 7;
|
||||||
}
|
}
|
||||||
|
|
||||||
message LoadFieldMeta {
|
message LoadFieldMeta {
|
||||||
|
|||||||
@ -32,6 +32,8 @@ type RetrieveResults struct {
|
|||||||
FieldsData []*schemapb.FieldData `protobuf:"bytes,3,rep,name=fields_data,json=fieldsData,proto3" json:"fields_data,omitempty"`
|
FieldsData []*schemapb.FieldData `protobuf:"bytes,3,rep,name=fields_data,json=fieldsData,proto3" json:"fields_data,omitempty"`
|
||||||
AllRetrieveCount int64 `protobuf:"varint,4,opt,name=all_retrieve_count,json=allRetrieveCount,proto3" json:"all_retrieve_count,omitempty"`
|
AllRetrieveCount int64 `protobuf:"varint,4,opt,name=all_retrieve_count,json=allRetrieveCount,proto3" json:"all_retrieve_count,omitempty"`
|
||||||
HasMoreResult bool `protobuf:"varint,5,opt,name=has_more_result,json=hasMoreResult,proto3" json:"has_more_result,omitempty"`
|
HasMoreResult bool `protobuf:"varint,5,opt,name=has_more_result,json=hasMoreResult,proto3" json:"has_more_result,omitempty"`
|
||||||
|
ScannedRemoteBytes int64 `protobuf:"varint,6,opt,name=scanned_remote_bytes,json=scannedRemoteBytes,proto3" json:"scanned_remote_bytes,omitempty"`
|
||||||
|
ScannedTotalBytes int64 `protobuf:"varint,7,opt,name=scanned_total_bytes,json=scannedTotalBytes,proto3" json:"scanned_total_bytes,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (x *RetrieveResults) Reset() {
|
func (x *RetrieveResults) Reset() {
|
||||||
@ -101,6 +103,20 @@ func (x *RetrieveResults) GetHasMoreResult() bool {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (x *RetrieveResults) GetScannedRemoteBytes() int64 {
|
||||||
|
if x != nil {
|
||||||
|
return x.ScannedRemoteBytes
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
func (x *RetrieveResults) GetScannedTotalBytes() int64 {
|
||||||
|
if x != nil {
|
||||||
|
return x.ScannedTotalBytes
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
type LoadFieldMeta struct {
|
type LoadFieldMeta struct {
|
||||||
state protoimpl.MessageState
|
state protoimpl.MessageState
|
||||||
sizeCache protoimpl.SizeCache
|
sizeCache protoimpl.SizeCache
|
||||||
@ -432,7 +448,7 @@ var file_segcore_proto_rawDesc = []byte{
|
|||||||
0x14, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x65,
|
0x14, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x65,
|
||||||
0x67, 0x63, 0x6f, 0x72, 0x65, 0x1a, 0x0c, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x70, 0x72,
|
0x67, 0x63, 0x6f, 0x72, 0x65, 0x1a, 0x0c, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x70, 0x72,
|
||||||
0x6f, 0x74, 0x6f, 0x1a, 0x0c, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
0x6f, 0x74, 0x6f, 0x1a, 0x0c, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
||||||
0x6f, 0x22, 0xec, 0x01, 0x0a, 0x0f, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x52, 0x65,
|
0x6f, 0x22, 0xce, 0x02, 0x0a, 0x0f, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x52, 0x65,
|
||||||
0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x2a, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x01,
|
0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x2a, 0x0a, 0x03, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x01,
|
||||||
0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
0x28, 0x0b, 0x32, 0x18, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
||||||
0x6f, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x49, 0x44, 0x73, 0x52, 0x03, 0x69, 0x64,
|
0x6f, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x2e, 0x49, 0x44, 0x73, 0x52, 0x03, 0x69, 0x64,
|
||||||
@ -447,63 +463,69 @@ var file_segcore_proto_rawDesc = []byte{
|
|||||||
0x65, 0x76, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x68, 0x61, 0x73, 0x5f,
|
0x65, 0x76, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x68, 0x61, 0x73, 0x5f,
|
||||||
0x6d, 0x6f, 0x72, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28,
|
0x6d, 0x6f, 0x72, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28,
|
||||||
0x08, 0x52, 0x0d, 0x68, 0x61, 0x73, 0x4d, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74,
|
0x08, 0x52, 0x0d, 0x68, 0x61, 0x73, 0x4d, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74,
|
||||||
0x22, 0x76, 0x0a, 0x0d, 0x4c, 0x6f, 0x61, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x65, 0x74,
|
0x12, 0x30, 0x0a, 0x14, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x6d, 0x6f,
|
||||||
0x61, 0x12, 0x23, 0x0a, 0x0d, 0x6d, 0x69, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61,
|
0x74, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12,
|
||||||
0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6d, 0x69, 0x6e, 0x54, 0x69, 0x6d,
|
0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x42, 0x79, 0x74,
|
||||||
0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x23, 0x0a, 0x0d, 0x6d, 0x61, 0x78, 0x5f, 0x74, 0x69,
|
0x65, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x5f, 0x74, 0x6f,
|
||||||
0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6d,
|
0x74, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52,
|
||||||
0x61, 0x78, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x1b, 0x0a, 0x09, 0x72,
|
0x11, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x79, 0x74,
|
||||||
0x6f, 0x77, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08,
|
0x65, 0x73, 0x22, 0x76, 0x0a, 0x0d, 0x4c, 0x6f, 0x61, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d,
|
||||||
0x72, 0x6f, 0x77, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x6b, 0x0a, 0x0f, 0x4c, 0x6f, 0x61, 0x64,
|
0x65, 0x74, 0x61, 0x12, 0x23, 0x0a, 0x0d, 0x6d, 0x69, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73,
|
||||||
0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x39, 0x0a, 0x05, 0x6d,
|
0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6d, 0x69, 0x6e, 0x54,
|
||||||
0x65, 0x74, 0x61, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6d, 0x69, 0x6c,
|
0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x23, 0x0a, 0x0d, 0x6d, 0x61, 0x78, 0x5f,
|
||||||
0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x65, 0x67, 0x63, 0x6f, 0x72,
|
0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52,
|
||||||
0x65, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x65, 0x74, 0x61, 0x52,
|
0x0c, 0x6d, 0x61, 0x78, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x1b, 0x0a,
|
||||||
0x05, 0x6d, 0x65, 0x74, 0x61, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f,
|
0x09, 0x72, 0x6f, 0x77, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03,
|
||||||
0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x6f, 0x74, 0x61,
|
0x52, 0x08, 0x72, 0x6f, 0x77, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x6b, 0x0a, 0x0f, 0x4c, 0x6f,
|
||||||
0x6c, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x6a, 0x0a, 0x0c, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x52,
|
0x61, 0x64, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x39, 0x0a,
|
||||||
0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x3f, 0x0a, 0x0b, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x5f,
|
0x05, 0x6d, 0x65, 0x74, 0x61, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6d,
|
||||||
0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6d, 0x69, 0x6c,
|
0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x65, 0x67, 0x63,
|
||||||
0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61,
|
0x6f, 0x72, 0x65, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x65, 0x74,
|
||||||
0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0a, 0x66, 0x69, 0x65, 0x6c,
|
0x61, 0x52, 0x05, 0x6d, 0x65, 0x74, 0x61, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61,
|
||||||
0x64, 0x73, 0x44, 0x61, 0x74, 0x61, 0x12, 0x19, 0x0a, 0x08, 0x6e, 0x75, 0x6d, 0x5f, 0x72, 0x6f,
|
0x6c, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x6f,
|
||||||
0x77, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6e, 0x75, 0x6d, 0x52, 0x6f, 0x77,
|
0x74, 0x61, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x6a, 0x0a, 0x0c, 0x49, 0x6e, 0x73, 0x65, 0x72,
|
||||||
0x73, 0x22, 0xea, 0x02, 0x0a, 0x0e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x49, 0x6e, 0x64, 0x65, 0x78,
|
0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x3f, 0x0a, 0x0b, 0x66, 0x69, 0x65, 0x6c, 0x64,
|
||||||
0x4d, 0x65, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x49, 0x44, 0x18,
|
0x73, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6d,
|
||||||
0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x49, 0x44, 0x12, 0x22,
|
0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x63, 0x68, 0x65,
|
||||||
0x0a, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02,
|
0x6d, 0x61, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0a, 0x66, 0x69,
|
||||||
0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
|
0x65, 0x6c, 0x64, 0x73, 0x44, 0x61, 0x74, 0x61, 0x12, 0x19, 0x0a, 0x08, 0x6e, 0x75, 0x6d, 0x5f,
|
||||||
0x49, 0x44, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x6e, 0x61, 0x6d, 0x65,
|
0x72, 0x6f, 0x77, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6e, 0x75, 0x6d, 0x52,
|
||||||
0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d,
|
0x6f, 0x77, 0x73, 0x22, 0xea, 0x02, 0x0a, 0x0e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x49, 0x6e, 0x64,
|
||||||
0x65, 0x12, 0x42, 0x0a, 0x0b, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73,
|
0x65, 0x78, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x49,
|
||||||
0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e,
|
0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x49, 0x44,
|
||||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4b, 0x65, 0x79,
|
0x12, 0x22, 0x0a, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44,
|
||||||
0x56, 0x61, 0x6c, 0x75, 0x65, 0x50, 0x61, 0x69, 0x72, 0x52, 0x0a, 0x74, 0x79, 0x70, 0x65, 0x50,
|
0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69,
|
||||||
0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x44, 0x0a, 0x0c, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x70,
|
0x6f, 0x6e, 0x49, 0x44, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x6e, 0x61,
|
||||||
0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6d, 0x69,
|
0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e,
|
||||||
0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f,
|
0x61, 0x6d, 0x65, 0x12, 0x42, 0x0a, 0x0b, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61,
|
||||||
0x6e, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x50, 0x61, 0x69, 0x72, 0x52, 0x0b,
|
0x6d, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75,
|
||||||
0x69, 0x6e, 0x64, 0x65, 0x78, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x69,
|
0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4b,
|
||||||
0x73, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x06, 0x20, 0x01,
|
0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x50, 0x61, 0x69, 0x72, 0x52, 0x0a, 0x74, 0x79, 0x70,
|
||||||
0x28, 0x08, 0x52, 0x0b, 0x69, 0x73, 0x41, 0x75, 0x74, 0x6f, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12,
|
0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x44, 0x0a, 0x0c, 0x69, 0x6e, 0x64, 0x65, 0x78,
|
||||||
0x4d, 0x0a, 0x11, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x70, 0x61,
|
0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e,
|
||||||
0x72, 0x61, 0x6d, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6d, 0x69, 0x6c,
|
0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d,
|
||||||
0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e,
|
0x6d, 0x6f, 0x6e, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x50, 0x61, 0x69, 0x72,
|
||||||
0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x50, 0x61, 0x69, 0x72, 0x52, 0x0f, 0x75,
|
0x52, 0x0b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x22, 0x0a,
|
||||||
0x73, 0x65, 0x72, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x88,
|
0x0d, 0x69, 0x73, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x06,
|
||||||
0x01, 0x0a, 0x13, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x64,
|
0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x73, 0x41, 0x75, 0x74, 0x6f, 0x49, 0x6e, 0x64, 0x65,
|
||||||
0x65, 0x78, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x2a, 0x0a, 0x10, 0x6d, 0x61, 0x78, 0x49, 0x6e, 0x64,
|
0x78, 0x12, 0x4d, 0x0a, 0x11, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f,
|
||||||
0x65, 0x78, 0x52, 0x6f, 0x77, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03,
|
0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6d,
|
||||||
0x52, 0x10, 0x6d, 0x61, 0x78, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x6f, 0x77, 0x43, 0x6f, 0x75,
|
0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d,
|
||||||
0x6e, 0x74, 0x12, 0x45, 0x0a, 0x0b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x6d, 0x65, 0x74, 0x61,
|
0x6f, 0x6e, 0x2e, 0x4b, 0x65, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x50, 0x61, 0x69, 0x72, 0x52,
|
||||||
0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73,
|
0x0f, 0x75, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73,
|
||||||
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x65, 0x67, 0x63, 0x6f, 0x72, 0x65, 0x2e, 0x46,
|
0x22, 0x88, 0x01, 0x0a, 0x13, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49,
|
||||||
0x69, 0x65, 0x6c, 0x64, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4d, 0x65, 0x74, 0x61, 0x52, 0x0a, 0x69,
|
0x6e, 0x64, 0x65, 0x78, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x2a, 0x0a, 0x10, 0x6d, 0x61, 0x78, 0x49,
|
||||||
0x6e, 0x64, 0x65, 0x78, 0x4d, 0x65, 0x74, 0x61, 0x73, 0x42, 0x34, 0x5a, 0x32, 0x67, 0x69, 0x74,
|
0x6e, 0x64, 0x65, 0x78, 0x52, 0x6f, 0x77, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01,
|
||||||
0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2d, 0x69,
|
0x28, 0x03, 0x52, 0x10, 0x6d, 0x61, 0x78, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x6f, 0x77, 0x43,
|
||||||
0x6f, 0x2f, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x76, 0x32, 0x2f,
|
0x6f, 0x75, 0x6e, 0x74, 0x12, 0x45, 0x0a, 0x0b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x6d, 0x65,
|
||||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x65, 0x67, 0x63, 0x6f, 0x72, 0x65, 0x70, 0x62, 0x62,
|
0x74, 0x61, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6d, 0x69, 0x6c, 0x76,
|
||||||
0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x65, 0x67, 0x63, 0x6f, 0x72, 0x65,
|
||||||
|
0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4d, 0x65, 0x74, 0x61, 0x52,
|
||||||
|
0x0a, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4d, 0x65, 0x74, 0x61, 0x73, 0x42, 0x34, 0x5a, 0x32, 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, 0x76,
|
||||||
|
0x32, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x73, 0x65, 0x67, 0x63, 0x6f, 0x72, 0x65, 0x70,
|
||||||
|
0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|||||||
@ -28,8 +28,8 @@ pytest-parallel
|
|||||||
pytest-random-order
|
pytest-random-order
|
||||||
|
|
||||||
# pymilvus
|
# pymilvus
|
||||||
pymilvus==2.7.0rc29
|
pymilvus==2.7.0rc33
|
||||||
pymilvus[bulk_writer]==2.7.0rc29
|
pymilvus[bulk_writer]==2.7.0rc33
|
||||||
|
|
||||||
# for protobuf
|
# for protobuf
|
||||||
protobuf>=5.29.5
|
protobuf>=5.29.5
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user