mirror of https://github.com/milvus-io/milvus.git
fix: [2.5]fix the garbage cleanup logic of jsonkey stats && improve json key stats filer (#40039)
fix: fix the garbage collection cleanup logic of jsonkey stats && improve json key stats filer issue: https://github.com/milvus-io/milvus/issues/36995 https://github.com/milvus-io/milvus/issues/40034 https://github.com/milvus-io/milvus/issues/40041 https://github.com/milvus-io/milvus/issues/40106 https://github.com/milvus-io/milvus/issues/40138 pr: https://github.com/milvus-io/milvus/pull/38039 --------- Signed-off-by: Xianhui.Lin <xianhui.lin@zilliz.com>pull/40186/head
parent
f6c4ad52f0
commit
f5e9dea2aa
|
@ -416,8 +416,7 @@ queryNode:
|
|||
buildParallelRate: 0.5 # the ratio of building interim index parallel matched with cpu num
|
||||
multipleChunkedEnable: true # Enable multiple chunked search
|
||||
knowhereScoreConsistency: false # Enable knowhere strong consistency score computation logic
|
||||
jsonIndexMemoryBudgetInTantivy: 16 # the memory budget for the JSON index In Tantivy
|
||||
jsonIndexCommitInterval: 200 # the commit interval for the JSON index to commit
|
||||
jsonKeyStatsCommitInterval: 200 # the commit interval for the JSON key Stats to commit
|
||||
loadMemoryUsageFactor: 1 # The multiply factor of calculating the memory usage while loading segments
|
||||
enableDisk: false # enable querynode load disk index, and search on disk index
|
||||
maxDiskUsagePercentage: 95
|
||||
|
@ -639,6 +638,10 @@ dataCoord:
|
|||
clusteringCompactionUsage: 16 # slot usage of clustering compaction job.
|
||||
mixCompactionUsage: 8 # slot usage of mix compaction job.
|
||||
l0DeleteCompactionUsage: 8 # slot usage of l0 compaction job.
|
||||
jsonStatsTriggerCount: 10 # jsonkey stats task count per trigger
|
||||
jsonStatsTriggerInterval: 10 # jsonkey task interval per trigger
|
||||
segcore:
|
||||
jsonKeyStatsMemoryBudgetInTantivy: 16777216 # the memory budget for the JSON index In Tantivy, the unit is bytes
|
||||
ip: # TCP/IP address of dataCoord. If not specified, use the first unicastable address
|
||||
port: 13333 # TCP port of dataCoord
|
||||
grpc:
|
||||
|
|
|
@ -29,9 +29,8 @@ int64_t LOW_PRIORITY_THREAD_CORE_COEFFICIENT =
|
|||
int CPU_NUM = DEFAULT_CPU_NUM;
|
||||
int64_t EXEC_EVAL_EXPR_BATCH_SIZE = DEFAULT_EXEC_EVAL_EXPR_BATCH_SIZE;
|
||||
|
||||
int64_t JSON_INDEX_MEMORY_BUDGET = DEFAULT_JSON_INDEX_MEMORY_BUDGET;
|
||||
int64_t JSON_INDEX_COMMIT_INTERVAL = DEFAULT_JSON_INDEX_COMMIT_INTERVAL;
|
||||
bool JSON_INDEX_ENABLED = DEFAULT_JSON_INDEX_ENABLED;
|
||||
int64_t JSON_KEY_STATS_COMMIT_INTERVAL = DEFAULT_JSON_KEY_STATS_COMMIT_INTERVAL;
|
||||
bool JSON_KEY_STATS_ENABLED = DEFAULT_JSON_KEY_STATS_ENABLED;
|
||||
|
||||
void
|
||||
SetIndexSliceSize(const int64_t size) {
|
||||
|
@ -72,23 +71,16 @@ SetCpuNum(const int num) {
|
|||
}
|
||||
|
||||
void
|
||||
SetDefaultJSONKeyIndexMemoryBudget(int64_t val) {
|
||||
JSON_INDEX_MEMORY_BUDGET = val;
|
||||
LOG_INFO("set default json key index memory budget: {}",
|
||||
JSON_INDEX_MEMORY_BUDGET);
|
||||
SetDefaultJSONKeyStatsCommitInterval(int64_t val) {
|
||||
JSON_KEY_STATS_COMMIT_INTERVAL = val;
|
||||
LOG_INFO("set default json key Stats commit interval: {}",
|
||||
JSON_KEY_STATS_COMMIT_INTERVAL);
|
||||
}
|
||||
|
||||
void
|
||||
SetDefaultJSONKeyIndexCommitInterval(int64_t val) {
|
||||
JSON_INDEX_COMMIT_INTERVAL = val;
|
||||
LOG_INFO("set default json key index commit interval: {}",
|
||||
JSON_INDEX_COMMIT_INTERVAL);
|
||||
}
|
||||
|
||||
void
|
||||
SetDefaultJSONKeyIndexEnable(bool val) {
|
||||
JSON_INDEX_ENABLED = val;
|
||||
LOG_INFO("set default json key index enable: {}", JSON_INDEX_ENABLED);
|
||||
SetDefaultJSONKeyStatsEnable(bool val) {
|
||||
JSON_KEY_STATS_ENABLED = val;
|
||||
LOG_INFO("set default json key index enable: {}", JSON_KEY_STATS_ENABLED);
|
||||
}
|
||||
|
||||
} // namespace milvus
|
||||
|
|
|
@ -29,9 +29,8 @@ extern int64_t MIDDLE_PRIORITY_THREAD_CORE_COEFFICIENT;
|
|||
extern int64_t LOW_PRIORITY_THREAD_CORE_COEFFICIENT;
|
||||
extern int CPU_NUM;
|
||||
extern int64_t EXEC_EVAL_EXPR_BATCH_SIZE;
|
||||
extern int64_t JSON_INDEX_MEMORY_BUDGET;
|
||||
extern int64_t JSON_INDEX_COMMIT_INTERVAL;
|
||||
extern bool JSON_INDEX_ENABLED;
|
||||
extern int64_t JSON_KEY_STATS_COMMIT_INTERVAL;
|
||||
extern bool JSON_KEY_STATS_ENABLED;
|
||||
void
|
||||
SetIndexSliceSize(const int64_t size);
|
||||
|
||||
|
@ -51,13 +50,10 @@ void
|
|||
SetDefaultExecEvalExprBatchSize(int64_t val);
|
||||
|
||||
void
|
||||
SetDefaultJSONKeyIndexMemoryBudget(int64_t val);
|
||||
SetDefaultJSONKeyStatsCommitInterval(int64_t val);
|
||||
|
||||
void
|
||||
SetDefaultJSONKeyIndexCommitInterval(int64_t val);
|
||||
|
||||
void
|
||||
SetDefaultJSONKeyIndexEnable(bool val);
|
||||
SetDefaultJSONKeyStatsEnable(bool val);
|
||||
|
||||
struct BufferView {
|
||||
struct Element {
|
||||
|
|
|
@ -79,8 +79,8 @@ const int64_t DEFAULT_HYBRID_INDEX_BITMAP_CARDINALITY_LIMIT = 100;
|
|||
|
||||
const size_t MARISA_NULL_KEY_ID = -1;
|
||||
|
||||
const int64_t DEFAULT_JSON_INDEX_MEMORY_BUDGET = 16777216; // bytes, 16MB
|
||||
const int64_t DEFAULT_JSON_INDEX_COMMIT_INTERVAL = 200;
|
||||
const bool DEFAULT_JSON_INDEX_ENABLED = true;
|
||||
const std::string JSON_CAST_TYPE = "json_cast_type";
|
||||
const std::string JSON_PATH = "json_path";
|
||||
const bool DEFAULT_JSON_KEY_STATS_ENABLED = false;
|
||||
const int64_t DEFAULT_JSON_KEY_STATS_COMMIT_INTERVAL = 200;
|
|
@ -40,7 +40,7 @@ FieldMeta::enable_match() const {
|
|||
|
||||
bool
|
||||
FieldMeta::enable_jsonIndex() const {
|
||||
return IsJsonDataType(type_) && JSON_INDEX_ENABLED;
|
||||
return IsJsonDataType(type_) && JSON_KEY_STATS_ENABLED;
|
||||
}
|
||||
|
||||
bool
|
||||
|
|
|
@ -244,6 +244,11 @@ class Json {
|
|||
return doc(offset, length).get<T>();
|
||||
}
|
||||
|
||||
std::string_view
|
||||
at_string(uint16_t offset, uint16_t length) const {
|
||||
return std::string_view(data_.data() + offset, length);
|
||||
}
|
||||
|
||||
value_result<simdjson::dom::array>
|
||||
array_at(uint16_t offset, uint16_t length) const {
|
||||
return dom_doc(offset, length).get_array();
|
||||
|
|
|
@ -79,26 +79,18 @@ InitDefaultExprEvalBatchSize(int64_t val) {
|
|||
}
|
||||
|
||||
void
|
||||
InitDefaultJSONKeyIndexMemoryBudget(int64_t val) {
|
||||
std::call_once(
|
||||
flag7,
|
||||
[](int val) { milvus::SetDefaultJSONKeyIndexMemoryBudget(val); },
|
||||
val);
|
||||
}
|
||||
|
||||
void
|
||||
InitDefaultJSONKeyIndexCommitInterval(int64_t val) {
|
||||
InitDefaultJSONKeyStatsCommitInterval(int64_t val) {
|
||||
std::call_once(
|
||||
flag8,
|
||||
[](int val) { milvus::SetDefaultJSONKeyIndexCommitInterval(val); },
|
||||
[](int val) { milvus::SetDefaultJSONKeyStatsCommitInterval(val); },
|
||||
val);
|
||||
}
|
||||
|
||||
void
|
||||
InitDefaultJSONKeyIndexEnable(bool val) {
|
||||
InitDefaultJSONKeyStatsEnable(bool val) {
|
||||
std::call_once(
|
||||
flag9,
|
||||
[](bool val) { milvus::SetDefaultJSONKeyIndexEnable(val); },
|
||||
[](bool val) { milvus::SetDefaultJSONKeyStatsEnable(val); },
|
||||
val);
|
||||
}
|
||||
|
||||
|
|
|
@ -49,13 +49,10 @@ void
|
|||
SetTrace(CTraceConfig* config);
|
||||
|
||||
void
|
||||
InitDefaultJSONKeyIndexMemoryBudget(int64_t val);
|
||||
InitDefaultJSONKeyStatsCommitInterval(int64_t val);
|
||||
|
||||
void
|
||||
InitDefaultJSONKeyIndexCommitInterval(int64_t val);
|
||||
|
||||
void
|
||||
InitDefaultJSONKeyIndexEnable(bool val);
|
||||
InitDefaultJSONKeyStatsEnable(bool val);
|
||||
|
||||
#ifdef __cplusplus
|
||||
};
|
||||
|
|
|
@ -481,6 +481,57 @@ PhyBinaryRangeFilterExpr::ExecRangeVisitorImplForJsonForIndex() {
|
|||
} \
|
||||
return (cmp); \
|
||||
} while (false)
|
||||
#define BinaryRangeJSONTypeCompare(cmp) \
|
||||
do { \
|
||||
if (type == uint8_t(milvus::index::JSONType::STRING)) { \
|
||||
if constexpr (std::is_same_v<GetType, std::string_view>) { \
|
||||
auto val = json.at_string(offset, size); \
|
||||
return (cmp); \
|
||||
} else { \
|
||||
return false; \
|
||||
} \
|
||||
} else if (type == uint8_t(milvus::index::JSONType::DOUBLE)) { \
|
||||
if constexpr (std::is_same_v<GetType, double>) { \
|
||||
auto val = \
|
||||
std::stod(std::string(json.at_string(offset, size))); \
|
||||
return (cmp); \
|
||||
} else { \
|
||||
return false; \
|
||||
} \
|
||||
} else if (type == uint8_t(milvus::index::JSONType::INT64)) { \
|
||||
if constexpr (std::is_same_v<GetType, int64_t>) { \
|
||||
auto val = \
|
||||
std::stoll(std::string(json.at_string(offset, size))); \
|
||||
return (cmp); \
|
||||
} else { \
|
||||
return false; \
|
||||
} \
|
||||
} \
|
||||
} while (false)
|
||||
|
||||
#define BinaryRangeJSONTypeCompareWithValue(cmp) \
|
||||
do { \
|
||||
if constexpr (std::is_same_v<GetType, int64_t>) { \
|
||||
if (type == uint8_t(milvus::index::JSONType::FLOAT)) { \
|
||||
float val = *reinterpret_cast<float*>(&value); \
|
||||
return (cmp); \
|
||||
} else { \
|
||||
int64_t val = value; \
|
||||
return (cmp); \
|
||||
} \
|
||||
} else if constexpr (std::is_same_v<GetType, double>) { \
|
||||
if (type == uint8_t(milvus::index::JSONType::FLOAT)) { \
|
||||
float val = *reinterpret_cast<float*>(&value); \
|
||||
return (cmp); \
|
||||
} else { \
|
||||
int64_t val = value; \
|
||||
return (cmp); \
|
||||
} \
|
||||
} else if constexpr (std::is_same_v<GetType, bool>) { \
|
||||
bool val = *reinterpret_cast<bool*>(&value); \
|
||||
return (cmp); \
|
||||
} \
|
||||
} while (false)
|
||||
bool lower_inclusive = expr_->lower_inclusive_;
|
||||
bool upper_inclusive = expr_->upper_inclusive_;
|
||||
ValueType val1 = GetValueFromProto<ValueType>(expr_->lower_val_);
|
||||
|
@ -496,9 +547,82 @@ PhyBinaryRangeFilterExpr::ExecRangeVisitorImplForJsonForIndex() {
|
|||
auto field_id = expr_->column_.field_id_;
|
||||
auto* index = segment->GetJsonKeyIndex(field_id);
|
||||
Assert(index != nullptr);
|
||||
auto filter_func =
|
||||
[segment, &field_id, val1, val2, lower_inclusive, upper_inclusive](
|
||||
uint32_t row_id, uint16_t offset, uint16_t size) {
|
||||
auto filter_func = [segment,
|
||||
&field_id,
|
||||
val1,
|
||||
val2,
|
||||
lower_inclusive,
|
||||
upper_inclusive](bool valid,
|
||||
uint8_t type,
|
||||
uint32_t row_id,
|
||||
uint16_t offset,
|
||||
uint16_t size,
|
||||
uint32_t value) {
|
||||
if (valid) {
|
||||
if constexpr (std::is_same_v<GetType, int64_t>) {
|
||||
if (type != uint8_t(milvus::index::JSONType::INT32) &&
|
||||
type != uint8_t(milvus::index::JSONType::INT64) &&
|
||||
type != uint8_t(milvus::index::JSONType::FLOAT) &&
|
||||
type != uint8_t(milvus::index::JSONType::DOUBLE)) {
|
||||
return false;
|
||||
}
|
||||
} else if constexpr (std::is_same_v<GetType,
|
||||
std::string_view>) {
|
||||
if (type != uint8_t(milvus::index::JSONType::STRING) &&
|
||||
type !=
|
||||
uint8_t(milvus::index::JSONType::STRING_ESCAPE)) {
|
||||
return false;
|
||||
}
|
||||
} else if constexpr (std::is_same_v<GetType, double>) {
|
||||
if (type != uint8_t(milvus::index::JSONType::INT32) &&
|
||||
type != uint8_t(milvus::index::JSONType::INT64) &&
|
||||
type != uint8_t(milvus::index::JSONType::FLOAT) &&
|
||||
type != uint8_t(milvus::index::JSONType::DOUBLE)) {
|
||||
return false;
|
||||
}
|
||||
} else if constexpr (std::is_same_v<GetType, bool>) {
|
||||
if (type != uint8_t(milvus::index::JSONType::BOOL)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (lower_inclusive && upper_inclusive) {
|
||||
if (type == uint8_t(milvus::index::JSONType::FLOAT)) {
|
||||
BinaryRangeJSONTypeCompareWithValue(
|
||||
static_cast<float>(val1) <= val &&
|
||||
val <= static_cast<float>(val2));
|
||||
} else {
|
||||
BinaryRangeJSONTypeCompareWithValue(val1 <= val &&
|
||||
val <= val2);
|
||||
}
|
||||
} else if (lower_inclusive && !upper_inclusive) {
|
||||
if (type == uint8_t(milvus::index::JSONType::FLOAT)) {
|
||||
BinaryRangeJSONTypeCompareWithValue(
|
||||
static_cast<float>(val1) <= val &&
|
||||
val < static_cast<float>(val2));
|
||||
} else {
|
||||
BinaryRangeJSONTypeCompareWithValue(val1 <= val &&
|
||||
val < val2);
|
||||
}
|
||||
} else if (!lower_inclusive && upper_inclusive) {
|
||||
if (type == uint8_t(milvus::index::JSONType::FLOAT)) {
|
||||
BinaryRangeJSONTypeCompareWithValue(
|
||||
static_cast<float>(val1) < val &&
|
||||
val <= static_cast<float>(val2));
|
||||
} else {
|
||||
BinaryRangeJSONTypeCompareWithValue(val1 < val &&
|
||||
val <= val2);
|
||||
}
|
||||
} else {
|
||||
if (type == uint8_t(milvus::index::JSONType::FLOAT)) {
|
||||
BinaryRangeJSONTypeCompareWithValue(
|
||||
static_cast<float>(val1) < val &&
|
||||
val < static_cast<float>(val2));
|
||||
} else {
|
||||
BinaryRangeJSONTypeCompareWithValue(val1 < val &&
|
||||
val < val2);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
auto json_pair = segment->GetJsonData(field_id, row_id);
|
||||
if (!json_pair.second) {
|
||||
return false;
|
||||
|
@ -506,21 +630,48 @@ PhyBinaryRangeFilterExpr::ExecRangeVisitorImplForJsonForIndex() {
|
|||
auto json = milvus::Json(json_pair.first.data(),
|
||||
json_pair.first.size());
|
||||
if (lower_inclusive && upper_inclusive) {
|
||||
BinaryRangeJSONIndexCompare(val1 <=
|
||||
ValueType(val.value()) &&
|
||||
ValueType(val.value()) <= val2);
|
||||
if (type == uint8_t(milvus::index::JSONType::STRING) ||
|
||||
type == uint8_t(milvus::index::JSONType::DOUBLE) ||
|
||||
type == uint8_t(milvus::index::JSONType::INT64)) {
|
||||
BinaryRangeJSONTypeCompare(val1 <= val && val <= val2);
|
||||
} else {
|
||||
BinaryRangeJSONIndexCompare(
|
||||
val1 <= ValueType(val.value()) &&
|
||||
ValueType(val.value()) <= val2);
|
||||
}
|
||||
} else if (lower_inclusive && !upper_inclusive) {
|
||||
BinaryRangeJSONIndexCompare(val1 <=
|
||||
ValueType(val.value()) &&
|
||||
ValueType(val.value()) < val2);
|
||||
if (type == uint8_t(milvus::index::JSONType::STRING) ||
|
||||
type == uint8_t(milvus::index::JSONType::DOUBLE) ||
|
||||
type == uint8_t(milvus::index::JSONType::INT64)) {
|
||||
BinaryRangeJSONTypeCompare(val1 <= val && val < val2);
|
||||
} else {
|
||||
BinaryRangeJSONIndexCompare(
|
||||
val1 <= ValueType(val.value()) &&
|
||||
ValueType(val.value()) < val2);
|
||||
}
|
||||
} else if (!lower_inclusive && upper_inclusive) {
|
||||
BinaryRangeJSONIndexCompare(val1 < ValueType(val.value()) &&
|
||||
ValueType(val.value()) <= val2);
|
||||
if (type == uint8_t(milvus::index::JSONType::STRING) ||
|
||||
type == uint8_t(milvus::index::JSONType::DOUBLE) ||
|
||||
type == uint8_t(milvus::index::JSONType::INT64)) {
|
||||
BinaryRangeJSONTypeCompare(val1 < val && val <= val2);
|
||||
} else {
|
||||
BinaryRangeJSONIndexCompare(
|
||||
val1 < ValueType(val.value()) &&
|
||||
ValueType(val.value()) <= val2);
|
||||
}
|
||||
} else {
|
||||
BinaryRangeJSONIndexCompare(val1 < ValueType(val.value()) &&
|
||||
ValueType(val.value()) < val2);
|
||||
if (type == uint8_t(milvus::index::JSONType::STRING) ||
|
||||
type == uint8_t(milvus::index::JSONType::DOUBLE) ||
|
||||
type == uint8_t(milvus::index::JSONType::INT64)) {
|
||||
BinaryRangeJSONTypeCompare(val1 < val && val < val2);
|
||||
} else {
|
||||
BinaryRangeJSONIndexCompare(
|
||||
val1 < ValueType(val.value()) &&
|
||||
ValueType(val.value()) < val2);
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
};
|
||||
bool is_growing = segment_->type() == SegmentType::Growing;
|
||||
bool is_strong_consistency = consistency_level_ == 0;
|
||||
cached_index_chunk_res_ = index
|
||||
|
|
|
@ -117,9 +117,12 @@ PhyExistsFilterExpr::EvalJsonExistsForDataSegmentForIndex() {
|
|||
auto field_id = expr_->column_.field_id_;
|
||||
auto* index = segment->GetJsonKeyIndex(field_id);
|
||||
Assert(index != nullptr);
|
||||
auto filter_func = [segment, field_id, pointer](uint32_t row_id,
|
||||
auto filter_func = [segment, field_id, pointer](bool valid,
|
||||
uint8_t type,
|
||||
uint32_t row_id,
|
||||
uint16_t offset,
|
||||
uint16_t size) {
|
||||
uint16_t size,
|
||||
uint32_t value) {
|
||||
return true;
|
||||
};
|
||||
bool is_growing = segment_->type() == SegmentType::Growing;
|
||||
|
|
|
@ -367,30 +367,37 @@ PhyJsonContainsFilterExpr::ExecJsonContainsByKeyIndex() {
|
|||
auto field_id = expr_->column_.field_id_;
|
||||
auto* index = segment->GetJsonKeyIndex(field_id);
|
||||
Assert(index != nullptr);
|
||||
auto filter_func = [this, segment, &field_id](uint32_t row_id,
|
||||
auto filter_func = [this, segment, &field_id](bool valid,
|
||||
uint8_t type,
|
||||
uint32_t row_id,
|
||||
uint16_t offset,
|
||||
uint16_t size) {
|
||||
auto json_pair = segment->GetJsonData(field_id, row_id);
|
||||
if (!json_pair.second) {
|
||||
uint16_t size,
|
||||
uint32_t value) {
|
||||
if (valid) {
|
||||
return false;
|
||||
}
|
||||
auto json =
|
||||
milvus::Json(json_pair.first.data(), json_pair.first.size());
|
||||
auto array = json.array_at(offset, size);
|
||||
} else {
|
||||
auto json_pair = segment->GetJsonData(field_id, row_id);
|
||||
if (!json_pair.second) {
|
||||
return false;
|
||||
}
|
||||
auto json = milvus::Json(json_pair.first.data(),
|
||||
json_pair.first.size());
|
||||
auto array = json.array_at(offset, size);
|
||||
|
||||
if (array.error()) {
|
||||
if (array.error()) {
|
||||
return false;
|
||||
}
|
||||
for (auto&& it : array) {
|
||||
auto val = it.template get<GetType>();
|
||||
if (val.error()) {
|
||||
continue;
|
||||
}
|
||||
if (this->arg_set_->In(val.value())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
for (auto&& it : array) {
|
||||
auto val = it.template get<GetType>();
|
||||
if (val.error()) {
|
||||
continue;
|
||||
}
|
||||
if (this->arg_set_->In(val.value())) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
};
|
||||
bool is_growing = segment_->type() == SegmentType::Growing;
|
||||
bool is_strong_consistency = consistency_level_ == 0;
|
||||
|
@ -535,31 +542,38 @@ PhyJsonContainsFilterExpr::ExecJsonContainsArrayByKeyIndex() {
|
|||
auto field_id = expr_->column_.field_id_;
|
||||
auto* index = segment->GetJsonKeyIndex(field_id);
|
||||
Assert(index != nullptr);
|
||||
auto filter_func = [segment, &elements, &field_id](uint32_t row_id,
|
||||
auto filter_func = [segment, &elements, &field_id](bool valid,
|
||||
uint8_t type,
|
||||
uint32_t row_id,
|
||||
uint16_t offset,
|
||||
uint16_t size) {
|
||||
auto json_pair = segment->GetJsonData(field_id, row_id);
|
||||
if (!json_pair.second) {
|
||||
uint16_t size,
|
||||
uint32_t value) {
|
||||
if (valid) {
|
||||
return false;
|
||||
}
|
||||
auto json =
|
||||
milvus::Json(json_pair.first.data(), json_pair.first.size());
|
||||
auto array = json.array_at(offset, size);
|
||||
if (array.error()) {
|
||||
return false;
|
||||
}
|
||||
for (auto&& it : array) {
|
||||
auto val = it.get_array();
|
||||
if (val.error()) {
|
||||
continue;
|
||||
} else {
|
||||
auto json_pair = segment->GetJsonData(field_id, row_id);
|
||||
if (!json_pair.second) {
|
||||
return false;
|
||||
}
|
||||
for (auto const& element : elements) {
|
||||
if (CompareTwoJsonArray(val, element)) {
|
||||
return true;
|
||||
auto json = milvus::Json(json_pair.first.data(),
|
||||
json_pair.first.size());
|
||||
auto array = json.array_at(offset, size);
|
||||
if (array.error()) {
|
||||
return false;
|
||||
}
|
||||
for (auto&& it : array) {
|
||||
auto val = it.get_array();
|
||||
if (val.error()) {
|
||||
continue;
|
||||
}
|
||||
for (auto const& element : elements) {
|
||||
if (CompareTwoJsonArray(val, element)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
};
|
||||
bool is_growing = segment_->type() == SegmentType::Growing;
|
||||
bool is_strong_consistency = consistency_level_ == 0;
|
||||
|
@ -790,31 +804,38 @@ PhyJsonContainsFilterExpr::ExecJsonContainsAllByKeyIndex() {
|
|||
auto field_id = expr_->column_.field_id_;
|
||||
auto* index = segment->GetJsonKeyIndex(field_id);
|
||||
Assert(index != nullptr);
|
||||
auto filter_func = [segment, &elements, &field_id](uint32_t row_id,
|
||||
auto filter_func = [segment, &elements, &field_id](bool valid,
|
||||
uint8_t type,
|
||||
uint32_t row_id,
|
||||
uint16_t offset,
|
||||
uint16_t size) {
|
||||
auto json_pair = segment->GetJsonData(field_id, row_id);
|
||||
if (!json_pair.second) {
|
||||
uint16_t size,
|
||||
uint32_t value) {
|
||||
if (valid) {
|
||||
return false;
|
||||
}
|
||||
auto json =
|
||||
milvus::Json(json_pair.first.data(), json_pair.first.size());
|
||||
auto array = json.array_at(offset, size);
|
||||
if (array.error()) {
|
||||
return false;
|
||||
}
|
||||
std::set<GetType> tmp_elements(elements);
|
||||
for (auto&& it : array) {
|
||||
auto val = it.template get<GetType>();
|
||||
if (val.error()) {
|
||||
continue;
|
||||
} else {
|
||||
auto json_pair = segment->GetJsonData(field_id, row_id);
|
||||
if (!json_pair.second) {
|
||||
return false;
|
||||
}
|
||||
tmp_elements.erase(val.value());
|
||||
if (tmp_elements.size() == 0) {
|
||||
return true;
|
||||
auto json = milvus::Json(json_pair.first.data(),
|
||||
json_pair.first.size());
|
||||
auto array = json.array_at(offset, size);
|
||||
if (array.error()) {
|
||||
return false;
|
||||
}
|
||||
std::set<GetType> tmp_elements(elements);
|
||||
for (auto&& it : array) {
|
||||
auto val = it.template get<GetType>();
|
||||
if (val.error()) {
|
||||
continue;
|
||||
}
|
||||
tmp_elements.erase(val.value());
|
||||
if (tmp_elements.size() == 0) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return tmp_elements.empty();
|
||||
}
|
||||
return tmp_elements.empty();
|
||||
};
|
||||
bool is_growing = segment_->type() == SegmentType::Growing;
|
||||
bool is_strong_consistency = consistency_level_ == 0;
|
||||
|
@ -1023,89 +1044,98 @@ PhyJsonContainsFilterExpr::ExecJsonContainsAllWithDiffTypeByKeyIndex() {
|
|||
auto* index = segment->GetJsonKeyIndex(field_id);
|
||||
Assert(index != nullptr);
|
||||
auto filter_func = [segment, &elements, &elements_index, &field_id](
|
||||
bool valid,
|
||||
uint8_t type,
|
||||
uint32_t row_id,
|
||||
uint16_t offset,
|
||||
uint16_t size) {
|
||||
auto json_pair = segment->GetJsonData(field_id, row_id);
|
||||
if (!json_pair.second) {
|
||||
uint16_t size,
|
||||
uint32_t value) {
|
||||
if (valid) {
|
||||
return false;
|
||||
}
|
||||
auto json =
|
||||
milvus::Json(json_pair.first.data(), json_pair.first.size());
|
||||
std::set<int> tmp_elements_index(elements_index);
|
||||
auto array = json.array_at(offset, size);
|
||||
if (array.error()) {
|
||||
return false;
|
||||
}
|
||||
for (auto&& it : array) {
|
||||
int i = -1;
|
||||
for (auto& element : elements) {
|
||||
i++;
|
||||
switch (element.val_case()) {
|
||||
case proto::plan::GenericValue::kBoolVal: {
|
||||
auto val = it.template get<bool>();
|
||||
if (val.error()) {
|
||||
continue;
|
||||
} else {
|
||||
auto json_pair = segment->GetJsonData(field_id, row_id);
|
||||
if (!json_pair.second) {
|
||||
return false;
|
||||
}
|
||||
auto json = milvus::Json(json_pair.first.data(),
|
||||
json_pair.first.size());
|
||||
std::set<int> tmp_elements_index(elements_index);
|
||||
auto array = json.array_at(offset, size);
|
||||
if (array.error()) {
|
||||
return false;
|
||||
}
|
||||
for (auto&& it : array) {
|
||||
int i = -1;
|
||||
for (auto& element : elements) {
|
||||
i++;
|
||||
switch (element.val_case()) {
|
||||
case proto::plan::GenericValue::kBoolVal: {
|
||||
auto val = it.template get<bool>();
|
||||
if (val.error()) {
|
||||
continue;
|
||||
}
|
||||
if (val.value() == element.bool_val()) {
|
||||
tmp_elements_index.erase(i);
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (val.value() == element.bool_val()) {
|
||||
tmp_elements_index.erase(i);
|
||||
case proto::plan::GenericValue::kInt64Val: {
|
||||
auto val = it.template get<int64_t>();
|
||||
if (val.error()) {
|
||||
continue;
|
||||
}
|
||||
if (val.value() == element.int64_val()) {
|
||||
tmp_elements_index.erase(i);
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case proto::plan::GenericValue::kFloatVal: {
|
||||
auto val = it.template get<double>();
|
||||
if (val.error()) {
|
||||
continue;
|
||||
}
|
||||
if (val.value() == element.float_val()) {
|
||||
tmp_elements_index.erase(i);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case proto::plan::GenericValue::kStringVal: {
|
||||
auto val = it.template get<std::string_view>();
|
||||
if (val.error()) {
|
||||
continue;
|
||||
}
|
||||
if (val.value() == element.string_val()) {
|
||||
tmp_elements_index.erase(i);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case proto::plan::GenericValue::kArrayVal: {
|
||||
auto val = it.get_array();
|
||||
if (val.error()) {
|
||||
continue;
|
||||
}
|
||||
if (CompareTwoJsonArray(val,
|
||||
element.array_val())) {
|
||||
tmp_elements_index.erase(i);
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
PanicInfo(
|
||||
DataTypeInvalid,
|
||||
fmt::format("unsupported data type {}",
|
||||
element.val_case()));
|
||||
}
|
||||
case proto::plan::GenericValue::kInt64Val: {
|
||||
auto val = it.template get<int64_t>();
|
||||
if (val.error()) {
|
||||
continue;
|
||||
}
|
||||
if (val.value() == element.int64_val()) {
|
||||
tmp_elements_index.erase(i);
|
||||
}
|
||||
break;
|
||||
if (tmp_elements_index.size() == 0) {
|
||||
return true;
|
||||
}
|
||||
case proto::plan::GenericValue::kFloatVal: {
|
||||
auto val = it.template get<double>();
|
||||
if (val.error()) {
|
||||
continue;
|
||||
}
|
||||
if (val.value() == element.float_val()) {
|
||||
tmp_elements_index.erase(i);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case proto::plan::GenericValue::kStringVal: {
|
||||
auto val = it.template get<std::string_view>();
|
||||
if (val.error()) {
|
||||
continue;
|
||||
}
|
||||
if (val.value() == element.string_val()) {
|
||||
tmp_elements_index.erase(i);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case proto::plan::GenericValue::kArrayVal: {
|
||||
auto val = it.get_array();
|
||||
if (val.error()) {
|
||||
continue;
|
||||
}
|
||||
if (CompareTwoJsonArray(val, element.array_val())) {
|
||||
tmp_elements_index.erase(i);
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
PanicInfo(DataTypeInvalid,
|
||||
fmt::format("unsupported data type {}",
|
||||
element.val_case()));
|
||||
}
|
||||
if (tmp_elements_index.size() == 0) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if (tmp_elements_index.size() == 0) {
|
||||
return true;
|
||||
}
|
||||
return tmp_elements_index.size() == 0;
|
||||
}
|
||||
return tmp_elements_index.size() == 0;
|
||||
};
|
||||
bool is_growing = segment_->type() == SegmentType::Growing;
|
||||
bool is_strong_consistency = consistency_level_ == 0;
|
||||
|
@ -1255,35 +1285,42 @@ PhyJsonContainsFilterExpr::ExecJsonContainsAllArrayByKeyIndex() {
|
|||
auto field_id = expr_->column_.field_id_;
|
||||
auto* index = segment->GetJsonKeyIndex(field_id);
|
||||
Assert(index != nullptr);
|
||||
auto filter_func = [segment, &elements, &field_id](uint32_t row_id,
|
||||
auto filter_func = [segment, &elements, &field_id](bool valid,
|
||||
uint8_t type,
|
||||
uint32_t row_id,
|
||||
uint16_t offset,
|
||||
uint16_t size) {
|
||||
auto json_pair = segment->GetJsonData(field_id, row_id);
|
||||
if (!json_pair.second) {
|
||||
uint16_t size,
|
||||
uint32_t value) {
|
||||
if (valid) {
|
||||
return false;
|
||||
}
|
||||
auto json =
|
||||
milvus::Json(json_pair.first.data(), json_pair.first.size());
|
||||
auto array = json.array_at(offset, size);
|
||||
if (array.error()) {
|
||||
return false;
|
||||
}
|
||||
std::set<int> exist_elements_index;
|
||||
for (auto&& it : array) {
|
||||
auto json_array = it.get_array();
|
||||
if (json_array.error()) {
|
||||
continue;
|
||||
} else {
|
||||
auto json_pair = segment->GetJsonData(field_id, row_id);
|
||||
if (!json_pair.second) {
|
||||
return false;
|
||||
}
|
||||
for (int index = 0; index < elements.size(); ++index) {
|
||||
if (CompareTwoJsonArray(json_array, elements[index])) {
|
||||
exist_elements_index.insert(index);
|
||||
auto json = milvus::Json(json_pair.first.data(),
|
||||
json_pair.first.size());
|
||||
auto array = json.array_at(offset, size);
|
||||
if (array.error()) {
|
||||
return false;
|
||||
}
|
||||
std::set<int> exist_elements_index;
|
||||
for (auto&& it : array) {
|
||||
auto json_array = it.get_array();
|
||||
if (json_array.error()) {
|
||||
continue;
|
||||
}
|
||||
for (int index = 0; index < elements.size(); ++index) {
|
||||
if (CompareTwoJsonArray(json_array, elements[index])) {
|
||||
exist_elements_index.insert(index);
|
||||
}
|
||||
}
|
||||
if (exist_elements_index.size() == elements.size()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if (exist_elements_index.size() == elements.size()) {
|
||||
return true;
|
||||
}
|
||||
return exist_elements_index.size() == elements.size();
|
||||
}
|
||||
return exist_elements_index.size() == elements.size();
|
||||
};
|
||||
bool is_growing = segment_->type() == SegmentType::Growing;
|
||||
bool is_strong_consistency = consistency_level_ == 0;
|
||||
|
@ -1474,81 +1511,90 @@ PhyJsonContainsFilterExpr::ExecJsonContainsWithDiffTypeByKeyIndex() {
|
|||
auto field_id = expr_->column_.field_id_;
|
||||
auto* index = segment->GetJsonKeyIndex(field_id);
|
||||
Assert(index != nullptr);
|
||||
auto filter_func = [segment, &elements, &field_id](uint32_t row_id,
|
||||
auto filter_func = [segment, &elements, &field_id](bool valid,
|
||||
uint8_t type,
|
||||
uint32_t row_id,
|
||||
uint16_t offset,
|
||||
uint16_t size) {
|
||||
auto json_pair = segment->GetJsonData(field_id, row_id);
|
||||
if (!json_pair.second) {
|
||||
uint16_t size,
|
||||
uint32_t value) {
|
||||
if (valid) {
|
||||
return false;
|
||||
}
|
||||
auto json =
|
||||
milvus::Json(json_pair.first.data(), json_pair.first.size());
|
||||
auto array = json.array_at(offset, size);
|
||||
if (array.error()) {
|
||||
return false;
|
||||
}
|
||||
// Note: array can only be iterated once
|
||||
for (auto&& it : array) {
|
||||
for (auto const& element : elements) {
|
||||
switch (element.val_case()) {
|
||||
case proto::plan::GenericValue::kBoolVal: {
|
||||
auto val = it.template get<bool>();
|
||||
if (val.error()) {
|
||||
continue;
|
||||
} else {
|
||||
auto json_pair = segment->GetJsonData(field_id, row_id);
|
||||
if (!json_pair.second) {
|
||||
return false;
|
||||
}
|
||||
auto json = milvus::Json(json_pair.first.data(),
|
||||
json_pair.first.size());
|
||||
auto array = json.array_at(offset, size);
|
||||
if (array.error()) {
|
||||
return false;
|
||||
}
|
||||
// Note: array can only be iterated once
|
||||
for (auto&& it : array) {
|
||||
for (auto const& element : elements) {
|
||||
switch (element.val_case()) {
|
||||
case proto::plan::GenericValue::kBoolVal: {
|
||||
auto val = it.template get<bool>();
|
||||
if (val.error()) {
|
||||
continue;
|
||||
}
|
||||
if (val.value() == element.bool_val()) {
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (val.value() == element.bool_val()) {
|
||||
return true;
|
||||
case proto::plan::GenericValue::kInt64Val: {
|
||||
auto val = it.template get<int64_t>();
|
||||
if (val.error()) {
|
||||
continue;
|
||||
}
|
||||
if (val.value() == element.int64_val()) {
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case proto::plan::GenericValue::kFloatVal: {
|
||||
auto val = it.template get<double>();
|
||||
if (val.error()) {
|
||||
continue;
|
||||
}
|
||||
if (val.value() == element.float_val()) {
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case proto::plan::GenericValue::kStringVal: {
|
||||
auto val = it.template get<std::string_view>();
|
||||
if (val.error()) {
|
||||
continue;
|
||||
}
|
||||
if (val.value() == element.string_val()) {
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case proto::plan::GenericValue::kArrayVal: {
|
||||
auto val = it.get_array();
|
||||
if (val.error()) {
|
||||
continue;
|
||||
}
|
||||
if (CompareTwoJsonArray(val,
|
||||
element.array_val())) {
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
PanicInfo(
|
||||
DataTypeInvalid,
|
||||
fmt::format("unsupported data type {}",
|
||||
element.val_case()));
|
||||
}
|
||||
case proto::plan::GenericValue::kInt64Val: {
|
||||
auto val = it.template get<int64_t>();
|
||||
if (val.error()) {
|
||||
continue;
|
||||
}
|
||||
if (val.value() == element.int64_val()) {
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case proto::plan::GenericValue::kFloatVal: {
|
||||
auto val = it.template get<double>();
|
||||
if (val.error()) {
|
||||
continue;
|
||||
}
|
||||
if (val.value() == element.float_val()) {
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case proto::plan::GenericValue::kStringVal: {
|
||||
auto val = it.template get<std::string_view>();
|
||||
if (val.error()) {
|
||||
continue;
|
||||
}
|
||||
if (val.value() == element.string_val()) {
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case proto::plan::GenericValue::kArrayVal: {
|
||||
auto val = it.get_array();
|
||||
if (val.error()) {
|
||||
continue;
|
||||
}
|
||||
if (CompareTwoJsonArray(val, element.array_val())) {
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
PanicInfo(DataTypeInvalid,
|
||||
fmt::format("unsupported data type {}",
|
||||
element.val_case()));
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
};
|
||||
bool is_growing = segment_->type() == SegmentType::Growing;
|
||||
bool is_strong_consistency = consistency_level_ == 0;
|
||||
|
|
|
@ -541,20 +541,93 @@ PhyTermFilterExpr::ExecJsonInVariableByKeyIndex() {
|
|||
auto* index = segment->GetJsonKeyIndex(field_id);
|
||||
Assert(index != nullptr);
|
||||
|
||||
auto filter_func = [this, segment, &field_id](uint32_t row_id,
|
||||
auto filter_func = [this, segment, &field_id](bool valid,
|
||||
uint8_t type,
|
||||
uint32_t row_id,
|
||||
uint16_t offset,
|
||||
uint16_t size) {
|
||||
auto json_pair = segment->GetJsonData(field_id, row_id);
|
||||
if (!json_pair.second) {
|
||||
return false;
|
||||
uint16_t size,
|
||||
uint32_t value) {
|
||||
if (valid) {
|
||||
if constexpr (std::is_same_v<GetType, int64_t>) {
|
||||
if (type != uint8_t(milvus::index::JSONType::INT32) &&
|
||||
type != uint8_t(milvus::index::JSONType::INT64) &&
|
||||
type != uint8_t(milvus::index::JSONType::FLOAT) &&
|
||||
type != uint8_t(milvus::index::JSONType::DOUBLE)) {
|
||||
return false;
|
||||
}
|
||||
} else if constexpr (std::is_same_v<GetType,
|
||||
std::string_view>) {
|
||||
if (type != uint8_t(milvus::index::JSONType::STRING) &&
|
||||
type !=
|
||||
uint8_t(milvus::index::JSONType::STRING_ESCAPE)) {
|
||||
return false;
|
||||
}
|
||||
} else if constexpr (std::is_same_v<GetType, double>) {
|
||||
if (type != uint8_t(milvus::index::JSONType::INT32) &&
|
||||
type != uint8_t(milvus::index::JSONType::INT64) &&
|
||||
type != uint8_t(milvus::index::JSONType::FLOAT) &&
|
||||
type != uint8_t(milvus::index::JSONType::DOUBLE)) {
|
||||
return false;
|
||||
}
|
||||
} else if constexpr (std::is_same_v<GetType, bool>) {
|
||||
if (type != uint8_t(milvus::index::JSONType::BOOL)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if constexpr (std::is_same_v<GetType, int64_t>) {
|
||||
return this->arg_set_->In(value);
|
||||
} else if constexpr (std::is_same_v<GetType, double>) {
|
||||
float restoredValue = *reinterpret_cast<float*>(&value);
|
||||
return this->arg_set_->In(restoredValue);
|
||||
} else if constexpr (std::is_same_v<GetType, bool>) {
|
||||
bool restoredValue = *reinterpret_cast<bool*>(&value);
|
||||
return this->arg_set_->In(restoredValue);
|
||||
}
|
||||
} else {
|
||||
auto json_pair = segment->GetJsonData(field_id, row_id);
|
||||
if (!json_pair.second) {
|
||||
return false;
|
||||
}
|
||||
auto json = milvus::Json(json_pair.first.data(),
|
||||
json_pair.first.size());
|
||||
if (type == uint8_t(milvus::index::JSONType::STRING) ||
|
||||
type == uint8_t(milvus::index::JSONType::DOUBLE) ||
|
||||
type == uint8_t(milvus::index::JSONType::INT64)) {
|
||||
if (type == uint8_t(milvus::index::JSONType::STRING)) {
|
||||
if constexpr (std::is_same_v<GetType,
|
||||
std::string_view>) {
|
||||
auto val = json.at_string(offset, size);
|
||||
return this->arg_set_->In(ValueType(val));
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
} else if (type ==
|
||||
uint8_t(milvus::index::JSONType::DOUBLE)) {
|
||||
if constexpr (std::is_same_v<GetType, double>) {
|
||||
auto val = std::stod(
|
||||
std::string(json.at_string(offset, size)));
|
||||
return this->arg_set_->In(ValueType(val));
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
} else if (type ==
|
||||
uint8_t(milvus::index::JSONType::INT64)) {
|
||||
if constexpr (std::is_same_v<GetType, int64_t>) {
|
||||
auto val = std::stoll(
|
||||
std::string(json.at_string(offset, size)));
|
||||
return this->arg_set_->In(ValueType(val));
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
auto val = json.at<GetType>(offset, size);
|
||||
if (val.error()) {
|
||||
return false;
|
||||
}
|
||||
return this->arg_set_->In(ValueType(val.value()));
|
||||
}
|
||||
}
|
||||
auto json =
|
||||
milvus::Json(json_pair.first.data(), json_pair.first.size());
|
||||
auto val = json.at<GetType>(offset, size);
|
||||
if (val.error()) {
|
||||
return false;
|
||||
}
|
||||
return this->arg_set_->In(ValueType(val.value()));
|
||||
};
|
||||
bool is_growing = segment_->type() == SegmentType::Growing;
|
||||
bool is_strong_consistency = consistency_level_ == 0;
|
||||
|
|
|
@ -24,7 +24,6 @@
|
|||
|
||||
namespace milvus {
|
||||
namespace exec {
|
||||
|
||||
template <typename T>
|
||||
bool
|
||||
PhyUnaryRangeFilterExpr::CanUseIndexForArray() {
|
||||
|
@ -878,24 +877,92 @@ PhyUnaryRangeFilterExpr::ExecRangeVisitorImplJsonForIndex() {
|
|||
return (cmp); \
|
||||
} while (false)
|
||||
|
||||
#define UnaryRangeJSONIndexCompareWithArrayIndex(cmp) \
|
||||
do { \
|
||||
auto array = json.array_at(offset, size); \
|
||||
if (array.error()) { \
|
||||
return false; \
|
||||
} \
|
||||
auto value = array.at_pointer(arrayIndex); \
|
||||
if (value.error()) { \
|
||||
return false; \
|
||||
} \
|
||||
auto x = value.get<GetType>(); \
|
||||
if (x.error()) { \
|
||||
if constexpr (std::is_same_v<GetType, int64_t>) { \
|
||||
auto x = value.get<double>(); \
|
||||
return !x.error() && (cmp); \
|
||||
} \
|
||||
} \
|
||||
return (cmp); \
|
||||
#define UnaryJSONTypeCompare(cmp) \
|
||||
do { \
|
||||
if (type == uint8_t(milvus::index::JSONType::STRING)) { \
|
||||
if constexpr (std::is_same_v<GetType, std::string_view>) { \
|
||||
auto x = json.at_string(offset, size); \
|
||||
return (cmp); \
|
||||
} else { \
|
||||
return false; \
|
||||
} \
|
||||
} else if (type == uint8_t(milvus::index::JSONType::DOUBLE)) { \
|
||||
if constexpr (std::is_same_v<GetType, double>) { \
|
||||
auto x = std::stod(std::string(json.at_string(offset, size))); \
|
||||
return (cmp); \
|
||||
} else { \
|
||||
return false; \
|
||||
} \
|
||||
} else if (type == uint8_t(milvus::index::JSONType::INT64)) { \
|
||||
if constexpr (std::is_same_v<GetType, int64_t>) { \
|
||||
auto x = \
|
||||
std::stoll(std::string(json.at_string(offset, size))); \
|
||||
return (cmp); \
|
||||
} else { \
|
||||
return false; \
|
||||
} \
|
||||
} \
|
||||
} while (false)
|
||||
|
||||
#define UnaryJSONTypeCompareWithValue(cmp) \
|
||||
do { \
|
||||
if constexpr (std::is_same_v<GetType, int64_t>) { \
|
||||
if (type == uint8_t(milvus::index::JSONType::FLOAT)) { \
|
||||
float x = *reinterpret_cast<float*>(&value); \
|
||||
return (cmp); \
|
||||
} else { \
|
||||
int64_t x = value; \
|
||||
return (cmp); \
|
||||
} \
|
||||
} else if constexpr (std::is_same_v<GetType, double>) { \
|
||||
if (type == uint8_t(milvus::index::JSONType::FLOAT)) { \
|
||||
float x = *reinterpret_cast<float*>(&value); \
|
||||
return (cmp); \
|
||||
} else { \
|
||||
int64_t x = value; \
|
||||
return (cmp); \
|
||||
} \
|
||||
} else if constexpr (std::is_same_v<GetType, bool>) { \
|
||||
bool x = *reinterpret_cast<bool*>(&value); \
|
||||
return (cmp); \
|
||||
} \
|
||||
} while (false)
|
||||
|
||||
#define UnaryRangeJSONIndexCompareWithArrayIndex(cmp) \
|
||||
do { \
|
||||
if (type != uint8_t(milvus::index::JSONType::UNKNOWN)) { \
|
||||
return false; \
|
||||
} \
|
||||
auto array = json.array_at(offset, size); \
|
||||
if (array.error()) { \
|
||||
return false; \
|
||||
} \
|
||||
auto value = array.at_pointer(arrayIndex); \
|
||||
if (value.error()) { \
|
||||
return false; \
|
||||
} \
|
||||
if constexpr (std::is_same_v<GetType, int64_t> || \
|
||||
std::is_same_v<GetType, double>) { \
|
||||
if (!value.is_number()) { \
|
||||
return false; \
|
||||
} \
|
||||
} else if constexpr (std::is_same_v<GetType, std::string_view>) { \
|
||||
if (!value.is_string()) { \
|
||||
return false; \
|
||||
} \
|
||||
} else if constexpr (std::is_same_v<GetType, bool>) { \
|
||||
if (!value.is_bool()) { \
|
||||
return false; \
|
||||
} \
|
||||
} \
|
||||
auto x = value.get<GetType>(); \
|
||||
if (x.error()) { \
|
||||
if constexpr (std::is_same_v<GetType, int64_t>) { \
|
||||
auto x = value.get<double>(); \
|
||||
return !x.error() && (cmp); \
|
||||
} \
|
||||
} \
|
||||
return (cmp); \
|
||||
} while (false)
|
||||
|
||||
#define UnaryRangeJSONIndexCompareNotEqual(cmp) \
|
||||
|
@ -910,28 +977,43 @@ PhyUnaryRangeFilterExpr::ExecRangeVisitorImplJsonForIndex() {
|
|||
} \
|
||||
return (cmp); \
|
||||
} while (false)
|
||||
#define UnaryRangeJSONIndexCompareNotEqualWithArrayIndex(cmp) \
|
||||
do { \
|
||||
auto array = json.array_at(offset, size); \
|
||||
if (array.error()) { \
|
||||
return false; \
|
||||
} \
|
||||
auto value = array.at_pointer(arrayIndex); \
|
||||
if (value.error()) { \
|
||||
return false; \
|
||||
} \
|
||||
auto x = value.get<GetType>(); \
|
||||
if (x.error()) { \
|
||||
if constexpr (std::is_same_v<GetType, int64_t>) { \
|
||||
auto x = value.get<double>(); \
|
||||
return x.error() || (cmp); \
|
||||
} \
|
||||
} \
|
||||
return (cmp); \
|
||||
#define UnaryRangeJSONIndexCompareNotEqualWithArrayIndex(cmp) \
|
||||
do { \
|
||||
auto array = json.array_at(offset, size); \
|
||||
if (array.error()) { \
|
||||
return false; \
|
||||
} \
|
||||
auto value = array.at_pointer(arrayIndex); \
|
||||
if (value.error()) { \
|
||||
return false; \
|
||||
} \
|
||||
if constexpr (std::is_same_v<GetType, int64_t> || \
|
||||
std::is_same_v<GetType, double>) { \
|
||||
if (!value.is_number()) { \
|
||||
return false; \
|
||||
} \
|
||||
} else if constexpr (std::is_same_v<GetType, std::string_view>) { \
|
||||
if (!value.is_string()) { \
|
||||
return false; \
|
||||
} \
|
||||
} else if constexpr (std::is_same_v<GetType, bool>) { \
|
||||
if (!value.is_bool()) { \
|
||||
return false; \
|
||||
} \
|
||||
} \
|
||||
auto x = value.get<GetType>(); \
|
||||
if (x.error()) { \
|
||||
if constexpr (std::is_same_v<GetType, int64_t>) { \
|
||||
auto x = value.get<double>(); \
|
||||
return x.error() || (cmp); \
|
||||
} \
|
||||
} \
|
||||
return (cmp); \
|
||||
} while (false)
|
||||
|
||||
ExprValueType val = GetValueFromProto<ExprValueType>(expr_->val_);
|
||||
auto op_type = expr_->op_type_;
|
||||
|
||||
if (cached_index_chunk_id_ != 0) {
|
||||
const segcore::SegmentInternalInterface* segment = nullptr;
|
||||
if (segment_->type() == SegmentType::Growing) {
|
||||
|
@ -949,127 +1031,318 @@ PhyUnaryRangeFilterExpr::ExecRangeVisitorImplJsonForIndex() {
|
|||
op_type,
|
||||
val,
|
||||
arrayIndex,
|
||||
pointer](uint32_t row_id,
|
||||
pointer](bool valid,
|
||||
uint8_t type,
|
||||
uint32_t row_id,
|
||||
uint16_t offset,
|
||||
uint16_t size) {
|
||||
auto json_pair = segment->GetJsonData(field_id, row_id);
|
||||
if (!json_pair.second) {
|
||||
return false;
|
||||
}
|
||||
auto json =
|
||||
milvus::Json(json_pair.first.data(), json_pair.first.size());
|
||||
switch (op_type) {
|
||||
case proto::plan::GreaterThan:
|
||||
if constexpr (std::is_same_v<GetType, proto::plan::Array>) {
|
||||
return false;
|
||||
} else {
|
||||
if (!arrayIndex.empty()) {
|
||||
UnaryRangeJSONIndexCompareWithArrayIndex(
|
||||
ExprValueType(x.value()) > val);
|
||||
} else {
|
||||
UnaryRangeJSONIndexCompare(
|
||||
ExprValueType(x.value()) > val);
|
||||
}
|
||||
}
|
||||
case proto::plan::GreaterEqual:
|
||||
if constexpr (std::is_same_v<GetType, proto::plan::Array>) {
|
||||
return false;
|
||||
} else {
|
||||
if (!arrayIndex.empty()) {
|
||||
UnaryRangeJSONIndexCompareWithArrayIndex(
|
||||
ExprValueType(x.value()) >= val);
|
||||
} else {
|
||||
UnaryRangeJSONIndexCompare(
|
||||
ExprValueType(x.value()) >= val);
|
||||
}
|
||||
}
|
||||
case proto::plan::LessThan:
|
||||
if constexpr (std::is_same_v<GetType, proto::plan::Array>) {
|
||||
return false;
|
||||
} else {
|
||||
if (!arrayIndex.empty()) {
|
||||
UnaryRangeJSONIndexCompareWithArrayIndex(
|
||||
ExprValueType(x.value()) < val);
|
||||
} else {
|
||||
UnaryRangeJSONIndexCompare(
|
||||
ExprValueType(x.value()) < val);
|
||||
}
|
||||
}
|
||||
case proto::plan::LessEqual:
|
||||
if constexpr (std::is_same_v<GetType, proto::plan::Array>) {
|
||||
return false;
|
||||
} else {
|
||||
if (!arrayIndex.empty()) {
|
||||
UnaryRangeJSONIndexCompareWithArrayIndex(
|
||||
ExprValueType(x.value()) <= val);
|
||||
} else {
|
||||
UnaryRangeJSONIndexCompare(
|
||||
ExprValueType(x.value()) <= val);
|
||||
}
|
||||
}
|
||||
|
||||
case proto::plan::Equal:
|
||||
if constexpr (std::is_same_v<GetType, proto::plan::Array>) {
|
||||
auto array = json.array_at(offset, size);
|
||||
if (array.error()) {
|
||||
return false;
|
||||
}
|
||||
return CompareTwoJsonArray(array.value(), val);
|
||||
} else {
|
||||
if (!arrayIndex.empty()) {
|
||||
UnaryRangeJSONIndexCompareWithArrayIndex(
|
||||
ExprValueType(x.value()) == val);
|
||||
} else {
|
||||
UnaryRangeJSONIndexCompare(
|
||||
ExprValueType(x.value()) == val);
|
||||
}
|
||||
}
|
||||
case proto::plan::NotEqual:
|
||||
if constexpr (std::is_same_v<GetType, proto::plan::Array>) {
|
||||
auto array = json.array_at(offset, size);
|
||||
if (array.error()) {
|
||||
return false;
|
||||
}
|
||||
return !CompareTwoJsonArray(array.value(), val);
|
||||
} else {
|
||||
if (!arrayIndex.empty()) {
|
||||
UnaryRangeJSONIndexCompareNotEqualWithArrayIndex(
|
||||
ExprValueType(x.value()) != val);
|
||||
} else {
|
||||
UnaryRangeJSONIndexCompareNotEqual(
|
||||
ExprValueType(x.value()) != val);
|
||||
}
|
||||
}
|
||||
case proto::plan::PrefixMatch:
|
||||
if constexpr (std::is_same_v<GetType, proto::plan::Array>) {
|
||||
return false;
|
||||
} else {
|
||||
if (!arrayIndex.empty()) {
|
||||
UnaryRangeJSONIndexCompareWithArrayIndex(
|
||||
milvus::query::Match(
|
||||
ExprValueType(x.value()), val, op_type));
|
||||
} else {
|
||||
UnaryRangeJSONIndexCompare(milvus::query::Match(
|
||||
ExprValueType(x.value()), val, op_type));
|
||||
}
|
||||
}
|
||||
case proto::plan::Match:
|
||||
if constexpr (std::is_same_v<GetType, proto::plan::Array>) {
|
||||
return false;
|
||||
} else {
|
||||
PatternMatchTranslator translator;
|
||||
auto regex_pattern = translator(val);
|
||||
RegexMatcher matcher(regex_pattern);
|
||||
if (!arrayIndex.empty()) {
|
||||
UnaryRangeJSONIndexCompareWithArrayIndex(
|
||||
matcher(ExprValueType(x.value())));
|
||||
} else {
|
||||
UnaryRangeJSONIndexCompare(
|
||||
matcher(ExprValueType(x.value())));
|
||||
}
|
||||
}
|
||||
default:
|
||||
uint16_t size,
|
||||
uint32_t value) {
|
||||
if (valid) {
|
||||
if (type == uint8_t(milvus::index::JSONType::UNKNOWN) ||
|
||||
!arrayIndex.empty()) {
|
||||
return false;
|
||||
}
|
||||
if constexpr (std::is_same_v<GetType, int64_t>) {
|
||||
if (type != uint8_t(milvus::index::JSONType::INT32) &&
|
||||
type != uint8_t(milvus::index::JSONType::INT64) &&
|
||||
type != uint8_t(milvus::index::JSONType::FLOAT) &&
|
||||
type != uint8_t(milvus::index::JSONType::DOUBLE)) {
|
||||
return false;
|
||||
}
|
||||
} else if constexpr (std::is_same_v<GetType,
|
||||
std::string_view>) {
|
||||
if (type != uint8_t(milvus::index::JSONType::STRING) &&
|
||||
type !=
|
||||
uint8_t(milvus::index::JSONType::STRING_ESCAPE)) {
|
||||
return false;
|
||||
}
|
||||
} else if constexpr (std::is_same_v<GetType, double>) {
|
||||
if (type != uint8_t(milvus::index::JSONType::INT32) &&
|
||||
type != uint8_t(milvus::index::JSONType::INT64) &&
|
||||
type != uint8_t(milvus::index::JSONType::FLOAT) &&
|
||||
type != uint8_t(milvus::index::JSONType::DOUBLE)) {
|
||||
return false;
|
||||
}
|
||||
} else if constexpr (std::is_same_v<GetType, bool>) {
|
||||
if (type != uint8_t(milvus::index::JSONType::BOOL)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
switch (op_type) {
|
||||
case proto::plan::GreaterThan:
|
||||
if (type == uint8_t(milvus::index::JSONType::FLOAT)) {
|
||||
UnaryJSONTypeCompareWithValue(
|
||||
x > static_cast<float>(val));
|
||||
} else {
|
||||
UnaryJSONTypeCompareWithValue(x > val);
|
||||
}
|
||||
|
||||
case proto::plan::GreaterEqual:
|
||||
if (type == uint8_t(milvus::index::JSONType::FLOAT)) {
|
||||
UnaryJSONTypeCompareWithValue(
|
||||
x >= static_cast<float>(val));
|
||||
} else {
|
||||
UnaryJSONTypeCompareWithValue(x >= val);
|
||||
}
|
||||
case proto::plan::LessThan:
|
||||
if (type == uint8_t(milvus::index::JSONType::FLOAT)) {
|
||||
UnaryJSONTypeCompareWithValue(
|
||||
x < static_cast<float>(val));
|
||||
} else {
|
||||
UnaryJSONTypeCompareWithValue(x < val);
|
||||
}
|
||||
case proto::plan::LessEqual:
|
||||
if (type == uint8_t(milvus::index::JSONType::FLOAT)) {
|
||||
UnaryJSONTypeCompareWithValue(
|
||||
x <= static_cast<float>(val));
|
||||
} else {
|
||||
UnaryJSONTypeCompareWithValue(x <= val);
|
||||
}
|
||||
case proto::plan::Equal:
|
||||
if (type == uint8_t(milvus::index::JSONType::FLOAT)) {
|
||||
UnaryJSONTypeCompareWithValue(
|
||||
x == static_cast<float>(val));
|
||||
} else {
|
||||
UnaryJSONTypeCompareWithValue(x == val);
|
||||
}
|
||||
case proto::plan::NotEqual:
|
||||
if (type == uint8_t(milvus::index::JSONType::FLOAT)) {
|
||||
UnaryJSONTypeCompareWithValue(
|
||||
x != static_cast<float>(val));
|
||||
} else {
|
||||
UnaryJSONTypeCompareWithValue(x != val);
|
||||
}
|
||||
case proto::plan::PrefixMatch:
|
||||
case proto::plan::Match:
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
auto json_pair = segment->GetJsonData(field_id, row_id);
|
||||
if (!json_pair.second) {
|
||||
return false;
|
||||
}
|
||||
auto json = milvus::Json(json_pair.first.data(),
|
||||
json_pair.first.size());
|
||||
switch (op_type) {
|
||||
case proto::plan::GreaterThan:
|
||||
if constexpr (std::is_same_v<GetType,
|
||||
proto::plan::Array>) {
|
||||
return false;
|
||||
} else {
|
||||
if (!arrayIndex.empty()) {
|
||||
UnaryRangeJSONIndexCompareWithArrayIndex(
|
||||
ExprValueType(x.value()) > val);
|
||||
} else {
|
||||
if (type ==
|
||||
uint8_t(
|
||||
milvus::index::JSONType::STRING) ||
|
||||
type ==
|
||||
uint8_t(
|
||||
milvus::index::JSONType::DOUBLE) ||
|
||||
type ==
|
||||
uint8_t(
|
||||
milvus::index::JSONType::INT64)) {
|
||||
UnaryJSONTypeCompare(x > val);
|
||||
} else {
|
||||
UnaryRangeJSONIndexCompare(
|
||||
ExprValueType(x.value()) > val);
|
||||
}
|
||||
}
|
||||
}
|
||||
case proto::plan::GreaterEqual:
|
||||
if constexpr (std::is_same_v<GetType,
|
||||
proto::plan::Array>) {
|
||||
return false;
|
||||
} else {
|
||||
if (!arrayIndex.empty()) {
|
||||
UnaryRangeJSONIndexCompareWithArrayIndex(
|
||||
ExprValueType(x.value()) >= val);
|
||||
} else {
|
||||
if (type ==
|
||||
uint8_t(
|
||||
milvus::index::JSONType::STRING) ||
|
||||
type ==
|
||||
uint8_t(
|
||||
milvus::index::JSONType::DOUBLE) ||
|
||||
type ==
|
||||
uint8_t(
|
||||
milvus::index::JSONType::INT64)) {
|
||||
UnaryJSONTypeCompare(x >= val);
|
||||
} else {
|
||||
UnaryRangeJSONIndexCompare(
|
||||
ExprValueType(x.value()) >= val);
|
||||
}
|
||||
}
|
||||
}
|
||||
case proto::plan::LessThan:
|
||||
if constexpr (std::is_same_v<GetType,
|
||||
proto::plan::Array>) {
|
||||
return false;
|
||||
} else {
|
||||
if (!arrayIndex.empty()) {
|
||||
UnaryRangeJSONIndexCompareWithArrayIndex(
|
||||
ExprValueType(x.value()) < val);
|
||||
} else {
|
||||
if (type ==
|
||||
uint8_t(
|
||||
milvus::index::JSONType::STRING) ||
|
||||
type ==
|
||||
uint8_t(
|
||||
milvus::index::JSONType::DOUBLE) ||
|
||||
type ==
|
||||
uint8_t(
|
||||
milvus::index::JSONType::INT64)) {
|
||||
UnaryJSONTypeCompare(x < val);
|
||||
} else {
|
||||
UnaryRangeJSONIndexCompare(
|
||||
ExprValueType(x.value()) < val);
|
||||
}
|
||||
}
|
||||
}
|
||||
case proto::plan::LessEqual:
|
||||
if constexpr (std::is_same_v<GetType,
|
||||
proto::plan::Array>) {
|
||||
return false;
|
||||
} else {
|
||||
if (!arrayIndex.empty()) {
|
||||
UnaryRangeJSONIndexCompareWithArrayIndex(
|
||||
ExprValueType(x.value()) <= val);
|
||||
} else {
|
||||
if (type ==
|
||||
uint8_t(
|
||||
milvus::index::JSONType::STRING) ||
|
||||
type ==
|
||||
uint8_t(
|
||||
milvus::index::JSONType::DOUBLE) ||
|
||||
type ==
|
||||
uint8_t(
|
||||
milvus::index::JSONType::INT64)) {
|
||||
UnaryJSONTypeCompare(x <= val);
|
||||
} else {
|
||||
UnaryRangeJSONIndexCompare(
|
||||
ExprValueType(x.value()) <= val);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
case proto::plan::Equal:
|
||||
if constexpr (std::is_same_v<GetType,
|
||||
proto::plan::Array>) {
|
||||
if (type !=
|
||||
uint8_t(milvus::index::JSONType::UNKNOWN)) {
|
||||
return false;
|
||||
}
|
||||
auto array = json.array_at(offset, size);
|
||||
if (array.error()) {
|
||||
return false;
|
||||
}
|
||||
return CompareTwoJsonArray(array.value(), val);
|
||||
} else {
|
||||
if (!arrayIndex.empty()) {
|
||||
UnaryRangeJSONIndexCompareWithArrayIndex(
|
||||
ExprValueType(x.value()) == val);
|
||||
} else {
|
||||
if (type ==
|
||||
uint8_t(
|
||||
milvus::index::JSONType::STRING) ||
|
||||
type ==
|
||||
uint8_t(
|
||||
milvus::index::JSONType::DOUBLE) ||
|
||||
type ==
|
||||
uint8_t(
|
||||
milvus::index::JSONType::INT64)) {
|
||||
UnaryJSONTypeCompare(x == val);
|
||||
} else {
|
||||
UnaryRangeJSONIndexCompare(
|
||||
ExprValueType(x.value()) == val);
|
||||
}
|
||||
}
|
||||
}
|
||||
case proto::plan::NotEqual:
|
||||
if constexpr (std::is_same_v<GetType,
|
||||
proto::plan::Array>) {
|
||||
if (type !=
|
||||
uint8_t(milvus::index::JSONType::UNKNOWN)) {
|
||||
return false;
|
||||
}
|
||||
auto array = json.array_at(offset, size);
|
||||
if (array.error()) {
|
||||
return false;
|
||||
}
|
||||
return !CompareTwoJsonArray(array.value(), val);
|
||||
} else {
|
||||
if (!arrayIndex.empty()) {
|
||||
UnaryRangeJSONIndexCompareNotEqualWithArrayIndex(
|
||||
ExprValueType(x.value()) != val);
|
||||
} else {
|
||||
if (type ==
|
||||
uint8_t(
|
||||
milvus::index::JSONType::STRING) ||
|
||||
type ==
|
||||
uint8_t(
|
||||
milvus::index::JSONType::DOUBLE) ||
|
||||
type ==
|
||||
uint8_t(
|
||||
milvus::index::JSONType::INT64)) {
|
||||
UnaryJSONTypeCompare(x != val);
|
||||
} else {
|
||||
UnaryRangeJSONIndexCompareNotEqual(
|
||||
ExprValueType(x.value()) != val);
|
||||
}
|
||||
}
|
||||
}
|
||||
case proto::plan::PrefixMatch:
|
||||
if constexpr (std::is_same_v<GetType,
|
||||
proto::plan::Array>) {
|
||||
return false;
|
||||
} else {
|
||||
if (!arrayIndex.empty()) {
|
||||
UnaryRangeJSONIndexCompareWithArrayIndex(
|
||||
milvus::query::Match(
|
||||
ExprValueType(x.value()),
|
||||
val,
|
||||
op_type));
|
||||
} else {
|
||||
if (type ==
|
||||
uint8_t(
|
||||
milvus::index::JSONType::STRING) ||
|
||||
type ==
|
||||
uint8_t(
|
||||
milvus::index::JSONType::DOUBLE) ||
|
||||
type ==
|
||||
uint8_t(
|
||||
milvus::index::JSONType::INT64)) {
|
||||
UnaryJSONTypeCompare(
|
||||
milvus::query::Match(x, val, op_type));
|
||||
} else {
|
||||
UnaryRangeJSONIndexCompare(
|
||||
milvus::query::Match(
|
||||
ExprValueType(x.value()),
|
||||
val,
|
||||
op_type));
|
||||
}
|
||||
}
|
||||
}
|
||||
case proto::plan::Match:
|
||||
if constexpr (std::is_same_v<GetType,
|
||||
proto::plan::Array>) {
|
||||
return false;
|
||||
} else {
|
||||
PatternMatchTranslator translator;
|
||||
auto regex_pattern = translator(val);
|
||||
RegexMatcher matcher(regex_pattern);
|
||||
if (!arrayIndex.empty()) {
|
||||
UnaryRangeJSONIndexCompareWithArrayIndex(
|
||||
matcher(ExprValueType(x.value())));
|
||||
} else {
|
||||
UnaryRangeJSONIndexCompare(
|
||||
matcher(ExprValueType(x.value())));
|
||||
}
|
||||
}
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
};
|
||||
bool is_growing = segment_->type() == SegmentType::Growing;
|
||||
|
|
|
@ -21,37 +21,70 @@ constexpr const char* TMP_JSON_INVERTED_LOG_PREFIX =
|
|||
"/tmp/milvus/json-key-inverted-index-log/";
|
||||
|
||||
void
|
||||
JsonKeyInvertedIndex::AddInvertedRecord(const std::vector<std::string>& paths,
|
||||
uint32_t row_id,
|
||||
uint16_t offset,
|
||||
uint16_t length) {
|
||||
JsonKeyInvertedIndex::AddJSONEncodeValue(
|
||||
const std::vector<std::string>& paths,
|
||||
uint8_t flag,
|
||||
uint8_t type,
|
||||
uint32_t row_id,
|
||||
uint16_t offset,
|
||||
uint16_t length,
|
||||
uint32_t value,
|
||||
std::map<std::string, std::vector<int64_t>>& mp) {
|
||||
std::string key = "";
|
||||
if (!paths.empty()) {
|
||||
key = std::string("/") + Join(paths, "/");
|
||||
}
|
||||
LOG_DEBUG(
|
||||
"insert inverted key: {}, row_id: {}, offset: "
|
||||
"{}, length:{}",
|
||||
"insert inverted key: {}, flag: {}, type: {}, row_id: {}, offset: "
|
||||
"{}, length:{}, value:{}",
|
||||
key,
|
||||
flag,
|
||||
type,
|
||||
row_id,
|
||||
offset,
|
||||
length);
|
||||
int64_t combine_id = EncodeOffset(row_id, offset, length);
|
||||
wrapper_->add_multi_data<std::string>(&key, 1, combine_id);
|
||||
length,
|
||||
value);
|
||||
int64_t combine_id = 0;
|
||||
if (json_key_data_format_ == 0) {
|
||||
if (flag) {
|
||||
combine_id = EncodeValue(flag, type, row_id, value);
|
||||
} else {
|
||||
combine_id = EncodeOffset(flag, type, row_id, offset, length);
|
||||
}
|
||||
}
|
||||
mp[key].push_back(combine_id);
|
||||
}
|
||||
|
||||
void
|
||||
JsonKeyInvertedIndex::TravelJson(const char* json,
|
||||
jsmntok* tokens,
|
||||
int& index,
|
||||
std::vector<std::string>& path,
|
||||
int32_t offset) {
|
||||
JsonKeyInvertedIndex::AddInvertedRecord(
|
||||
std::map<std::string, std::vector<int64_t>>& mp) {
|
||||
for (auto& iter : mp) {
|
||||
for (auto value : iter.second) {
|
||||
wrapper_->add_multi_data<std::string>(&iter.first, 1, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
JsonKeyInvertedIndex::TravelJson(
|
||||
const char* json,
|
||||
jsmntok* tokens,
|
||||
int& index,
|
||||
std::vector<std::string>& path,
|
||||
int32_t offset,
|
||||
std::map<std::string, std::vector<int64_t>>& mp) {
|
||||
jsmntok current = tokens[0];
|
||||
Assert(current.type != JSMN_UNDEFINED);
|
||||
if (current.type == JSMN_OBJECT) {
|
||||
if (!path.empty()) {
|
||||
AddInvertedRecord(
|
||||
path, offset, current.start, current.end - current.start);
|
||||
AddJSONEncodeValue(path,
|
||||
0,
|
||||
0,
|
||||
offset,
|
||||
current.start,
|
||||
current.end - current.start,
|
||||
0,
|
||||
mp);
|
||||
}
|
||||
int j = 1;
|
||||
for (int i = 0; i < current.size; i++) {
|
||||
|
@ -61,18 +94,74 @@ JsonKeyInvertedIndex::TravelJson(const char* json,
|
|||
path.push_back(key);
|
||||
j++;
|
||||
int consumed = 0;
|
||||
TravelJson(json, tokens + j, consumed, path, offset);
|
||||
TravelJson(json, tokens + j, consumed, path, offset, mp);
|
||||
path.pop_back();
|
||||
j += consumed;
|
||||
}
|
||||
index = j;
|
||||
} else if (current.type == JSMN_PRIMITIVE) {
|
||||
AddInvertedRecord(
|
||||
path, offset, current.start, current.end - current.start);
|
||||
std::string value(json + current.start, current.end - current.start);
|
||||
auto type = getType(value);
|
||||
|
||||
if (type == JSONType::INT32) {
|
||||
AddJSONEncodeValue(path,
|
||||
1,
|
||||
static_cast<uint8_t>(JSONType::INT32),
|
||||
offset,
|
||||
current.start,
|
||||
current.end - current.start,
|
||||
stoi(value),
|
||||
mp);
|
||||
} else if (type == JSONType::INT64) {
|
||||
AddJSONEncodeValue(path,
|
||||
0,
|
||||
static_cast<uint8_t>(JSONType::INT64),
|
||||
offset,
|
||||
current.start,
|
||||
current.end - current.start,
|
||||
0,
|
||||
mp);
|
||||
} else if (type == JSONType::FLOAT) {
|
||||
auto fvalue = stof(value);
|
||||
uint32_t valueBits = *reinterpret_cast<uint32_t*>(&fvalue);
|
||||
AddJSONEncodeValue(path,
|
||||
1,
|
||||
static_cast<uint8_t>(JSONType::FLOAT),
|
||||
offset,
|
||||
current.start,
|
||||
current.end - current.start,
|
||||
valueBits,
|
||||
mp);
|
||||
} else if (type == JSONType::DOUBLE) {
|
||||
AddJSONEncodeValue(path,
|
||||
0,
|
||||
static_cast<uint8_t>(JSONType::DOUBLE),
|
||||
offset,
|
||||
current.start,
|
||||
current.end - current.start,
|
||||
0,
|
||||
mp);
|
||||
} else if (type == JSONType::BOOL) {
|
||||
AddJSONEncodeValue(path,
|
||||
1,
|
||||
static_cast<uint8_t>(JSONType::BOOL),
|
||||
offset,
|
||||
current.start,
|
||||
current.end - current.start,
|
||||
value == "true" ? 1 : 0,
|
||||
mp);
|
||||
}
|
||||
|
||||
index++;
|
||||
} else if (current.type == JSMN_ARRAY) {
|
||||
AddInvertedRecord(
|
||||
path, offset, current.start, current.end - current.start);
|
||||
AddJSONEncodeValue(path,
|
||||
0,
|
||||
static_cast<uint8_t>(JSONType::UNKNOWN),
|
||||
offset,
|
||||
current.start,
|
||||
current.end - current.start,
|
||||
0,
|
||||
mp);
|
||||
// skip array parse
|
||||
int count = current.size;
|
||||
int j = 1;
|
||||
|
@ -86,14 +175,34 @@ JsonKeyInvertedIndex::TravelJson(const char* json,
|
|||
index = j;
|
||||
} else if (current.type == JSMN_STRING) {
|
||||
Assert(current.size == 0);
|
||||
AddInvertedRecord(
|
||||
path, offset, current.start - 1, current.end - current.start + 2);
|
||||
std::string value(json + current.start, current.end - current.start);
|
||||
if (has_escape_sequence(value)) {
|
||||
AddJSONEncodeValue(path,
|
||||
0,
|
||||
static_cast<uint8_t>(JSONType::STRING_ESCAPE),
|
||||
offset,
|
||||
current.start - 1,
|
||||
current.end - current.start + 2,
|
||||
0,
|
||||
mp);
|
||||
} else {
|
||||
AddJSONEncodeValue(path,
|
||||
0,
|
||||
static_cast<uint8_t>(JSONType::STRING),
|
||||
offset,
|
||||
current.start,
|
||||
current.end - current.start,
|
||||
0,
|
||||
mp);
|
||||
}
|
||||
index++;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
JsonKeyInvertedIndex::AddJson(const char* json, int64_t offset) {
|
||||
JsonKeyInvertedIndex::AddJson(const char* json,
|
||||
int64_t offset,
|
||||
std::map<std::string, std::vector<int64_t>>& mp) {
|
||||
jsmn_parser parser;
|
||||
jsmntok_t* tokens = (jsmntok_t*)malloc(16 * sizeof(jsmntok_t));
|
||||
if (!tokens) {
|
||||
|
@ -131,38 +240,45 @@ JsonKeyInvertedIndex::AddJson(const char* json, int64_t offset) {
|
|||
|
||||
int index = 0;
|
||||
std::vector<std::string> paths;
|
||||
TravelJson(json, tokens, index, paths, offset);
|
||||
TravelJson(json, tokens, index, paths, offset, mp);
|
||||
free(tokens);
|
||||
}
|
||||
|
||||
JsonKeyInvertedIndex::JsonKeyInvertedIndex(
|
||||
const storage::FileManagerContext& ctx, bool is_load)
|
||||
const storage::FileManagerContext& ctx,
|
||||
bool is_load,
|
||||
int64_t json_key_data_format,
|
||||
int64_t json_stats_tantivy_memory_budget)
|
||||
: commit_interval_in_ms_(std::numeric_limits<int64_t>::max()),
|
||||
last_commit_time_(stdclock::now()) {
|
||||
LOG_INFO(
|
||||
"JsonKeyInvertedIndex json_stats_tantivy_memory_budget:{}, "
|
||||
"json_key_data_format:{}",
|
||||
json_stats_tantivy_memory_budget,
|
||||
json_key_data_format);
|
||||
schema_ = ctx.fieldDataMeta.field_schema;
|
||||
field_id_ = ctx.fieldDataMeta.field_id;
|
||||
mem_file_manager_ = std::make_shared<MemFileManager>(ctx);
|
||||
disk_file_manager_ = std::make_shared<DiskFileManager>(ctx);
|
||||
|
||||
json_key_data_format_ = json_key_data_format;
|
||||
if (is_load) {
|
||||
auto prefix = disk_file_manager_->GetLocalJsonKeyIndexPrefix();
|
||||
path_ = prefix;
|
||||
} else {
|
||||
auto prefix = disk_file_manager_->GetJsonKeyIndexIdentifier();
|
||||
path_ = std::string(TMP_JSON_INVERTED_LOG_PREFIX) + prefix;
|
||||
|
||||
boost::filesystem::create_directories(path_);
|
||||
std::string field_name =
|
||||
std::to_string(disk_file_manager_->GetFieldDataMeta().field_id);
|
||||
d_type_ = TantivyDataType::Keyword;
|
||||
wrapper_ =
|
||||
std::make_shared<TantivyIndexWrapper>(field_name.c_str(),
|
||||
d_type_,
|
||||
path_.c_str(),
|
||||
false,
|
||||
false,
|
||||
1,
|
||||
JSON_INDEX_MEMORY_BUDGET);
|
||||
wrapper_ = std::make_shared<TantivyIndexWrapper>(
|
||||
field_name.c_str(),
|
||||
d_type_,
|
||||
path_.c_str(),
|
||||
false,
|
||||
false,
|
||||
1,
|
||||
json_stats_tantivy_memory_budget);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -240,7 +356,6 @@ JsonKeyInvertedIndex::Load(milvus::tracer::TraceContext ctx,
|
|||
GetValueFromConfig<std::vector<std::string>>(config, "index_files");
|
||||
AssertInfo(index_files.has_value(),
|
||||
"index file paths is empty when load json key index");
|
||||
|
||||
for (auto& index_file : index_files.value()) {
|
||||
boost::filesystem::path p(index_file);
|
||||
if (!p.has_parent_path()) {
|
||||
|
@ -249,7 +364,6 @@ JsonKeyInvertedIndex::Load(milvus::tracer::TraceContext ctx,
|
|||
index_file = remote_prefix + "/" + index_file;
|
||||
}
|
||||
}
|
||||
|
||||
disk_file_manager_->CacheJsonKeyIndexToDisk(index_files.value());
|
||||
AssertInfo(
|
||||
tantivy_index_exist(path_.c_str()), "index not exist: {}", path_);
|
||||
|
@ -272,6 +386,7 @@ void
|
|||
JsonKeyInvertedIndex::BuildWithFieldData(
|
||||
const std::vector<FieldDataPtr>& field_datas, bool nullable) {
|
||||
int64_t offset = 0;
|
||||
std::map<std::string, std::vector<int64_t>> mp;
|
||||
if (nullable) {
|
||||
for (const auto& data : field_datas) {
|
||||
auto n = data->get_num_rows();
|
||||
|
@ -282,7 +397,8 @@ JsonKeyInvertedIndex::BuildWithFieldData(
|
|||
AddJson(static_cast<const milvus::Json*>(data->RawValue(i))
|
||||
->data()
|
||||
.data(),
|
||||
offset++);
|
||||
offset++,
|
||||
mp);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
@ -292,10 +408,12 @@ JsonKeyInvertedIndex::BuildWithFieldData(
|
|||
AddJson(static_cast<const milvus::Json*>(data->RawValue(i))
|
||||
->data()
|
||||
.data(),
|
||||
offset++);
|
||||
offset++,
|
||||
mp);
|
||||
}
|
||||
}
|
||||
}
|
||||
AddInvertedRecord(mp);
|
||||
LOG_INFO("build json key index done for field id:{}", field_id_);
|
||||
}
|
||||
|
||||
|
@ -304,13 +422,15 @@ JsonKeyInvertedIndex::AddJSONDatas(size_t n,
|
|||
const std::string* jsonDatas,
|
||||
const bool* valids,
|
||||
int64_t offset_begin) {
|
||||
std::map<std::string, std::vector<int64_t>> mp;
|
||||
for (int i = 0; i < n; i++) {
|
||||
auto offset = i + offset_begin;
|
||||
if (valids != nullptr && !valids[i]) {
|
||||
continue;
|
||||
}
|
||||
AddJson(jsonDatas[i].c_str(), offset);
|
||||
AddJson(jsonDatas[i].c_str(), offset, mp);
|
||||
}
|
||||
AddInvertedRecord(mp);
|
||||
is_data_uncommitted_ = true;
|
||||
LOG_INFO("build json key index done for AddJSONDatas");
|
||||
if (shouldTriggerCommit()) {
|
||||
|
|
|
@ -17,12 +17,24 @@
|
|||
#include "index/InvertedIndexTantivy.h"
|
||||
#include "common/jsmn.h"
|
||||
namespace milvus::index {
|
||||
|
||||
enum class JSONType {
|
||||
UNKNOWN,
|
||||
BOOL,
|
||||
INT32,
|
||||
INT64,
|
||||
FLOAT,
|
||||
DOUBLE,
|
||||
STRING,
|
||||
STRING_ESCAPE
|
||||
};
|
||||
using stdclock = std::chrono::high_resolution_clock;
|
||||
class JsonKeyInvertedIndex : public InvertedIndexTantivy<std::string> {
|
||||
public:
|
||||
explicit JsonKeyInvertedIndex(const storage::FileManagerContext& ctx,
|
||||
bool is_load);
|
||||
explicit JsonKeyInvertedIndex(
|
||||
const storage::FileManagerContext& ctx,
|
||||
bool is_load,
|
||||
int64_t json_key_data_format = 0,
|
||||
int64_t json_stats_tantivy_memory_budget = 16777216);
|
||||
|
||||
explicit JsonKeyInvertedIndex(int64_t commit_interval_in_ms,
|
||||
const char* unique_id);
|
||||
|
@ -47,24 +59,46 @@ class JsonKeyInvertedIndex : public InvertedIndexTantivy<std::string> {
|
|||
BuildWithFieldData(const std::vector<FieldDataPtr>& datas, bool nullable);
|
||||
|
||||
const TargetBitmap
|
||||
FilterByPath(const std::string& path,
|
||||
int32_t row,
|
||||
bool is_growing,
|
||||
bool is_strong_consistency,
|
||||
std::function<bool(uint32_t, uint16_t, uint16_t)> filter) {
|
||||
FilterByPath(
|
||||
const std::string& path,
|
||||
int32_t row,
|
||||
bool is_growing,
|
||||
bool is_strong_consistency,
|
||||
std::function<bool(
|
||||
bool, uint8_t, uint32_t, uint16_t, uint16_t, uint32_t)> filter) {
|
||||
auto processArray = [this, &path, row, &filter]() {
|
||||
TargetBitmap bitset(row);
|
||||
auto array = wrapper_->term_query_i64(path);
|
||||
LOG_INFO("json key filter size:{}", array.array_.len);
|
||||
for (size_t j = 0; j < array.array_.len; j++) {
|
||||
auto the_offset = array.array_.array[j];
|
||||
auto tuple = DecodeOffset(the_offset);
|
||||
auto row_id = std::get<0>(tuple);
|
||||
if (row_id >= row) {
|
||||
continue;
|
||||
if (json_key_data_format_ == 0) {
|
||||
if (DecodeValid(the_offset)) {
|
||||
auto tuple = DecodeValue(the_offset);
|
||||
auto row_id = std::get<1>(tuple);
|
||||
if (row_id >= row) {
|
||||
continue;
|
||||
}
|
||||
bitset[row_id] = filter(true,
|
||||
std::get<0>(tuple),
|
||||
std::get<1>(tuple),
|
||||
0,
|
||||
0,
|
||||
std::get<2>(tuple));
|
||||
} else {
|
||||
auto tuple = DecodeOffset(the_offset);
|
||||
auto row_id = std::get<1>(tuple);
|
||||
if (row_id >= row) {
|
||||
continue;
|
||||
}
|
||||
bitset[row_id] = filter(false,
|
||||
std::get<0>(tuple),
|
||||
std::get<1>(tuple),
|
||||
std::get<2>(tuple),
|
||||
std::get<3>(tuple),
|
||||
0);
|
||||
}
|
||||
}
|
||||
bitset[row_id] = filter(
|
||||
std::get<0>(tuple), std::get<1>(tuple), std::get<2>(tuple));
|
||||
}
|
||||
|
||||
return bitset;
|
||||
|
@ -74,8 +108,8 @@ class JsonKeyInvertedIndex : public InvertedIndexTantivy<std::string> {
|
|||
if (shouldTriggerCommit() || is_strong_consistency) {
|
||||
if (is_data_uncommitted_) {
|
||||
Commit();
|
||||
Reload();
|
||||
}
|
||||
Reload();
|
||||
return processArray();
|
||||
} else {
|
||||
return processArray();
|
||||
|
@ -105,44 +139,159 @@ class JsonKeyInvertedIndex : public InvertedIndexTantivy<std::string> {
|
|||
|
||||
private:
|
||||
void
|
||||
AddJson(const char* json, int64_t offset);
|
||||
AddJson(const char* json,
|
||||
int64_t offset,
|
||||
std::map<std::string, std::vector<int64_t>>& mp);
|
||||
|
||||
void
|
||||
TravelJson(const char* json,
|
||||
jsmntok* tokens,
|
||||
int& index,
|
||||
std::vector<std::string>& path,
|
||||
int32_t offset);
|
||||
int32_t offset,
|
||||
std::map<std::string, std::vector<int64_t>>& mp);
|
||||
|
||||
void
|
||||
AddInvertedRecord(const std::vector<std::string>& paths,
|
||||
uint32_t row_id,
|
||||
uint16_t offset,
|
||||
uint16_t length);
|
||||
AddJSONEncodeValue(const std::vector<std::string>& paths,
|
||||
uint8_t flag,
|
||||
uint8_t type,
|
||||
uint32_t row_id,
|
||||
uint16_t offset,
|
||||
uint16_t length,
|
||||
uint32_t value,
|
||||
std::map<std::string, std::vector<int64_t>>& mp);
|
||||
|
||||
int64_t
|
||||
EncodeOffset(uint32_t row_id, uint16_t row_offset, uint16_t size) {
|
||||
return static_cast<int64_t>(row_id) << 32 |
|
||||
EncodeOffset(uint8_t flag,
|
||||
uint8_t type,
|
||||
uint32_t row_id,
|
||||
uint16_t row_offset,
|
||||
uint16_t size) {
|
||||
row_id &= 0x0FFFFFFF;
|
||||
return static_cast<int64_t>(flag) << 63 |
|
||||
static_cast<int64_t>(type) << 60 |
|
||||
static_cast<int64_t>(row_id) << 32 |
|
||||
static_cast<int64_t>(row_offset) << 16 |
|
||||
static_cast<int64_t>(size);
|
||||
}
|
||||
|
||||
std::tuple<uint32_t, uint16_t, uint16_t>
|
||||
int64_t
|
||||
EncodeValue(uint8_t flag, uint8_t type, uint32_t row_id, uint32_t value) {
|
||||
return static_cast<int64_t>(flag) << 63 |
|
||||
static_cast<int64_t>(type) << 60 |
|
||||
static_cast<int64_t>(row_id) << 32 | static_cast<int64_t>(value);
|
||||
}
|
||||
|
||||
bool
|
||||
DecodeValid(int64_t encode_offset) {
|
||||
return (encode_offset >> 63) & 1;
|
||||
}
|
||||
|
||||
std::tuple<uint8_t, uint32_t, uint32_t>
|
||||
DecodeValue(int64_t encode_offset) {
|
||||
uint8_t type = (encode_offset >> 60) & 0x7;
|
||||
uint32_t row_id = (encode_offset >> 32) & 0x0FFFFFFF;
|
||||
uint32_t value = encode_offset & 0xFFFFFFFF;
|
||||
return std::make_tuple(type, row_id, value);
|
||||
}
|
||||
|
||||
std::tuple<uint8_t, uint32_t, uint16_t, uint16_t>
|
||||
DecodeOffset(int64_t encode_offset) {
|
||||
uint32_t row_id = (encode_offset >> 32) & 0xFFFFFFFF;
|
||||
uint8_t type = (encode_offset >> 60) & 0x7;
|
||||
uint32_t row_id = (encode_offset >> 32) & 0x0FFFFFFF;
|
||||
uint16_t row_offset = (encode_offset >> 16) & 0xFFFF;
|
||||
uint16_t size = encode_offset & 0xFFFF;
|
||||
return std::make_tuple(row_id, row_offset, size);
|
||||
return std::make_tuple(type, row_id, row_offset, size);
|
||||
}
|
||||
|
||||
bool
|
||||
shouldTriggerCommit();
|
||||
|
||||
bool
|
||||
isBoolean(const std::string& str) {
|
||||
return str == "true" || str == "false";
|
||||
}
|
||||
|
||||
bool
|
||||
isInt32(const std::string& str) {
|
||||
std::istringstream iss(str);
|
||||
int64_t num;
|
||||
iss >> num;
|
||||
|
||||
return !iss.fail() && iss.eof() &&
|
||||
num >= std::numeric_limits<int32_t>::min() &&
|
||||
num <= std::numeric_limits<int32_t>::max();
|
||||
}
|
||||
|
||||
bool
|
||||
isInt64(const std::string& str) {
|
||||
std::istringstream iss(str);
|
||||
int64_t num;
|
||||
iss >> num;
|
||||
|
||||
return !iss.fail() && iss.eof();
|
||||
}
|
||||
|
||||
bool
|
||||
isFloat(const std::string& str) {
|
||||
try {
|
||||
float d = std::stof(str);
|
||||
return true;
|
||||
} catch (...) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool
|
||||
isDouble(const std::string& str) {
|
||||
try {
|
||||
double d = std::stod(str);
|
||||
return true;
|
||||
} catch (...) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool
|
||||
has_escape_sequence(const std::string& str) {
|
||||
for (size_t i = 0; i < str.size(); ++i) {
|
||||
if (str[i] == '\\' && i + 1 < str.size()) {
|
||||
char next = str[i + 1];
|
||||
if (next == 'n' || next == 't' || next == 'r' || next == 'b' ||
|
||||
next == 'f' || next == 'v' || next == '\\' ||
|
||||
next == '\"' || next == '\'') {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
JSONType
|
||||
getType(const std::string& str) {
|
||||
if (isBoolean(str)) {
|
||||
return JSONType::BOOL;
|
||||
} else if (isInt32(str)) {
|
||||
return JSONType::INT32;
|
||||
} else if (isInt64(str)) {
|
||||
return JSONType::INT64;
|
||||
} else if (isFloat(str)) {
|
||||
return JSONType::FLOAT;
|
||||
} else if (isDouble(str)) {
|
||||
return JSONType::DOUBLE;
|
||||
}
|
||||
return JSONType::UNKNOWN;
|
||||
}
|
||||
|
||||
void
|
||||
AddInvertedRecord(std::map<std::string, std::vector<int64_t>>& mp);
|
||||
|
||||
private:
|
||||
int64_t field_id_;
|
||||
mutable std::mutex mtx_;
|
||||
std::atomic<stdclock::time_point> last_commit_time_;
|
||||
int64_t commit_interval_in_ms_;
|
||||
int64_t json_key_data_format_ = 0;
|
||||
std::atomic<bool> is_data_uncommitted_ = false;
|
||||
};
|
||||
} // namespace milvus::index
|
||||
|
|
|
@ -270,7 +270,10 @@ BuildJsonKeyIndex(ProtoLayoutInterface result,
|
|||
auto field_schema =
|
||||
FieldMeta::ParseFrom(build_index_info->field_schema());
|
||||
auto index = std::make_unique<index::JsonKeyInvertedIndex>(
|
||||
fileManagerContext, false);
|
||||
fileManagerContext,
|
||||
false,
|
||||
build_index_info->json_key_stats_data_format(),
|
||||
build_index_info->json_key_stats_tantivy_memory());
|
||||
index->Build(config);
|
||||
auto create_index_result = index->Upload(config);
|
||||
create_index_result->SerializeAt(
|
||||
|
|
|
@ -335,7 +335,7 @@ class ChunkedVariableColumn : public ChunkedColumnBase {
|
|||
|
||||
std::pair<std::vector<std::string_view>, FixedVector<bool>>
|
||||
StringViews(int64_t chunk_id) const override {
|
||||
return std::dynamic_pointer_cast<StringChunk>(chunks_[chunk_id])
|
||||
return std::static_pointer_cast<StringChunk>(chunks_[chunk_id])
|
||||
->StringViews();
|
||||
}
|
||||
|
||||
|
@ -347,7 +347,7 @@ class ChunkedVariableColumn : public ChunkedColumnBase {
|
|||
std::pair<std::vector<std::string_view>, FixedVector<bool>>
|
||||
ViewsByOffsets(int64_t chunk_id,
|
||||
const FixedVector<int32_t>& offsets) const override {
|
||||
return std::dynamic_pointer_cast<StringChunk>(chunks_[chunk_id])
|
||||
return std::static_pointer_cast<StringChunk>(chunks_[chunk_id])
|
||||
->ViewsByOffsets(offsets);
|
||||
}
|
||||
|
||||
|
@ -359,7 +359,7 @@ class ChunkedVariableColumn : public ChunkedColumnBase {
|
|||
std::vector<BufferView::Element> elements;
|
||||
elements.push_back(
|
||||
{chunks_[chunk_id]->Data(),
|
||||
std::dynamic_pointer_cast<StringChunk>(chunks_[chunk_id])
|
||||
std::static_pointer_cast<StringChunk>(chunks_[chunk_id])
|
||||
->Offsets(),
|
||||
static_cast<int>(start_offset),
|
||||
static_cast<int>(start_offset + length)});
|
||||
|
@ -375,12 +375,11 @@ class ChunkedVariableColumn : public ChunkedColumnBase {
|
|||
}
|
||||
|
||||
auto [chunk_id, offset_in_chunk] = GetChunkIDByOffset(i);
|
||||
auto data = chunks_[chunk_id]->Data();
|
||||
auto offsets = std::dynamic_pointer_cast<StringChunk>(chunks_[chunk_id])
|
||||
->Offsets();
|
||||
auto len = offsets[offset_in_chunk + 1] - offsets[offset_in_chunk];
|
||||
auto data = std::static_pointer_cast<StringChunk>(chunks_[chunk_id])
|
||||
->
|
||||
operator[](offset_in_chunk);
|
||||
|
||||
return ViewType(data + offsets[offset_in_chunk], len);
|
||||
return ViewType(data.data(), data.length());
|
||||
}
|
||||
|
||||
std::string_view
|
||||
|
|
|
@ -938,7 +938,7 @@ SegmentGrowingImpl::CreateJSONIndex(FieldId field_id) {
|
|||
"cannot create json index on non-json type");
|
||||
std::string unique_id = GetUniqueFieldId(field_meta.get_id().get());
|
||||
auto index = std::make_unique<index::JsonKeyInvertedIndex>(
|
||||
JSON_INDEX_COMMIT_INTERVAL, unique_id.c_str());
|
||||
JSON_KEY_STATS_COMMIT_INTERVAL, unique_id.c_str());
|
||||
|
||||
index->Commit();
|
||||
index->CreateReader();
|
||||
|
|
|
@ -533,7 +533,7 @@ LoadJsonKeyIndex(CTraceContext c_trace,
|
|||
field_meta, index_meta, remote_chunk_manager);
|
||||
|
||||
auto index = std::make_unique<milvus::index::JsonKeyInvertedIndex>(
|
||||
file_ctx, true);
|
||||
file_ctx, true, info_proto->json_key_stats_data_format());
|
||||
index->Load(ctx, config);
|
||||
|
||||
segment->LoadJsonKeyIndex(milvus::FieldId(info_proto->fieldid()),
|
||||
|
|
|
@ -634,6 +634,8 @@ std::string
|
|||
DiskFileManagerImpl::GetJsonKeyIndexIdentifier() {
|
||||
return GenJsonKeyIndexPathIdentifier(index_meta_.build_id,
|
||||
index_meta_.index_version,
|
||||
field_meta_.collection_id,
|
||||
field_meta_.partition_id,
|
||||
field_meta_.segment_id,
|
||||
field_meta_.field_id);
|
||||
}
|
||||
|
@ -645,6 +647,8 @@ DiskFileManagerImpl::GetLocalJsonKeyIndexPrefix() {
|
|||
return GenJsonKeyIndexPathPrefix(local_chunk_manager,
|
||||
index_meta_.build_id,
|
||||
index_meta_.index_version,
|
||||
field_meta_.collection_id,
|
||||
field_meta_.partition_id,
|
||||
field_meta_.segment_id,
|
||||
field_meta_.field_id);
|
||||
}
|
||||
|
@ -654,6 +658,8 @@ DiskFileManagerImpl::GetRemoteJsonKeyLogPrefix() {
|
|||
return GenJsonKeyIndexPathPrefix(rcm_,
|
||||
index_meta_.build_id,
|
||||
index_meta_.index_version,
|
||||
field_meta_.collection_id,
|
||||
field_meta_.partition_id,
|
||||
field_meta_.segment_id,
|
||||
field_meta_.field_id);
|
||||
}
|
||||
|
|
|
@ -525,23 +525,32 @@ GenTextIndexPathPrefix(ChunkManagerPtr cm,
|
|||
std::string
|
||||
GenJsonKeyIndexPathIdentifier(int64_t build_id,
|
||||
int64_t index_version,
|
||||
int64_t collection_id,
|
||||
int64_t partition_id,
|
||||
int64_t segment_id,
|
||||
int64_t field_id) {
|
||||
return std::to_string(build_id) + "/" + std::to_string(index_version) +
|
||||
"/" + std::to_string(segment_id) + "/" + std::to_string(field_id) +
|
||||
"/";
|
||||
"/" + std::to_string(collection_id) + "/" +
|
||||
std::to_string(partition_id) + "/" + std::to_string(segment_id) +
|
||||
"/" + std::to_string(field_id) + "/";
|
||||
}
|
||||
|
||||
std::string
|
||||
GenJsonKeyIndexPathPrefix(ChunkManagerPtr cm,
|
||||
int64_t build_id,
|
||||
int64_t index_version,
|
||||
int64_t collection_id,
|
||||
int64_t partition_id,
|
||||
int64_t segment_id,
|
||||
int64_t field_id) {
|
||||
return cm->GetRootPath() + "/" + std::string(JSON_KEY_INDEX_LOG_ROOT_PATH) +
|
||||
"/" +
|
||||
GenJsonKeyIndexPathIdentifier(
|
||||
build_id, index_version, segment_id, field_id);
|
||||
GenJsonKeyIndexPathIdentifier(build_id,
|
||||
index_version,
|
||||
collection_id,
|
||||
partition_id,
|
||||
segment_id,
|
||||
field_id);
|
||||
}
|
||||
|
||||
std::string
|
||||
|
|
|
@ -95,6 +95,8 @@ GenTextIndexPathPrefix(ChunkManagerPtr cm,
|
|||
std::string
|
||||
GenJsonKeyIndexPathIdentifier(int64_t build_id,
|
||||
int64_t index_version,
|
||||
int64_t collection_id,
|
||||
int64_t partition_id,
|
||||
int64_t segment_id,
|
||||
int64_t field_id);
|
||||
|
||||
|
@ -102,6 +104,8 @@ std::string
|
|||
GenJsonKeyIndexPathPrefix(ChunkManagerPtr cm,
|
||||
int64_t build_id,
|
||||
int64_t index_version,
|
||||
int64_t collection_id,
|
||||
int64_t partition_id,
|
||||
int64_t segment_id,
|
||||
int64_t field_id);
|
||||
|
||||
|
|
|
@ -56,14 +56,17 @@ using namespace milvus;
|
|||
using namespace milvus::query;
|
||||
using namespace milvus::segcore;
|
||||
|
||||
class ExprTest : public ::testing::TestWithParam<
|
||||
std::pair<milvus::DataType, knowhere::MetricType>> {
|
||||
class ExprTest
|
||||
: public ::testing::TestWithParam<
|
||||
std::tuple<std::pair<milvus::DataType, knowhere::MetricType>, bool>> {
|
||||
public:
|
||||
void
|
||||
SetUp() override {
|
||||
auto param = GetParam();
|
||||
data_type = param.first;
|
||||
metric_type = param.second;
|
||||
data_type = std::get<0>(param).first; // Get the DataType from the pair
|
||||
metric_type =
|
||||
std::get<0>(param).second; // Get the MetricType from the pair
|
||||
JSON_KEY_STATS_ENABLED = std::get<1>(param); // Get the bool parameter
|
||||
}
|
||||
|
||||
// replace the metric type in the plan string with the proper type
|
||||
|
@ -78,13 +81,29 @@ class ExprTest : public ::testing::TestWithParam<
|
|||
knowhere::MetricType metric_type;
|
||||
};
|
||||
|
||||
// Instantiate test suite with new bool parameter
|
||||
INSTANTIATE_TEST_SUITE_P(
|
||||
ExprTestSuite,
|
||||
ExprTest,
|
||||
::testing::Values(
|
||||
std::pair(milvus::DataType::VECTOR_FLOAT, knowhere::metric::L2),
|
||||
std::pair(milvus::DataType::VECTOR_SPARSE_FLOAT, knowhere::metric::IP),
|
||||
std::pair(milvus::DataType::VECTOR_BINARY, knowhere::metric::JACCARD)));
|
||||
std::make_tuple(std::pair(milvus::DataType::VECTOR_FLOAT,
|
||||
knowhere::metric::L2),
|
||||
false),
|
||||
std::make_tuple(std::pair(milvus::DataType::VECTOR_SPARSE_FLOAT,
|
||||
knowhere::metric::IP),
|
||||
false),
|
||||
std::make_tuple(std::pair(milvus::DataType::VECTOR_BINARY,
|
||||
knowhere::metric::JACCARD),
|
||||
false),
|
||||
std::make_tuple(std::pair(milvus::DataType::VECTOR_FLOAT,
|
||||
knowhere::metric::L2),
|
||||
true),
|
||||
std::make_tuple(std::pair(milvus::DataType::VECTOR_SPARSE_FLOAT,
|
||||
knowhere::metric::IP),
|
||||
true),
|
||||
std::make_tuple(std::pair(milvus::DataType::VECTOR_BINARY,
|
||||
knowhere::metric::JACCARD),
|
||||
true)));
|
||||
|
||||
TEST_P(ExprTest, Range) {
|
||||
SUCCEED();
|
||||
|
@ -1246,10 +1265,6 @@ TEST_P(ExprTest, TestUnaryRangeJson) {
|
|||
{20, {"int"}},
|
||||
{30, {"int"}},
|
||||
{40, {"int"}},
|
||||
{10, {"double"}},
|
||||
{20, {"double"}},
|
||||
{30, {"double"}},
|
||||
{40, {"double"}},
|
||||
{1, {"array", "0"}},
|
||||
{2, {"array", "1"}},
|
||||
{3, {"array", "2"}}};
|
||||
|
@ -1361,7 +1376,8 @@ TEST_P(ExprTest, TestUnaryRangeJson) {
|
|||
.value();
|
||||
|
||||
auto ref = f(val);
|
||||
ASSERT_EQ(ans, ref);
|
||||
ASSERT_EQ(ans, ref) << "@" << i << "op" << op;
|
||||
|
||||
if (i % 2 == 0) {
|
||||
ASSERT_EQ(view[int(i / 2)], ref);
|
||||
}
|
||||
|
@ -1380,6 +1396,270 @@ TEST_P(ExprTest, TestUnaryRangeJson) {
|
|||
}
|
||||
}
|
||||
|
||||
{
|
||||
struct Testcase {
|
||||
int64_t val;
|
||||
std::vector<std::string> nested_path;
|
||||
};
|
||||
std::vector<Testcase> testcases{{1.1, {"double"}},
|
||||
{2.2, {"double"}},
|
||||
{3.3, {"double"}},
|
||||
{4.4, {"double"}},
|
||||
{1e40, {"double"}}};
|
||||
|
||||
auto schema = std::make_shared<Schema>();
|
||||
auto i64_fid = schema->AddDebugField("id", DataType::INT64);
|
||||
auto json_fid = schema->AddDebugField("json", DataType::JSON);
|
||||
schema->set_primary_field_id(i64_fid);
|
||||
|
||||
auto seg = CreateGrowingSegment(schema, empty_index_meta);
|
||||
int N = 1000;
|
||||
std::vector<std::string> json_col;
|
||||
int num_iters = 1;
|
||||
for (int iter = 0; iter < num_iters; ++iter) {
|
||||
auto raw_data = DataGen(schema, N, iter);
|
||||
auto new_json_col = raw_data.get_col<std::string>(json_fid);
|
||||
|
||||
json_col.insert(
|
||||
json_col.end(), new_json_col.begin(), new_json_col.end());
|
||||
seg->PreInsert(N);
|
||||
seg->Insert(iter * N,
|
||||
N,
|
||||
raw_data.row_ids_.data(),
|
||||
raw_data.timestamps_.data(),
|
||||
raw_data.raw_);
|
||||
}
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(200) * 2);
|
||||
auto seg_promote = dynamic_cast<SegmentGrowingImpl*>(seg.get());
|
||||
|
||||
std::vector<OpType> ops{
|
||||
OpType::Equal,
|
||||
OpType::NotEqual,
|
||||
OpType::GreaterThan,
|
||||
OpType::GreaterEqual,
|
||||
OpType::LessThan,
|
||||
OpType::LessEqual,
|
||||
};
|
||||
for (const auto& testcase : testcases) {
|
||||
auto check = [&](double value) { return value == testcase.val; };
|
||||
std::function<bool(double)> f = check;
|
||||
for (auto& op : ops) {
|
||||
switch (op) {
|
||||
case OpType::Equal: {
|
||||
f = [&](double value) { return value == testcase.val; };
|
||||
break;
|
||||
}
|
||||
case OpType::NotEqual: {
|
||||
f = [&](double value) { return value != testcase.val; };
|
||||
break;
|
||||
}
|
||||
case OpType::GreaterEqual: {
|
||||
f = [&](double value) { return value >= testcase.val; };
|
||||
break;
|
||||
}
|
||||
case OpType::GreaterThan: {
|
||||
f = [&](double value) { return value > testcase.val; };
|
||||
break;
|
||||
}
|
||||
case OpType::LessEqual: {
|
||||
f = [&](double value) { return value <= testcase.val; };
|
||||
break;
|
||||
}
|
||||
case OpType::LessThan: {
|
||||
f = [&](double value) { return value < testcase.val; };
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
PanicInfo(Unsupported, "unsupported range node");
|
||||
}
|
||||
}
|
||||
|
||||
auto pointer = milvus::Json::pointer(testcase.nested_path);
|
||||
proto::plan::GenericValue value;
|
||||
value.set_float_val(testcase.val);
|
||||
auto expr =
|
||||
std::make_shared<milvus::expr::UnaryRangeFilterExpr>(
|
||||
milvus::expr::ColumnInfo(
|
||||
json_fid, DataType::JSON, testcase.nested_path),
|
||||
op,
|
||||
value);
|
||||
auto plan = std::make_shared<plan::FilterBitsNode>(
|
||||
DEFAULT_PLANNODE_ID, expr);
|
||||
auto final = ExecuteQueryExpr(
|
||||
plan, seg_promote, N * num_iters, MAX_TIMESTAMP);
|
||||
EXPECT_EQ(final.size(), N * num_iters);
|
||||
|
||||
// specify some offsets and do scalar filtering on these offsets
|
||||
milvus::exec::OffsetVector offsets;
|
||||
offsets.reserve(N * num_iters / 2);
|
||||
for (auto i = 0; i < N * num_iters; ++i) {
|
||||
if (i % 2 == 0) {
|
||||
offsets.emplace_back(i);
|
||||
}
|
||||
}
|
||||
auto col_vec = milvus::test::gen_filter_res(plan.get(),
|
||||
seg_promote,
|
||||
N * num_iters,
|
||||
MAX_TIMESTAMP,
|
||||
&offsets);
|
||||
BitsetTypeView view(col_vec->GetRawData(), col_vec->size());
|
||||
EXPECT_EQ(view.size(), N * num_iters / 2);
|
||||
|
||||
for (int i = 0; i < N * num_iters; ++i) {
|
||||
auto ans = final[i];
|
||||
|
||||
auto val =
|
||||
milvus::Json(simdjson::padded_string(json_col[i]))
|
||||
.template at<double>(pointer)
|
||||
.value();
|
||||
auto ref = f(val);
|
||||
ASSERT_EQ(ans, ref);
|
||||
if (i % 2 == 0) {
|
||||
ASSERT_EQ(view[int(i / 2)], ref);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
struct Testcase {
|
||||
std::string val;
|
||||
std::vector<std::string> nested_path;
|
||||
};
|
||||
std::vector<Testcase> testcases{
|
||||
{"abc", {"string"}},
|
||||
{"This is a line break\\nThis is a new line!", {"string"}}};
|
||||
|
||||
auto schema = std::make_shared<Schema>();
|
||||
auto i64_fid = schema->AddDebugField("id", DataType::INT64);
|
||||
auto json_fid = schema->AddDebugField("json", DataType::JSON);
|
||||
schema->set_primary_field_id(i64_fid);
|
||||
|
||||
auto seg = CreateGrowingSegment(schema, empty_index_meta);
|
||||
int N = 1000;
|
||||
std::vector<std::string> json_col;
|
||||
int num_iters = 1;
|
||||
for (int iter = 0; iter < num_iters; ++iter) {
|
||||
auto raw_data = DataGen(schema, N, iter);
|
||||
auto new_json_col = raw_data.get_col<std::string>(json_fid);
|
||||
|
||||
json_col.insert(
|
||||
json_col.end(), new_json_col.begin(), new_json_col.end());
|
||||
seg->PreInsert(N);
|
||||
seg->Insert(iter * N,
|
||||
N,
|
||||
raw_data.row_ids_.data(),
|
||||
raw_data.timestamps_.data(),
|
||||
raw_data.raw_);
|
||||
}
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(200) * 2);
|
||||
auto seg_promote = dynamic_cast<SegmentGrowingImpl*>(seg.get());
|
||||
|
||||
std::vector<OpType> ops{
|
||||
OpType::Equal,
|
||||
OpType::NotEqual,
|
||||
OpType::GreaterThan,
|
||||
OpType::GreaterEqual,
|
||||
OpType::LessThan,
|
||||
OpType::LessEqual,
|
||||
};
|
||||
for (const auto& testcase : testcases) {
|
||||
auto check = [&](std::string_view value) {
|
||||
return value == testcase.val;
|
||||
};
|
||||
std::function<bool(std::string_view)> f = check;
|
||||
for (auto& op : ops) {
|
||||
switch (op) {
|
||||
case OpType::Equal: {
|
||||
f = [&](std::string_view value) {
|
||||
return value == testcase.val;
|
||||
};
|
||||
break;
|
||||
}
|
||||
case OpType::NotEqual: {
|
||||
f = [&](std::string_view value) {
|
||||
return value != testcase.val;
|
||||
};
|
||||
break;
|
||||
}
|
||||
case OpType::GreaterEqual: {
|
||||
f = [&](std::string_view value) {
|
||||
return value >= testcase.val;
|
||||
};
|
||||
break;
|
||||
}
|
||||
case OpType::GreaterThan: {
|
||||
f = [&](std::string_view value) {
|
||||
return value > testcase.val;
|
||||
};
|
||||
break;
|
||||
}
|
||||
case OpType::LessEqual: {
|
||||
f = [&](std::string_view value) {
|
||||
return value <= testcase.val;
|
||||
};
|
||||
break;
|
||||
}
|
||||
case OpType::LessThan: {
|
||||
f = [&](std::string_view value) {
|
||||
return value < testcase.val;
|
||||
};
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
PanicInfo(Unsupported, "unsupported range node");
|
||||
}
|
||||
}
|
||||
|
||||
auto pointer = milvus::Json::pointer(testcase.nested_path);
|
||||
proto::plan::GenericValue value;
|
||||
value.set_string_val(testcase.val);
|
||||
auto expr =
|
||||
std::make_shared<milvus::expr::UnaryRangeFilterExpr>(
|
||||
milvus::expr::ColumnInfo(
|
||||
json_fid, DataType::JSON, testcase.nested_path),
|
||||
op,
|
||||
value);
|
||||
auto plan = std::make_shared<plan::FilterBitsNode>(
|
||||
DEFAULT_PLANNODE_ID, expr);
|
||||
auto final = ExecuteQueryExpr(
|
||||
plan, seg_promote, N * num_iters, MAX_TIMESTAMP);
|
||||
EXPECT_EQ(final.size(), N * num_iters);
|
||||
|
||||
// specify some offsets and do scalar filtering on these offsets
|
||||
milvus::exec::OffsetVector offsets;
|
||||
offsets.reserve(N * num_iters / 2);
|
||||
for (auto i = 0; i < N * num_iters; ++i) {
|
||||
if (i % 2 == 0) {
|
||||
offsets.emplace_back(i);
|
||||
}
|
||||
}
|
||||
auto col_vec = milvus::test::gen_filter_res(plan.get(),
|
||||
seg_promote,
|
||||
N * num_iters,
|
||||
MAX_TIMESTAMP,
|
||||
&offsets);
|
||||
BitsetTypeView view(col_vec->GetRawData(), col_vec->size());
|
||||
EXPECT_EQ(view.size(), N * num_iters / 2);
|
||||
|
||||
for (int i = 0; i < N * num_iters; ++i) {
|
||||
auto ans = final[i];
|
||||
|
||||
auto val =
|
||||
milvus::Json(simdjson::padded_string(json_col[i]))
|
||||
.template at<std::string_view>(pointer)
|
||||
.value();
|
||||
auto ref = f(val);
|
||||
ASSERT_EQ(ans, ref);
|
||||
if (i % 2 == 0) {
|
||||
ASSERT_EQ(view[int(i / 2)], ref);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct TestArrayCase {
|
||||
proto::plan::GenericValue val;
|
||||
std::vector<std::string> nested_path;
|
||||
|
@ -1459,10 +1739,6 @@ TEST_P(ExprTest, TestUnaryRangeJsonNullable) {
|
|||
{20, {"int"}},
|
||||
{30, {"int"}},
|
||||
{40, {"int"}},
|
||||
{10, {"double"}},
|
||||
{20, {"double"}},
|
||||
{30, {"double"}},
|
||||
{40, {"double"}},
|
||||
{1, {"array", "0"}},
|
||||
{2, {"array", "1"}},
|
||||
{3, {"array", "2"}}};
|
||||
|
|
|
@ -195,14 +195,13 @@ TEST_P(JsonKeyIndexTest, TestTermInFunc) {
|
|||
};
|
||||
std::unordered_set<int64_t> term_set(testcase.term.begin(),
|
||||
testcase.term.end());
|
||||
auto filter_func = [&term_set, this](uint32_t row_id,
|
||||
auto filter_func = [&term_set, this](bool valid,
|
||||
uint8_t type,
|
||||
uint32_t row_id,
|
||||
uint16_t offset,
|
||||
uint16_t size) {
|
||||
auto val = this->data_[row_id].template at<int64_t>(offset, size);
|
||||
if (val.error()) {
|
||||
return false;
|
||||
}
|
||||
return term_set.find(int64_t(val.value())) != term_set.end();
|
||||
uint16_t size,
|
||||
uint32_t value) {
|
||||
return term_set.find(int64_t(value)) != term_set.end();
|
||||
};
|
||||
auto pointer = milvus::Json::pointer(testcase.nested_path);
|
||||
auto bitset =
|
||||
|
@ -274,27 +273,25 @@ TEST_P(JsonKeyIndexTest, TestUnaryRangeInFunc) {
|
|||
}
|
||||
}
|
||||
|
||||
auto filter_func = [&op, &testcase, this](uint32_t row_id,
|
||||
auto filter_func = [&op, &testcase, this](bool valid,
|
||||
uint8_t type,
|
||||
uint32_t row_id,
|
||||
uint16_t offset,
|
||||
uint16_t size) {
|
||||
auto val =
|
||||
this->data_[row_id].template at<int64_t>(offset, size);
|
||||
if (val.error()) {
|
||||
return false;
|
||||
}
|
||||
uint16_t size,
|
||||
uint32_t value) {
|
||||
switch (op) {
|
||||
case OpType::GreaterThan:
|
||||
return int64_t(val.value()) > testcase.val;
|
||||
return int64_t(value) > testcase.val;
|
||||
case OpType::GreaterEqual:
|
||||
return int64_t(val.value()) >= testcase.val;
|
||||
return int64_t(value) >= testcase.val;
|
||||
case OpType::LessThan:
|
||||
return int64_t(val.value()) < testcase.val;
|
||||
return int64_t(value) < testcase.val;
|
||||
case OpType::LessEqual:
|
||||
return int64_t(val.value()) <= testcase.val;
|
||||
return int64_t(value) <= testcase.val;
|
||||
case OpType::Equal:
|
||||
return int64_t(val.value()) == testcase.val;
|
||||
return int64_t(value) == testcase.val;
|
||||
case OpType::NotEqual:
|
||||
return int64_t(val.value()) != testcase.val;
|
||||
return int64_t(value) != testcase.val;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
@ -356,25 +353,49 @@ TEST_P(JsonKeyIndexTest, TestBinaryRangeInFunc) {
|
|||
}
|
||||
};
|
||||
|
||||
auto filter_func = [&testcase, this](uint32_t row_id,
|
||||
auto filter_func = [&testcase, this](bool valid,
|
||||
uint8_t type,
|
||||
uint32_t row_id,
|
||||
uint16_t offset,
|
||||
uint16_t size) {
|
||||
auto val = this->data_[row_id].template at<int64_t>(offset, size);
|
||||
if (val.error()) {
|
||||
return false;
|
||||
}
|
||||
if (testcase.lower_inclusive && testcase.upper_inclusive) {
|
||||
return testcase.lower <= int64_t(val.value()) &&
|
||||
int64_t(val.value()) <= testcase.upper;
|
||||
} else if (testcase.lower_inclusive && !testcase.upper_inclusive) {
|
||||
return testcase.lower <= int64_t(val.value()) &&
|
||||
int64_t(val.value()) < testcase.upper;
|
||||
} else if (!testcase.lower_inclusive && testcase.upper_inclusive) {
|
||||
return testcase.lower < int64_t(val.value()) &&
|
||||
int64_t(val.value()) <= testcase.upper;
|
||||
uint16_t size,
|
||||
uint32_t value) {
|
||||
if (valid) {
|
||||
if (testcase.lower_inclusive && testcase.upper_inclusive) {
|
||||
return testcase.lower <= int64_t(value) &&
|
||||
int64_t(value) <= testcase.upper;
|
||||
} else if (testcase.lower_inclusive &&
|
||||
!testcase.upper_inclusive) {
|
||||
return testcase.lower <= int64_t(value) &&
|
||||
int64_t(value) < testcase.upper;
|
||||
} else if (!testcase.lower_inclusive &&
|
||||
testcase.upper_inclusive) {
|
||||
return testcase.lower < int64_t(value) &&
|
||||
int64_t(value) <= testcase.upper;
|
||||
} else {
|
||||
return testcase.lower < int64_t(value) &&
|
||||
int64_t(value) < testcase.upper;
|
||||
}
|
||||
} else {
|
||||
return testcase.lower < int64_t(val.value()) &&
|
||||
int64_t(val.value()) < testcase.upper;
|
||||
auto val =
|
||||
this->data_[row_id].template at<int64_t>(offset, size);
|
||||
if (val.error()) {
|
||||
return false;
|
||||
}
|
||||
if (testcase.lower_inclusive && testcase.upper_inclusive) {
|
||||
return testcase.lower <= int64_t(val.value()) &&
|
||||
int64_t(val.value()) <= testcase.upper;
|
||||
} else if (testcase.lower_inclusive &&
|
||||
!testcase.upper_inclusive) {
|
||||
return testcase.lower <= int64_t(val.value()) &&
|
||||
int64_t(val.value()) < testcase.upper;
|
||||
} else if (!testcase.lower_inclusive &&
|
||||
testcase.upper_inclusive) {
|
||||
return testcase.lower < int64_t(val.value()) &&
|
||||
int64_t(val.value()) <= testcase.upper;
|
||||
} else {
|
||||
return testcase.lower < int64_t(val.value()) &&
|
||||
int64_t(val.value()) < testcase.upper;
|
||||
}
|
||||
}
|
||||
};
|
||||
auto pointer = milvus::Json::pointer(testcase.nested_path);
|
||||
|
@ -412,10 +433,14 @@ TEST_P(JsonKeyIndexTest, TestExistInFunc) {
|
|||
};
|
||||
for (const auto& testcase : testcases) {
|
||||
auto pointer = milvus::Json::pointer(testcase.nested_path);
|
||||
auto filter_func =
|
||||
[&pointer, this](uint32_t row_id, uint16_t offset, uint16_t size) {
|
||||
return this->data_[row_id].exist(pointer);
|
||||
};
|
||||
auto filter_func = [&pointer, this](bool valid,
|
||||
uint8_t type,
|
||||
uint32_t row_id,
|
||||
uint16_t offset,
|
||||
uint16_t size,
|
||||
uint32_t value) {
|
||||
return this->data_[row_id].exist(pointer);
|
||||
};
|
||||
|
||||
auto bitset =
|
||||
index_->FilterByPath(pointer, size_, false, true, filter_func);
|
||||
|
@ -457,9 +482,12 @@ TEST_P(JsonKeyIndexTest, TestJsonContainsAllFunc) {
|
|||
for (auto const& element : testcase.term) {
|
||||
elements.insert(element);
|
||||
}
|
||||
auto filter_func = [&elements, this](uint32_t row_id,
|
||||
auto filter_func = [&elements, this](bool valid,
|
||||
uint8_t type,
|
||||
uint32_t row_id,
|
||||
uint16_t offset,
|
||||
uint16_t size) {
|
||||
uint16_t size,
|
||||
uint32_t value) {
|
||||
auto array = this->data_[row_id].array_at(offset, size);
|
||||
std::unordered_set<int64_t> tmp_elements(elements);
|
||||
for (auto&& it : array) {
|
||||
|
@ -519,13 +547,13 @@ TEST(GrowingJsonKeyIndexTest, GrowingIndex) {
|
|||
index->Commit();
|
||||
index->Reload();
|
||||
int64_t checkVal = 1;
|
||||
auto filter_func = [jsons, checkVal](
|
||||
uint32_t row_id, uint16_t offset, uint16_t size) {
|
||||
auto val = jsons[row_id].template at<int64_t>(offset, size);
|
||||
if (val.error()) {
|
||||
return false;
|
||||
}
|
||||
if (val.value() == checkVal) {
|
||||
auto filter_func = [jsons, checkVal](bool valid,
|
||||
uint8_t type,
|
||||
uint32_t row_id,
|
||||
uint16_t offset,
|
||||
uint16_t size,
|
||||
uint32_t value) {
|
||||
if (value == checkVal) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
|
|
@ -164,6 +164,7 @@ func (gc *garbageCollector) work(ctx context.Context) {
|
|||
gc.recycleUnusedSegIndexes(ctx)
|
||||
gc.recycleUnusedAnalyzeFiles(ctx)
|
||||
gc.recycleUnusedTextIndexFiles(ctx)
|
||||
gc.recycleUnusedJSONIndexFiles(ctx)
|
||||
})
|
||||
}()
|
||||
go func() {
|
||||
|
@ -470,11 +471,16 @@ func (gc *garbageCollector) recycleDroppedSegments(ctx context.Context) {
|
|||
logs[key] = struct{}{}
|
||||
}
|
||||
|
||||
for key := range getJSONKeyLogs(segment, gc) {
|
||||
logs[key] = struct{}{}
|
||||
}
|
||||
|
||||
log.Info("GC segment start...", zap.Int("insert_logs", len(segment.GetBinlogs())),
|
||||
zap.Int("delta_logs", len(segment.GetDeltalogs())),
|
||||
zap.Int("stats_logs", len(segment.GetStatslogs())),
|
||||
zap.Int("bm25_logs", len(segment.GetBm25Statslogs())),
|
||||
zap.Int("text_logs", len(segment.GetTextStatsLogs())))
|
||||
zap.Int("text_logs", len(segment.GetTextStatsLogs())),
|
||||
zap.Int("json_key_logs", len(segment.GetJsonKeyStats())))
|
||||
if err := gc.removeObjectFiles(ctx, logs); err != nil {
|
||||
log.Warn("GC segment remove logs failed", zap.Error(err))
|
||||
continue
|
||||
|
@ -585,6 +591,20 @@ func getTextLogs(sinfo *SegmentInfo) map[string]struct{} {
|
|||
return textLogs
|
||||
}
|
||||
|
||||
func getJSONKeyLogs(sinfo *SegmentInfo, gc *garbageCollector) map[string]struct{} {
|
||||
jsonkeyLogs := make(map[string]struct{})
|
||||
for _, flog := range sinfo.GetJsonKeyStats() {
|
||||
for _, file := range flog.GetFiles() {
|
||||
prefix := fmt.Sprintf("%s/%s/%d/%d/%d/%d/%d/%d", gc.option.cli.RootPath(), common.JSONIndexPath,
|
||||
flog.GetBuildID(), flog.GetVersion(), sinfo.GetCollectionID(), sinfo.GetPartitionID(), sinfo.GetID(), flog.GetFieldID())
|
||||
file = path.Join(prefix, file)
|
||||
jsonkeyLogs[file] = struct{}{}
|
||||
}
|
||||
}
|
||||
|
||||
return jsonkeyLogs
|
||||
}
|
||||
|
||||
// removeObjectFiles remove file from oss storage, return error if any log failed to remove.
|
||||
func (gc *garbageCollector) removeObjectFiles(ctx context.Context, filePaths map[string]struct{}) error {
|
||||
futures := make([]*conc.Future[struct{}], 0)
|
||||
|
@ -904,3 +924,64 @@ func (gc *garbageCollector) recycleUnusedTextIndexFiles(ctx context.Context) {
|
|||
|
||||
metrics.GarbageCollectorRunCount.WithLabelValues(fmt.Sprint(paramtable.GetNodeID())).Add(1)
|
||||
}
|
||||
|
||||
// recycleUnusedJSONIndexFiles load meta file info and compares OSS keys
|
||||
// if missing found, performs gc cleanup
|
||||
func (gc *garbageCollector) recycleUnusedJSONIndexFiles(ctx context.Context) {
|
||||
start := time.Now()
|
||||
log := log.Ctx(ctx).With(zap.String("gcName", "recycleUnusedJSONIndexFiles"), zap.Time("startAt", start))
|
||||
log.Info("start recycleUnusedJSONIndexFiles...")
|
||||
defer func() { log.Info("recycleUnusedJSONIndexFiles done", zap.Duration("timeCost", time.Since(start))) }()
|
||||
|
||||
hasJSONIndexSegments := gc.meta.SelectSegments(ctx, SegmentFilterFunc(func(info *SegmentInfo) bool {
|
||||
return len(info.GetJsonKeyStats()) != 0
|
||||
}))
|
||||
fileNum := 0
|
||||
deletedFilesNum := atomic.NewInt32(0)
|
||||
|
||||
for _, seg := range hasJSONIndexSegments {
|
||||
for _, fieldStats := range seg.GetJsonKeyStats() {
|
||||
log := log.With(zap.Int64("segmentID", seg.GetID()), zap.Int64("fieldID", fieldStats.GetFieldID()))
|
||||
// clear low version task
|
||||
for i := int64(1); i < fieldStats.GetVersion(); i++ {
|
||||
prefix := fmt.Sprintf("%s/%s/%d/%d/%d/%d/%d/%d", gc.option.cli.RootPath(), common.JSONIndexPath,
|
||||
fieldStats.GetBuildID(), i, seg.GetCollectionID(), seg.GetPartitionID(), seg.GetID(), fieldStats.GetFieldID())
|
||||
futures := make([]*conc.Future[struct{}], 0)
|
||||
|
||||
err := gc.option.cli.WalkWithPrefix(ctx, prefix, true, func(files *storage.ChunkObjectInfo) bool {
|
||||
file := files.FilePath
|
||||
|
||||
future := gc.option.removeObjectPool.Submit(func() (struct{}, error) {
|
||||
log := log.With(zap.String("file", file))
|
||||
log.Info("garbageCollector recycleUnusedJSONIndexFiles remove file...")
|
||||
|
||||
if err := gc.option.cli.Remove(ctx, file); err != nil {
|
||||
log.Warn("garbageCollector recycleUnusedJSONIndexFiles remove file failed", zap.Error(err))
|
||||
return struct{}{}, err
|
||||
}
|
||||
deletedFilesNum.Inc()
|
||||
log.Info("garbageCollector recycleUnusedJSONIndexFiles remove file success")
|
||||
return struct{}{}, nil
|
||||
})
|
||||
futures = append(futures, future)
|
||||
return true
|
||||
})
|
||||
|
||||
// Wait for all remove tasks done.
|
||||
if err := conc.BlockOnAll(futures...); err != nil {
|
||||
// error is logged, and can be ignored here.
|
||||
log.Warn("some task failure in remove object pool", zap.Error(err))
|
||||
}
|
||||
|
||||
log = log.With(zap.Int("deleteJSONKeyIndexNum", int(deletedFilesNum.Load())), zap.Int("walkFileNum", fileNum))
|
||||
if err != nil {
|
||||
log.Warn("json index files recycle failed when walk with prefix", zap.Error(err))
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
log.Info("json index files recycle done")
|
||||
|
||||
metrics.GarbageCollectorRunCount.WithLabelValues(fmt.Sprint(paramtable.GetNodeID())).Add(1)
|
||||
}
|
||||
|
|
|
@ -73,6 +73,9 @@ func (jm *statsJobManager) triggerStatsTaskLoop() {
|
|||
|
||||
ticker := time.NewTicker(Params.DataCoordCfg.TaskCheckInterval.GetAsDuration(time.Second))
|
||||
defer ticker.Stop()
|
||||
|
||||
lastJSONStatsLastTrigger := time.Now().Unix()
|
||||
maxJSONStatsTaskCount := 0
|
||||
for {
|
||||
select {
|
||||
case <-jm.ctx.Done():
|
||||
|
@ -82,7 +85,7 @@ func (jm *statsJobManager) triggerStatsTaskLoop() {
|
|||
jm.triggerSortStatsTask()
|
||||
jm.triggerTextStatsTask()
|
||||
jm.triggerBM25StatsTask()
|
||||
jm.triggerJsonKeyIndexStatsTask()
|
||||
lastJSONStatsLastTrigger, maxJSONStatsTaskCount = jm.triggerJsonKeyIndexStatsTask(lastJSONStatsLastTrigger, maxJSONStatsTaskCount)
|
||||
|
||||
case segID := <-getStatsTaskChSingleton():
|
||||
log.Info("receive new segment to trigger stats task", zap.Int64("segmentID", segID))
|
||||
|
@ -194,7 +197,7 @@ func (jm *statsJobManager) triggerTextStatsTask() {
|
|||
}
|
||||
}
|
||||
|
||||
func (jm *statsJobManager) triggerJsonKeyIndexStatsTask() {
|
||||
func (jm *statsJobManager) triggerJsonKeyIndexStatsTask(lastJSONStatsLastTrigger int64, maxJSONStatsTaskCount int) (int64, int) {
|
||||
collections := jm.mt.GetCollections()
|
||||
for _, collection := range collections {
|
||||
needTriggerFieldIDs := make([]UniqueID, 0)
|
||||
|
@ -207,14 +210,23 @@ func (jm *statsJobManager) triggerJsonKeyIndexStatsTask() {
|
|||
segments := jm.mt.SelectSegments(jm.ctx, WithCollection(collection.ID), SegmentFilterFunc(func(seg *SegmentInfo) bool {
|
||||
return seg.GetIsSorted() && needDoJsonKeyIndex(seg, needTriggerFieldIDs)
|
||||
}))
|
||||
if time.Now().Unix()-lastJSONStatsLastTrigger > int64(Params.DataCoordCfg.JSONStatsTriggerInterval.GetAsDuration(time.Minute).Seconds()) {
|
||||
lastJSONStatsLastTrigger = time.Now().Unix()
|
||||
maxJSONStatsTaskCount = 0
|
||||
}
|
||||
for _, segment := range segments {
|
||||
if maxJSONStatsTaskCount >= Params.DataCoordCfg.JSONStatsTriggerCount.GetAsInt() {
|
||||
break
|
||||
}
|
||||
if err := jm.SubmitStatsTask(segment.GetID(), segment.GetID(), indexpb.StatsSubJob_JsonKeyIndexJob, true); err != nil {
|
||||
log.Warn("create stats task with json key index for segment failed, wait for retry:",
|
||||
zap.Int64("segmentID", segment.GetID()), zap.Error(err))
|
||||
continue
|
||||
}
|
||||
maxJSONStatsTaskCount++
|
||||
}
|
||||
}
|
||||
return lastJSONStatsLastTrigger, maxJSONStatsTaskCount
|
||||
}
|
||||
|
||||
func (jm *statsJobManager) triggerBM25StatsTask() {
|
||||
|
|
|
@ -238,8 +238,11 @@ func (st *statsTask) PreCheck(ctx context.Context, dependency *taskScheduler) bo
|
|||
CollectionTtl: collTtl.Nanoseconds(),
|
||||
CurrentTs: tsoutil.GetCurrentTime(),
|
||||
// update version after check
|
||||
TaskVersion: statsMeta.GetVersion() + 1,
|
||||
BinlogMaxSize: Params.DataNodeCfg.BinLogMaxSize.GetAsUint64(),
|
||||
TaskVersion: statsMeta.GetVersion() + 1,
|
||||
BinlogMaxSize: Params.DataNodeCfg.BinLogMaxSize.GetAsUint64(),
|
||||
EnableJsonKeyStats: Params.CommonCfg.EnabledJSONKeyStats.GetAsBool(),
|
||||
JsonKeyStatsTantivyMemory: Params.DataCoordCfg.JSONKeyStatsMemoryBudgetInTantivy.GetAsInt64(),
|
||||
JsonKeyStatsDataFormat: 0,
|
||||
}
|
||||
|
||||
log.Info("stats task pre check successfully", zap.String("subJobType", st.subJobType.String()),
|
||||
|
|
|
@ -198,15 +198,6 @@ func (i *IndexNode) initSegcore() {
|
|||
cGpuMemoryPoolInitSize := C.uint32_t(paramtable.Get().GpuConfig.InitSize.GetAsUint32())
|
||||
cGpuMemoryPoolMaxSize := C.uint32_t(paramtable.Get().GpuConfig.MaxSize.GetAsUint32())
|
||||
C.SegcoreSetKnowhereGpuMemoryPoolSize(cGpuMemoryPoolInitSize, cGpuMemoryPoolMaxSize)
|
||||
|
||||
cJSONIndexMemoryBudgetInTantivy := C.int64_t(paramtable.Get().QueryNodeCfg.JSONIndexMemoryBudgetInTantivy.GetAsInt64() * 1024 * 1024)
|
||||
C.InitDefaultJSONKeyIndexMemoryBudget(cJSONIndexMemoryBudgetInTantivy)
|
||||
|
||||
cJSONIndexCommitInterval := C.int64_t(paramtable.Get().QueryNodeCfg.JSONIndexCommitInterval.GetAsInt64())
|
||||
C.InitDefaultJSONKeyIndexCommitInterval(cJSONIndexCommitInterval)
|
||||
|
||||
cJSONIndexEnabled := C.bool(Params.CommonCfg.EnabledJSONKeyStats.GetAsBool())
|
||||
C.InitDefaultJSONKeyIndexEnable(cJSONIndexEnabled)
|
||||
}
|
||||
|
||||
func (i *IndexNode) CloseSegcore() {
|
||||
|
|
|
@ -633,22 +633,23 @@ func (s *IndexNodeSuite) Test_CreateStatsTask() {
|
|||
s.Run("normal case", func() {
|
||||
taskID := int64(100)
|
||||
req := &workerpb.CreateStatsRequest{
|
||||
ClusterID: "cluster2",
|
||||
TaskID: taskID,
|
||||
CollectionID: s.collID,
|
||||
PartitionID: s.partID,
|
||||
InsertChannel: "ch1",
|
||||
SegmentID: s.segID,
|
||||
InsertLogs: fieldBinlogs,
|
||||
DeltaLogs: nil,
|
||||
StorageConfig: s.storageConfig,
|
||||
Schema: generateTestSchema(),
|
||||
TargetSegmentID: s.segID + 1,
|
||||
StartLogID: s.logID + 100,
|
||||
EndLogID: s.logID + 200,
|
||||
NumRows: s.numRows,
|
||||
BinlogMaxSize: 131000,
|
||||
SubJobType: indexpb.StatsSubJob_Sort,
|
||||
ClusterID: "cluster2",
|
||||
TaskID: taskID,
|
||||
CollectionID: s.collID,
|
||||
PartitionID: s.partID,
|
||||
InsertChannel: "ch1",
|
||||
SegmentID: s.segID,
|
||||
InsertLogs: fieldBinlogs,
|
||||
DeltaLogs: nil,
|
||||
StorageConfig: s.storageConfig,
|
||||
Schema: generateTestSchema(),
|
||||
TargetSegmentID: s.segID + 1,
|
||||
StartLogID: s.logID + 100,
|
||||
EndLogID: s.logID + 200,
|
||||
NumRows: s.numRows,
|
||||
BinlogMaxSize: 131000,
|
||||
SubJobType: indexpb.StatsSubJob_Sort,
|
||||
EnableJsonKeyStats: false,
|
||||
}
|
||||
|
||||
status, err := s.in.CreateJobV2(ctx, &workerpb.CreateJobV2Request{
|
||||
|
|
|
@ -351,7 +351,12 @@ func (st *statsTask) Execute(ctx context.Context) error {
|
|||
log.Ctx(ctx).Warn("stats wrong, failed to create text index", zap.Error(err))
|
||||
return err
|
||||
}
|
||||
} else if st.req.GetSubJobType() == indexpb.StatsSubJob_JsonKeyIndexJob {
|
||||
}
|
||||
if st.req.GetSubJobType() == indexpb.StatsSubJob_Sort || st.req.GetSubJobType() == indexpb.StatsSubJob_JsonKeyIndexJob {
|
||||
if !st.req.GetEnableJsonKeyStats() {
|
||||
return nil
|
||||
}
|
||||
|
||||
err = st.createJSONKeyIndex(ctx,
|
||||
st.req.GetStorageConfig(),
|
||||
st.req.GetCollectionID(),
|
||||
|
@ -359,6 +364,8 @@ func (st *statsTask) Execute(ctx context.Context) error {
|
|||
st.req.GetTargetSegmentID(),
|
||||
st.req.GetTaskVersion(),
|
||||
st.req.GetTaskID(),
|
||||
st.req.GetJsonKeyStatsTantivyMemory(),
|
||||
st.req.GetJsonKeyStatsDataFormat(),
|
||||
insertLogs)
|
||||
if err != nil {
|
||||
log.Warn("stats wrong, failed to create json index", zap.Error(err))
|
||||
|
@ -755,6 +762,8 @@ func (st *statsTask) createJSONKeyIndex(ctx context.Context,
|
|||
segmentID int64,
|
||||
version int64,
|
||||
taskID int64,
|
||||
tantivyMemory int64,
|
||||
jsonKeyStatsDataFormat int64,
|
||||
insertBinlogs []*datapb.FieldBinlog,
|
||||
) error {
|
||||
log := log.Ctx(ctx).With(
|
||||
|
@ -802,14 +811,16 @@ func (st *statsTask) createJSONKeyIndex(ctx context.Context,
|
|||
}
|
||||
|
||||
buildIndexParams := &indexcgopb.BuildIndexInfo{
|
||||
BuildID: taskID,
|
||||
CollectionID: collectionID,
|
||||
PartitionID: partitionID,
|
||||
SegmentID: segmentID,
|
||||
IndexVersion: version,
|
||||
InsertFiles: files,
|
||||
FieldSchema: field,
|
||||
StorageConfig: newStorageConfig,
|
||||
BuildID: taskID,
|
||||
CollectionID: collectionID,
|
||||
PartitionID: partitionID,
|
||||
SegmentID: segmentID,
|
||||
IndexVersion: version,
|
||||
InsertFiles: files,
|
||||
FieldSchema: field,
|
||||
StorageConfig: newStorageConfig,
|
||||
JsonKeyStatsTantivyMemory: tantivyMemory,
|
||||
JsonKeyStatsDataFormat: jsonKeyStatsDataFormat,
|
||||
}
|
||||
|
||||
uploaded, err := indexcgowrapper.CreateJSONKeyIndex(ctx, buildIndexParams)
|
||||
|
@ -817,10 +828,11 @@ func (st *statsTask) createJSONKeyIndex(ctx context.Context,
|
|||
return err
|
||||
}
|
||||
jsonKeyIndexStats[field.GetFieldID()] = &datapb.JsonKeyStats{
|
||||
FieldID: field.GetFieldID(),
|
||||
Version: version,
|
||||
BuildID: taskID,
|
||||
Files: lo.Keys(uploaded),
|
||||
FieldID: field.GetFieldID(),
|
||||
Version: version,
|
||||
BuildID: taskID,
|
||||
Files: lo.Keys(uploaded),
|
||||
JsonKeyStatsDataFormat: jsonKeyStatsDataFormat,
|
||||
}
|
||||
log.Info("field enable json key index, create json key index done",
|
||||
zap.Int64("field id", field.GetFieldID()),
|
||||
|
|
|
@ -23,6 +23,7 @@ import (
|
|||
"github.com/samber/lo"
|
||||
"go.uber.org/zap"
|
||||
|
||||
"github.com/milvus-io/milvus-proto/go-api/v2/schemapb"
|
||||
"github.com/milvus-io/milvus/internal/querycoordv2/meta"
|
||||
"github.com/milvus-io/milvus/internal/querycoordv2/params"
|
||||
"github.com/milvus-io/milvus/internal/querycoordv2/session"
|
||||
|
@ -32,6 +33,7 @@ import (
|
|||
"github.com/milvus-io/milvus/pkg/v2/proto/datapb"
|
||||
"github.com/milvus-io/milvus/pkg/v2/proto/indexpb"
|
||||
"github.com/milvus-io/milvus/pkg/v2/proto/querypb"
|
||||
"github.com/milvus-io/milvus/pkg/v2/util/paramtable"
|
||||
"github.com/milvus-io/milvus/pkg/v2/util/typeutil"
|
||||
)
|
||||
|
||||
|
@ -90,20 +92,25 @@ func (c *IndexChecker) Check(ctx context.Context) []task.Task {
|
|||
}
|
||||
|
||||
collection := c.meta.CollectionManager.GetCollection(ctx, collectionID)
|
||||
schema := c.meta.CollectionManager.GetCollectionSchema(ctx, collectionID)
|
||||
if collection == nil {
|
||||
log.Warn("collection released during check index", zap.Int64("collection", collectionID))
|
||||
continue
|
||||
}
|
||||
if schema == nil {
|
||||
log.Warn("schema released during check index", zap.Int64("collection", collectionID))
|
||||
continue
|
||||
}
|
||||
replicas := c.meta.ReplicaManager.GetByCollection(ctx, collectionID)
|
||||
for _, replica := range replicas {
|
||||
tasks = append(tasks, c.checkReplica(ctx, collection, replica, indexInfos)...)
|
||||
tasks = append(tasks, c.checkReplica(ctx, collection, replica, indexInfos, schema)...)
|
||||
}
|
||||
}
|
||||
|
||||
return tasks
|
||||
}
|
||||
|
||||
func (c *IndexChecker) checkReplica(ctx context.Context, collection *meta.Collection, replica *meta.Replica, indexInfos []*indexpb.IndexInfo) []task.Task {
|
||||
func (c *IndexChecker) checkReplica(ctx context.Context, collection *meta.Collection, replica *meta.Replica, indexInfos []*indexpb.IndexInfo, schema *schemapb.CollectionSchema) []task.Task {
|
||||
log := log.Ctx(ctx).With(
|
||||
zap.Int64("collectionID", collection.GetCollectionID()),
|
||||
)
|
||||
|
@ -114,6 +121,9 @@ func (c *IndexChecker) checkReplica(ctx context.Context, collection *meta.Collec
|
|||
|
||||
roNodeSet := typeutil.NewUniqueSet(replica.GetRONodes()...)
|
||||
targets := make(map[int64][]int64) // segmentID => FieldID
|
||||
|
||||
idSegmentsStats := make(map[int64]*meta.Segment)
|
||||
targetsStats := make(map[int64][]int64) // segmentID => FieldID
|
||||
for _, segment := range segments {
|
||||
// skip update index in read only node
|
||||
if roNodeSet.Contain(segment.Node) {
|
||||
|
@ -127,9 +137,13 @@ func (c *IndexChecker) checkReplica(ctx context.Context, collection *meta.Collec
|
|||
}
|
||||
|
||||
missing := c.checkSegment(segment, indexInfos)
|
||||
missingStats := c.checkSegmentStats(segment, schema, collection.LoadFields)
|
||||
if len(missing) > 0 {
|
||||
targets[segment.GetID()] = missing
|
||||
idSegments[segment.GetID()] = segment
|
||||
} else if len(missingStats) > 0 {
|
||||
targetsStats[segment.GetID()] = missingStats
|
||||
idSegmentsStats[segment.GetID()] = segment
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -157,6 +171,29 @@ func (c *IndexChecker) checkReplica(ctx context.Context, collection *meta.Collec
|
|||
return c.createSegmentUpdateTask(ctx, idSegments[segmentID], replica)
|
||||
})
|
||||
|
||||
segmentsStatsToUpdate := typeutil.NewSet[int64]()
|
||||
for _, segmentIDs := range lo.Chunk(lo.Keys(idSegmentsStats), MaxSegmentNumPerGetIndexInfoRPC) {
|
||||
segmentInfos, err := c.broker.GetSegmentInfo(ctx, segmentIDs...)
|
||||
if err != nil {
|
||||
log.Warn("failed to get SegmentInfo for segments", zap.Int64s("segmentIDs", segmentIDs), zap.Error(err))
|
||||
continue
|
||||
}
|
||||
for _, segmentInfo := range segmentInfos {
|
||||
fields := targetsStats[segmentInfo.ID]
|
||||
missingFields := typeutil.NewSet(fields...)
|
||||
for field := range segmentInfo.GetJsonKeyStats() {
|
||||
if missingFields.Contain(field) {
|
||||
segmentsStatsToUpdate.Insert(segmentInfo.ID)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tasksStats := lo.FilterMap(segmentsStatsToUpdate.Collect(), func(segmentID int64, _ int) (task.Task, bool) {
|
||||
return c.createSegmentStatsUpdateTask(ctx, idSegmentsStats[segmentID], replica)
|
||||
})
|
||||
tasks = append(tasks, tasksStats...)
|
||||
|
||||
return tasks
|
||||
}
|
||||
|
||||
|
@ -200,3 +237,54 @@ func (c *IndexChecker) createSegmentUpdateTask(ctx context.Context, segment *met
|
|||
t.SetReason("missing index")
|
||||
return t, true
|
||||
}
|
||||
|
||||
func (c *IndexChecker) checkSegmentStats(segment *meta.Segment, schema *schemapb.CollectionSchema, loadField []int64) (missFieldIDs []int64) {
|
||||
var result []int64
|
||||
|
||||
if paramtable.Get().CommonCfg.EnabledJSONKeyStats.GetAsBool() {
|
||||
loadFieldMap := make(map[int64]struct{})
|
||||
for _, v := range loadField {
|
||||
loadFieldMap[v] = struct{}{}
|
||||
}
|
||||
jsonStatsFieldMap := make(map[int64]struct{})
|
||||
for _, v := range segment.JSONIndexField {
|
||||
jsonStatsFieldMap[v] = struct{}{}
|
||||
}
|
||||
for _, field := range schema.GetFields() {
|
||||
// Check if the field exists in both loadFieldMap and jsonStatsFieldMap
|
||||
h := typeutil.CreateFieldSchemaHelper(field)
|
||||
if h.EnableJSONKeyIndex() {
|
||||
if _, ok := loadFieldMap[field.FieldID]; ok {
|
||||
if _, ok := jsonStatsFieldMap[field.FieldID]; !ok {
|
||||
result = append(result, field.FieldID)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
func (c *IndexChecker) createSegmentStatsUpdateTask(ctx context.Context, segment *meta.Segment, replica *meta.Replica) (task.Task, bool) {
|
||||
action := task.NewSegmentActionWithScope(segment.Node, task.ActionTypeStatsUpdate, segment.GetInsertChannel(), segment.GetID(), querypb.DataScope_Historical, int(segment.GetNumOfRows()))
|
||||
t, err := task.NewSegmentTask(
|
||||
ctx,
|
||||
params.Params.QueryCoordCfg.SegmentTaskTimeout.GetAsDuration(time.Millisecond),
|
||||
c.ID(),
|
||||
segment.GetCollectionID(),
|
||||
replica,
|
||||
action,
|
||||
)
|
||||
if err != nil {
|
||||
log.Warn("create segment stats update task failed",
|
||||
zap.Int64("collection", segment.GetCollectionID()),
|
||||
zap.String("channel", segment.GetInsertChannel()),
|
||||
zap.Int64("node", segment.Node),
|
||||
zap.Error(err),
|
||||
)
|
||||
return nil, false
|
||||
}
|
||||
t.SetPriority(task.TaskPriorityLow)
|
||||
t.SetReason("missing json stats")
|
||||
return t, true
|
||||
}
|
||||
|
|
|
@ -24,6 +24,7 @@ import (
|
|||
"github.com/stretchr/testify/mock"
|
||||
"github.com/stretchr/testify/suite"
|
||||
|
||||
"github.com/milvus-io/milvus-proto/go-api/v2/schemapb"
|
||||
etcdkv "github.com/milvus-io/milvus/internal/kv/etcd"
|
||||
"github.com/milvus-io/milvus/internal/metastore/kv/querycoord"
|
||||
"github.com/milvus-io/milvus/internal/querycoordv2/meta"
|
||||
|
@ -97,6 +98,12 @@ func (suite *IndexCheckerSuite) TestLoadIndex() {
|
|||
// meta
|
||||
coll := utils.CreateTestCollection(1, 1)
|
||||
coll.FieldIndexID = map[int64]int64{101: 1000}
|
||||
coll.Schema = &schemapb.CollectionSchema{
|
||||
Name: "test_loadJsonIndex",
|
||||
Fields: []*schemapb.FieldSchema{
|
||||
{FieldID: 101, DataType: schemapb.DataType_JSON, Name: "JSON"},
|
||||
},
|
||||
}
|
||||
checker.meta.CollectionManager.PutCollection(ctx, coll)
|
||||
checker.meta.ReplicaManager.Put(ctx, utils.CreateTestReplica(200, 1, []int64{1, 2}))
|
||||
suite.nodeMgr.Add(session.NewNodeInfo(session.ImmutableNodeInfo{
|
||||
|
@ -133,6 +140,8 @@ func (suite *IndexCheckerSuite) TestLoadIndex() {
|
|||
},
|
||||
}, nil)
|
||||
|
||||
suite.broker.EXPECT().GetSegmentInfo(mock.Anything, mock.Anything).
|
||||
Return([]*datapb.SegmentInfo{}, nil).Maybe()
|
||||
tasks := checker.Check(context.Background())
|
||||
suite.Require().Len(tasks, 1)
|
||||
|
||||
|
@ -162,6 +171,12 @@ func (suite *IndexCheckerSuite) TestIndexInfoNotMatch() {
|
|||
// meta
|
||||
coll := utils.CreateTestCollection(1, 1)
|
||||
coll.FieldIndexID = map[int64]int64{101: 1000}
|
||||
coll.Schema = &schemapb.CollectionSchema{
|
||||
Name: "test_loadJsonIndex",
|
||||
Fields: []*schemapb.FieldSchema{
|
||||
{FieldID: 101, DataType: schemapb.DataType_JSON, Name: "JSON"},
|
||||
},
|
||||
}
|
||||
checker.meta.CollectionManager.PutCollection(ctx, coll)
|
||||
checker.meta.ReplicaManager.Put(ctx, utils.CreateTestReplica(200, 1, []int64{1, 2}))
|
||||
suite.nodeMgr.Add(session.NewNodeInfo(session.ImmutableNodeInfo{
|
||||
|
@ -211,7 +226,8 @@ func (suite *IndexCheckerSuite) TestIndexInfoNotMatch() {
|
|||
IndexID: 1000,
|
||||
},
|
||||
}, nil)
|
||||
|
||||
suite.broker.EXPECT().GetSegmentInfo(mock.Anything, mock.Anything).
|
||||
Return([]*datapb.SegmentInfo{}, nil).Maybe()
|
||||
tasks := checker.Check(context.Background())
|
||||
suite.Require().Len(tasks, 0)
|
||||
}
|
||||
|
@ -223,6 +239,12 @@ func (suite *IndexCheckerSuite) TestGetIndexInfoFailed() {
|
|||
// meta
|
||||
coll := utils.CreateTestCollection(1, 1)
|
||||
coll.FieldIndexID = map[int64]int64{101: 1000}
|
||||
coll.Schema = &schemapb.CollectionSchema{
|
||||
Name: "test_loadJsonIndex",
|
||||
Fields: []*schemapb.FieldSchema{
|
||||
{FieldID: 101, DataType: schemapb.DataType_JSON, Name: "JSON"},
|
||||
},
|
||||
}
|
||||
checker.meta.CollectionManager.PutCollection(ctx, coll)
|
||||
checker.meta.ReplicaManager.Put(ctx, utils.CreateTestReplica(200, 1, []int64{1, 2}))
|
||||
suite.nodeMgr.Add(session.NewNodeInfo(session.ImmutableNodeInfo{
|
||||
|
@ -251,7 +273,8 @@ func (suite *IndexCheckerSuite) TestGetIndexInfoFailed() {
|
|||
IndexID: 1000,
|
||||
},
|
||||
}, nil)
|
||||
|
||||
suite.broker.EXPECT().GetSegmentInfo(mock.Anything, mock.Anything).
|
||||
Return([]*datapb.SegmentInfo{}, nil).Maybe()
|
||||
tasks := checker.Check(context.Background())
|
||||
suite.Require().Len(tasks, 0)
|
||||
}
|
||||
|
@ -263,6 +286,12 @@ func (suite *IndexCheckerSuite) TestCreateNewIndex() {
|
|||
// meta
|
||||
coll := utils.CreateTestCollection(1, 1)
|
||||
coll.FieldIndexID = map[int64]int64{101: 1000}
|
||||
coll.Schema = &schemapb.CollectionSchema{
|
||||
Name: "test_loadJsonIndex",
|
||||
Fields: []*schemapb.FieldSchema{
|
||||
{FieldID: 101, DataType: schemapb.DataType_JSON, Name: "JSON"},
|
||||
},
|
||||
}
|
||||
checker.meta.CollectionManager.PutCollection(ctx, coll)
|
||||
checker.meta.ReplicaManager.Put(ctx, utils.CreateTestReplica(200, 1, []int64{1, 2}))
|
||||
suite.nodeMgr.Add(session.NewNodeInfo(session.ImmutableNodeInfo{
|
||||
|
@ -317,13 +346,234 @@ func (suite *IndexCheckerSuite) TestCreateNewIndex() {
|
|||
IndexFilePaths: []string{"index"},
|
||||
},
|
||||
}}, nil)
|
||||
|
||||
suite.broker.EXPECT().GetSegmentInfo(mock.Anything, mock.Anything).
|
||||
Return([]*datapb.SegmentInfo{}, nil).Maybe()
|
||||
tasks := checker.Check(context.Background())
|
||||
suite.Len(tasks, 1)
|
||||
suite.Len(tasks[0].Actions(), 1)
|
||||
suite.Equal(tasks[0].Actions()[0].(*task.SegmentAction).Type(), task.ActionTypeUpdate)
|
||||
}
|
||||
|
||||
func (suite *IndexCheckerSuite) TestLoadJsonIndex() {
|
||||
checker := suite.checker
|
||||
ctx := context.Background()
|
||||
paramtable.Get().Save(paramtable.Get().CommonCfg.EnabledJSONKeyStats.Key, "true")
|
||||
defer paramtable.Get().Reset(paramtable.Get().CommonCfg.EnabledJSONKeyStats.Key)
|
||||
// meta
|
||||
coll := utils.CreateTestCollection(1, 1)
|
||||
coll.FieldIndexID = map[int64]int64{101: 1000}
|
||||
coll.Schema = &schemapb.CollectionSchema{
|
||||
Name: "test_loadJsonIndex",
|
||||
Fields: []*schemapb.FieldSchema{
|
||||
{FieldID: 101, DataType: schemapb.DataType_JSON, Name: "JSON"},
|
||||
},
|
||||
}
|
||||
coll.LoadFields = []int64{101}
|
||||
checker.meta.CollectionManager.PutCollection(ctx, coll)
|
||||
checker.meta.ReplicaManager.Put(ctx, utils.CreateTestReplica(200, 1, []int64{1, 2}))
|
||||
suite.nodeMgr.Add(session.NewNodeInfo(session.ImmutableNodeInfo{
|
||||
NodeID: 1,
|
||||
Address: "localhost",
|
||||
Hostname: "localhost",
|
||||
}))
|
||||
suite.nodeMgr.Add(session.NewNodeInfo(session.ImmutableNodeInfo{
|
||||
NodeID: 2,
|
||||
Address: "localhost",
|
||||
Hostname: "localhost",
|
||||
}))
|
||||
checker.meta.ResourceManager.HandleNodeUp(ctx, 1)
|
||||
checker.meta.ResourceManager.HandleNodeUp(ctx, 2)
|
||||
|
||||
// dist
|
||||
fieldIndexInfo := &querypb.FieldIndexInfo{
|
||||
FieldID: 101,
|
||||
IndexID: 1000,
|
||||
EnableIndex: true,
|
||||
}
|
||||
|
||||
indexInfo := make(map[int64]*querypb.FieldIndexInfo)
|
||||
indexInfo[fieldIndexInfo.IndexID] = fieldIndexInfo
|
||||
segment := utils.CreateTestSegment(1, 1, 2, 1, 1, "test-insert-channel")
|
||||
segment.IndexInfo = indexInfo
|
||||
checker.dist.SegmentDistManager.Update(1, segment)
|
||||
|
||||
// broker
|
||||
suite.broker.EXPECT().ListIndexes(mock.Anything, mock.Anything).Call.Return(
|
||||
func(ctx context.Context, collectionID int64) ([]*indexpb.IndexInfo, error) {
|
||||
return []*indexpb.IndexInfo{
|
||||
{
|
||||
FieldID: 101,
|
||||
IndexID: 1000,
|
||||
},
|
||||
}, nil
|
||||
},
|
||||
)
|
||||
mockJSONKeyStats := map[int64]*datapb.JsonKeyStats{
|
||||
101: {
|
||||
FieldID: 101,
|
||||
},
|
||||
}
|
||||
suite.broker.EXPECT().GetSegmentInfo(mock.Anything, mock.Anything).
|
||||
Return([]*datapb.SegmentInfo{
|
||||
{
|
||||
ID: 2,
|
||||
JsonKeyStats: mockJSONKeyStats,
|
||||
},
|
||||
}, nil).Maybe()
|
||||
tasks := checker.Check(context.Background())
|
||||
suite.Require().Len(tasks, 1)
|
||||
|
||||
t := tasks[0]
|
||||
suite.Require().Len(t.Actions(), 1)
|
||||
|
||||
action, ok := t.Actions()[0].(*task.SegmentAction)
|
||||
suite.Require().True(ok)
|
||||
suite.EqualValues(200, t.ReplicaID())
|
||||
suite.Equal(task.ActionTypeStatsUpdate, action.Type())
|
||||
suite.EqualValues(2, action.GetSegmentID())
|
||||
|
||||
// test skip load json index for read only node
|
||||
suite.nodeMgr.Stopping(1)
|
||||
suite.nodeMgr.Stopping(2)
|
||||
suite.meta.ResourceManager.HandleNodeStopping(ctx, 1)
|
||||
suite.meta.ResourceManager.HandleNodeStopping(ctx, 2)
|
||||
utils.RecoverAllCollection(suite.meta)
|
||||
tasks = checker.Check(context.Background())
|
||||
suite.Require().Len(tasks, 0)
|
||||
}
|
||||
|
||||
func (suite *IndexCheckerSuite) TestJsonIndexNotMatch() {
|
||||
checker := suite.checker
|
||||
ctx := context.Background()
|
||||
paramtable.Get().Save(paramtable.Get().CommonCfg.EnabledJSONKeyStats.Key, "true")
|
||||
defer paramtable.Get().Reset(paramtable.Get().CommonCfg.EnabledJSONKeyStats.Key)
|
||||
// meta
|
||||
coll := utils.CreateTestCollection(1, 1)
|
||||
coll.FieldIndexID = map[int64]int64{101: 1000}
|
||||
coll.Schema = &schemapb.CollectionSchema{
|
||||
Name: "test_loadJsonIndex",
|
||||
Fields: []*schemapb.FieldSchema{
|
||||
{FieldID: 101, DataType: schemapb.DataType_JSON, Name: "JSON"},
|
||||
},
|
||||
}
|
||||
checker.meta.CollectionManager.PutCollection(ctx, coll)
|
||||
checker.meta.ReplicaManager.Put(ctx, utils.CreateTestReplica(200, 1, []int64{1, 2}))
|
||||
suite.nodeMgr.Add(session.NewNodeInfo(session.ImmutableNodeInfo{
|
||||
NodeID: 1,
|
||||
Address: "localhost",
|
||||
Hostname: "localhost",
|
||||
}))
|
||||
suite.nodeMgr.Add(session.NewNodeInfo(session.ImmutableNodeInfo{
|
||||
NodeID: 2,
|
||||
Address: "localhost",
|
||||
Hostname: "localhost",
|
||||
}))
|
||||
checker.meta.ResourceManager.HandleNodeUp(ctx, 1)
|
||||
checker.meta.ResourceManager.HandleNodeUp(ctx, 2)
|
||||
|
||||
// dist
|
||||
checker.dist.SegmentDistManager.Update(1, utils.CreateTestSegment(1, 1, 2, 1, 1, "test-insert-channel"))
|
||||
|
||||
// broker
|
||||
suite.broker.EXPECT().ListIndexes(mock.Anything, mock.Anything).Call.Return(
|
||||
func(ctx context.Context, collectionID int64) ([]*indexpb.IndexInfo, error) {
|
||||
return []*indexpb.IndexInfo{
|
||||
{
|
||||
FieldID: 101,
|
||||
IndexID: 1000,
|
||||
},
|
||||
}, nil
|
||||
},
|
||||
)
|
||||
suite.broker.EXPECT().GetIndexInfo(mock.Anything, mock.Anything, mock.AnythingOfType("int64")).
|
||||
Return(map[int64][]*querypb.FieldIndexInfo{2: {
|
||||
{
|
||||
FieldID: 101,
|
||||
IndexID: 1000,
|
||||
EnableIndex: false,
|
||||
IndexFilePaths: []string{"index"},
|
||||
},
|
||||
}}, nil)
|
||||
suite.broker.EXPECT().GetSegmentInfo(mock.Anything, mock.Anything).
|
||||
Return([]*datapb.SegmentInfo{
|
||||
{},
|
||||
}, nil).Maybe()
|
||||
tasks := checker.Check(context.Background())
|
||||
suite.Require().Len(tasks, 0)
|
||||
}
|
||||
|
||||
func (suite *IndexCheckerSuite) TestCreateNewJsonIndex() {
|
||||
checker := suite.checker
|
||||
ctx := context.Background()
|
||||
paramtable.Get().Save(paramtable.Get().CommonCfg.EnabledJSONKeyStats.Key, "true")
|
||||
defer paramtable.Get().Reset(paramtable.Get().CommonCfg.EnabledJSONKeyStats.Key)
|
||||
// meta
|
||||
coll := utils.CreateTestCollection(1, 1)
|
||||
coll.FieldIndexID = map[int64]int64{101: 1000}
|
||||
coll.LoadFields = []int64{101}
|
||||
coll.Schema = &schemapb.CollectionSchema{
|
||||
Name: "test_loadJsonIndex",
|
||||
Fields: []*schemapb.FieldSchema{
|
||||
{FieldID: 101, DataType: schemapb.DataType_JSON, Name: "JSON"},
|
||||
},
|
||||
}
|
||||
checker.meta.CollectionManager.PutCollection(ctx, coll)
|
||||
checker.meta.ReplicaManager.Put(ctx, utils.CreateTestReplica(200, 1, []int64{1, 2}))
|
||||
suite.nodeMgr.Add(session.NewNodeInfo(session.ImmutableNodeInfo{
|
||||
NodeID: 1,
|
||||
Address: "localhost",
|
||||
Hostname: "localhost",
|
||||
}))
|
||||
suite.nodeMgr.Add(session.NewNodeInfo(session.ImmutableNodeInfo{
|
||||
NodeID: 2,
|
||||
Address: "localhost",
|
||||
Hostname: "localhost",
|
||||
}))
|
||||
checker.meta.ResourceManager.HandleNodeUp(ctx, 1)
|
||||
checker.meta.ResourceManager.HandleNodeUp(ctx, 2)
|
||||
|
||||
// dist
|
||||
fieldIndexInfo := &querypb.FieldIndexInfo{
|
||||
FieldID: 101,
|
||||
IndexID: 1000,
|
||||
EnableIndex: true,
|
||||
}
|
||||
|
||||
indexInfo := make(map[int64]*querypb.FieldIndexInfo)
|
||||
indexInfo[fieldIndexInfo.IndexID] = fieldIndexInfo
|
||||
segment := utils.CreateTestSegment(1, 1, 2, 1, 1, "test-insert-channel")
|
||||
segment.IndexInfo = indexInfo
|
||||
checker.dist.SegmentDistManager.Update(1, segment)
|
||||
|
||||
// broker
|
||||
suite.broker.EXPECT().ListIndexes(mock.Anything, mock.Anything).Call.Return(
|
||||
func(ctx context.Context, collectionID int64) ([]*indexpb.IndexInfo, error) {
|
||||
return []*indexpb.IndexInfo{
|
||||
{
|
||||
FieldID: 101,
|
||||
IndexID: 1000,
|
||||
},
|
||||
}, nil
|
||||
},
|
||||
)
|
||||
mockJSONKeyStats := map[int64]*datapb.JsonKeyStats{
|
||||
101: {
|
||||
FieldID: 101,
|
||||
},
|
||||
}
|
||||
suite.broker.EXPECT().GetSegmentInfo(mock.Anything, mock.Anything).
|
||||
Return([]*datapb.SegmentInfo{
|
||||
{
|
||||
ID: 2,
|
||||
JsonKeyStats: mockJSONKeyStats,
|
||||
},
|
||||
}, nil).Maybe()
|
||||
tasks := checker.Check(context.Background())
|
||||
suite.Len(tasks, 1)
|
||||
suite.Len(tasks[0].Actions(), 1)
|
||||
suite.Equal(tasks[0].Actions()[0].(*task.SegmentAction).Type(), task.ActionTypeStatsUpdate)
|
||||
}
|
||||
|
||||
func TestIndexChecker(t *testing.T) {
|
||||
suite.Run(t, new(IndexCheckerSuite))
|
||||
}
|
||||
|
|
|
@ -218,6 +218,7 @@ func (job *LoadCollectionJob) Execute() error {
|
|||
},
|
||||
CreatedAt: time.Now(),
|
||||
LoadSpan: sp,
|
||||
Schema: collectionInfo.GetSchema(),
|
||||
}
|
||||
job.undo.IsNewCollection = true
|
||||
err = job.meta.CollectionManager.PutCollection(job.ctx, collection, partitions...)
|
||||
|
@ -420,6 +421,7 @@ func (job *LoadPartitionJob) Execute() error {
|
|||
},
|
||||
CreatedAt: time.Now(),
|
||||
LoadSpan: sp,
|
||||
Schema: collectionInfo.GetSchema(),
|
||||
}
|
||||
err = job.meta.CollectionManager.PutCollection(job.ctx, collection, partitions...)
|
||||
if err != nil {
|
||||
|
|
|
@ -50,6 +50,7 @@ type Collection struct {
|
|||
mut sync.RWMutex
|
||||
refreshNotifier chan struct{}
|
||||
LoadSpan trace.Span
|
||||
Schema *schemapb.CollectionSchema
|
||||
}
|
||||
|
||||
func (collection *Collection) SetRefreshNotifier(notifier chan struct{}) {
|
||||
|
@ -85,6 +86,7 @@ func (collection *Collection) Clone() *Collection {
|
|||
UpdatedAt: collection.UpdatedAt,
|
||||
refreshNotifier: collection.refreshNotifier,
|
||||
LoadSpan: collection.LoadSpan,
|
||||
Schema: collection.Schema,
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -238,6 +240,7 @@ func (m *CollectionManager) upgradeLoadFields(ctx context.Context, collection *q
|
|||
err = m.putCollection(ctx, true, &Collection{
|
||||
CollectionLoadInfo: collection,
|
||||
LoadPercentage: 100,
|
||||
Schema: resp.GetSchema(),
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
|
@ -253,6 +256,16 @@ func (m *CollectionManager) GetCollection(ctx context.Context, collectionID type
|
|||
return m.collections[collectionID]
|
||||
}
|
||||
|
||||
func (m *CollectionManager) GetCollectionSchema(ctx context.Context, collectionID typeutil.UniqueID) *schemapb.CollectionSchema {
|
||||
m.rwmutex.RLock()
|
||||
defer m.rwmutex.RUnlock()
|
||||
collection, ok := m.collections[collectionID]
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
return collection.Schema
|
||||
}
|
||||
|
||||
func (m *CollectionManager) GetPartition(ctx context.Context, partitionID typeutil.UniqueID) *Partition {
|
||||
m.rwmutex.RLock()
|
||||
defer m.rwmutex.RUnlock()
|
||||
|
|
|
@ -33,12 +33,14 @@ const (
|
|||
ActionTypeGrow ActionType = iota + 1
|
||||
ActionTypeReduce
|
||||
ActionTypeUpdate
|
||||
ActionTypeStatsUpdate
|
||||
)
|
||||
|
||||
var ActionTypeName = map[ActionType]string{
|
||||
ActionTypeGrow: "Grow",
|
||||
ActionTypeReduce: "Reduce",
|
||||
ActionTypeUpdate: "Update",
|
||||
ActionTypeGrow: "Grow",
|
||||
ActionTypeReduce: "Reduce",
|
||||
ActionTypeUpdate: "Update",
|
||||
ActionTypeStatsUpdate: "StatsUpdate",
|
||||
}
|
||||
|
||||
func (t ActionType) String() string {
|
||||
|
|
|
@ -156,7 +156,7 @@ func (ex *Executor) removeTask(task Task, step int) {
|
|||
|
||||
func (ex *Executor) executeSegmentAction(task *SegmentTask, step int) {
|
||||
switch task.Actions()[step].Type() {
|
||||
case ActionTypeGrow, ActionTypeUpdate:
|
||||
case ActionTypeGrow, ActionTypeUpdate, ActionTypeStatsUpdate:
|
||||
ex.loadSegment(task, step)
|
||||
|
||||
case ActionTypeReduce:
|
||||
|
@ -469,6 +469,9 @@ func (ex *Executor) executeLeaderAction(task *LeaderTask, step int) {
|
|||
|
||||
case ActionTypeUpdate:
|
||||
ex.updatePartStatsVersions(task, step)
|
||||
|
||||
case ActionTypeStatsUpdate:
|
||||
ex.updatePartStatsVersions(task, step)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -95,6 +95,8 @@ func GetTaskType(task Task) Type {
|
|||
return TaskTypeReduce
|
||||
case task.Actions()[0].Type() == ActionTypeUpdate:
|
||||
return TaskTypeUpdate
|
||||
case task.Actions()[0].Type() == ActionTypeStatsUpdate:
|
||||
return TaskTypeStatsUpdate
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
@ -132,6 +134,10 @@ func packLoadSegmentRequest(
|
|||
loadScope = querypb.LoadScope_Index
|
||||
}
|
||||
|
||||
if action.Type() == ActionTypeStatsUpdate {
|
||||
loadScope = querypb.LoadScope_Stats
|
||||
}
|
||||
|
||||
if task.Source() == utils.LeaderChecker {
|
||||
loadScope = querypb.LoadScope_Delta
|
||||
}
|
||||
|
|
|
@ -186,6 +186,45 @@ func (node *QueryNode) loadIndex(ctx context.Context, req *querypb.LoadSegmentsR
|
|||
return status
|
||||
}
|
||||
|
||||
func (node *QueryNode) loadStats(ctx context.Context, req *querypb.LoadSegmentsRequest) *commonpb.Status {
|
||||
log := log.Ctx(ctx).With(
|
||||
zap.Int64("collectionID", req.GetCollectionID()),
|
||||
zap.Int64s("segmentIDs", lo.Map(req.GetInfos(), func(info *querypb.SegmentLoadInfo, _ int) int64 { return info.GetSegmentID() })),
|
||||
)
|
||||
|
||||
status := merr.Success()
|
||||
log.Info("start to load stats")
|
||||
|
||||
for _, info := range req.GetInfos() {
|
||||
log := log.With(zap.Int64("segmentID", info.GetSegmentID()))
|
||||
segment := node.manager.Segment.GetSealed(info.GetSegmentID())
|
||||
if segment == nil {
|
||||
log.Warn("segment not found for load stats operation")
|
||||
continue
|
||||
}
|
||||
localSegment, ok := segment.(*segments.LocalSegment)
|
||||
if !ok {
|
||||
log.Warn("segment not local for load stats opeartion")
|
||||
continue
|
||||
}
|
||||
|
||||
if localSegment.IsLazyLoad() {
|
||||
localSegment.SetLoadInfo(info)
|
||||
localSegment.SetNeedUpdatedVersion(req.GetVersion())
|
||||
node.manager.DiskCache.MarkItemNeedReload(ctx, localSegment.ID())
|
||||
return nil
|
||||
}
|
||||
err := node.loader.LoadJSONIndex(ctx, localSegment, info)
|
||||
if err != nil {
|
||||
log.Warn("failed to load stats", zap.Error(err))
|
||||
status = merr.Status(err)
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
return status
|
||||
}
|
||||
|
||||
func (node *QueryNode) queryChannel(ctx context.Context, req *querypb.QueryRequest, channel string) (*internalpb.RetrieveResults, error) {
|
||||
msgID := req.Req.Base.GetMsgID()
|
||||
traceID := trace.SpanFromContext(ctx).SpanContext().TraceID()
|
||||
|
|
|
@ -1174,13 +1174,14 @@ func (s *LocalSegment) LoadJSONKeyIndex(ctx context.Context, jsonKeyStats *datap
|
|||
}
|
||||
|
||||
cgoProto := &indexcgopb.LoadJsonKeyIndexInfo{
|
||||
FieldID: jsonKeyStats.GetFieldID(),
|
||||
Version: jsonKeyStats.GetVersion(),
|
||||
BuildID: jsonKeyStats.GetBuildID(),
|
||||
Files: jsonKeyStats.GetFiles(),
|
||||
Schema: f,
|
||||
CollectionID: s.Collection(),
|
||||
PartitionID: s.Partition(),
|
||||
FieldID: jsonKeyStats.GetFieldID(),
|
||||
Version: jsonKeyStats.GetVersion(),
|
||||
BuildID: jsonKeyStats.GetBuildID(),
|
||||
Files: jsonKeyStats.GetFiles(),
|
||||
Schema: f,
|
||||
CollectionID: s.Collection(),
|
||||
PartitionID: s.Partition(),
|
||||
JsonKeyStatsDataFormat: jsonKeyStats.GetJsonKeyStatsDataFormat(),
|
||||
}
|
||||
|
||||
marshaled, err := proto.Marshal(cgoProto)
|
||||
|
|
|
@ -233,15 +233,11 @@ func (node *QueryNode) InitSegcore() error {
|
|||
cExprBatchSize := C.int64_t(paramtable.Get().QueryNodeCfg.ExprEvalBatchSize.GetAsInt64())
|
||||
C.InitDefaultExprEvalBatchSize(cExprBatchSize)
|
||||
|
||||
cJSONIndexMemoryBudgetInTantivy := C.int64_t(paramtable.Get().QueryNodeCfg.JSONIndexMemoryBudgetInTantivy.GetAsInt64() * 1024 * 1024)
|
||||
C.InitDefaultJSONKeyIndexMemoryBudget(cJSONIndexMemoryBudgetInTantivy)
|
||||
|
||||
cJSONIndexCommitInterval := C.int64_t(paramtable.Get().QueryNodeCfg.JSONIndexCommitInterval.GetAsInt64())
|
||||
C.InitDefaultJSONKeyIndexCommitInterval(cJSONIndexCommitInterval)
|
||||
|
||||
cJSONIndexEnabled := C.bool(paramtable.Get().CommonCfg.EnabledJSONKeyStats.GetAsBool())
|
||||
C.InitDefaultJSONKeyIndexEnable(cJSONIndexEnabled)
|
||||
cJSONKeyStatsCommitInterval := C.int64_t(paramtable.Get().QueryNodeCfg.JSONKeyStatsCommitInterval.GetAsInt64())
|
||||
C.InitDefaultJSONKeyStatsCommitInterval(cJSONKeyStatsCommitInterval)
|
||||
|
||||
cJSONKeyStatsEnabled := C.bool(paramtable.Get().CommonCfg.EnabledJSONKeyStats.GetAsBool())
|
||||
C.InitDefaultJSONKeyStatsEnable(cJSONKeyStatsEnabled)
|
||||
cGpuMemoryPoolInitSize := C.uint32_t(paramtable.Get().GpuConfig.InitSize.GetAsUint32())
|
||||
cGpuMemoryPoolMaxSize := C.uint32_t(paramtable.Get().GpuConfig.MaxSize.GetAsUint32())
|
||||
C.SegcoreSetKnowhereGpuMemoryPoolSize(cGpuMemoryPoolInitSize, cGpuMemoryPoolMaxSize)
|
||||
|
|
|
@ -492,6 +492,9 @@ func (node *QueryNode) LoadSegments(ctx context.Context, req *querypb.LoadSegmen
|
|||
if req.GetLoadScope() == querypb.LoadScope_Index {
|
||||
return node.loadIndex(ctx, req), nil
|
||||
}
|
||||
if req.GetLoadScope() == querypb.LoadScope_Stats {
|
||||
return node.loadStats(ctx, req), nil
|
||||
}
|
||||
|
||||
// Actual load segment
|
||||
log.Info("start to load segments...")
|
||||
|
|
|
@ -116,6 +116,9 @@ const (
|
|||
|
||||
// TextIndexPath storage path const for text index
|
||||
TextIndexPath = "text_log"
|
||||
|
||||
// JSONIndexPath storage path const for json index
|
||||
JSONIndexPath = "json_key_index_log"
|
||||
)
|
||||
|
||||
// Search, Index parameter keys
|
||||
|
|
|
@ -457,6 +457,7 @@ message JsonKeyStats {
|
|||
int64 log_size = 4;
|
||||
int64 memory_size = 5;
|
||||
int64 buildID = 6;
|
||||
int64 json_key_stats_data_format =7;
|
||||
}
|
||||
|
||||
message Binlog {
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -82,6 +82,8 @@ message BuildIndexInfo {
|
|||
repeated OptionalFieldInfo opt_fields = 19;
|
||||
bool partition_key_isolation = 20;
|
||||
int32 current_scalar_index_version = 21;
|
||||
int64 json_key_stats_tantivy_memory = 22;
|
||||
int64 json_key_stats_data_format = 23;
|
||||
}
|
||||
|
||||
message LoadTextIndexInfo {
|
||||
|
@ -102,4 +104,5 @@ message LoadJsonKeyIndexInfo {
|
|||
schema.FieldSchema schema = 5;
|
||||
int64 collectionID = 6;
|
||||
int64 partitionID = 7;
|
||||
int64 json_key_stats_data_format=8;
|
||||
}
|
||||
|
|
|
@ -572,6 +572,8 @@ type BuildIndexInfo struct {
|
|||
OptFields []*OptionalFieldInfo `protobuf:"bytes,19,rep,name=opt_fields,json=optFields,proto3" json:"opt_fields,omitempty"`
|
||||
PartitionKeyIsolation bool `protobuf:"varint,20,opt,name=partition_key_isolation,json=partitionKeyIsolation,proto3" json:"partition_key_isolation,omitempty"`
|
||||
CurrentScalarIndexVersion int32 `protobuf:"varint,21,opt,name=current_scalar_index_version,json=currentScalarIndexVersion,proto3" json:"current_scalar_index_version,omitempty"`
|
||||
JsonKeyStatsTantivyMemory int64 `protobuf:"varint,22,opt,name=json_key_stats_tantivy_memory,json=jsonKeyStatsTantivyMemory,proto3" json:"json_key_stats_tantivy_memory,omitempty"`
|
||||
JsonKeyStatsDataFormat int64 `protobuf:"varint,23,opt,name=json_key_stats_data_format,json=jsonKeyStatsDataFormat,proto3" json:"json_key_stats_data_format,omitempty"`
|
||||
}
|
||||
|
||||
func (x *BuildIndexInfo) Reset() {
|
||||
|
@ -753,6 +755,20 @@ func (x *BuildIndexInfo) GetCurrentScalarIndexVersion() int32 {
|
|||
return 0
|
||||
}
|
||||
|
||||
func (x *BuildIndexInfo) GetJsonKeyStatsTantivyMemory() int64 {
|
||||
if x != nil {
|
||||
return x.JsonKeyStatsTantivyMemory
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (x *BuildIndexInfo) GetJsonKeyStatsDataFormat() int64 {
|
||||
if x != nil {
|
||||
return x.JsonKeyStatsDataFormat
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
type LoadTextIndexInfo struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
|
@ -853,13 +869,14 @@ type LoadJsonKeyIndexInfo struct {
|
|||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
FieldID int64 `protobuf:"varint,1,opt,name=FieldID,proto3" json:"FieldID,omitempty"`
|
||||
Version int64 `protobuf:"varint,2,opt,name=version,proto3" json:"version,omitempty"`
|
||||
BuildID int64 `protobuf:"varint,3,opt,name=buildID,proto3" json:"buildID,omitempty"`
|
||||
Files []string `protobuf:"bytes,4,rep,name=files,proto3" json:"files,omitempty"`
|
||||
Schema *schemapb.FieldSchema `protobuf:"bytes,5,opt,name=schema,proto3" json:"schema,omitempty"`
|
||||
CollectionID int64 `protobuf:"varint,6,opt,name=collectionID,proto3" json:"collectionID,omitempty"`
|
||||
PartitionID int64 `protobuf:"varint,7,opt,name=partitionID,proto3" json:"partitionID,omitempty"`
|
||||
FieldID int64 `protobuf:"varint,1,opt,name=FieldID,proto3" json:"FieldID,omitempty"`
|
||||
Version int64 `protobuf:"varint,2,opt,name=version,proto3" json:"version,omitempty"`
|
||||
BuildID int64 `protobuf:"varint,3,opt,name=buildID,proto3" json:"buildID,omitempty"`
|
||||
Files []string `protobuf:"bytes,4,rep,name=files,proto3" json:"files,omitempty"`
|
||||
Schema *schemapb.FieldSchema `protobuf:"bytes,5,opt,name=schema,proto3" json:"schema,omitempty"`
|
||||
CollectionID int64 `protobuf:"varint,6,opt,name=collectionID,proto3" json:"collectionID,omitempty"`
|
||||
PartitionID int64 `protobuf:"varint,7,opt,name=partitionID,proto3" json:"partitionID,omitempty"`
|
||||
JsonKeyStatsDataFormat int64 `protobuf:"varint,8,opt,name=json_key_stats_data_format,json=jsonKeyStatsDataFormat,proto3" json:"json_key_stats_data_format,omitempty"`
|
||||
}
|
||||
|
||||
func (x *LoadJsonKeyIndexInfo) Reset() {
|
||||
|
@ -943,6 +960,13 @@ func (x *LoadJsonKeyIndexInfo) GetPartitionID() int64 {
|
|||
return 0
|
||||
}
|
||||
|
||||
func (x *LoadJsonKeyIndexInfo) GetJsonKeyStatsDataFormat() int64 {
|
||||
if x != nil {
|
||||
return x.JsonKeyStatsDataFormat
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
var File_index_cgo_msg_proto protoreflect.FileDescriptor
|
||||
|
||||
var file_index_cgo_msg_proto_rawDesc = []byte{
|
||||
|
@ -1022,7 +1046,7 @@ var file_index_cgo_msg_proto_rawDesc = []byte{
|
|||
0x65, 0x6c, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09,
|
||||
0x66, 0x69, 0x65, 0x6c, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x61, 0x74,
|
||||
0x61, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x64,
|
||||
0x61, 0x74, 0x61, 0x50, 0x61, 0x74, 0x68, 0x73, 0x22, 0xcd, 0x07, 0x0a, 0x0e, 0x42, 0x75, 0x69,
|
||||
0x61, 0x74, 0x61, 0x50, 0x61, 0x74, 0x68, 0x73, 0x22, 0xcb, 0x08, 0x0a, 0x0e, 0x42, 0x75, 0x69,
|
||||
0x6c, 0x64, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x0a, 0x09, 0x63,
|
||||
0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09,
|
||||
0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x75, 0x69,
|
||||
|
@ -1083,42 +1107,54 @@ var file_index_cgo_msg_proto_rawDesc = []byte{
|
|||
0x6e, 0x74, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x61, 0x72, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f,
|
||||
0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x15, 0x20, 0x01, 0x28, 0x05, 0x52, 0x19, 0x63,
|
||||
0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x53, 0x63, 0x61, 0x6c, 0x61, 0x72, 0x49, 0x6e, 0x64, 0x65,
|
||||
0x78, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xf7, 0x01, 0x0a, 0x11, 0x4c, 0x6f, 0x61,
|
||||
0x64, 0x54, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18,
|
||||
0x0a, 0x07, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52,
|
||||
0x07, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73,
|
||||
0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69,
|
||||
0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x44, 0x18, 0x03, 0x20,
|
||||
0x01, 0x28, 0x03, 0x52, 0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x44, 0x12, 0x14, 0x0a, 0x05,
|
||||
0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x66, 0x69, 0x6c,
|
||||
0x65, 0x73, 0x12, 0x38, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x05, 0x20, 0x01,
|
||||
0x28, 0x0b, 0x32, 0x20, 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, 0x53, 0x63,
|
||||
0x68, 0x65, 0x6d, 0x61, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x22, 0x0a, 0x0c,
|
||||
0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x06, 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,
|
||||
0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e,
|
||||
0x49, 0x44, 0x22, 0xfa, 0x01, 0x0a, 0x14, 0x4c, 0x6f, 0x61, 0x64, 0x4a, 0x73, 0x6f, 0x6e, 0x4b,
|
||||
0x65, 0x79, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x46,
|
||||
0x69, 0x65, 0x6c, 0x64, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x46, 0x69,
|
||||
0x65, 0x6c, 0x64, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
|
||||
0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12,
|
||||
0x18, 0x0a, 0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03,
|
||||
0x52, 0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x44, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x69, 0x6c,
|
||||
0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12,
|
||||
0x38, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32,
|
||||
0x20, 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, 0x53, 0x63, 0x68, 0x65, 0x6d,
|
||||
0x61, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x6f, 0x6c,
|
||||
0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x06, 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, 0x07, 0x20, 0x01,
|
||||
0x28, 0x03, 0x52, 0x0b, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 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, 0x64, 0x65,
|
||||
0x78, 0x63, 0x67, 0x6f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
0x78, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x40, 0x0a, 0x1d, 0x6a, 0x73, 0x6f, 0x6e,
|
||||
0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x5f, 0x74, 0x61, 0x6e, 0x74, 0x69,
|
||||
0x76, 0x79, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x18, 0x16, 0x20, 0x01, 0x28, 0x03, 0x52,
|
||||
0x19, 0x6a, 0x73, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, 0x73, 0x54, 0x61, 0x6e,
|
||||
0x74, 0x69, 0x76, 0x79, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x3a, 0x0a, 0x1a, 0x6a, 0x73,
|
||||
0x6f, 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x5f, 0x64, 0x61, 0x74,
|
||||
0x61, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x17, 0x20, 0x01, 0x28, 0x03, 0x52, 0x16,
|
||||
0x6a, 0x73, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, 0x73, 0x44, 0x61, 0x74, 0x61,
|
||||
0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x22, 0xf7, 0x01, 0x0a, 0x11, 0x4c, 0x6f, 0x61, 0x64, 0x54,
|
||||
0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x07,
|
||||
0x46, 0x69, 0x65, 0x6c, 0x64, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x46,
|
||||
0x69, 0x65, 0x6c, 0x64, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f,
|
||||
0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
|
||||
0x12, 0x18, 0x0a, 0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28,
|
||||
0x03, 0x52, 0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x44, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x69,
|
||||
0x6c, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73,
|
||||
0x12, 0x38, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b,
|
||||
0x32, 0x20, 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, 0x53, 0x63, 0x68, 0x65,
|
||||
0x6d, 0x61, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x6f,
|
||||
0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x06, 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, 0x07, 0x20,
|
||||
0x01, 0x28, 0x03, 0x52, 0x0b, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44,
|
||||
0x22, 0xb6, 0x02, 0x0a, 0x14, 0x4c, 0x6f, 0x61, 0x64, 0x4a, 0x73, 0x6f, 0x6e, 0x4b, 0x65, 0x79,
|
||||
0x49, 0x6e, 0x64, 0x65, 0x78, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x46, 0x69, 0x65,
|
||||
0x6c, 0x64, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x46, 0x69, 0x65, 0x6c,
|
||||
0x64, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02,
|
||||
0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a,
|
||||
0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07,
|
||||
0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x44, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73,
|
||||
0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x38, 0x0a,
|
||||
0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 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, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52,
|
||||
0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65,
|
||||
0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x06, 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, 0x07, 0x20, 0x01, 0x28, 0x03,
|
||||
0x52, 0x0b, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x3a, 0x0a,
|
||||
0x1a, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x5f,
|
||||
0x64, 0x61, 0x74, 0x61, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28,
|
||||
0x03, 0x52, 0x16, 0x6a, 0x73, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, 0x73, 0x44,
|
||||
0x61, 0x74, 0x61, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 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, 0x64, 0x65, 0x78, 0x63, 0x67, 0x6f, 0x70, 0x62,
|
||||
0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
}
|
||||
|
||||
var (
|
||||
|
|
|
@ -397,6 +397,7 @@ enum LoadScope {
|
|||
Full = 0;
|
||||
Delta = 1;
|
||||
Index = 2;
|
||||
Stats = 3;
|
||||
}
|
||||
|
||||
message LoadSegmentsRequest {
|
||||
|
|
|
@ -34,6 +34,7 @@ const (
|
|||
LoadScope_Full LoadScope = 0
|
||||
LoadScope_Delta LoadScope = 1
|
||||
LoadScope_Index LoadScope = 2
|
||||
LoadScope_Stats LoadScope = 3
|
||||
)
|
||||
|
||||
// Enum value maps for LoadScope.
|
||||
|
@ -42,11 +43,13 @@ var (
|
|||
0: "Full",
|
||||
1: "Delta",
|
||||
2: "Index",
|
||||
3: "Stats",
|
||||
}
|
||||
LoadScope_value = map[string]int32{
|
||||
"Full": 0,
|
||||
"Delta": 1,
|
||||
"Index": 2,
|
||||
"Stats": 3,
|
||||
}
|
||||
)
|
||||
|
||||
|
@ -8600,453 +8603,453 @@ var file_query_coord_proto_rawDesc = []byte{
|
|||
0x69, 0x63, 0x61, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x73,
|
||||
0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x05, 0x20, 0x03,
|
||||
0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75,
|
||||
0x70, 0x73, 0x2a, 0x2b, 0x0a, 0x09, 0x4c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x12,
|
||||
0x70, 0x73, 0x2a, 0x36, 0x0a, 0x09, 0x4c, 0x6f, 0x61, 0x64, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x12,
|
||||
0x08, 0x0a, 0x04, 0x46, 0x75, 0x6c, 0x6c, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x44, 0x65, 0x6c,
|
||||
0x74, 0x61, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x10, 0x02, 0x2a,
|
||||
0x40, 0x0a, 0x09, 0x44, 0x61, 0x74, 0x61, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07,
|
||||
0x55, 0x6e, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x6c, 0x6c,
|
||||
0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x10,
|
||||
0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x10,
|
||||
0x03, 0x2a, 0x7a, 0x0a, 0x0e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74,
|
||||
0x61, 0x74, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x4e, 0x6f, 0x74, 0x45, 0x78, 0x69, 0x73, 0x74, 0x10,
|
||||
0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x4e, 0x6f, 0x74, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x10,
|
||||
0x01, 0x12, 0x0a, 0x0a, 0x06, 0x4f, 0x6e, 0x44, 0x69, 0x73, 0x6b, 0x10, 0x02, 0x12, 0x13, 0x0a,
|
||||
0x0f, 0x50, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x49, 0x6e, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79,
|
||||
0x10, 0x03, 0x12, 0x0c, 0x0a, 0x08, 0x49, 0x6e, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x10, 0x04,
|
||||
0x12, 0x10, 0x0a, 0x0c, 0x50, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x49, 0x6e, 0x47, 0x50, 0x55,
|
||||
0x10, 0x05, 0x12, 0x09, 0x0a, 0x05, 0x49, 0x6e, 0x47, 0x50, 0x55, 0x10, 0x06, 0x2a, 0x64, 0x0a,
|
||||
0x10, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f,
|
||||
0x6e, 0x12, 0x13, 0x0a, 0x0f, 0x55, 0x6e, 0x4b, 0x6e, 0x6f, 0x77, 0x43, 0x6f, 0x6e, 0x64, 0x69,
|
||||
0x74, 0x69, 0x6f, 0x6e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x48, 0x61, 0x6e, 0x64, 0x6f, 0x66,
|
||||
0x66, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e,
|
||||
0x63, 0x65, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x47, 0x72, 0x70, 0x63, 0x52, 0x65, 0x71, 0x75,
|
||||
0x65, 0x73, 0x74, 0x10, 0x03, 0x12, 0x0c, 0x0a, 0x08, 0x4e, 0x6f, 0x64, 0x65, 0x44, 0x6f, 0x77,
|
||||
0x6e, 0x10, 0x04, 0x2a, 0x42, 0x0a, 0x08, 0x4c, 0x6f, 0x61, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12,
|
||||
0x0f, 0x0a, 0x0b, 0x55, 0x6e, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x10, 0x00,
|
||||
0x12, 0x11, 0x0a, 0x0d, 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f,
|
||||
0x6e, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x4c, 0x6f, 0x61, 0x64, 0x43, 0x6f, 0x6c, 0x6c, 0x65,
|
||||
0x63, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x02, 0x2a, 0x32, 0x0a, 0x0a, 0x4c, 0x6f, 0x61, 0x64, 0x53,
|
||||
0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64,
|
||||
0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x4c, 0x6f, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x10, 0x01, 0x12,
|
||||
0x0a, 0x0a, 0x06, 0x4c, 0x6f, 0x61, 0x64, 0x65, 0x64, 0x10, 0x02, 0x2a, 0x57, 0x0a, 0x08, 0x53,
|
||||
0x79, 0x6e, 0x63, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x52, 0x65, 0x6d, 0x6f, 0x76,
|
||||
0x65, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x53, 0x65, 0x74, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05,
|
||||
0x41, 0x6d, 0x65, 0x6e, 0x64, 0x10, 0x02, 0x12, 0x11, 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74,
|
||||
0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x10, 0x03, 0x12, 0x18, 0x0a, 0x14, 0x55, 0x70,
|
||||
0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61,
|
||||
0x74, 0x73, 0x10, 0x04, 0x32, 0xcb, 0x1f, 0x0a, 0x0a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x6f,
|
||||
0x6f, 0x72, 0x64, 0x12, 0x6c, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e,
|
||||
0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x12, 0x2e, 0x2e, 0x6d, 0x69, 0x6c, 0x76,
|
||||
0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e,
|
||||
0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74,
|
||||
0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x6d, 0x69, 0x6c, 0x76,
|
||||
0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e,
|
||||
0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x22,
|
||||
0x00, 0x12, 0x6d, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x54, 0x69, 0x63, 0x6b,
|
||||
0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x30, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73,
|
||||
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e,
|
||||
0x74, 0x61, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x10, 0x02, 0x12,
|
||||
0x09, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x73, 0x10, 0x03, 0x2a, 0x40, 0x0a, 0x09, 0x44, 0x61,
|
||||
0x74, 0x61, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x6e, 0x4b, 0x6e, 0x6f,
|
||||
0x77, 0x6e, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x6c, 0x6c, 0x10, 0x01, 0x12, 0x0d, 0x0a,
|
||||
0x09, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a,
|
||||
0x48, 0x69, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x63, 0x61, 0x6c, 0x10, 0x03, 0x2a, 0x7a, 0x0a, 0x0e,
|
||||
0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0c,
|
||||
0x0a, 0x08, 0x4e, 0x6f, 0x74, 0x45, 0x78, 0x69, 0x73, 0x74, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a,
|
||||
0x4e, 0x6f, 0x74, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x74, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06,
|
||||
0x4f, 0x6e, 0x44, 0x69, 0x73, 0x6b, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, 0x50, 0x61, 0x72, 0x74,
|
||||
0x69, 0x61, 0x6c, 0x49, 0x6e, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x10, 0x03, 0x12, 0x0c, 0x0a,
|
||||
0x08, 0x49, 0x6e, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x10, 0x04, 0x12, 0x10, 0x0a, 0x0c, 0x50,
|
||||
0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x49, 0x6e, 0x47, 0x50, 0x55, 0x10, 0x05, 0x12, 0x09, 0x0a,
|
||||
0x05, 0x49, 0x6e, 0x47, 0x50, 0x55, 0x10, 0x06, 0x2a, 0x64, 0x0a, 0x10, 0x54, 0x72, 0x69, 0x67,
|
||||
0x67, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x13, 0x0a, 0x0f,
|
||||
0x55, 0x6e, 0x4b, 0x6e, 0x6f, 0x77, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x10,
|
||||
0x00, 0x12, 0x0b, 0x0a, 0x07, 0x48, 0x61, 0x6e, 0x64, 0x6f, 0x66, 0x66, 0x10, 0x01, 0x12, 0x0f,
|
||||
0x0a, 0x0b, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x10, 0x02, 0x12,
|
||||
0x0f, 0x0a, 0x0b, 0x47, 0x72, 0x70, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x10, 0x03,
|
||||
0x12, 0x0c, 0x0a, 0x08, 0x4e, 0x6f, 0x64, 0x65, 0x44, 0x6f, 0x77, 0x6e, 0x10, 0x04, 0x2a, 0x42,
|
||||
0x0a, 0x08, 0x4c, 0x6f, 0x61, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x6e,
|
||||
0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x4c,
|
||||
0x6f, 0x61, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x01, 0x12, 0x12,
|
||||
0x0a, 0x0e, 0x4c, 0x6f, 0x61, 0x64, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
|
||||
0x10, 0x02, 0x2a, 0x32, 0x0a, 0x0a, 0x4c, 0x6f, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
|
||||
0x12, 0x0b, 0x0a, 0x07, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x10, 0x00, 0x12, 0x0b, 0x0a,
|
||||
0x07, 0x4c, 0x6f, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x4c, 0x6f,
|
||||
0x61, 0x64, 0x65, 0x64, 0x10, 0x02, 0x2a, 0x57, 0x0a, 0x08, 0x53, 0x79, 0x6e, 0x63, 0x54, 0x79,
|
||||
0x70, 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x10, 0x00, 0x12, 0x07,
|
||||
0x0a, 0x03, 0x53, 0x65, 0x74, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x41, 0x6d, 0x65, 0x6e, 0x64,
|
||||
0x10, 0x02, 0x12, 0x11, 0x0a, 0x0d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x56, 0x65, 0x72, 0x73,
|
||||
0x69, 0x6f, 0x6e, 0x10, 0x03, 0x12, 0x18, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50,
|
||||
0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x73, 0x10, 0x04, 0x32,
|
||||
0xcb, 0x1f, 0x0a, 0x0a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x12, 0x6c,
|
||||
0x0a, 0x12, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x53, 0x74,
|
||||
0x61, 0x74, 0x65, 0x73, 0x12, 0x2e, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72,
|
||||
0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f,
|
||||
0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71,
|
||||
0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72,
|
||||
0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f,
|
||||
0x6e, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x22, 0x00, 0x12, 0x6d, 0x0a, 0x12,
|
||||
0x47, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x54, 0x69, 0x63, 0x6b, 0x43, 0x68, 0x61, 0x6e, 0x6e,
|
||||
0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x6d, 0x69, 0x6c, 0x76,
|
||||
0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e,
|
||||
0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
|
||||
0x12, 0x71, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63,
|
||||
0x73, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x32, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75,
|
||||
0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c,
|
||||
0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x43, 0x68,
|
||||
0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x6d,
|
||||
0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76,
|
||||
0x75, 0x73, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
|
||||
0x65, 0x22, 0x00, 0x12, 0x6c, 0x0a, 0x0f, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x6f, 0x6c, 0x6c, 0x65,
|
||||
0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2a, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e,
|
||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x53, 0x68, 0x6f, 0x77,
|
||||
0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
|
||||
0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
||||
0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x6f, 0x6c, 0x6c,
|
||||
0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
|
||||
0x00, 0x12, 0x69, 0x0a, 0x0e, 0x53, 0x68, 0x6f, 0x77, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69,
|
||||
0x6f, 0x6e, 0x73, 0x12, 0x29, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f,
|
||||
0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x50, 0x61, 0x72,
|
||||
0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a,
|
||||
0x65, 0x6c, 0x12, 0x30, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
||||
0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x69,
|
||||
0x6d, 0x65, 0x54, 0x69, 0x63, 0x6b, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x71,
|
||||
0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72,
|
||||
0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e,
|
||||
0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x71, 0x0a, 0x14, 0x47,
|
||||
0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x43, 0x68, 0x61, 0x6e,
|
||||
0x6e, 0x65, 0x6c, 0x12, 0x32, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f,
|
||||
0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x47, 0x65, 0x74, 0x53,
|
||||
0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c,
|
||||
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73,
|
||||
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x53, 0x74,
|
||||
0x72, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6c,
|
||||
0x0a, 0x0f, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
|
||||
0x73, 0x12, 0x2a, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||
0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x6f, 0x6c, 0x6c, 0x65,
|
||||
0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e,
|
||||
0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65,
|
||||
0x72, 0x79, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f,
|
||||
0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x69, 0x0a, 0x0e,
|
||||
0x53, 0x68, 0x6f, 0x77, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x29,
|
||||
0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75,
|
||||
0x65, 0x72, 0x79, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f,
|
||||
0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x0e,
|
||||
0x4c, 0x6f, 0x61, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x29,
|
||||
0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x6d, 0x69, 0x6c, 0x76,
|
||||
0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x53,
|
||||
0x68, 0x6f, 0x77, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73,
|
||||
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x0e, 0x4c, 0x6f, 0x61, 0x64, 0x50,
|
||||
0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x29, 0x2e, 0x6d, 0x69, 0x6c, 0x76,
|
||||
0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x4c,
|
||||
0x6f, 0x61, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71,
|
||||
0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72,
|
||||
0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75,
|
||||
0x73, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x11, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x50, 0x61,
|
||||
0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2c, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75,
|
||||
0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, 0x65,
|
||||
0x6c, 0x65, 0x61, 0x73, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52,
|
||||
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e,
|
||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61,
|
||||
0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x0e, 0x4c, 0x6f, 0x61, 0x64, 0x43, 0x6f, 0x6c,
|
||||
0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73,
|
||||
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x4c, 0x6f, 0x61,
|
||||
0x64, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65,
|
||||
0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
||||
0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22,
|
||||
0x00, 0x12, 0x60, 0x0a, 0x11, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6c, 0x6c,
|
||||
0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e,
|
||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x6c, 0x65,
|
||||
0x61, 0x73, 0x65, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71,
|
||||
0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72,
|
||||
0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75,
|
||||
0x73, 0x22, 0x00, 0x12, 0x6c, 0x0a, 0x17, 0x53, 0x79, 0x6e, 0x63, 0x4e, 0x65, 0x77, 0x43, 0x72,
|
||||
0x65, 0x61, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x32,
|
||||
0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75,
|
||||
0x65, 0x72, 0x79, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f,
|
||||
0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76,
|
||||
0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e,
|
||||
0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x11, 0x52, 0x65, 0x6c, 0x65,
|
||||
0x61, 0x73, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2c, 0x2e,
|
||||
0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65,
|
||||
0x72, 0x79, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74,
|
||||
0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69,
|
||||
0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f,
|
||||
0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x0e, 0x4c, 0x6f,
|
||||
0x61, 0x64, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x2e, 0x6d,
|
||||
0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72,
|
||||
0x79, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
|
||||
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73,
|
||||
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74,
|
||||
0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x11, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73,
|
||||
0x65, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x2e, 0x6d, 0x69,
|
||||
0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79,
|
||||
0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69,
|
||||
0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76,
|
||||
0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e,
|
||||
0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x6c, 0x0a, 0x17, 0x53, 0x79, 0x6e, 0x63,
|
||||
0x4e, 0x65, 0x77, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74,
|
||||
0x69, 0x6f, 0x6e, 0x12, 0x32, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f,
|
||||
0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x4e, 0x65, 0x77,
|
||||
0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e,
|
||||
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73,
|
||||
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74,
|
||||
0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x75, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x50, 0x61, 0x72,
|
||||
0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x12, 0x2d, 0x2e, 0x6d,
|
||||
0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72,
|
||||
0x79, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74,
|
||||
0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x6d, 0x69,
|
||||
0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79,
|
||||
0x2e, 0x47, 0x65, 0x74, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61,
|
||||
0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x69, 0x0a,
|
||||
0x0e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12,
|
||||
0x29, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71,
|
||||
0x75, 0x65, 0x72, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49,
|
||||
0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x6d, 0x69, 0x6c,
|
||||
0x65, 0x72, 0x79, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x4e, 0x65, 0x77, 0x43, 0x72, 0x65, 0x61, 0x74,
|
||||
0x65, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65,
|
||||
0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
||||
0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22,
|
||||
0x00, 0x12, 0x75, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f,
|
||||
0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x12, 0x2d, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73,
|
||||
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x47, 0x65, 0x74,
|
||||
0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x52,
|
||||
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e,
|
||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x50,
|
||||
0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65,
|
||||
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x69, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x53,
|
||||
0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x29, 0x2e, 0x6d, 0x69, 0x6c,
|
||||
0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e,
|
||||
0x47, 0x65, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65,
|
||||
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x0b, 0x4c, 0x6f, 0x61, 0x64,
|
||||
0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73,
|
||||
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x4c, 0x6f, 0x61,
|
||||
0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
|
||||
0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63,
|
||||
0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x7b,
|
||||
0x0a, 0x12, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74,
|
||||
0x69, 0x6f, 0x6e, 0x73, 0x12, 0x30, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72,
|
||||
0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x53, 0x68, 0x6f,
|
||||
0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52,
|
||||
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e,
|
||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x53,
|
||||
0x68, 0x6f, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
|
||||
0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5f, 0x0a, 0x0a, 0x47,
|
||||
0x65, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76,
|
||||
0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e,
|
||||
0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
|
||||
0x74, 0x1a, 0x27, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||
0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69,
|
||||
0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x62, 0x0a, 0x0b,
|
||||
0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x12, 0x27, 0x2e, 0x6d, 0x69,
|
||||
0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75,
|
||||
0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x52, 0x65, 0x71,
|
||||
0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72,
|
||||
0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65,
|
||||
0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
|
||||
0x12, 0x6c, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x4c, 0x65, 0x61, 0x64,
|
||||
0x65, 0x72, 0x73, 0x12, 0x2a, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f,
|
||||
0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72,
|
||||
0x64, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
|
||||
0x2b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71,
|
||||
0x75, 0x65, 0x72, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x4c, 0x65, 0x61,
|
||||
0x64, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x62,
|
||||
0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x12, 0x27, 0x2e,
|
||||
0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c,
|
||||
0x76, 0x75, 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52,
|
||||
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e,
|
||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x43, 0x68, 0x65,
|
||||
0x63, 0x6b, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
|
||||
0x22, 0x00, 0x12, 0x65, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f,
|
||||
0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x2f, 0x2e, 0x6d, 0x69, 0x6c, 0x76,
|
||||
0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e,
|
||||
0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72,
|
||||
0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c,
|
||||
0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70,
|
||||
0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65,
|
||||
0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
|
||||
0x65, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x0b, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e,
|
||||
0x63, 0x65, 0x12, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
||||
0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61,
|
||||
0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c,
|
||||
0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e,
|
||||
0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x66, 0x0a, 0x14, 0x55, 0x70, 0x64,
|
||||
0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70,
|
||||
0x73, 0x12, 0x2f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||
0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73,
|
||||
0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
|
||||
0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
||||
0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22,
|
||||
0x00, 0x12, 0x61, 0x0a, 0x11, 0x44, 0x72, 0x6f, 0x70, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63,
|
||||
0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x2d, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e,
|
||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x44, 0x72, 0x6f,
|
||||
0x70, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65,
|
||||
0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x7b, 0x0a, 0x12, 0x53, 0x68, 0x6f,
|
||||
0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12,
|
||||
0x30, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69,
|
||||
0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x6f, 0x6e, 0x66,
|
||||
0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
|
||||
0x74, 0x1a, 0x31, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||
0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x6f,
|
||||
0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70,
|
||||
0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5f, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74,
|
||||
0x72, 0x69, 0x63, 0x73, 0x12, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72,
|
||||
0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65,
|
||||
0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6d,
|
||||
0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76,
|
||||
0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73,
|
||||
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x62, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x52, 0x65,
|
||||
0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x12, 0x27, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e,
|
||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74,
|
||||
0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
|
||||
0x28, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d,
|
||||
0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61,
|
||||
0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x6c, 0x0a, 0x0f, 0x47,
|
||||
0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x2a,
|
||||
0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75,
|
||||
0x65, 0x72, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x4c, 0x65, 0x61, 0x64,
|
||||
0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x6d, 0x69, 0x6c,
|
||||
0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e,
|
||||
0x47, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x64, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52,
|
||||
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x62, 0x0a, 0x0b, 0x43, 0x68, 0x65,
|
||||
0x63, 0x6b, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x12, 0x27, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75,
|
||||
0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x43,
|
||||
0x68, 0x65, 0x63, 0x6b, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
|
||||
0x74, 0x1a, 0x28, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||
0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x48, 0x65, 0x61,
|
||||
0x6c, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x65, 0x0a,
|
||||
0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47,
|
||||
0x72, 0x6f, 0x75, 0x70, 0x12, 0x2f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72,
|
||||
0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74,
|
||||
0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65,
|
||||
0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70,
|
||||
0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74,
|
||||
0x75, 0x73, 0x22, 0x00, 0x12, 0x57, 0x0a, 0x0c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72,
|
||||
0x4e, 0x6f, 0x64, 0x65, 0x12, 0x28, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72,
|
||||
0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73,
|
||||
0x66, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b,
|
||||
0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f,
|
||||
0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x5c, 0x0a,
|
||||
0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61,
|
||||
0x12, 0x2a, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
|
||||
0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x52, 0x65,
|
||||
0x70, 0x6c, 0x69, 0x63, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d,
|
||||
0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d,
|
||||
0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x77, 0x0a, 0x12, 0x4c,
|
||||
0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70,
|
||||
0x73, 0x12, 0x2e, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||
0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f,
|
||||
0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
|
||||
0x74, 0x1a, 0x2f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||
0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f,
|
||||
0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
|
||||
0x73, 0x65, 0x22, 0x00, 0x12, 0x7e, 0x0a, 0x15, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65,
|
||||
0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x30, 0x2e,
|
||||
0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65,
|
||||
0x72, 0x79, 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75,
|
||||
0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
|
||||
0x31, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71,
|
||||
0x75, 0x65, 0x72, 0x79, 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x73,
|
||||
0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
|
||||
0x73, 0x65, 0x22, 0x00, 0x12, 0x63, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x68, 0x65, 0x63,
|
||||
0x6b, 0x65, 0x72, 0x73, 0x12, 0x27, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72,
|
||||
0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x68,
|
||||
0x65, 0x63, 0x6b, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e,
|
||||
0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65,
|
||||
0x72, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x72, 0x73, 0x52,
|
||||
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5c, 0x0a, 0x0f, 0x41, 0x63, 0x74,
|
||||
0x69, 0x76, 0x61, 0x74, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x72, 0x12, 0x2a, 0x2e, 0x6d,
|
||||
0x75, 0x73, 0x22, 0x00, 0x12, 0x66, 0x0a, 0x14, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65,
|
||||
0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x2f, 0x2e, 0x6d,
|
||||
0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72,
|
||||
0x79, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65,
|
||||
0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75,
|
||||
0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53,
|
||||
0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x11, 0x44, 0x65, 0x61, 0x63, 0x74,
|
||||
0x69, 0x76, 0x61, 0x74, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x72, 0x12, 0x2c, 0x2e, 0x6d,
|
||||
0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72,
|
||||
0x79, 0x2e, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x43, 0x68, 0x65, 0x63,
|
||||
0x6b, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c,
|
||||
0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e,
|
||||
0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x66, 0x0a, 0x0d, 0x4c, 0x69, 0x73,
|
||||
0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x28, 0x2e, 0x6d, 0x69, 0x6c,
|
||||
0x79, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
|
||||
0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e,
|
||||
0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d,
|
||||
0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x61, 0x0a, 0x11,
|
||||
0x44, 0x72, 0x6f, 0x70, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75,
|
||||
0x70, 0x12, 0x2d, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||
0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x44, 0x72, 0x6f, 0x70, 0x52, 0x65, 0x73, 0x6f,
|
||||
0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
|
||||
0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
|
||||
0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12,
|
||||
0x57, 0x0a, 0x0c, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x12,
|
||||
0x28, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d,
|
||||
0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x4e, 0x6f,
|
||||
0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76,
|
||||
0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e,
|
||||
0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x5c, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e,
|
||||
0x73, 0x66, 0x65, 0x72, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x12, 0x2a, 0x2e, 0x6d, 0x69,
|
||||
0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79,
|
||||
0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61,
|
||||
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73,
|
||||
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74,
|
||||
0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x77, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65,
|
||||
0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x2e, 0x2e, 0x6d,
|
||||
0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76,
|
||||
0x75, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47,
|
||||
0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x6d,
|
||||
0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76,
|
||||
0x75, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47,
|
||||
0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12,
|
||||
0x7e, 0x0a, 0x15, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75,
|
||||
0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x30, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75,
|
||||
0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x44, 0x65,
|
||||
0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x72,
|
||||
0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x6d, 0x69, 0x6c,
|
||||
0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e,
|
||||
0x4c, 0x69, 0x73, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71,
|
||||
0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72,
|
||||
0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x51, 0x75,
|
||||
0x65, 0x72, 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
|
||||
0x00, 0x12, 0x87, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x6f,
|
||||
0x64, 0x65, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x33,
|
||||
0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
|
||||
0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12,
|
||||
0x63, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x72, 0x73, 0x12,
|
||||
0x27, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71,
|
||||
0x75, 0x65, 0x72, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x72,
|
||||
0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75,
|
||||
0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x4c, 0x69,
|
||||
0x73, 0x74, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
|
||||
0x73, 0x65, 0x22, 0x00, 0x12, 0x5c, 0x0a, 0x0f, 0x41, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65,
|
||||
0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x72, 0x12, 0x2a, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73,
|
||||
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x41, 0x63, 0x74,
|
||||
0x69, 0x76, 0x61, 0x74, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75,
|
||||
0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f,
|
||||
0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
|
||||
0x22, 0x00, 0x12, 0x60, 0x0a, 0x11, 0x44, 0x65, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65,
|
||||
0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x72, 0x12, 0x2c, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73,
|
||||
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x44, 0x65, 0x61,
|
||||
0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x72, 0x52, 0x65,
|
||||
0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70,
|
||||
0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74,
|
||||
0x75, 0x73, 0x22, 0x00, 0x12, 0x66, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x51, 0x75, 0x65, 0x72,
|
||||
0x79, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x28, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70,
|
||||
0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x51,
|
||||
0x75, 0x65, 0x72, 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
|
||||
0x29, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71,
|
||||
0x75, 0x65, 0x72, 0x79, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x6f,
|
||||
0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x87, 0x01, 0x0a,
|
||||
0x18, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x44, 0x69, 0x73,
|
||||
0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x33, 0x2e, 0x6d, 0x69, 0x6c, 0x76,
|
||||
0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x47,
|
||||
0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x44, 0x69, 0x73, 0x74, 0x72,
|
||||
0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34,
|
||||
0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75,
|
||||
0x65, 0x72, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x6f, 0x64, 0x65,
|
||||
0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75,
|
||||
0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f,
|
||||
0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x51, 0x75, 0x65, 0x72,
|
||||
0x79, 0x4e, 0x6f, 0x64, 0x65, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f,
|
||||
0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x0e, 0x53,
|
||||
0x75, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x29, 0x2e,
|
||||
0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65,
|
||||
0x72, 0x79, 0x2e, 0x53, 0x75, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63,
|
||||
0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75,
|
||||
0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53,
|
||||
0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x58, 0x0a, 0x0d, 0x52, 0x65, 0x73, 0x75, 0x6d,
|
||||
0x65, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x28, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75,
|
||||
0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, 0x65,
|
||||
0x73, 0x75, 0x6d, 0x65, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
|
||||
0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
||||
0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22,
|
||||
0x00, 0x12, 0x75, 0x0a, 0x12, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63,
|
||||
0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2d, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73,
|
||||
0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70,
|
||||
0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x0e, 0x53, 0x75, 0x73, 0x70, 0x65, 0x6e,
|
||||
0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x29, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75,
|
||||
0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x53, 0x75,
|
||||
0x73, 0x70, 0x65, 0x6e, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75,
|
||||
0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f,
|
||||
0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
|
||||
0x22, 0x00, 0x12, 0x58, 0x0a, 0x0d, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x42, 0x61, 0x6c, 0x61,
|
||||
0x6e, 0x63, 0x65, 0x12, 0x28, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f,
|
||||
0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x42,
|
||||
0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e,
|
||||
0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d,
|
||||
0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x75, 0x0a, 0x12,
|
||||
0x43, 0x68, 0x65, 0x63, 0x6b, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74,
|
||||
0x75, 0x73, 0x12, 0x2d, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
||||
0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x42, 0x61, 0x6c,
|
||||
0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
|
||||
0x74, 0x1a, 0x2e, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||
0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x42, 0x61, 0x6c, 0x61,
|
||||
0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
|
||||
0x65, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x0b, 0x53, 0x75, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x4e, 0x6f,
|
||||
0x64, 0x65, 0x12, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
||||
0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x53, 0x75, 0x73, 0x70, 0x65, 0x6e, 0x64, 0x4e,
|
||||
0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c,
|
||||
0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e,
|
||||
0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x52, 0x0a, 0x0a, 0x52, 0x65, 0x73,
|
||||
0x75, 0x6d, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x25, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73,
|
||||
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x73,
|
||||
0x75, 0x6d, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b,
|
||||
0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f,
|
||||
0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x5c, 0x0a,
|
||||
0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74,
|
||||
0x12, 0x2a, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
|
||||
0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x53, 0x65,
|
||||
0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d,
|
||||
0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d,
|
||||
0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x5c, 0x0a, 0x0f, 0x54,
|
||||
0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x2a,
|
||||
0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75,
|
||||
0x65, 0x72, 0x79, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e,
|
||||
0x6e, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c,
|
||||
0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e,
|
||||
0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x72, 0x0a, 0x1a, 0x43, 0x68, 0x65,
|
||||
0x63, 0x6b, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x44, 0x69, 0x73, 0x74, 0x72,
|
||||
0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x35, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73,
|
||||
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x65,
|
||||
0x63, 0x6b, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52,
|
||||
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e,
|
||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x43, 0x68, 0x65, 0x63,
|
||||
0x6b, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65,
|
||||
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x54, 0x0a, 0x0b, 0x53, 0x75, 0x73, 0x70,
|
||||
0x65, 0x6e, 0x64, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73,
|
||||
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x53, 0x75, 0x73,
|
||||
0x70, 0x65, 0x6e, 0x64, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
|
||||
0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63,
|
||||
0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x52,
|
||||
0x0a, 0x0a, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x25, 0x2e, 0x6d,
|
||||
0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72,
|
||||
0x79, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6d, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75,
|
||||
0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f,
|
||||
0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
|
||||
0x22, 0x00, 0x12, 0x5c, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x53, 0x65,
|
||||
0x67, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2a, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70,
|
||||
0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73,
|
||||
0x66, 0x65, 0x72, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
|
||||
0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||
0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00,
|
||||
0x12, 0x5c, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6e,
|
||||
0x6e, 0x65, 0x6c, 0x12, 0x2a, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f,
|
||||
0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65,
|
||||
0x72, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
|
||||
0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63,
|
||||
0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x72,
|
||||
0x0a, 0x1a, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x6f, 0x64, 0x65,
|
||||
0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x35, 0x2e, 0x6d,
|
||||
0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72,
|
||||
0x79, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x6f, 0x64, 0x65,
|
||||
0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75,
|
||||
0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f,
|
||||
0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
|
||||
0x22, 0x00, 0x12, 0x5e, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4c, 0x6f, 0x61, 0x64,
|
||||
0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e,
|
||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x55, 0x70, 0x64, 0x61,
|
||||
0x74, 0x65, 0x4c, 0x6f, 0x61, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75,
|
||||
0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f,
|
||||
0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
|
||||
0x22, 0x00, 0x32, 0xb3, 0x13, 0x0a, 0x09, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x6f, 0x64, 0x65,
|
||||
0x12, 0x6c, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74,
|
||||
0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x12, 0x2e, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e,
|
||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74,
|
||||
0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x52,
|
||||
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e,
|
||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x43, 0x6f, 0x6d,
|
||||
0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x22, 0x00, 0x12, 0x6d,
|
||||
0x0a, 0x12, 0x47, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x54, 0x69, 0x63, 0x6b, 0x43, 0x68, 0x61,
|
||||
0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x30, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72,
|
||||
0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x47, 0x65, 0x74,
|
||||
0x54, 0x69, 0x6d, 0x65, 0x54, 0x69, 0x63, 0x6b, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52,
|
||||
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e,
|
||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x53, 0x74, 0x72,
|
||||
0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x71, 0x0a,
|
||||
0x14, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x43, 0x68,
|
||||
0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x32, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70,
|
||||
0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x47, 0x65,
|
||||
0x74, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x6e,
|
||||
0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x6d, 0x69, 0x6c, 0x76,
|
||||
0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e,
|
||||
0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
|
||||
0x12, 0x5c, 0x0a, 0x0f, 0x57, 0x61, 0x74, 0x63, 0x68, 0x44, 0x6d, 0x43, 0x68, 0x61, 0x6e, 0x6e,
|
||||
0x65, 0x6c, 0x73, 0x12, 0x2a, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f,
|
||||
0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x44, 0x6d,
|
||||
0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
|
||||
0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63,
|
||||
0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x5a,
|
||||
0x0a, 0x0e, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x44, 0x6d, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c,
|
||||
0x12, 0x29, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
|
||||
0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x44, 0x6d, 0x43, 0x68, 0x61,
|
||||
0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69,
|
||||
0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f,
|
||||
0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x56, 0x0a, 0x0c, 0x4c, 0x6f,
|
||||
0x61, 0x64, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x27, 0x2e, 0x6d, 0x69, 0x6c,
|
||||
0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e,
|
||||
0x4c, 0x6f, 0x61, 0x64, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75,
|
||||
0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f,
|
||||
0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
|
||||
0x22, 0x00, 0x12, 0x60, 0x0a, 0x11, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6c,
|
||||
0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73,
|
||||
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x6c,
|
||||
0x65, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65,
|
||||
0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70,
|
||||
0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74,
|
||||
0x75, 0x73, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x0e, 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x61, 0x72, 0x74,
|
||||
0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x29, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e,
|
||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x4c, 0x6f, 0x61, 0x64,
|
||||
0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
|
||||
0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||
0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00,
|
||||
0x12, 0x60, 0x0a, 0x11, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69,
|
||||
0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2c, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70,
|
||||
0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61,
|
||||
0x73, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75,
|
||||
0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f,
|
||||
0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
|
||||
0x22, 0x00, 0x12, 0x5c, 0x0a, 0x0f, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x53, 0x65, 0x67,
|
||||
0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x2a, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70,
|
||||
0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61,
|
||||
0x73, 0x65, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
|
||||
0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||
0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00,
|
||||
0x12, 0x69, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x6e,
|
||||
0x66, 0x6f, 0x12, 0x29, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
||||
0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65,
|
||||
0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e,
|
||||
0x63, 0x6b, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x44, 0x69, 0x73, 0x74, 0x72,
|
||||
0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b,
|
||||
0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f,
|
||||
0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x5e, 0x0a,
|
||||
0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4c, 0x6f, 0x61, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69,
|
||||
0x67, 0x12, 0x2b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||
0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4c, 0x6f, 0x61,
|
||||
0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b,
|
||||
0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f,
|
||||
0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x32, 0xb3, 0x13,
|
||||
0x0a, 0x09, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x6c, 0x0a, 0x12, 0x47,
|
||||
0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65,
|
||||
0x73, 0x12, 0x2e, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||
0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6f,
|
||||
0x6e, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
|
||||
0x74, 0x1a, 0x24, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||
0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e,
|
||||
0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x22, 0x00, 0x12, 0x6d, 0x0a, 0x12, 0x47, 0x65, 0x74,
|
||||
0x54, 0x69, 0x6d, 0x65, 0x54, 0x69, 0x63, 0x6b, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12,
|
||||
0x30, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69,
|
||||
0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x47, 0x65, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x54,
|
||||
0x69, 0x63, 0x6b, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
|
||||
0x74, 0x1a, 0x23, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||
0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x65,
|
||||
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x71, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x53,
|
||||
0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c,
|
||||
0x12, 0x32, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
|
||||
0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74,
|
||||
0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x71,
|
||||
0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72,
|
||||
0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e,
|
||||
0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5c, 0x0a, 0x0f, 0x57,
|
||||
0x61, 0x74, 0x63, 0x68, 0x44, 0x6d, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x12, 0x2a,
|
||||
0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75,
|
||||
0x65, 0x72, 0x79, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x44, 0x6d, 0x43, 0x68, 0x61, 0x6e, 0x6e,
|
||||
0x65, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c,
|
||||
0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e,
|
||||
0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x0e, 0x55, 0x6e, 0x73,
|
||||
0x75, 0x62, 0x44, 0x6d, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x29, 0x2e, 0x6d, 0x69,
|
||||
0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79,
|
||||
0x2e, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x44, 0x6d, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52,
|
||||
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e,
|
||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61,
|
||||
0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x56, 0x0a, 0x0c, 0x4c, 0x6f, 0x61, 0x64, 0x53, 0x65, 0x67,
|
||||
0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x27, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70,
|
||||
0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x53,
|
||||
0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b,
|
||||
0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f,
|
||||
0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x60, 0x0a,
|
||||
0x11, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69,
|
||||
0x6f, 0x6e, 0x12, 0x2c, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
||||
0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x43,
|
||||
0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
|
||||
0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
|
||||
0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12,
|
||||
0x5a, 0x0a, 0x0e, 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e,
|
||||
0x73, 0x12, 0x29, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||
0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x50, 0x61, 0x72, 0x74, 0x69,
|
||||
0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d,
|
||||
0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d,
|
||||
0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x11, 0x52,
|
||||
0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x50, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73,
|
||||
0x12, 0x2c, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
|
||||
0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x50, 0x61, 0x72,
|
||||
0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b,
|
||||
0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f,
|
||||
0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x5c, 0x0a,
|
||||
0x0f, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73,
|
||||
0x12, 0x2a, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
|
||||
0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x52, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x53, 0x65, 0x67,
|
||||
0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d,
|
||||
0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d,
|
||||
0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x69, 0x0a, 0x0e, 0x47,
|
||||
0x65, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x29, 0x2e,
|
||||
0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65,
|
||||
0x72, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66,
|
||||
0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x64, 0x0a, 0x13, 0x53,
|
||||
0x79, 0x6e, 0x63, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e,
|
||||
0x74, 0x73, 0x12, 0x2e, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
||||
0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x70, 0x6c,
|
||||
0x69, 0x63, 0x61, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
|
||||
0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
||||
0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22,
|
||||
0x00, 0x12, 0x69, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69,
|
||||
0x63, 0x73, 0x12, 0x28, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
||||
0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69,
|
||||
0x73, 0x74, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x6d,
|
||||
0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65,
|
||||
0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69,
|
||||
0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x53, 0x0a, 0x06,
|
||||
0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x12, 0x21, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e,
|
||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x53, 0x65, 0x61, 0x72,
|
||||
0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 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, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22,
|
||||
0x00, 0x12, 0x5b, 0x0a, 0x0e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x53, 0x65, 0x67, 0x6d, 0x65,
|
||||
0x6e, 0x74, 0x73, 0x12, 0x21, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f,
|
||||
0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52,
|
||||
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 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, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0x00, 0x12, 0x53,
|
||||
0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x20, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73,
|
||||
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65,
|
||||
0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76,
|
||||
0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,
|
||||
0x6c, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74,
|
||||
0x73, 0x22, 0x00, 0x12, 0x5b, 0x0a, 0x0b, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x72, 0x65,
|
||||
0x61, 0x6d, 0x12, 0x20, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
||||
0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75,
|
||||
0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x47, 0x65,
|
||||
0x74, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70,
|
||||
0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x64, 0x0a, 0x13, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65,
|
||||
0x70, 0x6c, 0x69, 0x63, 0x61, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x2e, 0x2e,
|
||||
0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65,
|
||||
0x72, 0x79, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x52, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x53, 0x65,
|
||||
0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e,
|
||||
0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d,
|
||||
0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x69, 0x0a, 0x0d,
|
||||
0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x12, 0x28, 0x2e,
|
||||
0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65,
|
||||
0x72, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73,
|
||||
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73,
|
||||
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e,
|
||||
0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73,
|
||||
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x53, 0x0a, 0x06, 0x53, 0x65, 0x61, 0x72, 0x63,
|
||||
0x68, 0x12, 0x21, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||
0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71,
|
||||
0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 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, 0x61,
|
||||
0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0x00, 0x12, 0x5b, 0x0a, 0x0e,
|
||||
0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x21,
|
||||
0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75,
|
||||
0x65, 0x72, 0x79, 0x2e, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
|
||||
0x74, 0x1a, 0x24, 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, 0x61, 0x72, 0x63, 0x68,
|
||||
0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0x00, 0x12, 0x53, 0x0a, 0x05, 0x51, 0x75, 0x65,
|
||||
0x72, 0x79, 0x12, 0x20, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
||||
0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71,
|
||||
0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72,
|
||||
0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x52, 0x65, 0x74,
|
||||
0x72, 0x69, 0x65, 0x76, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0x00, 0x30, 0x01,
|
||||
0x12, 0x5b, 0x0a, 0x0d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74,
|
||||
0x73, 0x12, 0x20, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||
0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75,
|
||||
0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f,
|
||||
0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x52, 0x65, 0x74, 0x72,
|
||||
0x69, 0x65, 0x76, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0x00, 0x12, 0x63, 0x0a,
|
||||
0x13, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x53, 0x65, 0x67, 0x6d,
|
||||
0x65, 0x6e, 0x74, 0x73, 0x12, 0x20, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72,
|
||||
0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52,
|
||||
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e,
|
||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x52,
|
||||
0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0x00,
|
||||
0x30, 0x01, 0x12, 0x7b, 0x0a, 0x12, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67,
|
||||
0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x30, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75,
|
||||
0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c,
|
||||
0x2e, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69,
|
||||
0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x6d, 0x69, 0x6c,
|
||||
0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e,
|
||||
0x61, 0x6c, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61,
|
||||
0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12,
|
||||
0x5f, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x26, 0x2e,
|
||||
0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c,
|
||||
0x76, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65,
|
||||
0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70,
|
||||
0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4d,
|
||||
0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
|
||||
0x12, 0x78, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x44, 0x69, 0x73, 0x74, 0x72,
|
||||
0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73,
|
||||
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x47, 0x65, 0x74,
|
||||
0x44, 0x61, 0x74, 0x61, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e,
|
||||
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73,
|
||||
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x47, 0x65, 0x74,
|
||||
0x44, 0x61, 0x74, 0x61, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e,
|
||||
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x10, 0x53, 0x79,
|
||||
0x6e, 0x63, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2b,
|
||||
0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75,
|
||||
0x65, 0x72, 0x79, 0x2e, 0x53, 0x79, 0x6e, 0x63, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75,
|
||||
0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69,
|
||||
0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f,
|
||||
0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x4a, 0x0a, 0x06, 0x44, 0x65,
|
||||
0x6c, 0x65, 0x74, 0x65, 0x12, 0x21, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72,
|
||||
0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
|
||||
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73,
|
||||
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74,
|
||||
0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x0b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
|
||||
0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70,
|
||||
0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74,
|
||||
0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e,
|
||||
0x72, 0x69, 0x65, 0x76, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0x00, 0x12, 0x5b,
|
||||
0x0a, 0x0b, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x20, 0x2e,
|
||||
0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65,
|
||||
0x72, 0x79, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65,
|
||||
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x32, 0x5a, 0x30, 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, 0x71, 0x75, 0x65, 0x72, 0x79, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72,
|
||||
0x6f, 0x74, 0x6f, 0x33,
|
||||
0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
|
||||
0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69,
|
||||
0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65,
|
||||
0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0x00, 0x30, 0x01, 0x12, 0x5b, 0x0a, 0x0d, 0x51,
|
||||
0x75, 0x65, 0x72, 0x79, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x20, 0x2e, 0x6d,
|
||||
0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72,
|
||||
0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26,
|
||||
0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e,
|
||||
0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65, 0x52,
|
||||
0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0x00, 0x12, 0x63, 0x0a, 0x13, 0x51, 0x75, 0x65, 0x72,
|
||||
0x79, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12,
|
||||
0x20, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71,
|
||||
0x75, 0x65, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
|
||||
0x74, 0x1a, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||
0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65,
|
||||
0x76, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0x00, 0x30, 0x01, 0x12, 0x7b, 0x0a,
|
||||
0x12, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69,
|
||||
0x6f, 0x6e, 0x73, 0x12, 0x30, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f,
|
||||
0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x53, 0x68, 0x6f, 0x77,
|
||||
0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65,
|
||||
0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70,
|
||||
0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x53, 0x68,
|
||||
0x6f, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73,
|
||||
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5f, 0x0a, 0x0a, 0x47, 0x65,
|
||||
0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75,
|
||||
0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x47,
|
||||
0x65, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
|
||||
0x1a, 0x27, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
|
||||
0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63,
|
||||
0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x78, 0x0a, 0x13, 0x47,
|
||||
0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69,
|
||||
0x6f, 0x6e, 0x12, 0x2e, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
||||
0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x44,
|
||||
0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65,
|
||||
0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
||||
0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x44,
|
||||
0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f,
|
||||
0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x10, 0x53, 0x79, 0x6e, 0x63, 0x44, 0x69, 0x73,
|
||||
0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x2e, 0x6d, 0x69, 0x6c, 0x76,
|
||||
0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x53,
|
||||
0x79, 0x6e, 0x63, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x52,
|
||||
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e,
|
||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61,
|
||||
0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x4a, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12,
|
||||
0x21, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71,
|
||||
0x75, 0x65, 0x72, 0x79, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
|
||||
0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
||||
0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22,
|
||||
0x00, 0x12, 0x60, 0x0a, 0x0b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68,
|
||||
0x12, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
|
||||
0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x42, 0x61, 0x74, 0x63,
|
||||
0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75,
|
||||
0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x71, 0x75, 0x65, 0x72, 0x79, 0x2e, 0x44, 0x65,
|
||||
0x6c, 0x65, 0x74, 0x65, 0x42, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
|
||||
0x65, 0x22, 0x00, 0x42, 0x32, 0x5a, 0x30, 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,
|
||||
0x71, 0x75, 0x65, 0x72, 0x79, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
}
|
||||
|
||||
var (
|
||||
|
|
|
@ -143,6 +143,9 @@ message CreateStatsRequest {
|
|||
uint64 current_ts = 17;
|
||||
int64 task_version = 18;
|
||||
uint64 binlogMaxSize = 19;
|
||||
bool enable_json_key_stats = 20;
|
||||
int64 json_key_stats_tantivy_memory = 21;
|
||||
int64 json_key_stats_data_format = 22;
|
||||
}
|
||||
|
||||
message CreateJobV2Request {
|
||||
|
|
|
@ -767,25 +767,28 @@ type CreateStatsRequest struct {
|
|||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
ClusterID string `protobuf:"bytes,1,opt,name=clusterID,proto3" json:"clusterID,omitempty"`
|
||||
TaskID int64 `protobuf:"varint,2,opt,name=taskID,proto3" json:"taskID,omitempty"`
|
||||
CollectionID int64 `protobuf:"varint,3,opt,name=collectionID,proto3" json:"collectionID,omitempty"`
|
||||
PartitionID int64 `protobuf:"varint,4,opt,name=partitionID,proto3" json:"partitionID,omitempty"`
|
||||
InsertChannel string `protobuf:"bytes,5,opt,name=insert_channel,json=insertChannel,proto3" json:"insert_channel,omitempty"`
|
||||
SegmentID int64 `protobuf:"varint,6,opt,name=segmentID,proto3" json:"segmentID,omitempty"`
|
||||
InsertLogs []*datapb.FieldBinlog `protobuf:"bytes,7,rep,name=insert_logs,json=insertLogs,proto3" json:"insert_logs,omitempty"`
|
||||
DeltaLogs []*datapb.FieldBinlog `protobuf:"bytes,8,rep,name=delta_logs,json=deltaLogs,proto3" json:"delta_logs,omitempty"`
|
||||
StorageConfig *indexpb.StorageConfig `protobuf:"bytes,9,opt,name=storage_config,json=storageConfig,proto3" json:"storage_config,omitempty"`
|
||||
Schema *schemapb.CollectionSchema `protobuf:"bytes,10,opt,name=schema,proto3" json:"schema,omitempty"`
|
||||
SubJobType indexpb.StatsSubJob `protobuf:"varint,11,opt,name=subJobType,proto3,enum=milvus.proto.index.StatsSubJob" json:"subJobType,omitempty"`
|
||||
TargetSegmentID int64 `protobuf:"varint,12,opt,name=targetSegmentID,proto3" json:"targetSegmentID,omitempty"`
|
||||
StartLogID int64 `protobuf:"varint,13,opt,name=startLogID,proto3" json:"startLogID,omitempty"`
|
||||
EndLogID int64 `protobuf:"varint,14,opt,name=endLogID,proto3" json:"endLogID,omitempty"`
|
||||
NumRows int64 `protobuf:"varint,15,opt,name=num_rows,json=numRows,proto3" json:"num_rows,omitempty"`
|
||||
CollectionTtl int64 `protobuf:"varint,16,opt,name=collection_ttl,json=collectionTtl,proto3" json:"collection_ttl,omitempty"`
|
||||
CurrentTs uint64 `protobuf:"varint,17,opt,name=current_ts,json=currentTs,proto3" json:"current_ts,omitempty"`
|
||||
TaskVersion int64 `protobuf:"varint,18,opt,name=task_version,json=taskVersion,proto3" json:"task_version,omitempty"`
|
||||
BinlogMaxSize uint64 `protobuf:"varint,19,opt,name=binlogMaxSize,proto3" json:"binlogMaxSize,omitempty"`
|
||||
ClusterID string `protobuf:"bytes,1,opt,name=clusterID,proto3" json:"clusterID,omitempty"`
|
||||
TaskID int64 `protobuf:"varint,2,opt,name=taskID,proto3" json:"taskID,omitempty"`
|
||||
CollectionID int64 `protobuf:"varint,3,opt,name=collectionID,proto3" json:"collectionID,omitempty"`
|
||||
PartitionID int64 `protobuf:"varint,4,opt,name=partitionID,proto3" json:"partitionID,omitempty"`
|
||||
InsertChannel string `protobuf:"bytes,5,opt,name=insert_channel,json=insertChannel,proto3" json:"insert_channel,omitempty"`
|
||||
SegmentID int64 `protobuf:"varint,6,opt,name=segmentID,proto3" json:"segmentID,omitempty"`
|
||||
InsertLogs []*datapb.FieldBinlog `protobuf:"bytes,7,rep,name=insert_logs,json=insertLogs,proto3" json:"insert_logs,omitempty"`
|
||||
DeltaLogs []*datapb.FieldBinlog `protobuf:"bytes,8,rep,name=delta_logs,json=deltaLogs,proto3" json:"delta_logs,omitempty"`
|
||||
StorageConfig *indexpb.StorageConfig `protobuf:"bytes,9,opt,name=storage_config,json=storageConfig,proto3" json:"storage_config,omitempty"`
|
||||
Schema *schemapb.CollectionSchema `protobuf:"bytes,10,opt,name=schema,proto3" json:"schema,omitempty"`
|
||||
SubJobType indexpb.StatsSubJob `protobuf:"varint,11,opt,name=subJobType,proto3,enum=milvus.proto.index.StatsSubJob" json:"subJobType,omitempty"`
|
||||
TargetSegmentID int64 `protobuf:"varint,12,opt,name=targetSegmentID,proto3" json:"targetSegmentID,omitempty"`
|
||||
StartLogID int64 `protobuf:"varint,13,opt,name=startLogID,proto3" json:"startLogID,omitempty"`
|
||||
EndLogID int64 `protobuf:"varint,14,opt,name=endLogID,proto3" json:"endLogID,omitempty"`
|
||||
NumRows int64 `protobuf:"varint,15,opt,name=num_rows,json=numRows,proto3" json:"num_rows,omitempty"`
|
||||
CollectionTtl int64 `protobuf:"varint,16,opt,name=collection_ttl,json=collectionTtl,proto3" json:"collection_ttl,omitempty"`
|
||||
CurrentTs uint64 `protobuf:"varint,17,opt,name=current_ts,json=currentTs,proto3" json:"current_ts,omitempty"`
|
||||
TaskVersion int64 `protobuf:"varint,18,opt,name=task_version,json=taskVersion,proto3" json:"task_version,omitempty"`
|
||||
BinlogMaxSize uint64 `protobuf:"varint,19,opt,name=binlogMaxSize,proto3" json:"binlogMaxSize,omitempty"`
|
||||
EnableJsonKeyStats bool `protobuf:"varint,20,opt,name=enable_json_key_stats,json=enableJsonKeyStats,proto3" json:"enable_json_key_stats,omitempty"`
|
||||
JsonKeyStatsTantivyMemory int64 `protobuf:"varint,21,opt,name=json_key_stats_tantivy_memory,json=jsonKeyStatsTantivyMemory,proto3" json:"json_key_stats_tantivy_memory,omitempty"`
|
||||
JsonKeyStatsDataFormat int64 `protobuf:"varint,22,opt,name=json_key_stats_data_format,json=jsonKeyStatsDataFormat,proto3" json:"json_key_stats_data_format,omitempty"`
|
||||
}
|
||||
|
||||
func (x *CreateStatsRequest) Reset() {
|
||||
|
@ -953,6 +956,27 @@ func (x *CreateStatsRequest) GetBinlogMaxSize() uint64 {
|
|||
return 0
|
||||
}
|
||||
|
||||
func (x *CreateStatsRequest) GetEnableJsonKeyStats() bool {
|
||||
if x != nil {
|
||||
return x.EnableJsonKeyStats
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func (x *CreateStatsRequest) GetJsonKeyStatsTantivyMemory() int64 {
|
||||
if x != nil {
|
||||
return x.JsonKeyStatsTantivyMemory
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (x *CreateStatsRequest) GetJsonKeyStatsDataFormat() int64 {
|
||||
if x != nil {
|
||||
return x.JsonKeyStatsDataFormat
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
type CreateJobV2Request struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
|
@ -1955,7 +1979,7 @@ var file_worker_proto_rawDesc = []byte{
|
|||
0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x6d, 0x69, 0x6c,
|
||||
0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e,
|
||||
0x53, 0x65, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x05, 0x76, 0x61,
|
||||
0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xaf, 0x06, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61,
|
||||
0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xe0, 0x07, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61,
|
||||
0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c,
|
||||
0x0a, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28,
|
||||
0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06,
|
||||
|
@ -2006,246 +2030,257 @@ var file_worker_proto_rawDesc = []byte{
|
|||
0x18, 0x12, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x74, 0x61, 0x73, 0x6b, 0x56, 0x65, 0x72, 0x73,
|
||||
0x69, 0x6f, 0x6e, 0x12, 0x24, 0x0a, 0x0d, 0x62, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x4d, 0x61, 0x78,
|
||||
0x53, 0x69, 0x7a, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x62, 0x69, 0x6e, 0x6c,
|
||||
0x6f, 0x67, 0x4d, 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x22, 0xf8, 0x02, 0x0a, 0x12, 0x43, 0x72,
|
||||
0x65, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
|
||||
0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20,
|
||||
0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x12, 0x16,
|
||||
0x0a, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06,
|
||||
0x74, 0x61, 0x73, 0x6b, 0x49, 0x44, 0x12, 0x36, 0x0a, 0x08, 0x6a, 0x6f, 0x62, 0x5f, 0x74, 0x79,
|
||||
0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75,
|
||||
0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x4a, 0x6f,
|
||||
0x62, 0x54, 0x79, 0x70, 0x65, 0x52, 0x07, 0x6a, 0x6f, 0x62, 0x54, 0x79, 0x70, 0x65, 0x12, 0x4d,
|
||||
0x0a, 0x0f, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73,
|
||||
0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73,
|
||||
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x41, 0x6e, 0x61,
|
||||
0x6c, 0x79, 0x7a, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x61,
|
||||
0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4b, 0x0a,
|
||||
0x0d, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x05,
|
||||
0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72,
|
||||
0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
|
||||
0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x69, 0x6e,
|
||||
0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4d, 0x0a, 0x0d, 0x73, 0x74,
|
||||
0x61, 0x74, 0x73, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28,
|
||||
0x0b, 0x32, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||
0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61,
|
||||
0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x73, 0x74, 0x61,
|
||||
0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x09, 0x0a, 0x07, 0x72, 0x65, 0x71,
|
||||
0x75, 0x65, 0x73, 0x74, 0x22, 0x84, 0x01, 0x0a, 0x12, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4a, 0x6f,
|
||||
0x62, 0x73, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x63,
|
||||
0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09,
|
||||
0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x61, 0x73,
|
||||
0x6b, 0x49, 0x44, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x07, 0x74, 0x61, 0x73, 0x6b,
|
||||
0x49, 0x44, 0x73, 0x12, 0x36, 0x0a, 0x08, 0x6a, 0x6f, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18,
|
||||
0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70,
|
||||
0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x4a, 0x6f, 0x62, 0x54, 0x79,
|
||||
0x70, 0x65, 0x52, 0x07, 0x6a, 0x6f, 0x62, 0x54, 0x79, 0x70, 0x65, 0x22, 0x92, 0x03, 0x0a, 0x0d,
|
||||
0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18, 0x0a,
|
||||
0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07,
|
||||
0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x44, 0x12, 0x35, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65,
|
||||
0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e,
|
||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x49, 0x6e, 0x64,
|
||||
0x65, 0x78, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x26,
|
||||
0x0a, 0x0f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6b, 0x65, 0x79,
|
||||
0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x46, 0x69,
|
||||
0x6c, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c,
|
||||
0x69, 0x7a, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52,
|
||||
0x0e, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x69, 0x7a, 0x65, 0x12,
|
||||
0x1f, 0x0a, 0x0b, 0x66, 0x61, 0x69, 0x6c, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x05,
|
||||
0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e,
|
||||
0x12, 0x32, 0x0a, 0x15, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65,
|
||||
0x78, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52,
|
||||
0x13, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x56, 0x65, 0x72,
|
||||
0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x13, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x73, 0x74,
|
||||
0x6f, 0x72, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28,
|
||||
0x03, 0x52, 0x11, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x56, 0x65, 0x72,
|
||||
0x73, 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x65, 0x6d, 0x5f, 0x73, 0x69, 0x7a, 0x65,
|
||||
0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x53, 0x69, 0x7a, 0x65, 0x12,
|
||||
0x3f, 0x0a, 0x1c, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x61,
|
||||
0x72, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18,
|
||||
0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x19, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x53, 0x63,
|
||||
0x61, 0x6c, 0x61, 0x72, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
|
||||
0x22, 0x4e, 0x0a, 0x0f, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x75,
|
||||
0x6c, 0x74, 0x73, 0x12, 0x3b, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01,
|
||||
0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72,
|
||||
0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54,
|
||||
0x61, 0x73, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73,
|
||||
0x22, 0xa3, 0x01, 0x0a, 0x0d, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x52, 0x65, 0x73, 0x75,
|
||||
0x6c, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01,
|
||||
0x28, 0x03, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x44, 0x12, 0x32, 0x0a, 0x05, 0x73, 0x74,
|
||||
0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x6d, 0x69, 0x6c, 0x76,
|
||||
0x6f, 0x67, 0x4d, 0x61, 0x78, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x31, 0x0a, 0x15, 0x65, 0x6e, 0x61,
|
||||
0x62, 0x6c, 0x65, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x73, 0x74, 0x61,
|
||||
0x74, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65,
|
||||
0x4a, 0x73, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x40, 0x0a, 0x1d,
|
||||
0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x5f, 0x74,
|
||||
0x61, 0x6e, 0x74, 0x69, 0x76, 0x79, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x18, 0x15, 0x20,
|
||||
0x01, 0x28, 0x03, 0x52, 0x19, 0x6a, 0x73, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74,
|
||||
0x73, 0x54, 0x61, 0x6e, 0x74, 0x69, 0x76, 0x79, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x3a,
|
||||
0x0a, 0x1a, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73,
|
||||
0x5f, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x16, 0x20, 0x01,
|
||||
0x28, 0x03, 0x52, 0x16, 0x6a, 0x73, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, 0x73,
|
||||
0x44, 0x61, 0x74, 0x61, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x22, 0xf8, 0x02, 0x0a, 0x12, 0x43,
|
||||
0x72, 0x65, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
|
||||
0x74, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01,
|
||||
0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x12,
|
||||
0x16, 0x0a, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52,
|
||||
0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x44, 0x12, 0x36, 0x0a, 0x08, 0x6a, 0x6f, 0x62, 0x5f, 0x74,
|
||||
0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76,
|
||||
0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x4a,
|
||||
0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1f,
|
||||
0x0a, 0x0b, 0x66, 0x61, 0x69, 0x6c, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x03, 0x20,
|
||||
0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12,
|
||||
0x25, 0x0a, 0x0e, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x6f, 0x69, 0x64, 0x73, 0x5f, 0x66, 0x69, 0x6c,
|
||||
0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x6f, 0x69,
|
||||
0x64, 0x73, 0x46, 0x69, 0x6c, 0x65, 0x22, 0x4d, 0x0a, 0x0e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a,
|
||||
0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x3b, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75,
|
||||
0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6d, 0x69, 0x6c, 0x76,
|
||||
0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x41,
|
||||
0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x07, 0x72, 0x65,
|
||||
0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0xdd, 0x06, 0x0a, 0x0b, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52,
|
||||
0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x44, 0x18,
|
||||
0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x44, 0x12, 0x32, 0x0a,
|
||||
0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x6d,
|
||||
0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65,
|
||||
0x78, 0x2e, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74,
|
||||
0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x61, 0x69, 0x6c, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e,
|
||||
0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x61, 0x73,
|
||||
0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e,
|
||||
0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63,
|
||||
0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74,
|
||||
0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x70, 0x61, 0x72,
|
||||
0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x67, 0x6d,
|
||||
0x65, 0x6e, 0x74, 0x49, 0x44, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x65, 0x67,
|
||||
0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65,
|
||||
0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c,
|
||||
0x12, 0x3f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x5f, 0x6c, 0x6f, 0x67, 0x73, 0x18,
|
||||
0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70,
|
||||
0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42,
|
||||
0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x4c, 0x6f, 0x67,
|
||||
0x73, 0x12, 0x3d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x73, 0x5f, 0x6c, 0x6f, 0x67, 0x73, 0x18,
|
||||
0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70,
|
||||
0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x42,
|
||||
0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x52, 0x09, 0x73, 0x74, 0x61, 0x74, 0x73, 0x4c, 0x6f, 0x67, 0x73,
|
||||
0x12, 0x5a, 0x0a, 0x0f, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x5f, 0x6c,
|
||||
0x6f, 0x67, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x6d, 0x69, 0x6c, 0x76,
|
||||
0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x53,
|
||||
0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x53,
|
||||
0x74, 0x61, 0x74, 0x73, 0x4c, 0x6f, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x74,
|
||||
0x65, 0x78, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x19, 0x0a, 0x08,
|
||||
0x6e, 0x75, 0x6d, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07,
|
||||
0x6e, 0x75, 0x6d, 0x52, 0x6f, 0x77, 0x73, 0x12, 0x3b, 0x0a, 0x09, 0x62, 0x6d, 0x32, 0x35, 0x5f,
|
||||
0x6c, 0x6f, 0x67, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6d, 0x69, 0x6c,
|
||||
0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x46,
|
||||
0x69, 0x65, 0x6c, 0x64, 0x42, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x52, 0x08, 0x62, 0x6d, 0x32, 0x35,
|
||||
0x4c, 0x6f, 0x67, 0x73, 0x12, 0x64, 0x0a, 0x13, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x6b, 0x65, 0x79,
|
||||
0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x5f, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28,
|
||||
0x0b, 0x32, 0x35, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||
0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x75,
|
||||
0x6c, 0x74, 0x2e, 0x4a, 0x73, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, 0x73, 0x4c,
|
||||
0x6f, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x6a, 0x73, 0x6f, 0x6e, 0x4b, 0x65,
|
||||
0x79, 0x53, 0x74, 0x61, 0x74, 0x73, 0x4c, 0x6f, 0x67, 0x73, 0x1a, 0x63, 0x0a, 0x12, 0x54, 0x65,
|
||||
0x78, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x4c, 0x6f, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79,
|
||||
0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b,
|
||||
0x65, 0x79, 0x12, 0x37, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
|
||||
0x0b, 0x32, 0x21, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||
0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53,
|
||||
0x74, 0x61, 0x74, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a,
|
||||
0x64, 0x0a, 0x15, 0x4a, 0x73, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, 0x73, 0x4c,
|
||||
0x6f, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18,
|
||||
0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x35, 0x0a, 0x05, 0x76, 0x61,
|
||||
0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6d, 0x69, 0x6c, 0x76,
|
||||
0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4a, 0x73,
|
||||
0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75,
|
||||
0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x49, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65,
|
||||
0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x39, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73,
|
||||
0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e,
|
||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x53, 0x74, 0x61, 0x74,
|
||||
0x73, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73,
|
||||
0x22, 0xeb, 0x02, 0x0a, 0x13, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4a, 0x6f, 0x62, 0x73, 0x56, 0x32,
|
||||
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74,
|
||||
0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75,
|
||||
0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53,
|
||||
0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1c, 0x0a,
|
||||
0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
|
||||
0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x12, 0x51, 0x0a, 0x11, 0x69,
|
||||
0x6e, 0x64, 0x65, 0x78, 0x5f, 0x6a, 0x6f, 0x62, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73,
|
||||
0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e,
|
||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x49, 0x6e, 0x64, 0x65,
|
||||
0x78, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x48, 0x00, 0x52, 0x0f, 0x69,
|
||||
0x6e, 0x64, 0x65, 0x78, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x54,
|
||||
0x0a, 0x13, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x5f, 0x6a, 0x6f, 0x62, 0x5f, 0x72, 0x65,
|
||||
0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6d, 0x69,
|
||||
0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78,
|
||||
0x2e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x48,
|
||||
0x00, 0x52, 0x11, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73,
|
||||
0x75, 0x6c, 0x74, 0x73, 0x12, 0x4e, 0x0a, 0x11, 0x73, 0x74, 0x61, 0x74, 0x73, 0x5f, 0x6a, 0x6f,
|
||||
0x62, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32,
|
||||
0x20, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69,
|
||||
0x6e, 0x64, 0x65, 0x78, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74,
|
||||
0x73, 0x48, 0x00, 0x52, 0x0f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73,
|
||||
0x75, 0x6c, 0x74, 0x73, 0x42, 0x08, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x83,
|
||||
0x01, 0x0a, 0x11, 0x44, 0x72, 0x6f, 0x70, 0x4a, 0x6f, 0x62, 0x73, 0x56, 0x32, 0x52, 0x65, 0x71,
|
||||
0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49,
|
||||
0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72,
|
||||
0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x44, 0x73, 0x18, 0x02, 0x20,
|
||||
0x03, 0x28, 0x03, 0x52, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x44, 0x73, 0x12, 0x36, 0x0a, 0x08,
|
||||
0x6a, 0x6f, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b,
|
||||
0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e,
|
||||
0x64, 0x65, 0x78, 0x2e, 0x4a, 0x6f, 0x62, 0x54, 0x79, 0x70, 0x65, 0x52, 0x07, 0x6a, 0x6f, 0x62,
|
||||
0x54, 0x79, 0x70, 0x65, 0x32, 0xb6, 0x08, 0x0a, 0x09, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4e, 0x6f,
|
||||
0x64, 0x65, 0x12, 0x6c, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65,
|
||||
0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x12, 0x2e, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75,
|
||||
0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x47,
|
||||
0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65,
|
||||
0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75,
|
||||
0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x43,
|
||||
0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x22, 0x00,
|
||||
0x12, 0x71, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63,
|
||||
0x73, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x32, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75,
|
||||
0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c,
|
||||
0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x43, 0x68,
|
||||
0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x6d,
|
||||
0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76,
|
||||
0x75, 0x73, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
|
||||
0x65, 0x22, 0x00, 0x12, 0x50, 0x0a, 0x09, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62,
|
||||
0x12, 0x24, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
|
||||
0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x52,
|
||||
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e,
|
||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61,
|
||||
0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x09, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4a, 0x6f,
|
||||
0x62, 0x73, 0x12, 0x24, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
||||
0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4a, 0x6f, 0x62,
|
||||
0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75,
|
||||
0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x51, 0x75,
|
||||
0x65, 0x72, 0x79, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
|
||||
0x00, 0x12, 0x4e, 0x0a, 0x08, 0x44, 0x72, 0x6f, 0x70, 0x4a, 0x6f, 0x62, 0x73, 0x12, 0x23, 0x2e,
|
||||
0x6f, 0x62, 0x54, 0x79, 0x70, 0x65, 0x52, 0x07, 0x6a, 0x6f, 0x62, 0x54, 0x79, 0x70, 0x65, 0x12,
|
||||
0x4d, 0x0a, 0x0f, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65,
|
||||
0x73, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75,
|
||||
0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x41, 0x6e,
|
||||
0x61, 0x6c, 0x79, 0x7a, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0e,
|
||||
0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4b,
|
||||
0x0a, 0x0d, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18,
|
||||
0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70,
|
||||
0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74,
|
||||
0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x69,
|
||||
0x6e, 0x64, 0x65, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4d, 0x0a, 0x0d, 0x73,
|
||||
0x74, 0x61, 0x74, 0x73, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x06, 0x20, 0x01,
|
||||
0x28, 0x0b, 0x32, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
||||
0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x74,
|
||||
0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x73, 0x74,
|
||||
0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x09, 0x0a, 0x07, 0x72, 0x65,
|
||||
0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x84, 0x01, 0x0a, 0x12, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4a,
|
||||
0x6f, 0x62, 0x73, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09,
|
||||
0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
|
||||
0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x61,
|
||||
0x73, 0x6b, 0x49, 0x44, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x03, 0x52, 0x07, 0x74, 0x61, 0x73,
|
||||
0x6b, 0x49, 0x44, 0x73, 0x12, 0x36, 0x0a, 0x08, 0x6a, 0x6f, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65,
|
||||
0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e,
|
||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x4a, 0x6f, 0x62, 0x54,
|
||||
0x79, 0x70, 0x65, 0x52, 0x07, 0x6a, 0x6f, 0x62, 0x54, 0x79, 0x70, 0x65, 0x22, 0x92, 0x03, 0x0a,
|
||||
0x0d, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x54, 0x61, 0x73, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x18,
|
||||
0x0a, 0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52,
|
||||
0x07, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x44, 0x12, 0x35, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74,
|
||||
0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73,
|
||||
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x49, 0x6e,
|
||||
0x64, 0x65, 0x78, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12,
|
||||
0x26, 0x0a, 0x0f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x5f, 0x6b, 0x65,
|
||||
0x79, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x46,
|
||||
0x69, 0x6c, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x65, 0x72, 0x69, 0x61,
|
||||
0x6c, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04,
|
||||
0x52, 0x0e, 0x73, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x53, 0x69, 0x7a, 0x65,
|
||||
0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x61, 0x69, 0x6c, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18,
|
||||
0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x61, 0x73, 0x6f,
|
||||
0x6e, 0x12, 0x32, 0x0a, 0x15, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x6e, 0x64,
|
||||
0x65, 0x78, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05,
|
||||
0x52, 0x13, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x56, 0x65,
|
||||
0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x13, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x73,
|
||||
0x74, 0x6f, 0x72, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01,
|
||||
0x28, 0x03, 0x52, 0x11, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x74, 0x6f, 0x72, 0x65, 0x56, 0x65,
|
||||
0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x6d, 0x65, 0x6d, 0x5f, 0x73, 0x69, 0x7a,
|
||||
0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x53, 0x69, 0x7a, 0x65,
|
||||
0x12, 0x3f, 0x0a, 0x1c, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x63, 0x61, 0x6c,
|
||||
0x61, 0x72, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
|
||||
0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x19, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x53,
|
||||
0x63, 0x61, 0x6c, 0x61, 0x72, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f,
|
||||
0x6e, 0x22, 0x4e, 0x0a, 0x0f, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73,
|
||||
0x75, 0x6c, 0x74, 0x73, 0x12, 0x3b, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18,
|
||||
0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70,
|
||||
0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x49, 0x6e, 0x64, 0x65, 0x78,
|
||||
0x54, 0x61, 0x73, 0x6b, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74,
|
||||
0x73, 0x22, 0xa3, 0x01, 0x0a, 0x0d, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x52, 0x65, 0x73,
|
||||
0x75, 0x6c, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x44, 0x18, 0x01, 0x20,
|
||||
0x01, 0x28, 0x03, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x44, 0x12, 0x32, 0x0a, 0x05, 0x73,
|
||||
0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x6d, 0x69, 0x6c,
|
||||
0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e,
|
||||
0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12,
|
||||
0x1f, 0x0a, 0x0b, 0x66, 0x61, 0x69, 0x6c, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x03,
|
||||
0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e,
|
||||
0x12, 0x25, 0x0a, 0x0e, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x6f, 0x69, 0x64, 0x73, 0x5f, 0x66, 0x69,
|
||||
0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x65, 0x6e, 0x74, 0x72, 0x6f,
|
||||
0x69, 0x64, 0x73, 0x46, 0x69, 0x6c, 0x65, 0x22, 0x4d, 0x0a, 0x0e, 0x41, 0x6e, 0x61, 0x6c, 0x79,
|
||||
0x7a, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x3b, 0x0a, 0x07, 0x72, 0x65, 0x73,
|
||||
0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6d, 0x69, 0x6c,
|
||||
0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e,
|
||||
0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x07, 0x72,
|
||||
0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x22, 0xdd, 0x06, 0x0a, 0x0b, 0x53, 0x74, 0x61, 0x74, 0x73,
|
||||
0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x44,
|
||||
0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x44, 0x12, 0x32,
|
||||
0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e,
|
||||
0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64,
|
||||
0x65, 0x78, 0x2e, 0x44, 0x72, 0x6f, 0x70, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
|
||||
0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
||||
0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22,
|
||||
0x00, 0x12, 0x60, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x73,
|
||||
0x12, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
|
||||
0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74,
|
||||
0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75,
|
||||
0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x47, 0x65,
|
||||
0x74, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
|
||||
0x65, 0x22, 0x00, 0x12, 0x7b, 0x0a, 0x12, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69,
|
||||
0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x30, 0x2e, 0x6d, 0x69, 0x6c, 0x76,
|
||||
0x65, 0x78, 0x2e, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61,
|
||||
0x74, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x66, 0x61, 0x69, 0x6c, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f,
|
||||
0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x61,
|
||||
0x73, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f,
|
||||
0x6e, 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0c, 0x63, 0x6f, 0x6c, 0x6c, 0x65,
|
||||
0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x74, 0x69,
|
||||
0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x70, 0x61,
|
||||
0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x67,
|
||||
0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x73, 0x65,
|
||||
0x67, 0x6d, 0x65, 0x6e, 0x74, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e,
|
||||
0x65, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65,
|
||||
0x6c, 0x12, 0x3f, 0x0a, 0x0b, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x5f, 0x6c, 0x6f, 0x67, 0x73,
|
||||
0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e,
|
||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64,
|
||||
0x42, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x52, 0x0a, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x4c, 0x6f,
|
||||
0x67, 0x73, 0x12, 0x3d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x73, 0x5f, 0x6c, 0x6f, 0x67, 0x73,
|
||||
0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e,
|
||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64,
|
||||
0x42, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x52, 0x09, 0x73, 0x74, 0x61, 0x74, 0x73, 0x4c, 0x6f, 0x67,
|
||||
0x73, 0x12, 0x5a, 0x0a, 0x0f, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x5f,
|
||||
0x6c, 0x6f, 0x67, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x6d, 0x69, 0x6c,
|
||||
0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e,
|
||||
0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x54, 0x65, 0x78, 0x74,
|
||||
0x53, 0x74, 0x61, 0x74, 0x73, 0x4c, 0x6f, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d,
|
||||
0x74, 0x65, 0x78, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x19, 0x0a,
|
||||
0x08, 0x6e, 0x75, 0x6d, 0x5f, 0x72, 0x6f, 0x77, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52,
|
||||
0x07, 0x6e, 0x75, 0x6d, 0x52, 0x6f, 0x77, 0x73, 0x12, 0x3b, 0x0a, 0x09, 0x62, 0x6d, 0x32, 0x35,
|
||||
0x5f, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6d, 0x69,
|
||||
0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e,
|
||||
0x46, 0x69, 0x65, 0x6c, 0x64, 0x42, 0x69, 0x6e, 0x6c, 0x6f, 0x67, 0x52, 0x08, 0x62, 0x6d, 0x32,
|
||||
0x35, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x64, 0x0a, 0x13, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x6b, 0x65,
|
||||
0x79, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x5f, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x0d, 0x20, 0x03,
|
||||
0x28, 0x0b, 0x32, 0x35, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
||||
0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73,
|
||||
0x75, 0x6c, 0x74, 0x2e, 0x4a, 0x73, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, 0x73,
|
||||
0x4c, 0x6f, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x6a, 0x73, 0x6f, 0x6e, 0x4b,
|
||||
0x65, 0x79, 0x53, 0x74, 0x61, 0x74, 0x73, 0x4c, 0x6f, 0x67, 0x73, 0x1a, 0x63, 0x0a, 0x12, 0x54,
|
||||
0x65, 0x78, 0x74, 0x53, 0x74, 0x61, 0x74, 0x73, 0x4c, 0x6f, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72,
|
||||
0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03,
|
||||
0x6b, 0x65, 0x79, 0x12, 0x37, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01,
|
||||
0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
||||
0x6f, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x49, 0x6e, 0x64, 0x65, 0x78,
|
||||
0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01,
|
||||
0x1a, 0x64, 0x0a, 0x15, 0x4a, 0x73, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, 0x73,
|
||||
0x4c, 0x6f, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,
|
||||
0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x35, 0x0a, 0x05, 0x76,
|
||||
0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6d, 0x69, 0x6c,
|
||||
0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4a,
|
||||
0x73, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c,
|
||||
0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x49, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52,
|
||||
0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x39, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74,
|
||||
0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73,
|
||||
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x53, 0x74, 0x61,
|
||||
0x74, 0x73, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74,
|
||||
0x73, 0x22, 0xeb, 0x02, 0x0a, 0x13, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4a, 0x6f, 0x62, 0x73, 0x56,
|
||||
0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x06, 0x73, 0x74, 0x61,
|
||||
0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76,
|
||||
0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e,
|
||||
0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1c,
|
||||
0x0a, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28,
|
||||
0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x44, 0x12, 0x51, 0x0a, 0x11,
|
||||
0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x6a, 0x6f, 0x62, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74,
|
||||
0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73,
|
||||
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x49, 0x6e, 0x64,
|
||||
0x65, 0x78, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x48, 0x00, 0x52, 0x0f,
|
||||
0x69, 0x6e, 0x64, 0x65, 0x78, 0x4a, 0x6f, 0x62, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x12,
|
||||
0x54, 0x0a, 0x13, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x5f, 0x6a, 0x6f, 0x62, 0x5f, 0x72,
|
||||
0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x6d,
|
||||
0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65,
|
||||
0x78, 0x2e, 0x41, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73,
|
||||
0x48, 0x00, 0x52, 0x11, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x7a, 0x65, 0x4a, 0x6f, 0x62, 0x52, 0x65,
|
||||
0x73, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x4e, 0x0a, 0x11, 0x73, 0x74, 0x61, 0x74, 0x73, 0x5f, 0x6a,
|
||||
0x6f, 0x62, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b,
|
||||
0x32, 0x20, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
|
||||
0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x75, 0x6c,
|
||||
0x74, 0x73, 0x48, 0x00, 0x52, 0x0f, 0x73, 0x74, 0x61, 0x74, 0x73, 0x4a, 0x6f, 0x62, 0x52, 0x65,
|
||||
0x73, 0x75, 0x6c, 0x74, 0x73, 0x42, 0x08, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22,
|
||||
0x83, 0x01, 0x0a, 0x11, 0x44, 0x72, 0x6f, 0x70, 0x4a, 0x6f, 0x62, 0x73, 0x56, 0x32, 0x52, 0x65,
|
||||
0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72,
|
||||
0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65,
|
||||
0x72, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x44, 0x73, 0x18, 0x02,
|
||||
0x20, 0x03, 0x28, 0x03, 0x52, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x44, 0x73, 0x12, 0x36, 0x0a,
|
||||
0x08, 0x6a, 0x6f, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32,
|
||||
0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69,
|
||||
0x6e, 0x64, 0x65, 0x78, 0x2e, 0x4a, 0x6f, 0x62, 0x54, 0x79, 0x70, 0x65, 0x52, 0x07, 0x6a, 0x6f,
|
||||
0x62, 0x54, 0x79, 0x70, 0x65, 0x32, 0xb6, 0x08, 0x0a, 0x09, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x4e,
|
||||
0x6f, 0x64, 0x65, 0x12, 0x6c, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e,
|
||||
0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x12, 0x2e, 0x2e, 0x6d, 0x69, 0x6c, 0x76,
|
||||
0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e,
|
||||
0x47, 0x65, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74,
|
||||
0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x6d, 0x69, 0x6c, 0x76,
|
||||
0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e,
|
||||
0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x73, 0x22,
|
||||
0x00, 0x12, 0x71, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69,
|
||||
0x63, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x32, 0x2e, 0x6d, 0x69, 0x6c, 0x76,
|
||||
0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,
|
||||
0x6c, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74,
|
||||
0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x6d, 0x69,
|
||||
0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72,
|
||||
0x6e, 0x61, 0x6c, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72,
|
||||
0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00,
|
||||
0x12, 0x5f, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12, 0x26,
|
||||
0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69,
|
||||
0x6c, 0x76, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52,
|
||||
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e,
|
||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74,
|
||||
0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
|
||||
0x00, 0x12, 0x54, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x56, 0x32,
|
||||
0x12, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e,
|
||||
0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x56,
|
||||
0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75,
|
||||
0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53,
|
||||
0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x0b, 0x51, 0x75, 0x65, 0x72, 0x79,
|
||||
0x4a, 0x6f, 0x62, 0x73, 0x56, 0x32, 0x12, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e,
|
||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x51, 0x75, 0x65, 0x72,
|
||||
0x79, 0x4a, 0x6f, 0x62, 0x73, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27,
|
||||
0x6c, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x69, 0x73, 0x74, 0x69, 0x63, 0x73, 0x43,
|
||||
0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e,
|
||||
0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c,
|
||||
0x76, 0x75, 0x73, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
|
||||
0x73, 0x65, 0x22, 0x00, 0x12, 0x50, 0x0a, 0x09, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4a, 0x6f,
|
||||
0x62, 0x12, 0x24, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||
0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62,
|
||||
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73,
|
||||
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74,
|
||||
0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x5a, 0x0a, 0x09, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4a,
|
||||
0x6f, 0x62, 0x73, 0x12, 0x24, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f,
|
||||
0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4a, 0x6f,
|
||||
0x62, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x6d, 0x69, 0x6c, 0x76,
|
||||
0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x51,
|
||||
0x75, 0x65, 0x72, 0x79, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
|
||||
0x22, 0x00, 0x12, 0x4e, 0x0a, 0x08, 0x44, 0x72, 0x6f, 0x70, 0x4a, 0x6f, 0x62, 0x73, 0x12, 0x23,
|
||||
0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e,
|
||||
0x64, 0x65, 0x78, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4a, 0x6f, 0x62, 0x73, 0x56, 0x32, 0x52,
|
||||
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x52, 0x0a, 0x0a, 0x44, 0x72, 0x6f,
|
||||
0x70, 0x4a, 0x6f, 0x62, 0x73, 0x56, 0x32, 0x12, 0x25, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73,
|
||||
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x44, 0x72, 0x6f,
|
||||
0x70, 0x4a, 0x6f, 0x62, 0x73, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b,
|
||||
0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f,
|
||||
0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x42, 0x33, 0x5a,
|
||||
0x31, 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, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72,
|
||||
0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
0x64, 0x65, 0x78, 0x2e, 0x44, 0x72, 0x6f, 0x70, 0x4a, 0x6f, 0x62, 0x73, 0x52, 0x65, 0x71, 0x75,
|
||||
0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f,
|
||||
0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73,
|
||||
0x22, 0x00, 0x12, 0x60, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74,
|
||||
0x73, 0x12, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||
0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x47, 0x65, 0x74, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61,
|
||||
0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6d, 0x69, 0x6c, 0x76,
|
||||
0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x47,
|
||||
0x65, 0x74, 0x4a, 0x6f, 0x62, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
|
||||
0x73, 0x65, 0x22, 0x00, 0x12, 0x7b, 0x0a, 0x12, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x6f, 0x6e, 0x66,
|
||||
0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x30, 0x2e, 0x6d, 0x69, 0x6c,
|
||||
0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e,
|
||||
0x61, 0x6c, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61,
|
||||
0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x6d,
|
||||
0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x74, 0x65,
|
||||
0x72, 0x6e, 0x61, 0x6c, 0x2e, 0x53, 0x68, 0x6f, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75,
|
||||
0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
|
||||
0x00, 0x12, 0x5f, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x12,
|
||||
0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d,
|
||||
0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73,
|
||||
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73,
|
||||
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x47, 0x65,
|
||||
0x74, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
|
||||
0x22, 0x00, 0x12, 0x54, 0x0a, 0x0b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62, 0x56,
|
||||
0x32, 0x12, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||
0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4a, 0x6f, 0x62,
|
||||
0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76,
|
||||
0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e,
|
||||
0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x60, 0x0a, 0x0b, 0x51, 0x75, 0x65, 0x72,
|
||||
0x79, 0x4a, 0x6f, 0x62, 0x73, 0x56, 0x32, 0x12, 0x26, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73,
|
||||
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x51, 0x75, 0x65,
|
||||
0x72, 0x79, 0x4a, 0x6f, 0x62, 0x73, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
|
||||
0x27, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69,
|
||||
0x6e, 0x64, 0x65, 0x78, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4a, 0x6f, 0x62, 0x73, 0x56, 0x32,
|
||||
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x52, 0x0a, 0x0a, 0x44, 0x72,
|
||||
0x6f, 0x70, 0x4a, 0x6f, 0x62, 0x73, 0x56, 0x32, 0x12, 0x25, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75,
|
||||
0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x2e, 0x44, 0x72,
|
||||
0x6f, 0x70, 0x4a, 0x6f, 0x62, 0x73, 0x56, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
|
||||
0x1b, 0x2e, 0x6d, 0x69, 0x6c, 0x76, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x63,
|
||||
0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x42, 0x33,
|
||||
0x5a, 0x31, 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, 0x77, 0x6f, 0x72, 0x6b, 0x65,
|
||||
0x72, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
}
|
||||
|
||||
var (
|
||||
|
|
|
@ -2598,9 +2598,8 @@ type queryNodeConfig struct {
|
|||
// worker
|
||||
WorkerPoolingSize ParamItem `refreshable:"false"`
|
||||
|
||||
// Json Key Index
|
||||
JSONIndexMemoryBudgetInTantivy ParamItem `refreshable:"false"`
|
||||
JSONIndexCommitInterval ParamItem `refreshable:"false"`
|
||||
// Json Key Stats
|
||||
JSONKeyStatsCommitInterval ParamItem `refreshable:"false"`
|
||||
}
|
||||
|
||||
func (p *queryNodeConfig) init(base *BaseTable) {
|
||||
|
@ -3293,23 +3292,14 @@ user-task-polling:
|
|||
}
|
||||
p.ExprEvalBatchSize.Init(base.mgr)
|
||||
|
||||
p.JSONIndexMemoryBudgetInTantivy = ParamItem{
|
||||
Key: "queryNode.segcore.jsonIndexMemoryBudgetInTantivy",
|
||||
Version: "2.5.0",
|
||||
DefaultValue: "16",
|
||||
Doc: "the memory budget for the JSON index In Tantivy",
|
||||
Export: true,
|
||||
}
|
||||
p.JSONIndexMemoryBudgetInTantivy.Init(base.mgr)
|
||||
|
||||
p.JSONIndexCommitInterval = ParamItem{
|
||||
Key: "queryNode.segcore.jsonIndexCommitInterval",
|
||||
p.JSONKeyStatsCommitInterval = ParamItem{
|
||||
Key: "queryNode.segcore.jsonKeyStatsCommitInterval",
|
||||
Version: "2.5.0",
|
||||
DefaultValue: "200",
|
||||
Doc: "the commit interval for the JSON index to commit",
|
||||
Doc: "the commit interval for the JSON key Stats to commit",
|
||||
Export: true,
|
||||
}
|
||||
p.JSONIndexCommitInterval.Init(base.mgr)
|
||||
p.JSONKeyStatsCommitInterval.Init(base.mgr)
|
||||
|
||||
p.CleanExcludeSegInterval = ParamItem{
|
||||
Key: "queryCoord.cleanExcludeSegmentInterval",
|
||||
|
@ -3520,11 +3510,14 @@ type dataCoordConfig struct {
|
|||
MixCompactionSlotUsage ParamItem `refreshable:"true"`
|
||||
L0DeleteCompactionSlotUsage ParamItem `refreshable:"true"`
|
||||
|
||||
EnableStatsTask ParamItem `refreshable:"true"`
|
||||
TaskCheckInterval ParamItem `refreshable:"true"`
|
||||
StatsTaskTriggerCount ParamItem `refreshable:"true"`
|
||||
EnableStatsTask ParamItem `refreshable:"true"`
|
||||
TaskCheckInterval ParamItem `refreshable:"true"`
|
||||
StatsTaskTriggerCount ParamItem `refreshable:"true"`
|
||||
JSONStatsTriggerCount ParamItem `refreshable:"true"`
|
||||
JSONStatsTriggerInterval ParamItem `refreshable:"true"`
|
||||
|
||||
RequestTimeoutSeconds ParamItem `refreshable:"true"`
|
||||
RequestTimeoutSeconds ParamItem `refreshable:"true"`
|
||||
JSONKeyStatsMemoryBudgetInTantivy ParamItem `refreshable:"false"`
|
||||
}
|
||||
|
||||
func (p *dataCoordConfig) init(base *BaseTable) {
|
||||
|
@ -4418,6 +4411,26 @@ During compaction, the size of segment # of rows is able to exceed segment max #
|
|||
}
|
||||
p.StatsTaskTriggerCount.Init(base.mgr)
|
||||
|
||||
p.JSONStatsTriggerCount = ParamItem{
|
||||
Key: "dataCoord.jsonStatsTriggerCount",
|
||||
Version: "2.5.5",
|
||||
Doc: "jsonkey stats task count per trigger",
|
||||
DefaultValue: "10",
|
||||
PanicIfEmpty: false,
|
||||
Export: true,
|
||||
}
|
||||
p.JSONStatsTriggerCount.Init(base.mgr)
|
||||
|
||||
p.JSONStatsTriggerInterval = ParamItem{
|
||||
Key: "dataCoord.jsonStatsTriggerInterval",
|
||||
Version: "2.5.5",
|
||||
Doc: "jsonkey task interval per trigger",
|
||||
DefaultValue: "10",
|
||||
PanicIfEmpty: false,
|
||||
Export: true,
|
||||
}
|
||||
p.JSONStatsTriggerInterval.Init(base.mgr)
|
||||
|
||||
p.RequestTimeoutSeconds = ParamItem{
|
||||
Key: "dataCoord.requestTimeoutSeconds",
|
||||
Version: "2.5.5",
|
||||
|
@ -4427,6 +4440,14 @@ During compaction, the size of segment # of rows is able to exceed segment max #
|
|||
Export: false,
|
||||
}
|
||||
p.RequestTimeoutSeconds.Init(base.mgr)
|
||||
p.JSONKeyStatsMemoryBudgetInTantivy = ParamItem{
|
||||
Key: "dataCoord.segcore.jsonKeyStatsMemoryBudgetInTantivy",
|
||||
Version: "2.5.5",
|
||||
DefaultValue: "16777216",
|
||||
Doc: "the memory budget for the JSON index In Tantivy, the unit is bytes",
|
||||
Export: true,
|
||||
}
|
||||
p.JSONKeyStatsMemoryBudgetInTantivy.Init(base.mgr)
|
||||
}
|
||||
|
||||
// /////////////////////////////////////////////////////////////////////////////
|
||||
|
|
Loading…
Reference in New Issue