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 {
|
||||
|
||||
// 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 {
|
||||
private:
|
||||
std::pair<int64_t, float> off_dis_;
|
||||
@ -215,6 +273,8 @@ struct SearchResult {
|
||||
//Vector iterators, used for group by
|
||||
std::optional<std::vector<std::shared_ptr<VectorIterator>>>
|
||||
vector_iterators_;
|
||||
// record the storage usage in search
|
||||
StorageCost search_storage_cost_;
|
||||
};
|
||||
|
||||
using SearchResultPtr = std::shared_ptr<SearchResult>;
|
||||
@ -229,6 +289,8 @@ struct RetrieveResult {
|
||||
std::vector<int64_t> result_offsets_;
|
||||
std::vector<DataArray> field_data_;
|
||||
bool has_more_result = true;
|
||||
// record the storage usage in retrieve
|
||||
StorageCost retrieve_storage_cost_;
|
||||
};
|
||||
|
||||
using RetrieveResultPtr = std::shared_ptr<RetrieveResult>;
|
||||
|
||||
@ -342,10 +342,14 @@ TEST_F(TestVectorArrayStorageV2, BuildEmbListHNSWIndex) {
|
||||
searchInfo.metric_type_ = knowhere::metric::MAX_SIM;
|
||||
searchInfo.search_params_ = search_conf;
|
||||
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);
|
||||
std::cout << ref_result.dump(1) << std::endl;
|
||||
EXPECT_EQ(result.total_nq_, 2);
|
||||
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
|
||||
milvus::BitsetView final_view((uint8_t*)col_input->GetRawData(),
|
||||
col_input->size());
|
||||
milvus::OpContext op_context;
|
||||
segment_->vector_search(search_info_,
|
||||
src_data,
|
||||
src_lims,
|
||||
num_queries,
|
||||
query_timestamp_,
|
||||
final_view,
|
||||
&op_context,
|
||||
search_result);
|
||||
|
||||
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));
|
||||
std::chrono::high_resolution_clock::time_point vector_end =
|
||||
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()) {
|
||||
auto& field_chunk_metrics = field_metrics->second;
|
||||
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);
|
||||
return cachinglayer::PinWrapper<const FieldChunkMetrics*>(ca, metrics);
|
||||
}
|
||||
|
||||
@ -11,6 +11,7 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <cstdint>
|
||||
#include <unordered_map>
|
||||
|
||||
#include "cachinglayer/CacheSlot.h"
|
||||
@ -112,6 +113,12 @@ class FieldChunkMetricsTranslator
|
||||
return &meta_;
|
||||
}
|
||||
|
||||
int64_t
|
||||
cells_storage_bytes(
|
||||
const std::vector<milvus::cachinglayer::cid_t>& cids) const override {
|
||||
return 0;
|
||||
}
|
||||
|
||||
private:
|
||||
// todo: support some null_count_ skip
|
||||
|
||||
|
||||
@ -245,6 +245,7 @@ void
|
||||
VectorDiskAnnIndex<T>::Query(const DatasetPtr dataset,
|
||||
const SearchInfo& search_info,
|
||||
const BitsetView& bitset,
|
||||
milvus::OpContext* op_context,
|
||||
SearchResult& search_result) const {
|
||||
AssertInfo(GetMetricType() == search_info.metric_type_,
|
||||
"Metric type of field index isn't the same with search info");
|
||||
@ -272,7 +273,8 @@ VectorDiskAnnIndex<T>::Query(const DatasetPtr dataset,
|
||||
auto final = [&] {
|
||||
if (CheckAndUpdateKnowhereRangeSearchParam(
|
||||
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()) {
|
||||
ThrowInfo(ErrorCode::UnexpectedError,
|
||||
fmt::format("failed to range search: {}: {}",
|
||||
@ -282,7 +284,8 @@ VectorDiskAnnIndex<T>::Query(const DatasetPtr dataset,
|
||||
return ReGenRangeSearchResult(
|
||||
res.value(), topk, num_rows, GetMetricType());
|
||||
} else {
|
||||
auto res = index_.Search(dataset, search_config, bitset);
|
||||
auto res =
|
||||
index_.Search(dataset, search_config, bitset, op_context);
|
||||
if (!res.has_value()) {
|
||||
ThrowInfo(ErrorCode::UnexpectedError,
|
||||
fmt::format("failed to search: {}: {}",
|
||||
|
||||
@ -72,6 +72,7 @@ class VectorDiskAnnIndex : public VectorIndex {
|
||||
Query(const DatasetPtr dataset,
|
||||
const SearchInfo& search_info,
|
||||
const BitsetView& bitset,
|
||||
milvus::OpContext* op_context,
|
||||
SearchResult& search_result) const override;
|
||||
|
||||
const bool
|
||||
|
||||
@ -29,6 +29,7 @@
|
||||
#include "common/BitsetView.h"
|
||||
#include "common/QueryResult.h"
|
||||
#include "common/QueryInfo.h"
|
||||
#include "common/OpContext.h"
|
||||
#include "knowhere/version.h"
|
||||
|
||||
namespace milvus::index {
|
||||
@ -58,6 +59,7 @@ class VectorIndex : public IndexBase {
|
||||
Query(const DatasetPtr dataset,
|
||||
const SearchInfo& search_info,
|
||||
const BitsetView& bitset,
|
||||
milvus::OpContext* op_context,
|
||||
SearchResult& search_result) const = 0;
|
||||
|
||||
virtual knowhere::expected<std::vector<knowhere::IndexNode::IteratorPtr>>
|
||||
|
||||
@ -473,6 +473,7 @@ void
|
||||
VectorMemIndex<T>::Query(const DatasetPtr dataset,
|
||||
const SearchInfo& search_info,
|
||||
const BitsetView& bitset,
|
||||
milvus::OpContext* op_context,
|
||||
SearchResult& search_result) const {
|
||||
// AssertInfo(GetMetricType() == search_info.metric_type_,
|
||||
// "Metric type of field index isn't the same with search info");
|
||||
@ -486,7 +487,8 @@ VectorMemIndex<T>::Query(const DatasetPtr dataset,
|
||||
if (CheckAndUpdateKnowhereRangeSearchParam(
|
||||
search_info, topk, GetMetricType(), search_conf)) {
|
||||
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");
|
||||
if (!res.has_value()) {
|
||||
ThrowInfo(ErrorCode::UnexpectedError,
|
||||
@ -500,7 +502,7 @@ VectorMemIndex<T>::Query(const DatasetPtr dataset,
|
||||
return result;
|
||||
} else {
|
||||
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");
|
||||
if (!res.has_value()) {
|
||||
ThrowInfo(
|
||||
|
||||
@ -79,6 +79,7 @@ class VectorMemIndex : public VectorIndex {
|
||||
Query(const DatasetPtr dataset,
|
||||
const SearchInfo& search_info,
|
||||
const BitsetView& bitset,
|
||||
milvus::OpContext* op_context,
|
||||
SearchResult& search_result) const override;
|
||||
|
||||
const bool
|
||||
|
||||
@ -84,10 +84,12 @@ VecIndexCreator::Load(const milvus::BinarySet& binary_set) {
|
||||
std::unique_ptr<SearchResult>
|
||||
VecIndexCreator::Query(const milvus::DatasetPtr& dataset,
|
||||
const SearchInfo& search_info,
|
||||
const BitsetView& bitset) {
|
||||
const BitsetView& bitset,
|
||||
milvus::OpContext* op_context) {
|
||||
auto vector_index = dynamic_cast<index::VectorIndex*>(index_.get());
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
@ -56,7 +56,8 @@ class VecIndexCreator : public IndexCreatorBase {
|
||||
std::unique_ptr<SearchResult>
|
||||
Query(const milvus::DatasetPtr& dataset,
|
||||
const SearchInfo& search_info,
|
||||
const BitsetView& bitset);
|
||||
const BitsetView& bitset,
|
||||
milvus::OpContext* op_context);
|
||||
|
||||
index::IndexStatsPtr
|
||||
Upload() override;
|
||||
|
||||
@ -135,7 +135,7 @@ class ChunkedColumnBase : public ChunkedColumnInterface {
|
||||
|
||||
PinWrapper<const char*>
|
||||
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);
|
||||
return PinWrapper<const char*>(ca, chunk->Data());
|
||||
}
|
||||
@ -146,8 +146,8 @@ class ChunkedColumnBase : public ChunkedColumnInterface {
|
||||
return true;
|
||||
}
|
||||
auto [chunk_id, offset_in_chunk] = GetChunkIDByOffset(offset);
|
||||
auto ca =
|
||||
SemiInlineGet(slot_->PinCells({static_cast<cid_t>(chunk_id)}));
|
||||
auto ca = SemiInlineGet(
|
||||
slot_->PinCells(nullptr, {static_cast<cid_t>(chunk_id)}));
|
||||
auto chunk = ca->get_cell_of(chunk_id);
|
||||
return chunk->isValid(offset_in_chunk);
|
||||
}
|
||||
@ -169,7 +169,7 @@ class ChunkedColumnBase : public ChunkedColumnInterface {
|
||||
}
|
||||
// nullable:
|
||||
if (offsets == nullptr) {
|
||||
auto ca = SemiInlineGet(slot_->PinAllCells());
|
||||
auto ca = SemiInlineGet(slot_->PinAllCells(nullptr));
|
||||
for (int64_t i = 0; i < num_rows_; i++) {
|
||||
auto [cid, offset_in_chunk] = GetChunkIDByOffset(i);
|
||||
auto chunk = ca->get_cell_of(cid);
|
||||
@ -178,7 +178,7 @@ class ChunkedColumnBase : public ChunkedColumnInterface {
|
||||
}
|
||||
} else {
|
||||
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++) {
|
||||
auto chunk = ca->get_cell_of(cids[i]);
|
||||
auto valid = chunk->isValid(offsets_in_chunk[i]);
|
||||
@ -322,14 +322,14 @@ class ChunkedColumnBase : public ChunkedColumnInterface {
|
||||
|
||||
PinWrapper<Chunk*>
|
||||
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);
|
||||
return PinWrapper<Chunk*>(ca, chunk);
|
||||
}
|
||||
|
||||
std::vector<PinWrapper<Chunk*>>
|
||||
GetAllChunks() const override {
|
||||
auto ca = SemiInlineGet(slot_->PinAllCells());
|
||||
auto ca = SemiInlineGet(slot_->PinAllCells(nullptr));
|
||||
std::vector<PinWrapper<Chunk*>> ret;
|
||||
ret.reserve(num_chunks_);
|
||||
for (size_t i = 0; i < num_chunks_; i++) {
|
||||
@ -373,7 +373,7 @@ class ChunkedColumn : public ChunkedColumnBase {
|
||||
const int64_t* offsets,
|
||||
int64_t count) override {
|
||||
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++) {
|
||||
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) {
|
||||
static_assert(std::is_fundamental_v<S> && std::is_fundamental_v<T>);
|
||||
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);
|
||||
for (int64_t i = 0; i < count; i++) {
|
||||
auto chunk = ca->get_cell_of(cids[i]);
|
||||
@ -443,7 +443,7 @@ class ChunkedColumn : public ChunkedColumnBase {
|
||||
int64_t element_sizeof,
|
||||
int64_t count) override {
|
||||
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);
|
||||
for (int64_t i = 0; i < count; i++) {
|
||||
auto chunk = ca->get_cell_of(cids[i]);
|
||||
@ -454,7 +454,7 @@ class ChunkedColumn : public ChunkedColumnBase {
|
||||
|
||||
PinWrapper<SpanBase>
|
||||
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);
|
||||
return PinWrapper<SpanBase>(
|
||||
ca, static_cast<FixedWidthChunk*>(chunk)->Span());
|
||||
@ -479,7 +479,7 @@ class ChunkedVariableColumn : public ChunkedColumnBase {
|
||||
StringViews(int64_t chunk_id,
|
||||
std::optional<std::pair<int64_t, int64_t>> offset_len =
|
||||
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);
|
||||
return PinWrapper<
|
||||
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>>>
|
||||
StringViewsByOffsets(int64_t chunk_id,
|
||||
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);
|
||||
return PinWrapper<
|
||||
std::pair<std::vector<std::string_view>, FixedVector<bool>>>(
|
||||
@ -507,7 +507,7 @@ class ChunkedVariableColumn : public ChunkedColumnBase {
|
||||
}
|
||||
std::shared_ptr<CellAccessor<Chunk>> ca{nullptr};
|
||||
if (offsets == nullptr) {
|
||||
ca = SemiInlineGet(slot_->PinAllCells());
|
||||
auto ca = SemiInlineGet(slot_->PinAllCells(nullptr));
|
||||
for (int64_t i = 0; i < num_rows_; i++) {
|
||||
auto [cid, offset_in_chunk] = GetChunkIDByOffset(i);
|
||||
auto chunk = ca->get_cell_of(cid);
|
||||
@ -519,7 +519,7 @@ class ChunkedVariableColumn : public ChunkedColumnBase {
|
||||
}
|
||||
} else {
|
||||
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++) {
|
||||
auto chunk = ca->get_cell_of(cids[i]);
|
||||
auto valid =
|
||||
@ -545,7 +545,7 @@ class ChunkedVariableColumn : public ChunkedColumnBase {
|
||||
return;
|
||||
}
|
||||
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++) {
|
||||
auto chunk = ca->get_cell_of(cids[i]);
|
||||
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");
|
||||
|
||||
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++) {
|
||||
auto chunk = ca->get_cell_of(cids[i]);
|
||||
auto str_view = static_cast<StringChunk*>(chunk)->operator[](
|
||||
@ -593,7 +593,7 @@ class ChunkedArrayColumn : public ChunkedColumnBase {
|
||||
const int64_t* offsets,
|
||||
int64_t count) const override {
|
||||
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++) {
|
||||
auto array = static_cast<ArrayChunk*>(ca->get_cell_of(cids[i]))
|
||||
->View(offsets_in_chunk[i])
|
||||
@ -606,8 +606,8 @@ class ChunkedArrayColumn : public ChunkedColumnBase {
|
||||
ArrayViews(int64_t chunk_id,
|
||||
std::optional<std::pair<int64_t, int64_t>> offset_len =
|
||||
std::nullopt) const override {
|
||||
auto ca =
|
||||
SemiInlineGet(slot_->PinCells({static_cast<cid_t>(chunk_id)}));
|
||||
auto ca = SemiInlineGet(
|
||||
slot_->PinCells(nullptr, {static_cast<cid_t>(chunk_id)}));
|
||||
auto chunk = ca->get_cell_of(chunk_id);
|
||||
return PinWrapper<std::pair<std::vector<ArrayView>, FixedVector<bool>>>(
|
||||
ca, static_cast<ArrayChunk*>(chunk)->Views(offset_len));
|
||||
@ -616,7 +616,7 @@ class ChunkedArrayColumn : public ChunkedColumnBase {
|
||||
PinWrapper<std::pair<std::vector<ArrayView>, FixedVector<bool>>>
|
||||
ArrayViewsByOffsets(int64_t chunk_id,
|
||||
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);
|
||||
return PinWrapper<std::pair<std::vector<ArrayView>, FixedVector<bool>>>(
|
||||
ca, static_cast<ArrayChunk*>(chunk)->ViewsByOffsets(offsets));
|
||||
@ -636,7 +636,7 @@ class ChunkedVectorArrayColumn : public ChunkedColumnBase {
|
||||
const int64_t* offsets,
|
||||
int64_t count) const override {
|
||||
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++) {
|
||||
auto array =
|
||||
static_cast<VectorArrayChunk*>(ca->get_cell_of(cids[i]))
|
||||
@ -650,8 +650,8 @@ class ChunkedVectorArrayColumn : public ChunkedColumnBase {
|
||||
VectorArrayViews(int64_t chunk_id,
|
||||
std::optional<std::pair<int64_t, int64_t>> offset_len =
|
||||
std::nullopt) const override {
|
||||
auto ca =
|
||||
SemiInlineGet(slot_->PinCells({static_cast<cid_t>(chunk_id)}));
|
||||
auto ca = SemiInlineGet(
|
||||
slot_->PinCells(nullptr, {static_cast<cid_t>(chunk_id)}));
|
||||
auto chunk = ca->get_cell_of(chunk_id);
|
||||
return PinWrapper<
|
||||
std::pair<std::vector<VectorArrayView>, FixedVector<bool>>>(
|
||||
@ -660,8 +660,8 @@ class ChunkedVectorArrayColumn : public ChunkedColumnBase {
|
||||
|
||||
PinWrapper<const size_t*>
|
||||
VectorArrayLims(int64_t chunk_id) const override {
|
||||
auto ca =
|
||||
SemiInlineGet(slot_->PinCells({static_cast<cid_t>(chunk_id)}));
|
||||
auto ca = SemiInlineGet(
|
||||
slot_->PinCells(nullptr, {static_cast<cid_t>(chunk_id)}));
|
||||
auto chunk = ca->get_cell_of(chunk_id);
|
||||
return PinWrapper<const size_t*>(
|
||||
ca, static_cast<VectorArrayChunk*>(chunk)->Lims());
|
||||
|
||||
@ -67,20 +67,20 @@ class ChunkedColumnGroup {
|
||||
|
||||
PinWrapper<GroupChunk*>
|
||||
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);
|
||||
return PinWrapper<GroupChunk*>(ca, chunk);
|
||||
}
|
||||
|
||||
std::shared_ptr<CellAccessor<GroupChunk>>
|
||||
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::vector<PinWrapper<GroupChunk*>>
|
||||
GetAllGroupChunks() {
|
||||
auto ca = SemiInlineGet(slot_->PinAllCells());
|
||||
auto ca = SemiInlineGet(slot_->PinAllCells(nullptr));
|
||||
std::vector<PinWrapper<GroupChunk*>> ret;
|
||||
ret.reserve(num_chunks_);
|
||||
for (size_t i = 0; i < num_chunks_; i++) {
|
||||
|
||||
@ -27,48 +27,6 @@
|
||||
#include "common/Tracer.h"
|
||||
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
|
||||
empty_search_result(int64_t num_queries) {
|
||||
SearchResult final_result;
|
||||
|
||||
@ -121,7 +121,8 @@ BruteForceSearch(const dataset::SearchDataset& query_ds,
|
||||
const std::map<std::string, std::string>& index_info,
|
||||
const BitsetView& bitset,
|
||||
DataType data_type,
|
||||
DataType element_type) {
|
||||
DataType element_type,
|
||||
milvus::OpContext* op_context) {
|
||||
SubSearchResult sub_result(query_ds.num_queries,
|
||||
query_ds.topk,
|
||||
query_ds.metric_type,
|
||||
@ -158,23 +159,23 @@ BruteForceSearch(const dataset::SearchDataset& query_ds,
|
||||
knowhere::expected<knowhere::DataSetPtr> res;
|
||||
if (data_type == DataType::VECTOR_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) {
|
||||
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) {
|
||||
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) {
|
||||
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) {
|
||||
res = knowhere::BruteForce::RangeSearch<
|
||||
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) {
|
||||
res = knowhere::BruteForce::RangeSearch<int8>(
|
||||
base_dataset, query_dataset, search_cfg, bitset);
|
||||
base_dataset, query_dataset, search_cfg, bitset, op_context);
|
||||
} else {
|
||||
ThrowInfo(
|
||||
ErrorCode::Unsupported,
|
||||
@ -204,7 +205,8 @@ BruteForceSearch(const dataset::SearchDataset& query_ds,
|
||||
sub_result.mutable_seg_offsets().data(),
|
||||
sub_result.mutable_distances().data(),
|
||||
search_cfg,
|
||||
bitset);
|
||||
bitset,
|
||||
op_context);
|
||||
} else if (data_type == DataType::VECTOR_FLOAT16) {
|
||||
stat = knowhere::BruteForce::SearchWithBuf<float16>(
|
||||
base_dataset,
|
||||
@ -212,7 +214,8 @@ BruteForceSearch(const dataset::SearchDataset& query_ds,
|
||||
sub_result.mutable_seg_offsets().data(),
|
||||
sub_result.mutable_distances().data(),
|
||||
search_cfg,
|
||||
bitset);
|
||||
bitset,
|
||||
op_context);
|
||||
} else if (data_type == DataType::VECTOR_BFLOAT16) {
|
||||
stat = knowhere::BruteForce::SearchWithBuf<bfloat16>(
|
||||
base_dataset,
|
||||
@ -220,7 +223,8 @@ BruteForceSearch(const dataset::SearchDataset& query_ds,
|
||||
sub_result.mutable_seg_offsets().data(),
|
||||
sub_result.mutable_distances().data(),
|
||||
search_cfg,
|
||||
bitset);
|
||||
bitset,
|
||||
op_context);
|
||||
} else if (data_type == DataType::VECTOR_BINARY) {
|
||||
stat = knowhere::BruteForce::SearchWithBuf<bin1>(
|
||||
base_dataset,
|
||||
@ -228,7 +232,8 @@ BruteForceSearch(const dataset::SearchDataset& query_ds,
|
||||
sub_result.mutable_seg_offsets().data(),
|
||||
sub_result.mutable_distances().data(),
|
||||
search_cfg,
|
||||
bitset);
|
||||
bitset,
|
||||
op_context);
|
||||
} else if (data_type == DataType::VECTOR_SPARSE_U32_F32) {
|
||||
stat = knowhere::BruteForce::SearchSparseWithBuf(
|
||||
base_dataset,
|
||||
@ -236,7 +241,8 @@ BruteForceSearch(const dataset::SearchDataset& query_ds,
|
||||
sub_result.mutable_seg_offsets().data(),
|
||||
sub_result.mutable_distances().data(),
|
||||
search_cfg,
|
||||
bitset);
|
||||
bitset,
|
||||
op_context);
|
||||
} else if (data_type == DataType::VECTOR_INT8) {
|
||||
stat = knowhere::BruteForce::SearchWithBuf<int8>(
|
||||
base_dataset,
|
||||
@ -244,7 +250,8 @@ BruteForceSearch(const dataset::SearchDataset& query_ds,
|
||||
sub_result.mutable_seg_offsets().data(),
|
||||
sub_result.mutable_distances().data(),
|
||||
search_cfg,
|
||||
bitset);
|
||||
bitset,
|
||||
op_context);
|
||||
} else {
|
||||
ThrowInfo(ErrorCode::Unsupported,
|
||||
"Unsupported dataType for chunk brute force search:{}",
|
||||
|
||||
@ -14,6 +14,7 @@
|
||||
#include "common/BitsetView.h"
|
||||
#include "common/FieldMeta.h"
|
||||
#include "common/QueryInfo.h"
|
||||
#include "common/OpContext.h"
|
||||
#include "query/SubSearchResult.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 BitsetView& bitset,
|
||||
DataType data_type,
|
||||
DataType element_type);
|
||||
DataType element_type,
|
||||
milvus::OpContext* op_context);
|
||||
|
||||
knowhere::expected<std::vector<knowhere::IndexNode::IteratorPtr>>
|
||||
GetBruteForceSearchIterators(
|
||||
|
||||
@ -115,7 +115,8 @@ class TestSparseFloatSearchBruteForce : public ::testing::Test {
|
||||
index_info,
|
||||
bitset_view,
|
||||
DataType::VECTOR_SPARSE_U32_F32,
|
||||
DataType::NONE));
|
||||
DataType::NONE,
|
||||
nullptr));
|
||||
return;
|
||||
}
|
||||
auto result = BruteForceSearch(query_dataset,
|
||||
@ -124,7 +125,8 @@ class TestSparseFloatSearchBruteForce : public ::testing::Test {
|
||||
index_info,
|
||||
bitset_view,
|
||||
DataType::VECTOR_SPARSE_U32_F32,
|
||||
DataType::NONE);
|
||||
DataType::NONE,
|
||||
nullptr);
|
||||
for (int i = 0; i < nq; i++) {
|
||||
auto ref = SearchRef(base.get(), *(query.get() + i), nb, topk);
|
||||
auto ans = result.get_seg_offsets() + i * topk;
|
||||
@ -139,7 +141,8 @@ class TestSparseFloatSearchBruteForce : public ::testing::Test {
|
||||
index_info,
|
||||
bitset_view,
|
||||
DataType::VECTOR_SPARSE_U32_F32,
|
||||
DataType::NONE);
|
||||
DataType::NONE,
|
||||
nullptr);
|
||||
for (int i = 0; i < nq; i++) {
|
||||
auto ref = RangeSearchRef(
|
||||
base.get(), *(query.get() + i), nb, 0.1, 0.5, topk);
|
||||
|
||||
@ -142,7 +142,8 @@ class TestFloatSearchBruteForce : public ::testing::Test {
|
||||
index_info,
|
||||
bitset_view,
|
||||
DataType::VECTOR_FLOAT,
|
||||
DataType::NONE);
|
||||
DataType::NONE,
|
||||
nullptr);
|
||||
for (int i = 0; i < nq; i++) {
|
||||
auto ref = Ref(base.data(),
|
||||
query.data() + i * dim,
|
||||
|
||||
@ -31,6 +31,7 @@ FloatSegmentIndexSearch(const segcore::SegmentGrowingImpl& segment,
|
||||
const void* query_data,
|
||||
int64_t num_queries,
|
||||
const BitsetView& bitset,
|
||||
milvus::OpContext* op_context,
|
||||
SearchResult& search_result) {
|
||||
auto& schema = segment.get_schema();
|
||||
auto& indexing_record = segment.get_indexing_record();
|
||||
@ -62,6 +63,7 @@ FloatSegmentIndexSearch(const segcore::SegmentGrowingImpl& segment,
|
||||
*vec_index,
|
||||
search_conf,
|
||||
bitset,
|
||||
op_context,
|
||||
search_result,
|
||||
is_sparse);
|
||||
}
|
||||
@ -75,6 +77,7 @@ SearchOnGrowing(const segcore::SegmentGrowingImpl& segment,
|
||||
int64_t num_queries,
|
||||
Timestamp timestamp,
|
||||
const BitsetView& bitset,
|
||||
milvus::OpContext* op_context,
|
||||
SearchResult& search_result) {
|
||||
auto& schema = segment.get_schema();
|
||||
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 "
|
||||
"indexing search");
|
||||
|
||||
FloatSegmentIndexSearch(
|
||||
segment, info, query_data, num_queries, bitset, search_result);
|
||||
FloatSegmentIndexSearch(segment,
|
||||
info,
|
||||
query_data,
|
||||
num_queries,
|
||||
bitset,
|
||||
op_context,
|
||||
search_result);
|
||||
} else {
|
||||
std::shared_lock<std::shared_mutex> read_chunk_mutex(
|
||||
segment.get_chunk_mutex());
|
||||
@ -114,8 +122,13 @@ SearchOnGrowing(const segcore::SegmentGrowingImpl& segment,
|
||||
"vector array(embedding list) is not supported for "
|
||||
"growing segment indexing search");
|
||||
|
||||
return FloatSegmentIndexSearch(
|
||||
segment, info, query_data, num_queries, bitset, search_result);
|
||||
return FloatSegmentIndexSearch(segment,
|
||||
info,
|
||||
query_data,
|
||||
num_queries,
|
||||
bitset,
|
||||
op_context,
|
||||
search_result);
|
||||
}
|
||||
SubSearchResult final_qr(num_queries, topk, metric_type, round_decimal);
|
||||
// TODO(SPARSE): see todo in PlanImpl.h::PlaceHolder.
|
||||
@ -233,7 +246,8 @@ SearchOnGrowing(const segcore::SegmentGrowingImpl& segment,
|
||||
index_info,
|
||||
bitset,
|
||||
data_type,
|
||||
element_type);
|
||||
element_type,
|
||||
op_context);
|
||||
final_qr.merge(sub_qr);
|
||||
}
|
||||
}
|
||||
|
||||
@ -12,6 +12,7 @@
|
||||
#pragma once
|
||||
|
||||
#include "common/BitsetView.h"
|
||||
#include "common/OpContext.h"
|
||||
#include "segcore/SegmentGrowingImpl.h"
|
||||
|
||||
namespace milvus::query {
|
||||
@ -24,6 +25,7 @@ SearchOnGrowing(const segcore::SegmentGrowingImpl& segment,
|
||||
int64_t num_queries,
|
||||
Timestamp timestamp,
|
||||
const BitsetView& bitset,
|
||||
milvus::OpContext* op_context,
|
||||
SearchResult& search_result);
|
||||
|
||||
} // namespace milvus::query
|
||||
|
||||
@ -19,6 +19,7 @@ SearchOnIndex(const dataset::SearchDataset& search_dataset,
|
||||
const index::VectorIndex& indexing,
|
||||
const SearchInfo& search_conf,
|
||||
const BitsetView& bitset,
|
||||
milvus::OpContext* op_context,
|
||||
SearchResult& search_result,
|
||||
bool is_sparse) {
|
||||
auto num_queries = search_dataset.num_queries;
|
||||
@ -43,7 +44,7 @@ SearchOnIndex(const dataset::SearchDataset& search_dataset,
|
||||
return;
|
||||
}
|
||||
|
||||
indexing.Query(dataset, search_conf, bitset, search_result);
|
||||
indexing.Query(dataset, search_conf, bitset, op_context, search_result);
|
||||
}
|
||||
|
||||
} // namespace milvus::query
|
||||
|
||||
@ -24,6 +24,7 @@ SearchOnIndex(const dataset::SearchDataset& search_dataset,
|
||||
const index::VectorIndex& indexing,
|
||||
const SearchInfo& search_conf,
|
||||
const BitsetView& bitset,
|
||||
milvus::OpContext* op_context,
|
||||
SearchResult& search_result,
|
||||
bool is_sparse = false);
|
||||
|
||||
|
||||
@ -34,6 +34,7 @@ SearchOnSealedIndex(const Schema& schema,
|
||||
const size_t* query_lims,
|
||||
int64_t num_queries,
|
||||
const BitsetView& bitset,
|
||||
milvus::OpContext* op_context,
|
||||
SearchResult& search_result) {
|
||||
auto topK = search_info.topk_;
|
||||
auto round_decimal = search_info.round_decimal_;
|
||||
@ -66,7 +67,8 @@ SearchOnSealedIndex(const Schema& schema,
|
||||
}
|
||||
|
||||
dataset->SetIsSparse(is_sparse);
|
||||
auto accessor = SemiInlineGet(field_indexing->indexing_->PinCells({0}));
|
||||
auto accessor =
|
||||
SemiInlineGet(field_indexing->indexing_->PinCells(nullptr, {0}));
|
||||
auto vec_index =
|
||||
dynamic_cast<index::VectorIndex*>(accessor->get_cell_of(0));
|
||||
|
||||
@ -83,7 +85,8 @@ SearchOnSealedIndex(const Schema& schema,
|
||||
search_result,
|
||||
bitset,
|
||||
*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();
|
||||
auto total_num = num_queries * topK;
|
||||
if (round_decimal != -1) {
|
||||
@ -108,6 +111,7 @@ SearchOnSealedColumn(const Schema& schema,
|
||||
int64_t num_queries,
|
||||
int64_t row_count,
|
||||
const BitsetView& bitview,
|
||||
milvus::OpContext* op_context,
|
||||
SearchResult& result) {
|
||||
auto field_id = search_info.field_id_;
|
||||
auto& field = schema[field_id];
|
||||
@ -182,7 +186,8 @@ SearchOnSealedColumn(const Schema& schema,
|
||||
index_info,
|
||||
bitview,
|
||||
data_type,
|
||||
element_type);
|
||||
element_type,
|
||||
op_context);
|
||||
final_qr.merge(sub_qr);
|
||||
}
|
||||
offset += chunk_size;
|
||||
|
||||
@ -26,6 +26,7 @@ SearchOnSealedIndex(const Schema& schema,
|
||||
const size_t* query_lims,
|
||||
int64_t num_queries,
|
||||
const BitsetView& view,
|
||||
milvus::OpContext* op_context,
|
||||
SearchResult& search_result);
|
||||
|
||||
void
|
||||
@ -38,6 +39,7 @@ SearchOnSealedColumn(const Schema& schema,
|
||||
int64_t num_queries,
|
||||
int64_t row_count,
|
||||
const BitsetView& bitset,
|
||||
milvus::OpContext* op_context,
|
||||
SearchResult& result);
|
||||
|
||||
} // namespace milvus::query
|
||||
|
||||
@ -685,7 +685,8 @@ ChunkedSegmentSealedImpl::GetNgramIndex(FieldId field_id) const {
|
||||
auto slot = iter->second.get();
|
||||
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));
|
||||
AssertInfo(index != nullptr,
|
||||
"ngram index cache is corrupted, field_id: {}",
|
||||
@ -706,7 +707,8 @@ ChunkedSegmentSealedImpl::GetNgramIndexForJson(
|
||||
|
||||
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 =
|
||||
dynamic_cast<index::NgramInvertedIndex*>(ca->get_cell_of(0));
|
||||
AssertInfo(index != nullptr,
|
||||
@ -749,6 +751,7 @@ ChunkedSegmentSealedImpl::vector_search(SearchInfo& search_info,
|
||||
int64_t query_count,
|
||||
Timestamp timestamp,
|
||||
const BitsetView& bitset,
|
||||
milvus::OpContext* op_context,
|
||||
SearchResult& output) const {
|
||||
AssertInfo(is_system_field_ready(), "System field is not ready");
|
||||
auto field_id = search_info.field_id_;
|
||||
@ -774,6 +777,7 @@ ChunkedSegmentSealedImpl::vector_search(SearchInfo& search_info,
|
||||
query_lims,
|
||||
query_count,
|
||||
bitset,
|
||||
op_context,
|
||||
output);
|
||||
milvus::tracer::AddEvent(
|
||||
"finish_searching_vector_temperate_binlog_index");
|
||||
@ -788,6 +792,7 @@ ChunkedSegmentSealedImpl::vector_search(SearchInfo& search_info,
|
||||
query_lims,
|
||||
query_count,
|
||||
bitset,
|
||||
op_context,
|
||||
output);
|
||||
milvus::tracer::AddEvent("finish_searching_vector_index");
|
||||
} else {
|
||||
@ -816,6 +821,7 @@ ChunkedSegmentSealedImpl::vector_search(SearchInfo& search_info,
|
||||
query_count,
|
||||
row_count,
|
||||
bitset,
|
||||
op_context,
|
||||
output);
|
||||
milvus::tracer::AddEvent("finish_searching_vector_data");
|
||||
}
|
||||
@ -837,7 +843,8 @@ ChunkedSegmentSealedImpl::get_vector(FieldId field_id,
|
||||
"vector index is not ready");
|
||||
auto field_indexing = vector_indexings_.get_field_indexing(field_id);
|
||||
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));
|
||||
AssertInfo(vec_index, "invalid vector indexing");
|
||||
|
||||
@ -1612,8 +1619,9 @@ ChunkedSegmentSealedImpl::CreateTextIndex(FieldId field_id) {
|
||||
"index are found");
|
||||
return iter;
|
||||
});
|
||||
milvus::OpContext ctx;
|
||||
auto accessor =
|
||||
SemiInlineGet(field_index_iter->second->PinCells({0}));
|
||||
SemiInlineGet(field_index_iter->second->PinCells(&ctx, {0}));
|
||||
auto ptr = accessor->get_cell_of(0);
|
||||
AssertInfo(ptr->HasRawData(),
|
||||
"text raw data not found, trying to create text index "
|
||||
|
||||
@ -92,7 +92,7 @@ class ChunkedSegmentSealedImpl : public SegmentSealed {
|
||||
if (iter == scalar_indexings->end()) {
|
||||
return {};
|
||||
}
|
||||
auto ca = SemiInlineGet(iter->second->PinCells({0}));
|
||||
auto ca = SemiInlineGet(iter->second->PinCells(nullptr, {0}));
|
||||
auto index = ca->get_cell_of(0);
|
||||
return {PinWrapper<const index::IndexBase*>(ca, index)};
|
||||
}
|
||||
@ -425,6 +425,7 @@ class ChunkedSegmentSealedImpl : public SegmentSealed {
|
||||
int64_t query_count,
|
||||
Timestamp timestamp,
|
||||
const BitsetView& bitset,
|
||||
milvus::OpContext* op_context,
|
||||
SearchResult& output) const override;
|
||||
|
||||
void
|
||||
|
||||
@ -124,7 +124,7 @@ TEST(test_chunk_segment, TestSearchOnSealed) {
|
||||
auto query_data = col_query_data.data();
|
||||
auto index_info = std::map<std::string, std::string>{};
|
||||
SearchResult search_result;
|
||||
|
||||
milvus::OpContext op_context;
|
||||
query::SearchOnSealedColumn(*schema,
|
||||
column.get(),
|
||||
search_info,
|
||||
@ -134,6 +134,7 @@ TEST(test_chunk_segment, TestSearchOnSealed) {
|
||||
1,
|
||||
total_row_count,
|
||||
bv,
|
||||
&op_context,
|
||||
search_result);
|
||||
|
||||
std::set<int64_t> offsets;
|
||||
@ -160,6 +161,7 @@ TEST(test_chunk_segment, TestSearchOnSealed) {
|
||||
1,
|
||||
total_row_count,
|
||||
bv,
|
||||
&op_context,
|
||||
search_result);
|
||||
|
||||
ASSERT_EQ(1, search_result.vector_iterators_->size());
|
||||
|
||||
@ -322,3 +322,101 @@ TEST(CApiTest, StreamReduceGroupBY) {
|
||||
DeleteStreamSearchReducer(c_search_stream_reducer);
|
||||
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,
|
||||
Timestamp timestamp,
|
||||
const BitsetView& bitset,
|
||||
milvus::OpContext* op_context,
|
||||
SearchResult& output) const {
|
||||
query::SearchOnGrowing(*this,
|
||||
search_info,
|
||||
@ -687,6 +688,7 @@ SegmentGrowingImpl::vector_search(SearchInfo& search_info,
|
||||
query_count,
|
||||
timestamp,
|
||||
bitset,
|
||||
op_context,
|
||||
output);
|
||||
}
|
||||
|
||||
|
||||
@ -329,6 +329,7 @@ class SegmentGrowingImpl : public SegmentGrowing {
|
||||
int64_t query_count,
|
||||
Timestamp timestamp,
|
||||
const BitsetView& bitset,
|
||||
milvus::OpContext* op_context,
|
||||
SearchResult& output) const override;
|
||||
|
||||
DataType
|
||||
|
||||
@ -23,6 +23,7 @@
|
||||
#include "cachinglayer/CacheSlot.h"
|
||||
#include "common/EasyAssert.h"
|
||||
#include "common/Json.h"
|
||||
#include "common/OpContext.h"
|
||||
#include "common/Schema.h"
|
||||
#include "common/Span.h"
|
||||
#include "common/SystemProperty.h"
|
||||
@ -363,6 +364,7 @@ class SegmentInternalInterface : public SegmentInterface {
|
||||
int64_t query_count,
|
||||
Timestamp timestamp,
|
||||
const BitsetView& bitset,
|
||||
milvus::OpContext* op_context,
|
||||
SearchResult& output) const = 0;
|
||||
|
||||
virtual void
|
||||
|
||||
@ -113,7 +113,7 @@ class SegmentSealed : public SegmentInternalInterface {
|
||||
if (best_match == 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);
|
||||
return PinWrapper<const index::IndexBase*>(ca, index);
|
||||
});
|
||||
|
||||
@ -244,7 +244,8 @@ Test_Indexing_Without_Predicate() {
|
||||
auto search_plan = reinterpret_cast<milvus::query::Plan*>(plan);
|
||||
SearchInfo search_info = search_plan->plan_node_->search_info_;
|
||||
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 dis = result_on_index.distances_.data();
|
||||
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);
|
||||
SearchInfo search_info = search_plan->plan_node_->search_info_;
|
||||
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 dis = result_on_index.distances_.data();
|
||||
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);
|
||||
SearchInfo search_info = search_plan->plan_node_->search_info_;
|
||||
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 dis = result_on_index.distances_.data();
|
||||
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);
|
||||
SearchInfo search_info = search_plan->plan_node_->search_info_;
|
||||
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 dis = result_on_index.distances_.data();
|
||||
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);
|
||||
SearchInfo search_info = search_plan->plan_node_->search_info_;
|
||||
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 dis = result_on_index.distances_.data();
|
||||
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);
|
||||
SearchInfo search_info = search_plan->plan_node_->search_info_;
|
||||
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 dis = result_on_index.distances_.data();
|
||||
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);
|
||||
SearchInfo search_info = search_plan->plan_node_->search_info_;
|
||||
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 dis = result_on_index.distances_.data();
|
||||
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);
|
||||
SearchInfo search_info = search_plan->plan_node_->search_info_;
|
||||
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 dis = result_on_index.distances_.data();
|
||||
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);
|
||||
SearchInfo search_info = search_plan->plan_node_->search_info_;
|
||||
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 dis = result_on_index.distances_.data();
|
||||
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);
|
||||
SearchInfo search_info = search_plan->plan_node_->search_info_;
|
||||
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 dis = result_on_index.distances_.data();
|
||||
std::vector<int64_t> vec_ids(ids, ids + TOPK * num_queries);
|
||||
|
||||
@ -37,6 +37,7 @@ ReduceHelper::Initialize() {
|
||||
|
||||
// prefix sum, get slices offsets
|
||||
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);
|
||||
std::partial_sum(slice_nqs_.begin(),
|
||||
slice_nqs_.end(),
|
||||
@ -55,10 +56,11 @@ ReduceHelper::Initialize() {
|
||||
|
||||
void
|
||||
ReduceHelper::Reduce() {
|
||||
FillPrimaryKey();
|
||||
GetTotalStorageCost();
|
||||
FillPrimaryKey(); // retrieve primary keys, need to record the cost
|
||||
ReduceResultData();
|
||||
RefreshSearchResults();
|
||||
FillEntryData();
|
||||
FillEntryData(); // retrieve other scalar data, need to record the cost
|
||||
}
|
||||
|
||||
void
|
||||
@ -68,9 +70,12 @@ ReduceHelper::Marshal() {
|
||||
search_result_data_blobs_ =
|
||||
std::make_unique<milvus::segcore::SearchResultDataBlobs>();
|
||||
search_result_data_blobs_->blobs.resize(num_slices_);
|
||||
search_result_data_blobs_->costs.resize(num_slices_);
|
||||
for (int i = 0; i < num_slices_; i++) {
|
||||
auto proto = GetSearchResultDataSlice(i);
|
||||
search_result_data_blobs_->blobs[i] = proto;
|
||||
auto [proto, cost] =
|
||||
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());
|
||||
auto segment = static_cast<SegmentInterface*>(search_result->segment_);
|
||||
if (search_result->get_total_result_count() > 0) {
|
||||
// TODO: support storage usage recording in op_context
|
||||
segment->FillPrimaryKeys(plan_, *search_result);
|
||||
search_results_[valid_index++] = search_result;
|
||||
}
|
||||
@ -192,6 +198,7 @@ ReduceHelper::FillEntryData() {
|
||||
search_result->segment_);
|
||||
std::chrono::high_resolution_clock::time_point get_target_entry_start =
|
||||
std::chrono::high_resolution_clock::now();
|
||||
// TODO: support storage usage recording in op_context
|
||||
segment->FillTargetEntry(plan_, *search_result);
|
||||
std::chrono::high_resolution_clock::time_point get_target_entry_end =
|
||||
std::chrono::high_resolution_clock::now();
|
||||
@ -307,8 +314,9 @@ ReduceHelper::FillOtherData(
|
||||
//simple batch reduce do nothing for other data
|
||||
}
|
||||
|
||||
std::vector<char>
|
||||
ReduceHelper::GetSearchResultDataSlice(int slice_index) {
|
||||
std::pair<std::vector<char>, StorageCost>
|
||||
ReduceHelper::GetSearchResultDataSlice(const int slice_index,
|
||||
const StorageCost& total_cost) {
|
||||
auto nq_begin = slice_nqs_prefix_sum_[slice_index];
|
||||
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];
|
||||
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 =
|
||||
std::make_unique<milvus::proto::schema::SearchResultData>();
|
||||
@ -448,13 +458,19 @@ ReduceHelper::GetSearchResultDataSlice(int slice_index) {
|
||||
search_result_data->mutable_fields_data()->AddAllocated(
|
||||
field_data.release());
|
||||
}
|
||||
|
||||
// SearchResultData to blob
|
||||
auto size = search_result_data->ByteSizeLong();
|
||||
auto buffer = std::vector<char>(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
|
||||
|
||||
@ -29,7 +29,8 @@ namespace milvus::segcore {
|
||||
|
||||
// SearchResultDataBlobs contains the marshal blobs of many `milvus::proto::schema::SearchResultData`
|
||||
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 {
|
||||
@ -96,8 +97,12 @@ class ReduceHelper {
|
||||
void
|
||||
FillEntryData();
|
||||
|
||||
std::vector<char>
|
||||
GetSearchResultDataSlice(int slice_index_);
|
||||
std::pair<std::vector<char>, StorageCost>
|
||||
GetSearchResultDataSlice(const int slice_index,
|
||||
const StorageCost& total_cost);
|
||||
|
||||
void
|
||||
GetTotalStorageCost();
|
||||
|
||||
protected:
|
||||
std::vector<SearchResult*>& search_results_;
|
||||
@ -117,6 +122,7 @@ class ReduceHelper {
|
||||
// output
|
||||
std::unique_ptr<SearchResultDataBlobs> search_result_data_blobs_;
|
||||
tracer::TraceContext* trace_ctx_;
|
||||
StorageCost total_search_storage_cost_;
|
||||
};
|
||||
|
||||
} // namespace milvus::segcore
|
||||
|
||||
@ -171,6 +171,7 @@ StreamReducerHelper::AssembleMergedResult() {
|
||||
|
||||
void
|
||||
StreamReducerHelper::MergeReduce() {
|
||||
GetTotalStorageCost();
|
||||
FilterSearchResults();
|
||||
FillPrimaryKeys();
|
||||
InitializeReduceRecords();
|
||||
@ -189,9 +190,12 @@ StreamReducerHelper::SerializeMergedResult() {
|
||||
"Wrong state for num_slice in streamReducer, num_slice:{}",
|
||||
num_slice_);
|
||||
search_result_blobs->blobs.resize(num_slice_);
|
||||
search_result_blobs->costs.resize(num_slice_);
|
||||
for (int i = 0; i < num_slice_; i++) {
|
||||
auto proto = GetSearchResultDataSlice(i);
|
||||
search_result_blobs->blobs[i] = proto;
|
||||
auto [proto, cost] =
|
||||
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();
|
||||
}
|
||||
@ -527,8 +531,9 @@ StreamReducerHelper::RefreshSearchResult() {
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<char>
|
||||
StreamReducerHelper::GetSearchResultDataSlice(int slice_index) {
|
||||
std::pair<std::vector<char>, StorageCost>
|
||||
StreamReducerHelper::GetSearchResultDataSlice(int slice_index,
|
||||
const StorageCost& total_cost) {
|
||||
auto nq_begin = slice_nqs_prefix_sum_[slice_index];
|
||||
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] -
|
||||
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
|
||||
std::vector<MergeBase> result_pairs(result_count);
|
||||
@ -690,7 +696,14 @@ StreamReducerHelper::GetSearchResultDataSlice(int slice_index) {
|
||||
auto size = search_result_data->ByteSizeLong();
|
||||
auto buffer = std::vector<char>(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
|
||||
|
||||
@ -152,6 +152,7 @@ class StreamReducerHelper {
|
||||
slice_nqs_.end(),
|
||||
slice_nqs_prefix_sum_.begin() + 1);
|
||||
total_nq_ = slice_nqs_prefix_sum_[num_slice_];
|
||||
AssertInfo(total_nq_ > 0, "empty nq is not allowed");
|
||||
}
|
||||
|
||||
void
|
||||
@ -196,8 +197,12 @@ class StreamReducerHelper {
|
||||
void
|
||||
AssembleMergedResult();
|
||||
|
||||
std::vector<char>
|
||||
GetSearchResultDataSlice(int slice_index);
|
||||
std::pair<std::vector<char>, StorageCost>
|
||||
GetSearchResultDataSlice(const int slice_index,
|
||||
const StorageCost& total_cost);
|
||||
|
||||
void
|
||||
GetTotalStorageCost();
|
||||
|
||||
void
|
||||
CleanReduceStatus();
|
||||
@ -218,5 +223,6 @@ class StreamReducerHelper {
|
||||
std::unordered_set<milvus::GroupByValueType> group_by_val_set_;
|
||||
std::vector<std::vector<std::vector<int64_t>>> final_search_records_;
|
||||
int64_t total_nq_{0};
|
||||
StorageCost total_search_storage_cost_;
|
||||
};
|
||||
} // namespace milvus::segcore
|
||||
|
||||
@ -137,6 +137,8 @@ ReduceSearchResultsAndFillData(CTraceContext c_trace,
|
||||
|
||||
CStatus
|
||||
GetSearchResultDataBlob(CProto* searchResultDataBlob,
|
||||
int64_t* scanned_remote_bytes,
|
||||
int64_t* scanned_total_bytes,
|
||||
CSearchResultDataBlobs cSearchResultDataBlobs,
|
||||
int32_t blob_index) {
|
||||
SCOPE_CGO_CALL_METRIC();
|
||||
@ -151,6 +153,10 @@ GetSearchResultDataBlob(CProto* searchResultDataBlob,
|
||||
search_result_data_blobs->blobs[blob_index].data();
|
||||
searchResultDataBlob->proto_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();
|
||||
} catch (std::exception& e) {
|
||||
searchResultDataBlob->proto_blob = nullptr;
|
||||
|
||||
@ -48,6 +48,8 @@ ReduceSearchResultsAndFillData(CTraceContext c_trace,
|
||||
|
||||
CStatus
|
||||
GetSearchResultDataBlob(CProto* searchResultDataBlob,
|
||||
int64_t* scanned_remote_bytes,
|
||||
int64_t* scanned_total_bytes,
|
||||
CSearchResultDataBlobs cSearchResultDataBlobs,
|
||||
int32_t blob_index);
|
||||
|
||||
|
||||
@ -1219,7 +1219,8 @@ TEST(CApiTest, SealedSegment_search_float_Predicate_Range) {
|
||||
search_info.search_params_ = generate_search_conf(
|
||||
IndexEnum::INDEX_FAISS_IVFSQ8, knowhere::metric::L2);
|
||||
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);
|
||||
|
||||
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);
|
||||
SearchInfo search_info = search_plan->plan_node_->search_info_;
|
||||
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 dis = result_on_index.distances_.data();
|
||||
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_;
|
||||
}
|
||||
|
||||
// TODO: implement this
|
||||
int64_t
|
||||
cells_storage_bytes(
|
||||
const std::vector<milvus::cachinglayer::cid_t>& cids) const override {
|
||||
return 0;
|
||||
}
|
||||
|
||||
private:
|
||||
std::vector<FileInfo> file_infos_;
|
||||
int64_t segment_id_;
|
||||
|
||||
@ -52,6 +52,13 @@ class DefaultValueChunkTranslator
|
||||
return &meta_;
|
||||
}
|
||||
|
||||
// TODO: implement this
|
||||
int64_t
|
||||
cells_storage_bytes(
|
||||
const std::vector<milvus::cachinglayer::cid_t>& cids) const override {
|
||||
return 0;
|
||||
}
|
||||
|
||||
private:
|
||||
int64_t segment_id_;
|
||||
std::string key_;
|
||||
|
||||
@ -48,12 +48,13 @@ std::pair<milvus::cachinglayer::ResourceUsage,
|
||||
milvus::cachinglayer::ResourceUsage>
|
||||
InterimSealedIndexTranslator::estimated_byte_size_of_cell(
|
||||
milvus::cachinglayer::cid_t cid) const {
|
||||
auto size = vec_data_->DataByteSize();
|
||||
auto row_count = vec_data_->NumRows();
|
||||
int64_t size = vec_data_->DataByteSize();
|
||||
int64_t row_count = vec_data_->NumRows();
|
||||
// TODO: hack, move these estimate logic to knowhere
|
||||
// ignore the size of centroids
|
||||
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)
|
||||
.value() /
|
||||
8 * dim_);
|
||||
@ -70,7 +71,7 @@ InterimSealedIndexTranslator::estimated_byte_size_of_cell(
|
||||
{static_cast<int64_t>(vec_size * row_count + size * 0.5), 0}};
|
||||
} else if (index_type_ == knowhere::IndexEnum::INDEX_FAISS_IVFFLAT_CC) {
|
||||
// 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},
|
||||
{static_cast<int64_t>(fp32_size + fp32_size * 0.5), 0}};
|
||||
} else {
|
||||
@ -95,6 +96,7 @@ InterimSealedIndexTranslator::get_cells(
|
||||
vec_data_](size_t id) {
|
||||
const void* data;
|
||||
int64_t data_id = id;
|
||||
|
||||
field_raw_data_ptr->BulkValueAt(
|
||||
[&data, &data_id](const char* value, size_t i) {
|
||||
data = static_cast<const void*>(value);
|
||||
|
||||
@ -44,6 +44,13 @@ class InterimSealedIndexTranslator
|
||||
Meta*
|
||||
meta() override;
|
||||
|
||||
// TODO: implement this
|
||||
int64_t
|
||||
cells_storage_bytes(
|
||||
const std::vector<milvus::cachinglayer::cid_t>& cids) const override {
|
||||
return 0;
|
||||
}
|
||||
|
||||
private:
|
||||
std::shared_ptr<ChunkedColumnInterface> vec_data_;
|
||||
std::string segment_id_;
|
||||
|
||||
@ -75,8 +75,10 @@ SealedIndexTranslator::estimated_byte_size_of_cell(
|
||||
index_load_info_.num_rows,
|
||||
index_load_info_.dim);
|
||||
// this is an estimation, error could be up to 20%.
|
||||
return {{request.final_memory_cost, request.final_disk_cost},
|
||||
{request.max_memory_cost, request.max_disk_cost}};
|
||||
return {milvus::cachinglayer::ResourceUsage(request.final_memory_cost,
|
||||
request.final_disk_cost),
|
||||
milvus::cachinglayer::ResourceUsage(request.max_memory_cost,
|
||||
request.max_disk_cost)};
|
||||
}
|
||||
|
||||
const std::string&
|
||||
@ -100,7 +102,8 @@ SealedIndexTranslator::get_cells(const std::vector<cid_t>& cids) {
|
||||
index_load_info_.enable_mmap,
|
||||
index_load_info_.num_rows,
|
||||
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()) {
|
||||
AssertInfo(!index_load_info_.mmap_dir_path.empty(),
|
||||
"mmap directory path is empty");
|
||||
|
||||
@ -41,6 +41,13 @@ class SealedIndexTranslator
|
||||
Meta*
|
||||
meta() override;
|
||||
|
||||
// TODO: implement this
|
||||
int64_t
|
||||
cells_storage_bytes(
|
||||
const std::vector<milvus::cachinglayer::cid_t>& cids) const override {
|
||||
return 0;
|
||||
}
|
||||
|
||||
private:
|
||||
struct IndexLoadInfo {
|
||||
bool enable_mmap;
|
||||
|
||||
@ -40,6 +40,13 @@ class V1SealedIndexTranslator : public Translator<milvus::index::IndexBase> {
|
||||
Meta*
|
||||
meta() override;
|
||||
|
||||
// TODO: implement this
|
||||
int64_t
|
||||
cells_storage_bytes(
|
||||
const std::vector<milvus::cachinglayer::cid_t>& cids) const override {
|
||||
return 0;
|
||||
}
|
||||
|
||||
private:
|
||||
struct IndexLoadInfo {
|
||||
bool enable_mmap;
|
||||
|
||||
@ -75,6 +75,12 @@ class GroupChunkTranslator
|
||||
return &meta_;
|
||||
}
|
||||
|
||||
int64_t
|
||||
cells_storage_bytes(
|
||||
const std::vector<milvus::cachinglayer::cid_t>& cids) const override {
|
||||
return 0;
|
||||
}
|
||||
|
||||
private:
|
||||
std::unique_ptr<milvus::GroupChunk>
|
||||
load_group_chunk(const std::shared_ptr<arrow::Table>& table,
|
||||
|
||||
@ -14,7 +14,7 @@
|
||||
# Update KNOWHERE_VERSION for the first occurrence
|
||||
milvus_add_pkg_config("knowhere")
|
||||
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")
|
||||
|
||||
message(STATUS "Knowhere repo: ${GIT_REPOSITORY}")
|
||||
|
||||
@ -13,7 +13,7 @@
|
||||
|
||||
milvus_add_pkg_config("milvus-common")
|
||||
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")
|
||||
|
||||
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 xq_dataset =
|
||||
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) {
|
||||
auto dataset = GenFieldData(NQ, metric_type, vec_field_data_type);
|
||||
auto xb_data =
|
||||
@ -196,7 +196,7 @@ TEST_P(IndexWrapperTest, BuildAndQuery) {
|
||||
auto xq_dataset =
|
||||
knowhere::GenDataSet(NQ, kTestSparseDim, xb_data.data());
|
||||
xq_dataset->SetIsSparse(true);
|
||||
result = vec_index->Query(xq_dataset, search_info, nullptr);
|
||||
result = vec_index->Query(xq_dataset, search_info, nullptr, nullptr);
|
||||
} else {
|
||||
auto nb_for_nq = NQ + query_offset;
|
||||
auto dataset = GenFieldData(
|
||||
@ -207,7 +207,7 @@ TEST_P(IndexWrapperTest, BuildAndQuery) {
|
||||
NQ,
|
||||
BINARY_DIM,
|
||||
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);
|
||||
|
||||
@ -185,7 +185,8 @@ TEST(Indexing, BinaryBruteForce) {
|
||||
index_info,
|
||||
nullptr,
|
||||
DataType::VECTOR_BINARY,
|
||||
DataType::NONE);
|
||||
DataType::NONE,
|
||||
nullptr);
|
||||
|
||||
SearchResult sr;
|
||||
sr.total_nq_ = num_queries;
|
||||
@ -296,7 +297,7 @@ TEST(Indexing, Naive) {
|
||||
searchInfo.search_params_ = search_conf;
|
||||
auto vec_index = dynamic_cast<index::VectorIndex*>(index.get());
|
||||
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) {
|
||||
ASSERT_FALSE(result.seg_offsets_[i] < N / 2);
|
||||
@ -519,7 +520,7 @@ TEST_P(IndexTest, BuildAndQuery) {
|
||||
search_info.metric_type_ = metric_type;
|
||||
search_info.search_params_ = search_conf;
|
||||
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.unity_topK_, K);
|
||||
EXPECT_EQ(result.distances_.size(), NQ * K);
|
||||
@ -535,7 +536,7 @@ TEST_P(IndexTest, BuildAndQuery) {
|
||||
if (!is_sparse) {
|
||||
// sparse doesn't support range search yet
|
||||
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.search_params_ = search_conf;
|
||||
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.unity_topK_, K);
|
||||
EXPECT_EQ(result.distances_.size(), NQ * K);
|
||||
@ -599,7 +600,7 @@ TEST_P(IndexTest, Mmap) {
|
||||
EXPECT_EQ(result.seg_offsets_[0], query_offset);
|
||||
}
|
||||
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) {
|
||||
@ -842,7 +843,8 @@ TEST(Indexing, SearchDiskAnnWithInvalidParam) {
|
||||
{milvus::index::DISK_ANN_QUERY_LIST, K - 1},
|
||||
};
|
||||
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);
|
||||
}
|
||||
|
||||
@ -928,7 +930,8 @@ TEST(Indexing, SearchDiskAnnWithFloat16) {
|
||||
{milvus::index::DISK_ANN_QUERY_LIST, K * 2},
|
||||
};
|
||||
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) {
|
||||
@ -1013,7 +1016,8 @@ TEST(Indexing, SearchDiskAnnWithBFloat16) {
|
||||
{milvus::index::DISK_ANN_QUERY_LIST, K * 2},
|
||||
};
|
||||
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
|
||||
|
||||
|
||||
@ -125,7 +125,7 @@ TEST(Sealed, without_predicate) {
|
||||
searchInfo.metric_type_ = knowhere::metric::L2;
|
||||
searchInfo.search_params_ = search_conf;
|
||||
SearchResult result;
|
||||
vec_index->Query(query_dataset, searchInfo, nullptr, result);
|
||||
vec_index->Query(query_dataset, searchInfo, nullptr, nullptr, result);
|
||||
auto ref_result = SearchResultToJson(result);
|
||||
|
||||
LoadIndexInfo load_info;
|
||||
@ -330,7 +330,7 @@ TEST(Sealed, with_predicate) {
|
||||
searchInfo.metric_type_ = knowhere::metric::L2;
|
||||
searchInfo.search_params_ = search_conf;
|
||||
SearchResult result;
|
||||
vec_index->Query(query_dataset, searchInfo, nullptr, result);
|
||||
vec_index->Query(query_dataset, searchInfo, nullptr, nullptr, result);
|
||||
|
||||
LoadIndexInfo load_info;
|
||||
load_info.field_id = fake_id.get();
|
||||
@ -2460,7 +2460,7 @@ TEST(Sealed, SearchVectorArray) {
|
||||
searchInfo.metric_type_ = knowhere::metric::MAX_SIM;
|
||||
searchInfo.search_params_ = search_conf;
|
||||
SearchResult result;
|
||||
vec_index->Query(query_dataset, searchInfo, nullptr, result);
|
||||
vec_index->Query(query_dataset, searchInfo, nullptr, nullptr, result);
|
||||
auto ref_result = SearchResultToJson(result);
|
||||
std::cout << ref_result.dump(1) << std::endl;
|
||||
EXPECT_EQ(result.total_nq_, 2);
|
||||
|
||||
@ -1563,7 +1563,8 @@ TEST(AlwaysTrueStringPlan, SearchWithOutputFields) {
|
||||
index_info,
|
||||
nullptr,
|
||||
DataType::VECTOR_FLOAT,
|
||||
DataType::NONE);
|
||||
DataType::NONE,
|
||||
nullptr);
|
||||
|
||||
auto sr = segment->Search(plan.get(), ph_group.get(), MAX_TIMESTAMP);
|
||||
segment->FillPrimaryKeys(plan.get(), *sr);
|
||||
|
||||
@ -77,6 +77,11 @@ class TestChunkTranslator : public Translator<milvus::Chunk> {
|
||||
return {{0, 0}, {0, 0}};
|
||||
}
|
||||
|
||||
int64_t
|
||||
cells_storage_bytes(const std::vector<cid_t>& cids) const override {
|
||||
return 0;
|
||||
}
|
||||
|
||||
const std::string&
|
||||
key() const override {
|
||||
return key_;
|
||||
@ -148,6 +153,11 @@ class TestGroupChunkTranslator : public Translator<milvus::GroupChunk> {
|
||||
return {{0, 0}, {0, 0}};
|
||||
}
|
||||
|
||||
int64_t
|
||||
cells_storage_bytes(const std::vector<cid_t>& cids) const override {
|
||||
return 0;
|
||||
}
|
||||
|
||||
const std::string&
|
||||
key() const override {
|
||||
return key_;
|
||||
@ -208,6 +218,11 @@ class TestIndexTranslator : public Translator<milvus::index::IndexBase> {
|
||||
return {{0, 0}, {0, 0}};
|
||||
}
|
||||
|
||||
int64_t
|
||||
cells_storage_bytes(const std::vector<cid_t>& cids) const override {
|
||||
return 0;
|
||||
}
|
||||
|
||||
const std::string&
|
||||
key() const override {
|
||||
return key_;
|
||||
|
||||
@ -1092,7 +1092,7 @@ func CheckSearchResult(ctx context.Context, nq int64, plan *segcore.SearchPlan,
|
||||
}
|
||||
|
||||
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 {
|
||||
return err
|
||||
}
|
||||
|
||||
@ -47,6 +47,7 @@ import (
|
||||
"github.com/milvus-io/milvus/internal/types"
|
||||
"github.com/milvus-io/milvus/internal/util/analyzer"
|
||||
"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/log"
|
||||
"github.com/milvus-io/milvus/pkg/v2/metrics"
|
||||
@ -2880,6 +2881,20 @@ func (node *Proxy) search(ctx context.Context, request *milvuspb.SearchRequest,
|
||||
collectionName,
|
||||
).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 {
|
||||
username := GetCurUserFromContextOrDefault(ctx)
|
||||
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(),
|
||||
})
|
||||
SetReportValue(qt.result.GetStatus(), v)
|
||||
SetStorageCost(qt.result.GetStatus(), qt.storageCost)
|
||||
if merr.Ok(qt.result.GetStatus()) {
|
||||
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,
|
||||
).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 {
|
||||
sentSize := proto.Size(qt.result)
|
||||
username := GetCurUserFromContextOrDefault(ctx)
|
||||
@ -3099,6 +3129,7 @@ func (node *Proxy) hybridSearch(ctx context.Context, request *milvuspb.HybridSea
|
||||
hookutil.RelatedCntKey: qt.result.GetResults().GetAllSearchCount(),
|
||||
})
|
||||
SetReportValue(qt.result.GetStatus(), v)
|
||||
SetStorageCost(qt.result.GetStatus(), qt.storageCost)
|
||||
if merr.Ok(qt.result.GetStatus()) {
|
||||
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.
|
||||
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
|
||||
method := "Query"
|
||||
|
||||
if err := merr.CheckHealthy(node.GetStateCode()); err != nil {
|
||||
return &milvuspb.QueryResults{
|
||||
Status: merr.Status(err),
|
||||
}, nil
|
||||
}, segcore.StorageCost{}, nil
|
||||
}
|
||||
|
||||
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{
|
||||
Status: merr.Status(err),
|
||||
}, nil
|
||||
}, segcore.StorageCost{}, nil
|
||||
}
|
||||
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{
|
||||
Status: merr.Status(err),
|
||||
}, nil
|
||||
}, segcore.StorageCost{}, nil
|
||||
}
|
||||
|
||||
if !qt.reQuery {
|
||||
@ -3327,9 +3358,23 @@ func (node *Proxy) query(ctx context.Context, qt *queryTask, sp trace.Span) (*mi
|
||||
request.DbName,
|
||||
request.CollectionName,
|
||||
).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.
|
||||
@ -3376,7 +3421,7 @@ func (node *Proxy) Query(ctx context.Context, request *milvuspb.QueryRequest) (*
|
||||
defer sp.End()
|
||||
method := "Query"
|
||||
|
||||
res, err := node.query(ctx, qt, sp)
|
||||
res, storageCost, err := node.query(ctx, qt, sp)
|
||||
if err != nil || !merr.Ok(res.Status) {
|
||||
return res, err
|
||||
}
|
||||
@ -3394,6 +3439,7 @@ func (node *Proxy) Query(ctx context.Context, request *milvuspb.QueryRequest) (*
|
||||
hookutil.RelatedCntKey: qt.allQueryCnt,
|
||||
})
|
||||
SetReportValue(res.Status, v)
|
||||
SetStorageCost(res.Status, storageCost)
|
||||
metrics.ProxyReportValue.WithLabelValues(nodeID, hookutil.OpTypeQuery, request.DbName, username).Add(float64(v))
|
||||
|
||||
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/types"
|
||||
"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/proto/internalpb"
|
||||
"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 {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
searchMetrics = append(searchMetrics, subMetricType)
|
||||
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) {
|
||||
allIDs := inputs[0].(*schemapb.IDs)
|
||||
storageCostFromLastOp := inputs[1].(segcore.StorageCost)
|
||||
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 {
|
||||
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{
|
||||
Base: &commonpb.MsgBase{
|
||||
MsgType: commonpb.MsgType_Retrieve,
|
||||
@ -409,15 +412,15 @@ func (op *requeryOperator) requery(ctx context.Context, span trace.Span, ids *sc
|
||||
fastSkip: 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 {
|
||||
return nil, err
|
||||
return nil, segcore.StorageCost{}, err
|
||||
}
|
||||
|
||||
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 {
|
||||
@ -632,20 +635,21 @@ func newPipeline(pipeDef *pipelineDef, t *searchTask) (*pipeline, error) {
|
||||
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()))
|
||||
msg := opMsg{}
|
||||
msg["input"] = toReduceResults
|
||||
msg["storage_cost"] = storageCost
|
||||
for _, node := range p.nodes {
|
||||
var err error
|
||||
log.Ctx(ctx).Debug("SearchPipeline run node", zap.String("node", node.name))
|
||||
msg, err = node.Run(ctx, span, msg)
|
||||
if err != nil {
|
||||
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 {
|
||||
@ -666,7 +670,7 @@ var searchPipe = &pipelineDef{
|
||||
nodes: []*nodeDef{
|
||||
{
|
||||
name: "reduce",
|
||||
inputs: []string{"input"},
|
||||
inputs: []string{"input", "storage_cost"},
|
||||
outputs: []string{"reduced", "metrics"},
|
||||
opName: searchReduceOp,
|
||||
},
|
||||
@ -696,7 +700,7 @@ var searchWithRequeryPipe = &pipelineDef{
|
||||
nodes: []*nodeDef{
|
||||
{
|
||||
name: "reduce",
|
||||
inputs: []string{"input"},
|
||||
inputs: []string{"input", "storage_cost"},
|
||||
outputs: []string{"reduced", "metrics"},
|
||||
opName: searchReduceOp,
|
||||
},
|
||||
@ -711,8 +715,8 @@ var searchWithRequeryPipe = &pipelineDef{
|
||||
},
|
||||
{
|
||||
name: "requery",
|
||||
inputs: []string{"unique_ids"},
|
||||
outputs: []string{"fields"},
|
||||
inputs: []string{"unique_ids", "storage_cost"},
|
||||
outputs: []string{"fields", "storage_cost"},
|
||||
opName: requeryOp,
|
||||
},
|
||||
{
|
||||
@ -760,7 +764,7 @@ var searchWithRerankPipe = &pipelineDef{
|
||||
nodes: []*nodeDef{
|
||||
{
|
||||
name: "reduce",
|
||||
inputs: []string{"input"},
|
||||
inputs: []string{"input", "storage_cost"},
|
||||
outputs: []string{"reduced", "metrics"},
|
||||
opName: searchReduceOp,
|
||||
},
|
||||
@ -818,7 +822,7 @@ var searchWithRerankRequeryPipe = &pipelineDef{
|
||||
nodes: []*nodeDef{
|
||||
{
|
||||
name: "reduce",
|
||||
inputs: []string{"input"},
|
||||
inputs: []string{"input", "storage_cost"},
|
||||
outputs: []string{"reduced", "metrics"},
|
||||
opName: searchReduceOp,
|
||||
},
|
||||
@ -843,8 +847,8 @@ var searchWithRerankRequeryPipe = &pipelineDef{
|
||||
},
|
||||
{
|
||||
name: "requery",
|
||||
inputs: []string{"ids"},
|
||||
outputs: []string{"fields"},
|
||||
inputs: []string{"ids", "storage_cost"},
|
||||
outputs: []string{"fields", "storage_cost"},
|
||||
opName: requeryOp,
|
||||
},
|
||||
{
|
||||
@ -892,7 +896,7 @@ var hybridSearchPipe = &pipelineDef{
|
||||
nodes: []*nodeDef{
|
||||
{
|
||||
name: "reduce",
|
||||
inputs: []string{"input"},
|
||||
inputs: []string{"input", "storage_cost"},
|
||||
outputs: []string{"reduced", "metrics"},
|
||||
opName: hybridSearchReduceOp,
|
||||
},
|
||||
@ -910,7 +914,7 @@ var hybridSearchWithRequeryPipe = &pipelineDef{
|
||||
nodes: []*nodeDef{
|
||||
{
|
||||
name: "reduce",
|
||||
inputs: []string{"input"},
|
||||
inputs: []string{"input", "storage_cost"},
|
||||
outputs: []string{"reduced", "metrics"},
|
||||
opName: hybridSearchReduceOp,
|
||||
},
|
||||
@ -925,8 +929,8 @@ var hybridSearchWithRequeryPipe = &pipelineDef{
|
||||
},
|
||||
{
|
||||
name: "requery",
|
||||
inputs: []string{"ids"},
|
||||
outputs: []string{"fields"},
|
||||
inputs: []string{"ids", "storage_cost"},
|
||||
outputs: []string{"fields", "storage_cost"},
|
||||
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/schemapb"
|
||||
"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/planpb"
|
||||
"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{
|
||||
FieldsData: []*schemapb.FieldData{f1},
|
||||
}, nil).Build()
|
||||
}, segcore.StorageCost{}, nil).Build()
|
||||
defer mocker.UnPatch()
|
||||
|
||||
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)
|
||||
}
|
||||
|
||||
@ -296,9 +297,8 @@ func (s *SearchPipelineSuite) TestSearchPipeline() {
|
||||
}
|
||||
pipeline, err := newPipeline(searchPipe, task)
|
||||
s.NoError(err)
|
||||
results, err := pipeline.Run(context.Background(), s.span, []*internalpb.SearchResults{
|
||||
genTestSearchResultData(2, 10, schemapb.DataType_Int64, "intField", 101, false),
|
||||
})
|
||||
sr := 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.NotNil(results)
|
||||
s.NotNil(results.Results)
|
||||
@ -314,6 +314,8 @@ func (s *SearchPipelineSuite) TestSearchPipeline() {
|
||||
s.Len(results.Results.FieldsData, 1) // One output field
|
||||
s.Equal("intField", results.Results.FieldsData[0].FieldName)
|
||||
s.Equal(int64(101), results.Results.FieldsData[0].FieldId)
|
||||
s.Equal(int64(100), storageCost.ScannedRemoteBytes)
|
||||
s.Equal(int64(250), storageCost.ScannedTotalBytes)
|
||||
fmt.Println(results)
|
||||
}
|
||||
|
||||
@ -355,14 +357,14 @@ func (s *SearchPipelineSuite) TestSearchPipelineWithRequery() {
|
||||
f2.FieldId = 100
|
||||
mocker := mockey.Mock((*requeryOperator).requery).Return(&milvuspb.QueryResults{
|
||||
FieldsData: []*schemapb.FieldData{f1, f2},
|
||||
}, nil).Build()
|
||||
}, segcore.StorageCost{ScannedRemoteBytes: 100, ScannedTotalBytes: 200}, nil).Build()
|
||||
defer mocker.UnPatch()
|
||||
|
||||
pipeline, err := newPipeline(searchWithRequeryPipe, task)
|
||||
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),
|
||||
})
|
||||
}, segcore.StorageCost{ScannedRemoteBytes: 100, ScannedTotalBytes: 200})
|
||||
s.NoError(err)
|
||||
s.NotNil(results)
|
||||
s.NotNil(results.Results)
|
||||
@ -378,6 +380,8 @@ func (s *SearchPipelineSuite) TestSearchPipelineWithRequery() {
|
||||
s.Len(results.Results.FieldsData, 1) // One output field
|
||||
s.Equal("intField", results.Results.FieldsData[0].FieldName)
|
||||
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() {
|
||||
@ -431,7 +435,7 @@ func (s *SearchPipelineSuite) TestSearchWithRerankPipe() {
|
||||
s.NoError(err)
|
||||
|
||||
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.NotNil(results)
|
||||
@ -506,14 +510,14 @@ func (s *SearchPipelineSuite) TestSearchWithRerankRequeryPipe() {
|
||||
f2.FieldId = 100
|
||||
mocker := mockey.Mock((*requeryOperator).requery).Return(&milvuspb.QueryResults{
|
||||
FieldsData: []*schemapb.FieldData{f1, f2},
|
||||
}, nil).Build()
|
||||
}, segcore.StorageCost{}, nil).Build()
|
||||
defer mocker.UnPatch()
|
||||
|
||||
pipeline, err := newPipeline(searchWithRerankRequeryPipe, task)
|
||||
s.NoError(err)
|
||||
|
||||
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.NotNil(results)
|
||||
@ -530,6 +534,8 @@ func (s *SearchPipelineSuite) TestSearchWithRerankRequeryPipe() {
|
||||
s.Len(results.Results.FieldsData, 1) // One output field
|
||||
s.Equal("intField", results.Results.FieldsData[0].FieldName)
|
||||
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() {
|
||||
@ -545,7 +551,7 @@ func (s *SearchPipelineSuite) TestHybridSearchPipe() {
|
||||
|
||||
f1 := 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.NotNil(results)
|
||||
@ -558,6 +564,8 @@ func (s *SearchPipelineSuite) TestHybridSearchPipe() {
|
||||
s.Len(results.Results.Ids.GetIntId().Data, 20) // 2 queries * 10 topk
|
||||
s.NotNil(results.Results.Scores)
|
||||
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() {
|
||||
@ -647,7 +655,7 @@ func (s *SearchPipelineSuite) TestHybridSearchWithRequeryPipe() {
|
||||
f2.FieldId = 100
|
||||
mocker := mockey.Mock((*requeryOperator).requery).Return(&milvuspb.QueryResults{
|
||||
FieldsData: []*schemapb.FieldData{f1, f2},
|
||||
}, nil).Build()
|
||||
}, segcore.StorageCost{}, nil).Build()
|
||||
defer mocker.UnPatch()
|
||||
|
||||
pipeline, err := newPipeline(hybridSearchWithRequeryPipe, task)
|
||||
@ -655,7 +663,7 @@ func (s *SearchPipelineSuite) TestHybridSearchWithRequeryPipe() {
|
||||
|
||||
d1 := 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.NotNil(results)
|
||||
|
||||
@ -19,6 +19,7 @@ import (
|
||||
"github.com/milvus-io/milvus/internal/types"
|
||||
"github.com/milvus-io/milvus/internal/util/exprutil"
|
||||
"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"
|
||||
"github.com/milvus-io/milvus/pkg/v2/common"
|
||||
"github.com/milvus-io/milvus/pkg/v2/log"
|
||||
@ -75,6 +76,8 @@ type queryTask struct {
|
||||
allQueryCnt int64
|
||||
totalRelatedDataSize int64
|
||||
mustUsePartitionKey bool
|
||||
|
||||
storageCost segcore.StorageCost
|
||||
}
|
||||
|
||||
type queryParams struct {
|
||||
@ -624,6 +627,7 @@ func (t *queryTask) PostExecute(ctx context.Context) error {
|
||||
toReduceResults := make([]*internalpb.RetrieveResults, 0)
|
||||
t.allQueryCnt = 0
|
||||
t.totalRelatedDataSize = 0
|
||||
t.storageCost = segcore.StorageCost{}
|
||||
select {
|
||||
case <-t.TraceCtx().Done():
|
||||
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 {
|
||||
toReduceResults = append(toReduceResults, res)
|
||||
t.allQueryCnt += res.GetAllRetrieveCount()
|
||||
t.storageCost.ScannedRemoteBytes += res.GetScannedRemoteBytes()
|
||||
t.storageCost.ScannedTotalBytes += res.GetScannedTotalBytes()
|
||||
t.totalRelatedDataSize += res.GetCostAggregation().GetTotalRelatedDataSize()
|
||||
log.Debug("proxy receives one query result", zap.Int64("sourceID", res.GetBase().GetSourceID()))
|
||||
return true
|
||||
|
||||
@ -21,6 +21,7 @@ import (
|
||||
"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/rerank"
|
||||
"github.com/milvus-io/milvus/internal/util/segcore"
|
||||
"github.com/milvus-io/milvus/pkg/v2/log"
|
||||
"github.com/milvus-io/milvus/pkg/v2/metrics"
|
||||
"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.
|
||||
// if the user explicitly set pk field in output fields, we add it back to the result.
|
||||
userRequestedPkFieldExplicitly bool
|
||||
|
||||
storageCost segcore.StorageCost
|
||||
}
|
||||
|
||||
func (t *searchTask) CanSkipAllocTimestamp() bool {
|
||||
@ -739,6 +742,7 @@ func (t *searchTask) PostExecute(ctx context.Context) error {
|
||||
t.relatedDataSize = 0
|
||||
isTopkReduce := false
|
||||
isRecallEvaluation := false
|
||||
storageCost := segcore.StorageCost{}
|
||||
for _, r := range toReduceResults {
|
||||
if r.GetIsTopkReduce() {
|
||||
isTopkReduce = true
|
||||
@ -750,6 +754,8 @@ func (t *searchTask) PostExecute(ctx context.Context) error {
|
||||
for ch, ts := range r.GetChannelsMvcc() {
|
||||
t.queryChannelsTs[ch] = ts
|
||||
}
|
||||
storageCost.ScannedRemoteBytes += r.GetScannedRemoteBytes()
|
||||
storageCost.ScannedTotalBytes += r.GetScannedTotalBytes()
|
||||
}
|
||||
|
||||
t.isTopkReduce = isTopkReduce
|
||||
@ -761,7 +767,7 @@ func (t *searchTask) PostExecute(ctx context.Context) error {
|
||||
log.Warn("Faild to create post process pipeline")
|
||||
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
|
||||
}
|
||||
t.fillResult()
|
||||
|
||||
@ -43,6 +43,7 @@ import (
|
||||
"github.com/milvus-io/milvus/internal/util/dependency"
|
||||
"github.com/milvus-io/milvus/internal/util/function/embedding"
|
||||
"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/proto/internalpb"
|
||||
"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{
|
||||
FieldsData: []*schemapb.FieldData{f1, f2, f3},
|
||||
}, nil).Build()
|
||||
}, segcore.StorageCost{}, nil).Build()
|
||||
defer mocker.UnPatch()
|
||||
|
||||
err := qt.PostExecute(context.TODO())
|
||||
@ -435,7 +436,7 @@ func TestSearchTask_PostExecute(t *testing.T) {
|
||||
|
||||
mocker := mockey.Mock((*requeryOperator).requery).Return(&milvuspb.QueryResults{
|
||||
FieldsData: []*schemapb.FieldData{f1, f2, f3},
|
||||
}, nil).Build()
|
||||
}, segcore.StorageCost{}, nil).Build()
|
||||
defer mocker.UnPatch()
|
||||
|
||||
err := qt.PostExecute(context.TODO())
|
||||
@ -475,7 +476,7 @@ func TestSearchTask_PostExecute(t *testing.T) {
|
||||
f4.FieldId = fieldNameId[testFloatField]
|
||||
mocker := mockey.Mock((*requeryOperator).requery).Return(&milvuspb.QueryResults{
|
||||
FieldsData: []*schemapb.FieldData{f1, f2, f3, f4},
|
||||
}, nil).Build()
|
||||
}, segcore.StorageCost{}, nil).Build()
|
||||
defer mocker.UnPatch()
|
||||
|
||||
err := qt.PostExecute(context.TODO())
|
||||
@ -4154,8 +4155,10 @@ func TestSearchTask_Requery(t *testing.T) {
|
||||
}
|
||||
op, err := newRequeryOperator(qt, nil)
|
||||
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.Equal(t, int64(0), storageCost.ScannedRemoteBytes)
|
||||
assert.Equal(t, int64(0), storageCost.ScannedTotalBytes)
|
||||
assert.Len(t, queryResult.FieldsData, 2)
|
||||
for _, field := range qt.result.Results.FieldsData {
|
||||
fieldName := field.GetFieldName()
|
||||
@ -4219,7 +4222,7 @@ func TestSearchTask_Requery(t *testing.T) {
|
||||
|
||||
op, err := newRequeryOperator(qt, nil)
|
||||
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)
|
||||
assert.Error(t, err)
|
||||
})
|
||||
|
||||
@ -223,7 +223,8 @@ func retrieveByPKs(ctx context.Context, t *upsertTask, ids *schemapb.IDs, output
|
||||
defer func() {
|
||||
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 {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@ -33,6 +33,7 @@ import (
|
||||
"github.com/milvus-io/milvus/internal/mocks"
|
||||
"github.com/milvus-io/milvus/internal/parser/planparserv2"
|
||||
"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/proto/planpb"
|
||||
"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{}
|
||||
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{
|
||||
Status: merr.Success(),
|
||||
FieldsData: []*schemapb.FieldData{},
|
||||
}, nil).Build()
|
||||
}, segcore.StorageCost{}, nil).Build()
|
||||
|
||||
task := createTestUpdateTask()
|
||||
task.partitionKeyMode = true
|
||||
|
||||
@ -42,6 +42,7 @@ import (
|
||||
"github.com/milvus-io/milvus/internal/util/function/embedding"
|
||||
"github.com/milvus-io/milvus/internal/util/hookutil"
|
||||
"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"
|
||||
"github.com/milvus-io/milvus/pkg/v2/common"
|
||||
"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)
|
||||
}
|
||||
|
||||
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 {
|
||||
if status == nil || status.ExtraInfo == nil {
|
||||
return 0
|
||||
|
||||
@ -15,9 +15,13 @@ func (r *cntReducer) Reduce(ctx context.Context, results []*internalpb.RetrieveR
|
||||
cnt := int64(0)
|
||||
allRetrieveCount := int64(0)
|
||||
relatedDataSize := int64(0)
|
||||
scannedRemoteBytes := int64(0)
|
||||
scannedTotalBytes := int64(0)
|
||||
for _, res := range results {
|
||||
allRetrieveCount += res.GetAllRetrieveCount()
|
||||
relatedDataSize += res.GetCostAggregation().GetTotalRelatedDataSize()
|
||||
scannedRemoteBytes += res.GetScannedRemoteBytes()
|
||||
scannedTotalBytes += res.GetScannedTotalBytes()
|
||||
c, err := funcutil.CntOfInternalResult(res)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@ -29,6 +33,8 @@ func (r *cntReducer) Reduce(ctx context.Context, results []*internalpb.RetrieveR
|
||||
res.CostAggregation = &internalpb.CostAggregation{
|
||||
TotalRelatedDataSize: relatedDataSize,
|
||||
}
|
||||
res.ScannedRemoteBytes = scannedRemoteBytes
|
||||
res.ScannedTotalBytes = scannedTotalBytes
|
||||
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) {
|
||||
cnt := int64(0)
|
||||
allRetrieveCount := int64(0)
|
||||
scannedRemoteBytes := int64(0)
|
||||
scannedTotalBytes := int64(0)
|
||||
for _, res := range results {
|
||||
allRetrieveCount += res.GetAllRetrieveCount()
|
||||
scannedRemoteBytes += res.GetScannedRemoteBytes()
|
||||
scannedTotalBytes += res.GetScannedTotalBytes()
|
||||
c, err := funcutil.CntOfSegCoreResult(res)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@ -47,5 +57,7 @@ func (r *cntReducerSegCore) Reduce(ctx context.Context, results []*segcorepb.Ret
|
||||
}
|
||||
res := funcutil.WrapCntToSegCoreResult(cnt)
|
||||
res.AllRetrieveCount = allRetrieveCount
|
||||
res.ScannedRemoteBytes = scannedRemoteBytes
|
||||
res.ScannedTotalBytes = scannedTotalBytes
|
||||
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 {
|
||||
return acc + result.GetCostAggregation().GetTotalRelatedDataSize()
|
||||
}, 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.ChannelsMvcc = channelsMvcc
|
||||
searchResults.IsTopkReduce = isTopkReduce
|
||||
searchResults.IsRecallEvaluation = isRecallEvaluation
|
||||
searchResults.ScannedRemoteBytes = storageCost.ScannedRemoteBytes
|
||||
searchResults.ScannedTotalBytes = storageCost.ScannedTotalBytes
|
||||
return searchResults, nil
|
||||
}
|
||||
|
||||
@ -142,12 +149,14 @@ func ReduceAdvancedSearchResults(ctx context.Context, results []*internalpb.Sear
|
||||
searchResults := &internalpb.SearchResults{
|
||||
IsAdvanced: true,
|
||||
}
|
||||
|
||||
storageCost := segcore.StorageCost{}
|
||||
for index, result := range results {
|
||||
if result.GetIsTopkReduce() {
|
||||
isTopkReduce = true
|
||||
}
|
||||
relatedDataSize += result.GetCostAggregation().GetTotalRelatedDataSize()
|
||||
storageCost.ScannedRemoteBytes += result.GetScannedRemoteBytes()
|
||||
storageCost.ScannedTotalBytes += result.GetScannedTotalBytes()
|
||||
for ch, ts := range result.GetChannelsMvcc() {
|
||||
channelsMvcc[ch] = ts
|
||||
}
|
||||
@ -178,6 +187,8 @@ func ReduceAdvancedSearchResults(ctx context.Context, results []*internalpb.Sear
|
||||
}
|
||||
searchResults.CostAggregation.TotalRelatedDataSize = relatedDataSize
|
||||
searchResults.IsTopkReduce = isTopkReduce
|
||||
searchResults.ScannedRemoteBytes = storageCost.ScannedRemoteBytes
|
||||
searchResults.ScannedTotalBytes = storageCost.ScannedTotalBytes
|
||||
return searchResults, nil
|
||||
}
|
||||
|
||||
@ -231,7 +242,6 @@ func DecodeSearchResults(ctx context.Context, searchResults []*internalpb.Search
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
results = append(results, &partialResultData)
|
||||
}
|
||||
return results, nil
|
||||
@ -286,6 +296,8 @@ func MergeInternalRetrieveResult(ctx context.Context, retrieveResults []*interna
|
||||
hasMoreResult := false
|
||||
for _, r := range retrieveResults {
|
||||
ret.AllRetrieveCount += r.GetAllRetrieveCount()
|
||||
ret.ScannedRemoteBytes += r.GetScannedRemoteBytes()
|
||||
ret.ScannedTotalBytes += r.GetScannedTotalBytes()
|
||||
relatedDataSize += r.GetCostAggregation().GetTotalRelatedDataSize()
|
||||
size := typeutil.GetSizeOfIDs(r.GetIds())
|
||||
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 {
|
||||
size := typeutil.GetSizeOfIDs(r.GetIds())
|
||||
ret.AllRetrieveCount += r.GetAllRetrieveCount()
|
||||
ret.ScannedRemoteBytes += r.GetScannedRemoteBytes()
|
||||
ret.ScannedTotalBytes += r.GetScannedTotalBytes()
|
||||
if r == nil || len(r.GetOffset()) == 0 || size == 0 {
|
||||
log.Debug("filter out invalid retrieve result")
|
||||
continue
|
||||
|
||||
@ -955,6 +955,8 @@ func (suite *ResultSuite) TestReduceSearchOnQueryNode() {
|
||||
NumQueries: nq,
|
||||
TopK: topK,
|
||||
SlicedBlob: mockBlob,
|
||||
ScannedRemoteBytes: 100,
|
||||
ScannedTotalBytes: 200,
|
||||
}
|
||||
results = append(results, subRes1)
|
||||
}
|
||||
@ -964,6 +966,8 @@ func (suite *ResultSuite) TestReduceSearchOnQueryNode() {
|
||||
NumQueries: nq,
|
||||
TopK: topK,
|
||||
SlicedBlob: mockBlob,
|
||||
ScannedRemoteBytes: 100,
|
||||
ScannedTotalBytes: 200,
|
||||
}
|
||||
results = append(results, subRes2)
|
||||
}
|
||||
@ -977,6 +981,44 @@ func (suite *ResultSuite) TestReduceSearchOnQueryNode() {
|
||||
suite.Equal(nq, subRes1.GetNumQueries())
|
||||
suite.Equal(topK, subRes1.GetTopK())
|
||||
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) {
|
||||
|
||||
@ -147,6 +147,8 @@ func retrieveOnSegmentsWithStream(ctx context.Context, mgr *Manager, segments []
|
||||
},
|
||||
SealedSegmentIDsRetrieved: []int64{segment.ID()},
|
||||
AllRetrieveCount: result.GetAllRetrieveCount(),
|
||||
ScannedRemoteBytes: result.GetScannedRemoteBytes(),
|
||||
ScannedTotalBytes: result.GetScannedTotalBytes(),
|
||||
}); err != nil {
|
||||
errs[i] = err
|
||||
}
|
||||
|
||||
@ -160,6 +160,8 @@ func (t *QueryTask) Execute() error {
|
||||
},
|
||||
AllRetrieveCount: reducedResult.GetAllRetrieveCount(),
|
||||
HasMoreResult: reducedResult.HasMoreResult,
|
||||
ScannedRemoteBytes: reducedResult.GetScannedRemoteBytes(),
|
||||
ScannedTotalBytes: reducedResult.GetScannedTotalBytes(),
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -236,7 +236,7 @@ func (t *SearchTask) Execute() error {
|
||||
metrics.BatchReduce).
|
||||
Observe(float64(tr.RecordSpan().Milliseconds()))
|
||||
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 {
|
||||
return err
|
||||
}
|
||||
@ -267,6 +267,8 @@ func (t *SearchTask) Execute() error {
|
||||
ServiceTime: tr.ElapseSpan().Milliseconds(),
|
||||
TotalRelatedDataSize: relatedDataSize,
|
||||
},
|
||||
ScannedRemoteBytes: cost.ScannedRemoteBytes,
|
||||
ScannedTotalBytes: cost.ScannedTotalBytes,
|
||||
}
|
||||
}
|
||||
|
||||
@ -516,7 +518,7 @@ func (t *StreamingSearchTask) Execute() error {
|
||||
|
||||
// 2. reorganize blobs to original search request
|
||||
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 {
|
||||
return err
|
||||
}
|
||||
@ -547,6 +549,8 @@ func (t *StreamingSearchTask) Execute() error {
|
||||
ServiceTime: tr.ElapseSpan().Milliseconds(),
|
||||
TotalRelatedDataSize: relatedDataSize,
|
||||
},
|
||||
ScannedRemoteBytes: cost.ScannedRemoteBytes,
|
||||
ScannedTotalBytes: cost.ScannedTotalBytes,
|
||||
}
|
||||
}
|
||||
|
||||
@ -578,6 +582,8 @@ func (t *StreamingSearchTask) maybeReturnForEmptyResults(results []*segments.Sea
|
||||
CostAggregation: &internalpb.CostAggregation{
|
||||
ServiceTime: tr.ElapseSpan().Milliseconds(),
|
||||
},
|
||||
ScannedRemoteBytes: 0,
|
||||
ScannedTotalBytes: 0,
|
||||
}
|
||||
}
|
||||
return true
|
||||
|
||||
@ -42,6 +42,11 @@ type (
|
||||
StreamSearchReducer = C.CSearchStreamReducer
|
||||
)
|
||||
|
||||
type StorageCost struct {
|
||||
ScannedRemoteBytes int64
|
||||
ScannedTotalBytes int64
|
||||
}
|
||||
|
||||
func ParseSliceInfo(originNQs []int64, originTopKs []int64, nqPerSlice int64) *SliceInfo {
|
||||
sInfo := &SliceInfo{
|
||||
SliceNQs: make([]int64, 0),
|
||||
@ -152,13 +157,15 @@ func ReduceSearchResultsAndFillData(ctx context.Context, plan *SearchPlan, searc
|
||||
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
|
||||
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 {
|
||||
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) {
|
||||
|
||||
@ -89,6 +89,8 @@ func (c *RetrieveResultCache) merge(result *internalpb.RetrieveResults) {
|
||||
}
|
||||
c.result.AllRetrieveCount = c.result.AllRetrieveCount + result.AllRetrieveCount
|
||||
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)
|
||||
}
|
||||
|
||||
@ -160,6 +162,8 @@ func (s *ResultCacheServer) splitMsgToMaxSize(result *internalpb.RetrieveResults
|
||||
}
|
||||
}
|
||||
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
|
||||
return results
|
||||
}
|
||||
|
||||
@ -464,6 +464,22 @@ var (
|
||||
Help: "latency of function call",
|
||||
Buckets: buckets,
|
||||
}, []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
|
||||
@ -534,6 +550,8 @@ func RegisterProxy(registry *prometheus.Registry) {
|
||||
|
||||
registry.MustRegister(ProxyFunctionlatency)
|
||||
|
||||
registry.MustRegister(ProxyScannedRemoteBytes)
|
||||
registry.MustRegister(ProxyScannedTotalBytes)
|
||||
RegisterStreamingServiceClient(registry)
|
||||
}
|
||||
|
||||
@ -696,4 +714,28 @@ func CleanupProxyCollectionMetrics(nodeID int64, dbName string, collection strin
|
||||
databaseLabelName: dbName,
|
||||
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;
|
||||
bool is_topk_reduce = 18;
|
||||
bool is_recall_evaluation = 19;
|
||||
int64 scanned_remote_bytes = 20;
|
||||
int64 scanned_total_bytes = 21;
|
||||
}
|
||||
|
||||
message CostAggregation {
|
||||
@ -218,6 +220,8 @@ message RetrieveResults {
|
||||
CostAggregation costAggregation = 13;
|
||||
int64 all_retrieve_count = 14;
|
||||
bool has_more_result = 15;
|
||||
int64 scanned_remote_bytes = 16;
|
||||
int64 scanned_total_bytes = 17;
|
||||
}
|
||||
|
||||
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"`
|
||||
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"`
|
||||
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() {
|
||||
@ -1688,6 +1690,20 @@ func (x *SearchResults) GetIsRecallEvaluation() bool {
|
||||
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 {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
@ -1975,6 +1991,8 @@ type RetrieveResults struct {
|
||||
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"`
|
||||
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() {
|
||||
@ -2086,6 +2104,20 @@ func (x *RetrieveResults) GetHasMoreResult() bool {
|
||||
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 {
|
||||
state protoimpl.MessageState
|
||||
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,
|
||||
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, 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,
|
||||
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,
|
||||
@ -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, 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,
|
||||
0x63, 0x61, 0x6c, 0x6c, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x3f,
|
||||
0x0a, 0x11, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x4d, 0x76, 0x63, 0x63, 0x45, 0x6e,
|
||||
0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
|
||||
0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02,
|
||||
0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22,
|
||||
0xa5, 0x01, 0x0a, 0x0f, 0x43, 0x6f, 0x73, 0x74, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74,
|
||||
0x69, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54,
|
||||
0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x70, 0x6f,
|
||||
0x6e, 0x73, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x65, 0x72, 0x76, 0x69,
|
||||
0x63, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x73, 0x65,
|
||||
0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x74, 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,
|
||||
0x63, 0x61, 0x6c, 0x6c, 0x45, 0x76, 0x61, 0x6c, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x30,
|
||||
0x0a, 0x14, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65,
|
||||
0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12, 0x73, 0x63,
|
||||
0x61, 0x6e, 0x6e, 0x65, 0x64, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73,
|
||||
0x12, 0x2e, 0x0a, 0x13, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x5f, 0x74, 0x6f, 0x74, 0x61,
|
||||
0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x15, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x73,
|
||||
0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73,
|
||||
0x1a, 0x3f, 0x0a, 0x11, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x4d, 0x76, 0x63, 0x63,
|
||||
0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01,
|
||||
0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
|
||||
0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38,
|
||||
0x01, 0x22, 0xa5, 0x01, 0x0a, 0x0f, 0x43, 0x6f, 0x73, 0x74, 0x41, 0x67, 0x67, 0x72, 0x65, 0x67,
|
||||
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
|
||||
0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x72, 0x65, 0x73,
|
||||
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x65, 0x72,
|
||||
0x76, 0x69, 0x63, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b,
|
||||
0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x74,
|
||||
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,
|
||||
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, 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,
|
||||
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,
|
||||
0xb2, 0x05, 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, 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, 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,
|
||||
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, 0x6a, 0x6f,
|
||||
0x62, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6a, 0x6f, 0x62, 0x49, 0x44,
|
||||
0x22, 0x49, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x50, 0x72, 0x6f,
|
||||
0x67, 0x72, 0x65, 0x73, 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, 0x14, 0x0a, 0x05, 0x6a, 0x6f, 0x62, 0x49, 0x44, 0x18, 0x02,
|
||||
0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6a, 0x6f, 0x62, 0x49, 0x44, 0x22, 0x81, 0x02, 0x0a, 0x12,
|
||||
0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x50, 0x72, 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,
|
||||
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, 0x12, 0x30, 0x0a, 0x14, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x5f, 0x72, 0x65,
|
||||
0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x03,
|
||||
0x52, 0x12, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x42,
|
||||
0x79, 0x74, 0x65, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x5f,
|
||||
0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28,
|
||||
0x03, 0x52, 0x11, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x42,
|
||||
0x79, 0x74, 0x65, 0x73, 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, 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, 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, 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,
|
||||
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,
|
||||
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,
|
||||
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,
|
||||
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, 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, 0x6c, 0x2e, 0x46, 0x69,
|
||||
0x65, 0x6c, 0x64, 0x42, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x65, 0x72,
|
||||
0x74, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x41, 0x0a, 0x0a, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x5f, 0x6c,
|
||||
0x6f, 0x67, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6d, 0x69, 0x6c, 0x76,
|
||||
0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14,
|
||||
0x0a, 0x05, 0x6a, 0x6f, 0x62, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6a,
|
||||
0x6f, 0x62, 0x49, 0x44, 0x22, 0x49, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x49, 0x6d, 0x70, 0x6f, 0x72,
|
||||
0x74, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 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, 0x14, 0x0a, 0x05, 0x6a, 0x6f, 0x62,
|
||||
0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6a, 0x6f, 0x62, 0x49, 0x44, 0x22,
|
||||
0x81, 0x02, 0x0a, 0x12, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x61, 0x73, 0x6b, 0x50, 0x72,
|
||||
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,
|
||||
0x6c, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x52, 0x09, 0x64,
|
||||
0x65, 0x6c, 0x74, 0x61, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x41, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x74,
|
||||
0x73, 0x5f, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x0b, 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, 0x6c, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x69, 0x6e, 0x6c, 0x6f, 0x67,
|
||||
0x52, 0x09, 0x73, 0x74, 0x61, 0x74, 0x73, 0x4c, 0x6f, 0x67, 0x73, 0x22, 0x96, 0x01, 0x0a, 0x17,
|
||||
0x47, 0x65, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x49, 0x6e, 0x66, 0x6f, 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, 0x46, 0x0a, 0x0c,
|
||||
0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x18, 0x02, 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, 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,
|
||||
0x6c, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x52, 0x0a, 0x69,
|
||||
0x6e, 0x73, 0x65, 0x72, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x41, 0x0a, 0x0a, 0x64, 0x65, 0x6c,
|
||||
0x74, 0x61, 0x5f, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x0a, 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, 0x6c, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x69, 0x6e, 0x6c, 0x6f,
|
||||
0x67, 0x52, 0x09, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x41, 0x0a, 0x0a,
|
||||
0x73, 0x74, 0x61, 0x74, 0x73, 0x5f, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x0b, 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, 0x6c, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x69,
|
||||
0x6e, 0x6c, 0x6f, 0x67, 0x52, 0x09, 0x73, 0x74, 0x61, 0x74, 0x73, 0x4c, 0x6f, 0x67, 0x73, 0x22,
|
||||
0x96, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x49,
|
||||
0x6e, 0x66, 0x6f, 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, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x5f, 0x69, 0x6e, 0x66, 0x6f,
|
||||
0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x49,
|
||||
0x6e, 0x66, 0x6f, 0x2a, 0x45, 0x0a, 0x09, 0x52, 0x61, 0x74, 0x65, 0x53, 0x63, 0x6f, 0x70, 0x65,
|
||||
0x12, 0x0b, 0x0a, 0x07, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x10, 0x00, 0x12, 0x0c, 0x0a,
|
||||
0x08, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x43,
|
||||
0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x50,
|
||||
0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x03, 0x2a, 0xc4, 0x01, 0x0a, 0x08, 0x52,
|
||||
0x61, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x44, 0x4c, 0x43, 0x6f,
|
||||
0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x44, 0x44,
|
||||
0x4c, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08,
|
||||
0x44, 0x44, 0x4c, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x44,
|
||||
0x4c, 0x46, 0x6c, 0x75, 0x73, 0x68, 0x10, 0x03, 0x12, 0x11, 0x0a, 0x0d, 0x44, 0x44, 0x4c, 0x43,
|
||||
0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x04, 0x12, 0x0d, 0x0a, 0x09, 0x44,
|
||||
0x4d, 0x4c, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x10, 0x05, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x4d,
|
||||
0x4c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x10, 0x06, 0x12, 0x0f, 0x0a, 0x0b, 0x44, 0x4d, 0x4c,
|
||||
0x42, 0x75, 0x6c, 0x6b, 0x4c, 0x6f, 0x61, 0x64, 0x10, 0x07, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x51,
|
||||
0x4c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x10, 0x08, 0x12, 0x0c, 0x0a, 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,
|
||||
0x12, 0x46, 0x0a, 0x0c, 0x73, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x73,
|
||||
0x18, 0x02, 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, 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, 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, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x5f,
|
||||
0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6d, 0x65, 0x74, 0x72,
|
||||
0x69, 0x63, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x2a, 0x45, 0x0a, 0x09, 0x52, 0x61, 0x74, 0x65, 0x53,
|
||||
0x63, 0x6f, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x10,
|
||||
0x00, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x10, 0x01, 0x12,
|
||||
0x0e, 0x0a, 0x0a, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x02, 0x12,
|
||||
0x0d, 0x0a, 0x09, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x03, 0x2a, 0xc4,
|
||||
0x01, 0x0a, 0x08, 0x52, 0x61, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x11, 0x0a, 0x0d, 0x44,
|
||||
0x44, 0x4c, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x00, 0x12, 0x10,
|
||||
0x0a, 0x0c, 0x44, 0x44, 0x4c, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x01,
|
||||
0x12, 0x0c, 0x0a, 0x08, 0x44, 0x44, 0x4c, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x10, 0x02, 0x12, 0x0c,
|
||||
0x0a, 0x08, 0x44, 0x44, 0x4c, 0x46, 0x6c, 0x75, 0x73, 0x68, 0x10, 0x03, 0x12, 0x11, 0x0a, 0x0d,
|
||||
0x44, 0x44, 0x4c, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x04, 0x12,
|
||||
0x0d, 0x0a, 0x09, 0x44, 0x4d, 0x4c, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x10, 0x05, 0x12, 0x0d,
|
||||
0x0a, 0x09, 0x44, 0x4d, 0x4c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x10, 0x06, 0x12, 0x0f, 0x0a,
|
||||
0x0b, 0x44, 0x4d, 0x4c, 0x42, 0x75, 0x6c, 0x6b, 0x4c, 0x6f, 0x61, 0x64, 0x10, 0x07, 0x12, 0x0d,
|
||||
0x0a, 0x09, 0x44, 0x51, 0x4c, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x10, 0x08, 0x12, 0x0c, 0x0a,
|
||||
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 (
|
||||
|
||||
@ -11,6 +11,8 @@ message RetrieveResults {
|
||||
repeated schema.FieldData fields_data = 3;
|
||||
int64 all_retrieve_count = 4;
|
||||
bool has_more_result = 5;
|
||||
int64 scanned_remote_bytes = 6;
|
||||
int64 scanned_total_bytes = 7;
|
||||
}
|
||||
|
||||
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"`
|
||||
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"`
|
||||
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() {
|
||||
@ -101,6 +103,20 @@ func (x *RetrieveResults) GetHasMoreResult() bool {
|
||||
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 {
|
||||
state protoimpl.MessageState
|
||||
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,
|
||||
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, 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,
|
||||
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,
|
||||
@ -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,
|
||||
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,
|
||||
0x22, 0x76, 0x0a, 0x0d, 0x4c, 0x6f, 0x61, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x65, 0x74,
|
||||
0x61, 0x12, 0x23, 0x0a, 0x0d, 0x6d, 0x69, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61,
|
||||
0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6d, 0x69, 0x6e, 0x54, 0x69, 0x6d,
|
||||
0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x23, 0x0a, 0x0d, 0x6d, 0x61, 0x78, 0x5f, 0x74, 0x69,
|
||||
0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6d,
|
||||
0x61, 0x78, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x1b, 0x0a, 0x09, 0x72,
|
||||
0x6f, 0x77, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08,
|
||||
0x72, 0x6f, 0x77, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x6b, 0x0a, 0x0f, 0x4c, 0x6f, 0x61, 0x64,
|
||||
0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x39, 0x0a, 0x05, 0x6d,
|
||||
0x65, 0x74, 0x61, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6d, 0x69, 0x6c,
|
||||
0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x65, 0x67, 0x63, 0x6f, 0x72,
|
||||
0x65, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x65, 0x74, 0x61, 0x52,
|
||||
0x05, 0x6d, 0x65, 0x74, 0x61, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f,
|
||||
0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x6f, 0x74, 0x61,
|
||||
0x6c, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x6a, 0x0a, 0x0c, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x52,
|
||||
0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x3f, 0x0a, 0x0b, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x5f,
|
||||
0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 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, 0x19, 0x0a, 0x08, 0x6e, 0x75, 0x6d, 0x5f, 0x72, 0x6f,
|
||||
0x77, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6e, 0x75, 0x6d, 0x52, 0x6f, 0x77,
|
||||
0x73, 0x22, 0xea, 0x02, 0x0a, 0x0e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x49, 0x6e, 0x64, 0x65, 0x78,
|
||||
0x4d, 0x65, 0x74, 0x61, 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, 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, 0x1d, 0x0a, 0x0a, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x6e, 0x61, 0x6d, 0x65,
|
||||
0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x61, 0x6d,
|
||||
0x65, 0x12, 0x42, 0x0a, 0x0b, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73,
|
||||
0x18, 0x04, 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, 0x0a, 0x74, 0x79, 0x70, 0x65, 0x50,
|
||||
0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x44, 0x0a, 0x0c, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x70,
|
||||
0x61, 0x72, 0x61, 0x6d, 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, 0x0b,
|
||||
0x69, 0x6e, 0x64, 0x65, 0x78, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x69,
|
||||
0x73, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x06, 0x20, 0x01,
|
||||
0x28, 0x08, 0x52, 0x0b, 0x69, 0x73, 0x41, 0x75, 0x74, 0x6f, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12,
|
||||
0x4d, 0x0a, 0x11, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x70, 0x61,
|
||||
0x72, 0x61, 0x6d, 0x73, 0x18, 0x07, 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, 0x0f, 0x75,
|
||||
0x73, 0x65, 0x72, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x22, 0x88,
|
||||
0x01, 0x0a, 0x13, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x64,
|
||||
0x65, 0x78, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x2a, 0x0a, 0x10, 0x6d, 0x61, 0x78, 0x49, 0x6e, 0x64,
|
||||
0x65, 0x78, 0x52, 0x6f, 0x77, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03,
|
||||
0x52, 0x10, 0x6d, 0x61, 0x78, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x6f, 0x77, 0x43, 0x6f, 0x75,
|
||||
0x6e, 0x74, 0x12, 0x45, 0x0a, 0x0b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x6d, 0x65, 0x74, 0x61,
|
||||
0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 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,
|
||||
0x12, 0x30, 0x0a, 0x14, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x6d, 0x6f,
|
||||
0x74, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x12,
|
||||
0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x42, 0x79, 0x74,
|
||||
0x65, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x5f, 0x74, 0x6f,
|
||||
0x74, 0x61, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52,
|
||||
0x11, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x42, 0x79, 0x74,
|
||||
0x65, 0x73, 0x22, 0x76, 0x0a, 0x0d, 0x4c, 0x6f, 0x61, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d,
|
||||
0x65, 0x74, 0x61, 0x12, 0x23, 0x0a, 0x0d, 0x6d, 0x69, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73,
|
||||
0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x6d, 0x69, 0x6e, 0x54,
|
||||
0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x23, 0x0a, 0x0d, 0x6d, 0x61, 0x78, 0x5f,
|
||||
0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52,
|
||||
0x0c, 0x6d, 0x61, 0x78, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x1b, 0x0a,
|
||||
0x09, 0x72, 0x6f, 0x77, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03,
|
||||
0x52, 0x08, 0x72, 0x6f, 0x77, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x6b, 0x0a, 0x0f, 0x4c, 0x6f,
|
||||
0x61, 0x64, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x39, 0x0a,
|
||||
0x05, 0x6d, 0x65, 0x74, 0x61, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6d,
|
||||
0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x73, 0x65, 0x67, 0x63,
|
||||
0x6f, 0x72, 0x65, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x65, 0x74,
|
||||
0x61, 0x52, 0x05, 0x6d, 0x65, 0x74, 0x61, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61,
|
||||
0x6c, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x6f,
|
||||
0x74, 0x61, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x22, 0x6a, 0x0a, 0x0c, 0x49, 0x6e, 0x73, 0x65, 0x72,
|
||||
0x74, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x12, 0x3f, 0x0a, 0x0b, 0x66, 0x69, 0x65, 0x6c, 0x64,
|
||||
0x73, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 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, 0x19, 0x0a, 0x08, 0x6e, 0x75, 0x6d, 0x5f,
|
||||
0x72, 0x6f, 0x77, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x6e, 0x75, 0x6d, 0x52,
|
||||
0x6f, 0x77, 0x73, 0x22, 0xea, 0x02, 0x0a, 0x0e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x49, 0x6e, 0x64,
|
||||
0x65, 0x78, 0x4d, 0x65, 0x74, 0x61, 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, 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, 0x1d, 0x0a, 0x0a, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x6e, 0x61,
|
||||
0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x4e,
|
||||
0x61, 0x6d, 0x65, 0x12, 0x42, 0x0a, 0x0b, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61,
|
||||
0x6d, 0x73, 0x18, 0x04, 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, 0x0a, 0x74, 0x79, 0x70,
|
||||
0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x44, 0x0a, 0x0c, 0x69, 0x6e, 0x64, 0x65, 0x78,
|
||||
0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 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, 0x0b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x22, 0x0a,
|
||||
0x0d, 0x69, 0x73, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x06,
|
||||
0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x73, 0x41, 0x75, 0x74, 0x6f, 0x49, 0x6e, 0x64, 0x65,
|
||||
0x78, 0x12, 0x4d, 0x0a, 0x11, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f,
|
||||
0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x07, 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,
|
||||
0x0f, 0x75, 0x73, 0x65, 0x72, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73,
|
||||
0x22, 0x88, 0x01, 0x0a, 0x13, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49,
|
||||
0x6e, 0x64, 0x65, 0x78, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x2a, 0x0a, 0x10, 0x6d, 0x61, 0x78, 0x49,
|
||||
0x6e, 0x64, 0x65, 0x78, 0x52, 0x6f, 0x77, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01,
|
||||
0x28, 0x03, 0x52, 0x10, 0x6d, 0x61, 0x78, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x52, 0x6f, 0x77, 0x43,
|
||||
0x6f, 0x75, 0x6e, 0x74, 0x12, 0x45, 0x0a, 0x0b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x6d, 0x65,
|
||||
0x74, 0x61, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6d, 0x69, 0x6c, 0x76,
|
||||
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 (
|
||||
|
||||
@ -28,8 +28,8 @@ pytest-parallel
|
||||
pytest-random-order
|
||||
|
||||
# pymilvus
|
||||
pymilvus==2.7.0rc29
|
||||
pymilvus[bulk_writer]==2.7.0rc29
|
||||
pymilvus==2.7.0rc33
|
||||
pymilvus[bulk_writer]==2.7.0rc33
|
||||
|
||||
# for protobuf
|
||||
protobuf>=5.29.5
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user