Move disk index params to config file (#19714)

Signed-off-by: xige-16 <xi.ge@zilliz.com>

Signed-off-by: xige-16 <xi.ge@zilliz.com>
This commit is contained in:
xige-16 2022-10-14 17:51:24 +08:00 committed by GitHub
parent bdaddd7b09
commit a1db9038fb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
44 changed files with 1068 additions and 578 deletions

View File

@ -6,13 +6,13 @@ import (
"io" "io"
"os" "os"
"github.com/milvus-io/milvus/internal/util/metricsinfo"
"github.com/milvus-io/milvus/internal/util/paramtable"
"go.uber.org/zap" "go.uber.org/zap"
"github.com/milvus-io/milvus/internal/log"
"github.com/milvus-io/milvus/cmd/roles" "github.com/milvus-io/milvus/cmd/roles"
"github.com/milvus-io/milvus/internal/log"
"github.com/milvus-io/milvus/internal/util/hardware"
"github.com/milvus-io/milvus/internal/util/metricsinfo"
"github.com/milvus-io/milvus/internal/util/paramtable"
"github.com/milvus-io/milvus/internal/util/typeutil" "github.com/milvus-io/milvus/internal/util/typeutil"
) )
@ -133,7 +133,10 @@ func (c *run) formatFlags(args []string, flags *flag.FlagSet) {
flags.BoolVar(&c.enableIndexNode, typeutil.IndexNodeRole, false, "enable index node") flags.BoolVar(&c.enableIndexNode, typeutil.IndexNodeRole, false, "enable index node")
flags.BoolVar(&c.enableProxy, typeutil.ProxyRole, false, "enable proxy node") flags.BoolVar(&c.enableProxy, typeutil.ProxyRole, false, "enable proxy node")
initMaxprocs(c.serverType, flags) if c.serverType == typeutil.EmbeddedRole {
flags.SetOutput(io.Discard)
}
hardware.InitMaxprocs(c.serverType, flags)
if err := flags.Parse(args[3:]); err != nil { if err := flags.Parse(args[3:]); err != nil {
os.Exit(-1) os.Exit(-1)
} }

View File

@ -3,10 +3,12 @@ package milvus
import ( import (
"flag" "flag"
"fmt" "fmt"
"io"
"os" "os"
"path" "path"
"syscall" "syscall"
"github.com/milvus-io/milvus/internal/util/hardware"
"github.com/milvus-io/milvus/internal/util/typeutil" "github.com/milvus-io/milvus/internal/util/typeutil"
) )
@ -47,7 +49,10 @@ func (c *stop) execute(args []string, flags *flag.FlagSet) {
func (c *stop) formatFlags(args []string, flags *flag.FlagSet) { func (c *stop) formatFlags(args []string, flags *flag.FlagSet) {
flags.StringVar(&(c.svrAlias), "alias", "", "set alias") flags.StringVar(&(c.svrAlias), "alias", "", "set alias")
initMaxprocs(c.serverType, flags) if c.serverType == typeutil.EmbeddedRole {
flags.SetOutput(io.Discard)
}
hardware.InitMaxprocs(c.serverType, flags)
if err := flags.Parse(args[3:]); err != nil { if err := flags.Parse(args[3:]); err != nil {
os.Exit(-1) os.Exit(-1)
} }

View File

@ -1,19 +1,15 @@
package milvus package milvus
import ( import (
"flag"
"fmt" "fmt"
"io" "io"
"io/ioutil" "io/ioutil"
syslog "log"
"os" "os"
"path" "path"
"runtime" "runtime"
"github.com/gofrs/flock" "github.com/gofrs/flock"
"go.uber.org/automaxprocs/maxprocs"
"github.com/milvus-io/milvus/internal/util/typeutil" "github.com/milvus-io/milvus/internal/util/typeutil"
) )
@ -64,18 +60,6 @@ func createRuntimeDir(sType string) string {
return runtimeDir return runtimeDir
} }
// Initialize maxprocs
func initMaxprocs(serverType string, flags *flag.FlagSet) {
if serverType == typeutil.EmbeddedRole {
flags.SetOutput(io.Discard)
// Initialize maxprocs while discarding log.
maxprocs.Set(maxprocs.Logger(nil))
} else {
// Initialize maxprocs.
maxprocs.Set(maxprocs.Logger(syslog.Printf))
}
}
func createPidFile(w io.Writer, filename string, runtimeDir string) (*flock.Flock, error) { func createPidFile(w io.Writer, filename string, runtimeDir string) (*flock.Flock, error) {
fileFullName := path.Join(runtimeDir, filename) fileFullName := path.Join(runtimeDir, filename)

View File

@ -350,6 +350,14 @@ common:
# This configuration is only used by querynode and indexnode, it selects CPU instruction set for Searching and Index-building. # This configuration is only used by querynode and indexnode, it selects CPU instruction set for Searching and Index-building.
simdType: auto simdType: auto
indexSliceSize: 16 # MB indexSliceSize: 16 # MB
DiskIndex:
MaxDegree: 56
SearchListSize: 100
PGCodeBudgetGBRatio: 0.125
BuildNumThreadsRatio: 1.0
SearchCacheBudgetGBRatio: 0.125
LoadNumThreadRatio: 8.0
BeamWidthRatio: 4.0
# please adjust in embedded Milvus: local # please adjust in embedded Milvus: local
storageType: minio storageType: minio

View File

@ -51,15 +51,15 @@ constexpr const char* INDEX_VERSION = "index_version";
// DiskAnn build params // DiskAnn build params
constexpr const char* DISK_ANN_RAW_DATA_PATH = "data_path"; constexpr const char* DISK_ANN_RAW_DATA_PATH = "data_path";
constexpr const char* DISK_ANN_MAX_DEGREE = "max_degree"; constexpr const char* DISK_ANN_MAX_DEGREE = "max_degree";
constexpr const char* DISK_ANN_BUILD_LIST = "build_list"; constexpr const char* DISK_ANN_SEARCH_LIST_SIZE = "search_list_size";
constexpr const char* DISK_ANN_SEARCH_DRAM_BUDGET = "search_dram_budget"; constexpr const char* DISK_ANN_PQ_CODE_BUDGET = "pq_code_budget_gb";
constexpr const char* DISK_ANN_BUILD_DRAM_BUDGET = "build_dram_budget"; constexpr const char* DISK_ANN_BUILD_DRAM_BUDGET = "build_dram_budget_gb";
constexpr const char* DISK_ANN_BUILD_THREAD_NUM = "num_build_thread"; constexpr const char* DISK_ANN_BUILD_THREAD_NUM = "num_build_thread";
constexpr const char* DISK_ANN_PQ_BYTES = "ps_disk_bytes"; constexpr const char* DISK_ANN_PQ_DIMS = "disk_pq_dims";
// DiskAnn prepare params // DiskAnn prepare params
constexpr const char* DISK_ANN_PREPARE_THREAD_NUM = "num_prepare_thread"; constexpr const char* DISK_ANN_LOAD_THREAD_NUM = "num_load_thread";
constexpr const char* NUM_ROW_OF_RAW_DATA = "count"; constexpr const char* DISK_ANN_SEARCH_CACHE_BUDGET = "search_cache_budget_gb";
constexpr const char* DISK_ANN_PREPARE_WARM_UP = "warm_up"; constexpr const char* DISK_ANN_PREPARE_WARM_UP = "warm_up";
constexpr const char* DISK_ANN_PREPARE_USE_BFS_CACHE = "use_bfs_cache"; constexpr const char* DISK_ANN_PREPARE_USE_BFS_CACHE = "use_bfs_cache";

View File

@ -114,11 +114,7 @@ VectorDiskAnnIndex<T>::Query(const DatasetPtr dataset, const SearchInfo& search_
"search_list should less than min(topk*10, 65535)"); "search_list should less than min(topk*10, 65535)");
// set beamwidth // set beamwidth
query_config.beamwidth = 16; query_config.beamwidth = search_beamwidth_;
auto beam_width = GetValueFromConfig<uint32_t>(search_info.search_params_, DISK_ANN_QUERY_BEAMWIDTH);
if (beam_width.has_value()) {
query_config.beamwidth = beam_width.value();
}
knowhere::Config cfg; knowhere::Config cfg;
knowhere::DiskANNQueryConfig::Set(cfg, query_config); knowhere::DiskANNQueryConfig::Set(cfg, query_config);
@ -171,13 +167,13 @@ VectorDiskAnnIndex<T>::parse_build_config(const Config& config) {
build_disk_ann_config.max_degree = max_degree.value(); build_disk_ann_config.max_degree = max_degree.value();
// set build list // set build list
auto search_list_size = GetValueFromConfig<uint32_t>(build_config, DISK_ANN_BUILD_LIST); auto search_list_size = GetValueFromConfig<uint32_t>(build_config, DISK_ANN_SEARCH_LIST_SIZE);
AssertInfo(search_list_size.has_value(), "param " + std::string(DISK_ANN_BUILD_LIST) + "is empty"); AssertInfo(search_list_size.has_value(), "param " + std::string(DISK_ANN_SEARCH_LIST_SIZE) + "is empty");
build_disk_ann_config.search_list_size = search_list_size.value(); build_disk_ann_config.search_list_size = search_list_size.value();
// set search dram budget // set search dram budget
auto search_dram_budget_gb = GetValueFromConfig<float>(build_config, DISK_ANN_SEARCH_DRAM_BUDGET); auto search_dram_budget_gb = GetValueFromConfig<float>(build_config, DISK_ANN_PQ_CODE_BUDGET);
AssertInfo(search_dram_budget_gb.has_value(), "param " + std::string(DISK_ANN_SEARCH_DRAM_BUDGET) + "is empty"); AssertInfo(search_dram_budget_gb.has_value(), "param " + std::string(DISK_ANN_PQ_CODE_BUDGET) + "is empty");
build_disk_ann_config.pq_code_budget_gb = search_dram_budget_gb.value(); build_disk_ann_config.pq_code_budget_gb = search_dram_budget_gb.value();
// set build dram budget // set build dram budget
@ -191,8 +187,8 @@ VectorDiskAnnIndex<T>::parse_build_config(const Config& config) {
build_disk_ann_config.num_threads = num_threads.value(); build_disk_ann_config.num_threads = num_threads.value();
// set pq bytes // set pq bytes
auto pq_disk_bytes = GetValueFromConfig<uint32_t>(build_config, DISK_ANN_PQ_BYTES); auto pq_disk_bytes = GetValueFromConfig<uint32_t>(build_config, DISK_ANN_PQ_DIMS);
AssertInfo(pq_disk_bytes.has_value(), "param " + std::string(DISK_ANN_PQ_BYTES) + "is empty"); AssertInfo(pq_disk_bytes.has_value(), "param " + std::string(DISK_ANN_PQ_DIMS) + "is empty");
build_disk_ann_config.disk_pq_dims = pq_disk_bytes.value(); build_disk_ann_config.disk_pq_dims = pq_disk_bytes.value();
return build_disk_ann_config; return build_disk_ann_config;
@ -202,7 +198,6 @@ template <typename T>
knowhere::DiskANNPrepareConfig knowhere::DiskANNPrepareConfig
VectorDiskAnnIndex<T>::parse_prepare_config(const Config& config) { VectorDiskAnnIndex<T>::parse_prepare_config(const Config& config) {
Config prepare_config = config; Config prepare_config = config;
auto dim = GetDimFromConfig(prepare_config);
parse_config(prepare_config); parse_config(prepare_config);
knowhere::DiskANNPrepareConfig prepare_disk_ann_config; knowhere::DiskANNPrepareConfig prepare_disk_ann_config;
@ -210,20 +205,20 @@ VectorDiskAnnIndex<T>::parse_prepare_config(const Config& config) {
prepare_disk_ann_config.use_bfs_cache = false; prepare_disk_ann_config.use_bfs_cache = false;
// set prepare thread num // set prepare thread num
auto num_threads = GetValueFromConfig<uint32_t>(prepare_config, DISK_ANN_PREPARE_THREAD_NUM); auto num_threads = GetValueFromConfig<uint32_t>(prepare_config, DISK_ANN_LOAD_THREAD_NUM);
AssertInfo(num_threads.has_value(), "param " + std::string(DISK_ANN_PREPARE_THREAD_NUM) + "is empty"); AssertInfo(num_threads.has_value(), "param " + std::string(DISK_ANN_LOAD_THREAD_NUM) + "is empty");
prepare_disk_ann_config.num_threads = num_threads.value(); prepare_disk_ann_config.num_threads = num_threads.value();
// get max degree // get search_cache_budget_gb
auto max_degree = GetValueFromConfig<uint32_t>(prepare_config, DISK_ANN_MAX_DEGREE); auto search_cache_budget_gb = GetValueFromConfig<float>(prepare_config, DISK_ANN_SEARCH_CACHE_BUDGET);
AssertInfo(max_degree.has_value(), "param " + std::string(DISK_ANN_MAX_DEGREE) + "is empty"); AssertInfo(search_cache_budget_gb.has_value(), "param " + std::string(DISK_ANN_SEARCH_CACHE_BUDGET) + "is empty");
prepare_disk_ann_config.search_cache_budget_gb = search_cache_budget_gb.value();
// set prepare cached node // update search_beamwidth
auto num_rows = GetValueFromConfig<int>(prepare_config, NUM_ROW_OF_RAW_DATA); auto beamwidth = GetValueFromConfig<uint32_t>(prepare_config, DISK_ANN_QUERY_BEAMWIDTH);
AssertInfo(num_rows.has_value(), "param " + std::string(NUM_ROW_OF_RAW_DATA) + "is empty"); if (beamwidth.has_value()) {
search_beamwidth_ = beamwidth.value();
prepare_disk_ann_config.search_cache_budget_gb = }
(dim + max_degree.value() + 1) * sizeof(float) * 1.2 * num_rows.value() * 0.1 / 1024 / 1024 / 1024;
return prepare_disk_ann_config; return prepare_disk_ann_config;
} }
@ -241,20 +236,19 @@ VectorDiskAnnIndex<T>::parse_config(Config& config) {
CheckParameter<int>(config, knowhere::meta::TOPK, stoi_closure, std::nullopt); CheckParameter<int>(config, knowhere::meta::TOPK, stoi_closure, std::nullopt);
/************************** DiskAnn build Params ************************/ /************************** DiskAnn build Params ************************/
CheckParameter<int>(config, DISK_ANN_MAX_DEGREE, stoi_closure, std::optional{48}); CheckParameter<int>(config, DISK_ANN_MAX_DEGREE, stoi_closure, std::nullopt);
CheckParameter<int>(config, DISK_ANN_BUILD_LIST, stoi_closure, std::optional{128}); CheckParameter<int>(config, DISK_ANN_SEARCH_LIST_SIZE, stoi_closure, std::nullopt);
CheckParameter<float>(config, DISK_ANN_SEARCH_DRAM_BUDGET, stof_closure, std::optional{0.03}); CheckParameter<float>(config, DISK_ANN_PQ_CODE_BUDGET, stof_closure, std::nullopt);
CheckParameter<float>(config, DISK_ANN_BUILD_DRAM_BUDGET, stof_closure, std::optional{32}); CheckParameter<float>(config, DISK_ANN_BUILD_DRAM_BUDGET, stof_closure, std::nullopt);
CheckParameter<int>(config, DISK_ANN_BUILD_THREAD_NUM, stoi_closure, std::optional{8}); CheckParameter<int>(config, DISK_ANN_BUILD_THREAD_NUM, stoi_closure, std::optional{8});
CheckParameter<int>(config, DISK_ANN_PQ_BYTES, stoi_closure, std::optional{0}); CheckParameter<int>(config, DISK_ANN_PQ_DIMS, stoi_closure, std::optional{0});
/************************** DiskAnn prepare Params ************************/ /************************** DiskAnn prepare Params ************************/
CheckParameter<int>(config, DISK_ANN_PREPARE_THREAD_NUM, stoi_closure, std::optional{8}); CheckParameter<int>(config, DISK_ANN_LOAD_THREAD_NUM, stoi_closure, std::optional{8});
CheckParameter<int>(config, NUM_ROW_OF_RAW_DATA, stoi_closure, std::nullopt); CheckParameter<float>(config, DISK_ANN_SEARCH_CACHE_BUDGET, stof_closure, std::nullopt);
/************************** DiskAnn query Params ************************/ /************************** DiskAnn query Params ************************/
// CheckParameter<int>(config, DISK_ANN_QUERY_LIST, stoi_closure, std::nullopt); CheckParameter<int>(config, DISK_ANN_QUERY_BEAMWIDTH, stoi_closure, std::nullopt);
// CheckParameter<int>(config, DISK_ANN_QUERY_BEAMWIDTH, stoi_closure, std::optional{16});
} }
template class VectorDiskAnnIndex<float>; template class VectorDiskAnnIndex<float>;

View File

@ -75,6 +75,7 @@ class VectorDiskAnnIndex : public VectorIndex {
private: private:
std::unique_ptr<knowhere::IndexDiskANN<T>> index_; std::unique_ptr<knowhere::IndexDiskANN<T>> index_;
std::shared_ptr<storage::DiskFileManagerImpl> file_manager_; std::shared_ptr<storage::DiskFileManagerImpl> file_manager_;
uint32_t search_beamwidth_ = 8;
}; };
template <typename T> template <typename T>

View File

@ -381,6 +381,7 @@ TEST_P(IndexTest, BuildAndQuery) {
index = milvus::index::IndexFactory::GetInstance().CreateIndex(create_index_info, nullptr); index = milvus::index::IndexFactory::GetInstance().CreateIndex(create_index_info, nullptr);
} }
ASSERT_NO_THROW(index->BuildWithDataset(xb_dataset, build_conf)); ASSERT_NO_THROW(index->BuildWithDataset(xb_dataset, build_conf));
milvus::index::IndexBasePtr new_index;
milvus::index::VectorIndex* vec_index = nullptr; milvus::index::VectorIndex* vec_index = nullptr;
if (index_type == knowhere::IndexEnum::INDEX_DISKANN) { if (index_type == knowhere::IndexEnum::INDEX_DISKANN) {
@ -392,7 +393,8 @@ TEST_P(IndexTest, BuildAndQuery) {
milvus::storage::IndexMeta index_meta{3, 100, 1000, 1}; milvus::storage::IndexMeta index_meta{3, 100, 1000, 1};
auto file_manager = auto file_manager =
std::make_shared<milvus::storage::DiskFileManagerImpl>(field_data_meta, index_meta, storage_config_); std::make_shared<milvus::storage::DiskFileManagerImpl>(field_data_meta, index_meta, storage_config_);
auto new_index = milvus::index::IndexFactory::GetInstance().CreateIndex(create_index_info, file_manager); new_index = milvus::index::IndexFactory::GetInstance().CreateIndex(create_index_info, file_manager);
vec_index = dynamic_cast<milvus::index::VectorIndex*>(new_index.get()); vec_index = dynamic_cast<milvus::index::VectorIndex*>(new_index.get());
std::vector<std::string> index_files; std::vector<std::string> index_files;
@ -401,6 +403,7 @@ TEST_P(IndexTest, BuildAndQuery) {
} }
load_conf["index_files"] = index_files; load_conf["index_files"] = index_files;
vec_index->Load(binary_set, load_conf); vec_index->Load(binary_set, load_conf);
EXPECT_EQ(vec_index->Count(), NB);
#endif #endif
} else { } else {
vec_index = dynamic_cast<milvus::index::VectorIndex*>(index.get()); vec_index = dynamic_cast<milvus::index::VectorIndex*>(index.get());

View File

@ -186,6 +186,10 @@ generate_build_conf(const milvus::IndexType& index_type, const milvus::MetricTyp
return knowhere::Config{ return knowhere::Config{
{knowhere::meta::METRIC_TYPE, metric_type}, {knowhere::meta::METRIC_TYPE, metric_type},
{knowhere::meta::DIM, std::to_string(DIM)}, {knowhere::meta::DIM, std::to_string(DIM)},
{milvus::index::DISK_ANN_MAX_DEGREE, std::to_string(48)},
{milvus::index::DISK_ANN_SEARCH_LIST_SIZE, std::to_string(128)},
{milvus::index::DISK_ANN_PQ_CODE_BUDGET, std::to_string(0.001)},
{milvus::index::DISK_ANN_BUILD_DRAM_BUDGET, std::to_string(32)},
}; };
} }
return knowhere::Config(); return knowhere::Config();
@ -197,7 +201,7 @@ generate_load_conf(const milvus::IndexType& index_type, const milvus::MetricType
return knowhere::Config{ return knowhere::Config{
{knowhere::meta::METRIC_TYPE, metric_type}, {knowhere::meta::METRIC_TYPE, metric_type},
{knowhere::meta::DIM, std::to_string(DIM)}, {knowhere::meta::DIM, std::to_string(DIM)},
{milvus::index::NUM_ROW_OF_RAW_DATA, std::to_string(nb)}, {milvus::index::DISK_ANN_SEARCH_CACHE_BUDGET, std::to_string(0.0002)},
}; };
} }
return knowhere::Config(); return knowhere::Config();

View File

@ -20,14 +20,16 @@ import (
"context" "context"
"errors" "errors"
"go.uber.org/zap"
"github.com/milvus-io/milvus/api/commonpb" "github.com/milvus-io/milvus/api/commonpb"
"github.com/milvus-io/milvus/api/milvuspb" "github.com/milvus-io/milvus/api/milvuspb"
"github.com/milvus-io/milvus/internal/log" "github.com/milvus-io/milvus/internal/log"
"github.com/milvus-io/milvus/internal/proto/internalpb" "github.com/milvus-io/milvus/internal/proto/internalpb"
"github.com/milvus-io/milvus/internal/util/hardware"
"github.com/milvus-io/milvus/internal/util/metricsinfo" "github.com/milvus-io/milvus/internal/util/metricsinfo"
"github.com/milvus-io/milvus/internal/util/typeutil" "github.com/milvus-io/milvus/internal/util/typeutil"
"github.com/milvus-io/milvus/internal/util/uniquegenerator" "github.com/milvus-io/milvus/internal/util/uniquegenerator"
"go.uber.org/zap"
) )
// getQuotaMetrics returns DataCoordQuotaMetrics. // getQuotaMetrics returns DataCoordQuotaMetrics.
@ -120,12 +122,12 @@ func (s *Server) getDataCoordMetrics() metricsinfo.DataCoordInfos {
Name: metricsinfo.ConstructComponentName(typeutil.DataCoordRole, Params.DataCoordCfg.GetNodeID()), Name: metricsinfo.ConstructComponentName(typeutil.DataCoordRole, Params.DataCoordCfg.GetNodeID()),
HardwareInfos: metricsinfo.HardwareMetrics{ HardwareInfos: metricsinfo.HardwareMetrics{
IP: s.session.Address, IP: s.session.Address,
CPUCoreCount: metricsinfo.GetCPUCoreCount(false), CPUCoreCount: hardware.GetCPUNum(),
CPUCoreUsage: metricsinfo.GetCPUUsage(), CPUCoreUsage: hardware.GetCPUUsage(),
Memory: metricsinfo.GetMemoryCount(), Memory: hardware.GetMemoryCount(),
MemoryUsage: metricsinfo.GetUsedMemoryCount(), MemoryUsage: hardware.GetUsedMemoryCount(),
Disk: metricsinfo.GetDiskCount(), Disk: hardware.GetDiskCount(),
DiskUsage: metricsinfo.GetDiskUsage(), DiskUsage: hardware.GetDiskUsage(),
}, },
SystemInfo: metricsinfo.DeployMetrics{}, SystemInfo: metricsinfo.DeployMetrics{},
CreatedTime: Params.DataCoordCfg.CreatedTime.String(), CreatedTime: Params.DataCoordCfg.CreatedTime.String(),

View File

@ -22,6 +22,7 @@ import (
"github.com/milvus-io/milvus/api/commonpb" "github.com/milvus-io/milvus/api/commonpb"
"github.com/milvus-io/milvus/api/milvuspb" "github.com/milvus-io/milvus/api/milvuspb"
"github.com/milvus-io/milvus/internal/proto/internalpb" "github.com/milvus-io/milvus/internal/proto/internalpb"
"github.com/milvus-io/milvus/internal/util/hardware"
"github.com/milvus-io/milvus/internal/util/metricsinfo" "github.com/milvus-io/milvus/internal/util/metricsinfo"
"github.com/milvus-io/milvus/internal/util/ratelimitutil" "github.com/milvus-io/milvus/internal/util/ratelimitutil"
"github.com/milvus-io/milvus/internal/util/typeutil" "github.com/milvus-io/milvus/internal/util/typeutil"
@ -82,8 +83,8 @@ func getComponentConfigurations(ctx context.Context, req *internalpb.ShowConfigu
func (node *DataNode) getSystemInfoMetrics(ctx context.Context, req *milvuspb.GetMetricsRequest) (*milvuspb.GetMetricsResponse, error) { func (node *DataNode) getSystemInfoMetrics(ctx context.Context, req *milvuspb.GetMetricsRequest) (*milvuspb.GetMetricsResponse, error) {
// TODO(dragondriver): add more metrics // TODO(dragondriver): add more metrics
usedMem := metricsinfo.GetUsedMemoryCount() usedMem := hardware.GetUsedMemoryCount()
totalMem := metricsinfo.GetMemoryCount() totalMem := hardware.GetMemoryCount()
quotaMetrics, err := node.getQuotaMetrics() quotaMetrics, err := node.getQuotaMetrics()
if err != nil { if err != nil {
@ -97,12 +98,12 @@ func (node *DataNode) getSystemInfoMetrics(ctx context.Context, req *milvuspb.Ge
} }
hardwareMetrics := metricsinfo.HardwareMetrics{ hardwareMetrics := metricsinfo.HardwareMetrics{
IP: node.session.Address, IP: node.session.Address,
CPUCoreCount: metricsinfo.GetCPUCoreCount(false), CPUCoreCount: hardware.GetCPUNum(),
CPUCoreUsage: metricsinfo.GetCPUUsage(), CPUCoreUsage: hardware.GetCPUUsage(),
Memory: totalMem, Memory: totalMem,
MemoryUsage: usedMem, MemoryUsage: usedMem,
Disk: metricsinfo.GetDiskCount(), Disk: hardware.GetDiskCount(),
DiskUsage: metricsinfo.GetDiskUsage(), DiskUsage: hardware.GetDiskUsage(),
} }
quotaMetrics.Hms = hardwareMetrics quotaMetrics.Hms = hardwareMetrics

View File

@ -818,6 +818,7 @@ func (i *IndexCoord) GetIndexInfos(ctx context.Context, req *indexpb.GetIndexInf
IndexFilePaths: segIdx.IndexFilePaths, IndexFilePaths: segIdx.IndexFilePaths,
SerializedSize: segIdx.IndexSize, SerializedSize: segIdx.IndexSize,
IndexVersion: segIdx.IndexVersion, IndexVersion: segIdx.IndexVersion,
NumRows: segIdx.NumRows,
}) })
} }
} }

View File

@ -25,6 +25,7 @@ import (
"github.com/milvus-io/milvus/api/milvuspb" "github.com/milvus-io/milvus/api/milvuspb"
"github.com/milvus-io/milvus/internal/log" "github.com/milvus-io/milvus/internal/log"
"github.com/milvus-io/milvus/internal/proto/internalpb" "github.com/milvus-io/milvus/internal/proto/internalpb"
"github.com/milvus-io/milvus/internal/util/hardware"
"github.com/milvus-io/milvus/internal/util/metricsinfo" "github.com/milvus-io/milvus/internal/util/metricsinfo"
"github.com/milvus-io/milvus/internal/util/typeutil" "github.com/milvus-io/milvus/internal/util/typeutil"
"github.com/milvus-io/milvus/internal/util/uniquegenerator" "github.com/milvus-io/milvus/internal/util/uniquegenerator"
@ -65,12 +66,12 @@ func getSystemInfoMetrics(
Name: metricsinfo.ConstructComponentName(typeutil.IndexCoordRole, coord.session.ServerID), Name: metricsinfo.ConstructComponentName(typeutil.IndexCoordRole, coord.session.ServerID),
HardwareInfos: metricsinfo.HardwareMetrics{ HardwareInfos: metricsinfo.HardwareMetrics{
IP: coord.session.Address, IP: coord.session.Address,
CPUCoreCount: metricsinfo.GetCPUCoreCount(false), CPUCoreCount: hardware.GetCPUNum(),
CPUCoreUsage: metricsinfo.GetCPUUsage(), CPUCoreUsage: hardware.GetCPUUsage(),
Memory: metricsinfo.GetMemoryCount(), Memory: hardware.GetMemoryCount(),
MemoryUsage: metricsinfo.GetUsedMemoryCount(), MemoryUsage: hardware.GetUsedMemoryCount(),
Disk: metricsinfo.GetDiskCount(), Disk: hardware.GetDiskCount(),
DiskUsage: metricsinfo.GetDiskUsage(), DiskUsage: hardware.GetDiskUsage(),
}, },
SystemInfo: metricsinfo.DeployMetrics{}, SystemInfo: metricsinfo.DeployMetrics{},
CreatedTime: Params.IndexCoordCfg.CreatedTime.String(), CreatedTime: Params.IndexCoordCfg.CreatedTime.String(),

View File

@ -26,6 +26,7 @@ import (
"github.com/milvus-io/milvus/internal/proto/indexpb" "github.com/milvus-io/milvus/internal/proto/indexpb"
"github.com/milvus-io/milvus/internal/proto/internalpb" "github.com/milvus-io/milvus/internal/proto/internalpb"
"github.com/milvus-io/milvus/internal/types" "github.com/milvus-io/milvus/internal/types"
"github.com/milvus-io/milvus/internal/util/hardware"
"github.com/milvus-io/milvus/internal/util/metricsinfo" "github.com/milvus-io/milvus/internal/util/metricsinfo"
"github.com/milvus-io/milvus/internal/util/typeutil" "github.com/milvus-io/milvus/internal/util/typeutil"
) )
@ -216,12 +217,12 @@ func getMockSystemInfoMetrics(
BaseComponentInfos: metricsinfo.BaseComponentInfos{ BaseComponentInfos: metricsinfo.BaseComponentInfos{
Name: metricsinfo.ConstructComponentName(typeutil.IndexNodeRole, Params.IndexNodeCfg.GetNodeID()), Name: metricsinfo.ConstructComponentName(typeutil.IndexNodeRole, Params.IndexNodeCfg.GetNodeID()),
HardwareInfos: metricsinfo.HardwareMetrics{ HardwareInfos: metricsinfo.HardwareMetrics{
CPUCoreCount: metricsinfo.GetCPUCoreCount(false), CPUCoreCount: hardware.GetCPUNum(),
CPUCoreUsage: metricsinfo.GetCPUUsage(), CPUCoreUsage: hardware.GetCPUUsage(),
Memory: 1000, Memory: 1000,
MemoryUsage: metricsinfo.GetUsedMemoryCount(), MemoryUsage: hardware.GetUsedMemoryCount(),
Disk: metricsinfo.GetDiskCount(), Disk: hardware.GetDiskCount(),
DiskUsage: metricsinfo.GetDiskUsage(), DiskUsage: hardware.GetDiskUsage(),
}, },
SystemInfo: metricsinfo.DeployMetrics{}, SystemInfo: metricsinfo.DeployMetrics{},
CreatedTime: Params.IndexNodeCfg.CreatedTime.String(), CreatedTime: Params.IndexNodeCfg.CreatedTime.String(),

View File

@ -22,6 +22,7 @@ import (
"github.com/milvus-io/milvus/api/commonpb" "github.com/milvus-io/milvus/api/commonpb"
"github.com/milvus-io/milvus/api/milvuspb" "github.com/milvus-io/milvus/api/milvuspb"
"github.com/milvus-io/milvus/internal/proto/internalpb" "github.com/milvus-io/milvus/internal/proto/internalpb"
"github.com/milvus-io/milvus/internal/util/hardware"
"github.com/milvus-io/milvus/internal/util/metricsinfo" "github.com/milvus-io/milvus/internal/util/metricsinfo"
"github.com/milvus-io/milvus/internal/util/typeutil" "github.com/milvus-io/milvus/internal/util/typeutil"
) )
@ -60,12 +61,12 @@ func getSystemInfoMetrics(
Name: metricsinfo.ConstructComponentName(typeutil.IndexNodeRole, Params.IndexNodeCfg.GetNodeID()), Name: metricsinfo.ConstructComponentName(typeutil.IndexNodeRole, Params.IndexNodeCfg.GetNodeID()),
HardwareInfos: metricsinfo.HardwareMetrics{ HardwareInfos: metricsinfo.HardwareMetrics{
IP: node.session.Address, IP: node.session.Address,
CPUCoreCount: metricsinfo.GetCPUCoreCount(false), CPUCoreCount: hardware.GetCPUNum(),
CPUCoreUsage: metricsinfo.GetCPUUsage(), CPUCoreUsage: hardware.GetCPUUsage(),
Memory: metricsinfo.GetMemoryCount(), Memory: hardware.GetMemoryCount(),
MemoryUsage: metricsinfo.GetUsedMemoryCount(), MemoryUsage: hardware.GetUsedMemoryCount(),
Disk: metricsinfo.GetDiskCount(), Disk: hardware.GetDiskCount(),
DiskUsage: metricsinfo.GetDiskUsage(), DiskUsage: hardware.GetDiskUsage(),
}, },
SystemInfo: metricsinfo.DeployMetrics{}, SystemInfo: metricsinfo.DeployMetrics{},
CreatedTime: Params.IndexNodeCfg.CreatedTime.String(), CreatedTime: Params.IndexNodeCfg.CreatedTime.String(),

View File

@ -18,6 +18,7 @@ package indexnode
import ( import (
"context" "context"
"encoding/json"
"errors" "errors"
"fmt" "fmt"
"path" "path"
@ -36,6 +37,7 @@ import (
"github.com/milvus-io/milvus/internal/util/funcutil" "github.com/milvus-io/milvus/internal/util/funcutil"
"github.com/milvus-io/milvus/internal/util/indexcgowrapper" "github.com/milvus-io/milvus/internal/util/indexcgowrapper"
"github.com/milvus-io/milvus/internal/util/indexparamcheck" "github.com/milvus-io/milvus/internal/util/indexparamcheck"
"github.com/milvus-io/milvus/internal/util/indexparams"
"github.com/milvus-io/milvus/internal/util/logutil" "github.com/milvus-io/milvus/internal/util/logutil"
"github.com/milvus-io/milvus/internal/util/retry" "github.com/milvus-io/milvus/internal/util/retry"
"github.com/milvus-io/milvus/internal/util/timerecord" "github.com/milvus-io/milvus/internal/util/timerecord"
@ -335,6 +337,20 @@ func (it *indexBuildTask) BuildDiskAnnIndex(ctx context.Context) error {
it.newIndexParams["index_id"] = strconv.FormatInt(it.req.IndexID, 10) it.newIndexParams["index_id"] = strconv.FormatInt(it.req.IndexID, 10)
it.newIndexParams["index_version"] = strconv.FormatInt(it.req.GetIndexVersion(), 10) it.newIndexParams["index_version"] = strconv.FormatInt(it.req.GetIndexVersion(), 10)
err = indexparams.SetDiskIndexBuildParams(it.newIndexParams, it.statistic.NumRows)
if err != nil {
log.Ctx(ctx).Error("failed to fill disk index params", zap.Error(err))
return err
}
jsonIndexParams, err := json.Marshal(it.newIndexParams)
if err != nil {
log.Ctx(ctx).Error("failed to json marshal index params", zap.Error(err))
return err
}
log.Ctx(ctx).Info("disk index params are ready",
zap.Int64("buildID", it.BuildID),
zap.String("index params", string(jsonIndexParams)))
it.index, err = indexcgowrapper.NewCgoIndex(dType, it.newTypeParams, it.newIndexParams, it.req.GetStorageConfig()) it.index, err = indexcgowrapper.NewCgoIndex(dType, it.newTypeParams, it.newIndexParams, it.req.GetStorageConfig())
if err != nil { if err != nil {
log.Ctx(ctx).Error("failed to create index", zap.Error(err)) log.Ctx(ctx).Error("failed to create index", zap.Error(err))

View File

@ -22,18 +22,18 @@ import (
"sync/atomic" "sync/atomic"
"time" "time"
"github.com/tecbot/gorocksdb"
"go.uber.org/zap"
"github.com/milvus-io/milvus/internal/allocator" "github.com/milvus-io/milvus/internal/allocator"
"github.com/milvus-io/milvus/internal/kv" "github.com/milvus-io/milvus/internal/kv"
rocksdbkv "github.com/milvus-io/milvus/internal/kv/rocksdb" rocksdbkv "github.com/milvus-io/milvus/internal/kv/rocksdb"
"github.com/milvus-io/milvus/internal/log" "github.com/milvus-io/milvus/internal/log"
"github.com/milvus-io/milvus/internal/mq/msgstream/mqwrapper" "github.com/milvus-io/milvus/internal/mq/msgstream/mqwrapper"
"github.com/milvus-io/milvus/internal/util/metricsinfo" "github.com/milvus-io/milvus/internal/util/hardware"
"github.com/milvus-io/milvus/internal/util/paramtable" "github.com/milvus-io/milvus/internal/util/paramtable"
"github.com/milvus-io/milvus/internal/util/retry" "github.com/milvus-io/milvus/internal/util/retry"
"github.com/milvus-io/milvus/internal/util/typeutil" "github.com/milvus-io/milvus/internal/util/typeutil"
"github.com/tecbot/gorocksdb"
"go.uber.org/zap"
) )
// UniqueID is the type of message ID // UniqueID is the type of message ID
@ -137,7 +137,7 @@ func NewRocksMQ(params paramtable.BaseTable, name string, idAllocator allocator.
} else if maxProcs > 8 { } else if maxProcs > 8 {
parallelism = 2 parallelism = 2
} }
memoryCount := metricsinfo.GetMemoryCount() memoryCount := hardware.GetMemoryCount()
// default rocks db cache is set with memory // default rocks db cache is set with memory
rocksDBLRUCacheCapacity := RocksDBLRUCacheMinCapacity rocksDBLRUCacheCapacity := RocksDBLRUCacheMinCapacity
if memoryCount > 0 { if memoryCount > 0 {

View File

@ -146,6 +146,7 @@ message IndexFilePathInfo {
repeated string index_file_paths = 7; repeated string index_file_paths = 7;
uint64 serialized_size = 8; uint64 serialized_size = 8;
int64 index_version = 9; int64 index_version = 9;
int64 num_rows = 10;
} }
message SegmentInfo { message SegmentInfo {

View File

@ -883,6 +883,7 @@ type IndexFilePathInfo struct {
IndexFilePaths []string `protobuf:"bytes,7,rep,name=index_file_paths,json=indexFilePaths,proto3" json:"index_file_paths,omitempty"` IndexFilePaths []string `protobuf:"bytes,7,rep,name=index_file_paths,json=indexFilePaths,proto3" json:"index_file_paths,omitempty"`
SerializedSize uint64 `protobuf:"varint,8,opt,name=serialized_size,json=serializedSize,proto3" json:"serialized_size,omitempty"` SerializedSize uint64 `protobuf:"varint,8,opt,name=serialized_size,json=serializedSize,proto3" json:"serialized_size,omitempty"`
IndexVersion int64 `protobuf:"varint,9,opt,name=index_version,json=indexVersion,proto3" json:"index_version,omitempty"` IndexVersion int64 `protobuf:"varint,9,opt,name=index_version,json=indexVersion,proto3" json:"index_version,omitempty"`
NumRows int64 `protobuf:"varint,10,opt,name=num_rows,json=numRows,proto3" json:"num_rows,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"` XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"` XXX_sizecache int32 `json:"-"`
@ -976,6 +977,13 @@ func (m *IndexFilePathInfo) GetIndexVersion() int64 {
return 0 return 0
} }
func (m *IndexFilePathInfo) GetNumRows() int64 {
if m != nil {
return m.NumRows
}
return 0
}
type SegmentInfo struct { type SegmentInfo struct {
CollectionID int64 `protobuf:"varint,1,opt,name=collectionID,proto3" json:"collectionID,omitempty"` CollectionID int64 `protobuf:"varint,1,opt,name=collectionID,proto3" json:"collectionID,omitempty"`
SegmentID int64 `protobuf:"varint,2,opt,name=segmentID,proto3" json:"segmentID,omitempty"` SegmentID int64 `protobuf:"varint,2,opt,name=segmentID,proto3" json:"segmentID,omitempty"`
@ -2012,141 +2020,141 @@ func init() {
func init() { proto.RegisterFile("index_coord.proto", fileDescriptor_f9e019eb3fda53c2) } func init() { proto.RegisterFile("index_coord.proto", fileDescriptor_f9e019eb3fda53c2) }
var fileDescriptor_f9e019eb3fda53c2 = []byte{ var fileDescriptor_f9e019eb3fda53c2 = []byte{
// 2138 bytes of a gzipped FileDescriptorProto // 2142 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x59, 0x4f, 0x6f, 0x1b, 0xc7, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x59, 0x4f, 0x6f, 0x1b, 0xc7,
0x15, 0xf7, 0x92, 0x94, 0xc4, 0x7d, 0x4b, 0x4a, 0xf2, 0x58, 0x69, 0x19, 0xda, 0xae, 0xe5, 0x75, 0x15, 0xf7, 0x92, 0x94, 0xc4, 0x7d, 0x4b, 0x4a, 0xf2, 0x58, 0x69, 0x19, 0xda, 0xae, 0xe5, 0x75,
0x1c, 0xb3, 0x05, 0x22, 0xb9, 0x4a, 0x53, 0xa4, 0x45, 0x5b, 0x40, 0x7f, 0x62, 0x87, 0x72, 0x24, 0x1c, 0xb3, 0x05, 0x22, 0xb9, 0x4a, 0x53, 0xa4, 0x45, 0x5b, 0x40, 0x7f, 0x62, 0x87, 0x72, 0x24,
0xa8, 0x4b, 0x23, 0x40, 0x82, 0x02, 0xdb, 0x25, 0x77, 0x28, 0x4d, 0x44, 0xee, 0xd0, 0x3b, 0xb3, 0xa8, 0x4b, 0x23, 0x40, 0x82, 0x02, 0xdb, 0x25, 0x77, 0x28, 0x4d, 0x44, 0xee, 0xd0, 0x3b, 0xb3,
0xb6, 0xe5, 0x02, 0x45, 0x2f, 0x3d, 0xa4, 0x08, 0x50, 0xa0, 0x87, 0xf6, 0x0b, 0x14, 0x3d, 0xa4, 0xb6, 0xe5, 0x02, 0x45, 0x2f, 0x3d, 0xa4, 0x08, 0x50, 0xa0, 0x87, 0xf6, 0x0b, 0x14, 0x3d, 0xa4,
0x87, 0xde, 0x7b, 0xe9, 0x07, 0x68, 0x3f, 0x42, 0x4f, 0xfd, 0x24, 0xc5, 0xfc, 0xd9, 0xe5, 0xee, 0x87, 0xde, 0x7b, 0xe9, 0x07, 0x68, 0x3f, 0x45, 0xbf, 0x44, 0xaf, 0xc5, 0xfc, 0xd9, 0xe5, 0xee,
0x72, 0x29, 0x52, 0x7f, 0x7a, 0x69, 0x6e, 0x9c, 0x37, 0x6f, 0xfe, 0xbd, 0xf7, 0x7b, 0xef, 0xf7, 0x72, 0x29, 0x52, 0x7f, 0x7a, 0x69, 0x6e, 0x9c, 0xb7, 0x6f, 0xfe, 0xbd, 0xf7, 0x7b, 0xef, 0xf7,
0xde, 0x12, 0x6e, 0x92, 0xc0, 0xc7, 0xaf, 0xdd, 0x1e, 0xa5, 0xa1, 0xbf, 0x31, 0x0a, 0x29, 0xa7, 0xde, 0x10, 0x6e, 0x92, 0xc0, 0xc7, 0xaf, 0xdd, 0x1e, 0xa5, 0xa1, 0xbf, 0x31, 0x0a, 0x29, 0xa7,
0x08, 0x0d, 0xc9, 0xe0, 0x65, 0xc4, 0xd4, 0x68, 0x43, 0xce, 0x37, 0x6b, 0x3d, 0x3a, 0x1c, 0xd2, 0x08, 0x0d, 0xc9, 0xe0, 0x65, 0xc4, 0xd4, 0x68, 0x43, 0x7e, 0x6f, 0xd6, 0x7a, 0x74, 0x38, 0xa4,
0x40, 0xc9, 0x9a, 0xcb, 0x24, 0xe0, 0x38, 0x0c, 0xbc, 0x81, 0x1e, 0xd7, 0xd2, 0x2b, 0xec, 0xbf, 0x81, 0x92, 0x35, 0x97, 0x49, 0xc0, 0x71, 0x18, 0x78, 0x03, 0x3d, 0xae, 0xa5, 0x67, 0xd8, 0x7f,
0x55, 0xc0, 0x6c, 0x8b, 0x55, 0xed, 0xa0, 0x4f, 0x91, 0x0d, 0xb5, 0x1e, 0x1d, 0x0c, 0x70, 0x8f, 0xab, 0x80, 0xd9, 0x16, 0xb3, 0xda, 0x41, 0x9f, 0x22, 0x1b, 0x6a, 0x3d, 0x3a, 0x18, 0xe0, 0x1e,
0x13, 0x1a, 0xb4, 0xf7, 0x1a, 0xc6, 0xba, 0xd1, 0x2a, 0x3b, 0x19, 0x19, 0x6a, 0xc0, 0x52, 0x9f, 0x27, 0x34, 0x68, 0xef, 0x35, 0x8c, 0x75, 0xa3, 0x55, 0x76, 0x32, 0x32, 0xd4, 0x80, 0xa5, 0x3e,
0xe0, 0x81, 0xdf, 0xde, 0x6b, 0x94, 0xe4, 0x74, 0x3c, 0x44, 0x77, 0x01, 0xd4, 0x05, 0x03, 0x6f, 0xc1, 0x03, 0xbf, 0xbd, 0xd7, 0x28, 0xc9, 0xcf, 0xf1, 0x10, 0xdd, 0x05, 0x50, 0x07, 0x0c, 0xbc,
0x88, 0x1b, 0xe5, 0x75, 0xa3, 0x65, 0x3a, 0xa6, 0x94, 0x1c, 0x7a, 0x43, 0x2c, 0x16, 0xca, 0x41, 0x21, 0x6e, 0x94, 0xd7, 0x8d, 0x96, 0xe9, 0x98, 0x52, 0x72, 0xe8, 0x0d, 0xb1, 0x98, 0x28, 0x07,
0x7b, 0xaf, 0x51, 0x51, 0x0b, 0xf5, 0x10, 0xed, 0x80, 0xc5, 0xcf, 0x46, 0xd8, 0x1d, 0x79, 0xa1, 0xed, 0xbd, 0x46, 0x45, 0x4d, 0xd4, 0x43, 0xb4, 0x03, 0x16, 0x3f, 0x1b, 0x61, 0x77, 0xe4, 0x85,
0x37, 0x64, 0x8d, 0x85, 0xf5, 0x72, 0xcb, 0xda, 0xba, 0xbf, 0x91, 0x79, 0x9a, 0x7e, 0xd3, 0x33, 0xde, 0x90, 0x35, 0x16, 0xd6, 0xcb, 0x2d, 0x6b, 0xeb, 0xfe, 0x46, 0xe6, 0x6a, 0xfa, 0x4e, 0xcf,
0x7c, 0xf6, 0xa9, 0x37, 0x88, 0xf0, 0x91, 0x47, 0x42, 0x07, 0xc4, 0xaa, 0x23, 0xb9, 0x08, 0xed, 0xf0, 0xd9, 0xa7, 0xde, 0x20, 0xc2, 0x47, 0x1e, 0x09, 0x1d, 0x10, 0xb3, 0x8e, 0xe4, 0x24, 0xb4,
0x41, 0x4d, 0x1d, 0xae, 0x37, 0x59, 0x9c, 0x77, 0x13, 0x4b, 0x2e, 0xd3, 0xbb, 0xdc, 0xd7, 0xbb, 0x07, 0x35, 0xb5, 0xb9, 0x5e, 0x64, 0x71, 0xde, 0x45, 0x2c, 0x39, 0x4d, 0xaf, 0x72, 0x5f, 0xaf,
0x60, 0xdf, 0x0d, 0xe9, 0x2b, 0xd6, 0x58, 0x92, 0x17, 0xb5, 0xb4, 0xcc, 0xa1, 0xaf, 0x98, 0x78, 0x82, 0x7d, 0x37, 0xa4, 0xaf, 0x58, 0x63, 0x49, 0x1e, 0xd4, 0xd2, 0x32, 0x87, 0xbe, 0x62, 0xe2,
0x25, 0xa7, 0xdc, 0x1b, 0x28, 0x85, 0xaa, 0x54, 0x30, 0xa5, 0x44, 0x4e, 0x7f, 0x00, 0x0b, 0x8c, 0x96, 0x9c, 0x72, 0x6f, 0xa0, 0x14, 0xaa, 0x52, 0xc1, 0x94, 0x12, 0xf9, 0xf9, 0x03, 0x58, 0x60,
0x7b, 0x1c, 0x37, 0xcc, 0x75, 0xa3, 0xb5, 0xbc, 0x75, 0xaf, 0xf0, 0x02, 0xd2, 0xe2, 0x1d, 0xa1, 0xdc, 0xe3, 0xb8, 0x61, 0xae, 0x1b, 0xad, 0xe5, 0xad, 0x7b, 0x85, 0x07, 0x90, 0x16, 0xef, 0x08,
0xe6, 0x28, 0x6d, 0xf4, 0x01, 0x7c, 0x5b, 0x5d, 0x5f, 0x0e, 0xdd, 0xbe, 0x47, 0x06, 0x6e, 0x88, 0x35, 0x47, 0x69, 0xa3, 0x0f, 0xe0, 0xdb, 0xea, 0xf8, 0x72, 0xe8, 0xf6, 0x3d, 0x32, 0x70, 0x43,
0x3d, 0x46, 0x83, 0x06, 0x48, 0x43, 0xae, 0x91, 0x64, 0xcd, 0x13, 0x8f, 0x0c, 0x1c, 0x39, 0x87, 0xec, 0x31, 0x1a, 0x34, 0x40, 0x1a, 0x72, 0x8d, 0x24, 0x73, 0x9e, 0x78, 0x64, 0xe0, 0xc8, 0x6f,
0x6c, 0xa8, 0x13, 0xe6, 0x7a, 0x11, 0xa7, 0xae, 0x9c, 0x6f, 0x58, 0xeb, 0x46, 0xab, 0xea, 0x58, 0xc8, 0x86, 0x3a, 0x61, 0xae, 0x17, 0x71, 0xea, 0xca, 0xef, 0x0d, 0x6b, 0xdd, 0x68, 0x55, 0x1d,
0x84, 0x6d, 0x47, 0x9c, 0xca, 0x63, 0xd0, 0x01, 0xdc, 0x8c, 0x18, 0x0e, 0xdd, 0x8c, 0x79, 0x6a, 0x8b, 0xb0, 0xed, 0x88, 0x53, 0xb9, 0x0d, 0x3a, 0x80, 0x9b, 0x11, 0xc3, 0xa1, 0x9b, 0x31, 0x4f,
0xf3, 0x9a, 0x67, 0x45, 0xac, 0x6d, 0x8f, 0x4d, 0x64, 0xff, 0xd6, 0x00, 0x78, 0x22, 0x3d, 0x2e, 0x6d, 0x5e, 0xf3, 0xac, 0x88, 0xb9, 0xed, 0xb1, 0x89, 0xec, 0xdf, 0x1a, 0x00, 0x4f, 0xa4, 0xc7,
0x77, 0xff, 0x49, 0xec, 0x74, 0x12, 0xf4, 0xa9, 0x04, 0x8c, 0xb5, 0x75, 0x77, 0x63, 0x12, 0x95, 0xe5, 0xea, 0x3f, 0x89, 0x9d, 0x4e, 0x82, 0x3e, 0x95, 0x80, 0xb1, 0xb6, 0xee, 0x6e, 0x4c, 0xa2,
0x1b, 0x09, 0xca, 0x34, 0x26, 0x24, 0xe0, 0x1a, 0xb0, 0xe4, 0xe3, 0x01, 0xe6, 0xd8, 0x97, 0x60, 0x72, 0x23, 0x41, 0x99, 0xc6, 0x84, 0x04, 0x5c, 0x03, 0x96, 0x7c, 0x3c, 0xc0, 0x1c, 0xfb, 0x12,
0xaa, 0x3a, 0xf1, 0x10, 0xdd, 0x03, 0xab, 0x17, 0x62, 0x61, 0x0b, 0x4e, 0x34, 0x9a, 0x2a, 0x0e, 0x4c, 0x55, 0x27, 0x1e, 0xa2, 0x7b, 0x60, 0xf5, 0x42, 0x2c, 0x6c, 0xc1, 0x89, 0x46, 0x53, 0xc5,
0x28, 0xd1, 0x73, 0x32, 0xc4, 0xf6, 0x97, 0x15, 0xa8, 0x75, 0xf0, 0xf1, 0x10, 0x07, 0x5c, 0xdd, 0x01, 0x25, 0x7a, 0x4e, 0x86, 0xd8, 0xfe, 0xb2, 0x02, 0xb5, 0x0e, 0x3e, 0x1e, 0xe2, 0x80, 0xab,
0x64, 0x1e, 0xf0, 0xae, 0x83, 0x35, 0xf2, 0x42, 0x4e, 0xb4, 0x8a, 0x02, 0x70, 0x5a, 0x84, 0xee, 0x93, 0xcc, 0x03, 0xde, 0x75, 0xb0, 0x46, 0x5e, 0xc8, 0x89, 0x56, 0x51, 0x00, 0x4e, 0x8b, 0xd0,
0x80, 0xc9, 0xf4, 0xae, 0x7b, 0xf2, 0xd4, 0xb2, 0x33, 0x16, 0xa0, 0xb7, 0xa1, 0x1a, 0x44, 0x43, 0x1d, 0x30, 0x99, 0x5e, 0x75, 0x4f, 0xee, 0x5a, 0x76, 0xc6, 0x02, 0xf4, 0x36, 0x54, 0x83, 0x68,
0xe5, 0x7a, 0x0d, 0xe2, 0x20, 0x1a, 0x4a, 0xc7, 0xa7, 0xe0, 0xbd, 0x90, 0x85, 0x77, 0x03, 0x96, 0xa8, 0x5c, 0xaf, 0x41, 0x1c, 0x44, 0x43, 0xe9, 0xf8, 0x14, 0xbc, 0x17, 0xb2, 0xf0, 0x6e, 0xc0,
0xba, 0x11, 0x91, 0x11, 0xb3, 0xa8, 0x66, 0xf4, 0x10, 0x7d, 0x0b, 0x16, 0x03, 0xea, 0xe3, 0xf6, 0x52, 0x37, 0x22, 0x32, 0x62, 0x16, 0xd5, 0x17, 0x3d, 0x44, 0xdf, 0x82, 0xc5, 0x80, 0xfa, 0xb8,
0x9e, 0x06, 0x9a, 0x1e, 0xa1, 0x07, 0x50, 0x57, 0x46, 0x7d, 0x89, 0x43, 0x46, 0x68, 0xa0, 0x61, 0xbd, 0xa7, 0x81, 0xa6, 0x47, 0xe8, 0x01, 0xd4, 0x95, 0x51, 0x5f, 0xe2, 0x90, 0x11, 0x1a, 0x68,
0xa6, 0xb0, 0xf9, 0xa9, 0x92, 0x5d, 0x16, 0x69, 0xf7, 0xc0, 0x9a, 0x44, 0x17, 0xf4, 0xc7, 0x98, 0x98, 0x29, 0x6c, 0x7e, 0xaa, 0x64, 0x97, 0x45, 0xda, 0x3d, 0xb0, 0x26, 0xd1, 0x05, 0xfd, 0x31,
0xfa, 0x5e, 0x9c, 0x67, 0xfa, 0x64, 0x80, 0x99, 0x3b, 0xf2, 0xf8, 0x09, 0x6b, 0x58, 0xeb, 0xe5, 0xa6, 0xbe, 0x17, 0xe7, 0x99, 0x3e, 0x19, 0x60, 0xe6, 0x8e, 0x3c, 0x7e, 0xc2, 0x1a, 0xd6, 0x7a,
0x96, 0xe9, 0xac, 0xc8, 0x89, 0x27, 0x42, 0x7e, 0x24, 0xc4, 0x69, 0xff, 0xd5, 0xce, 0xf5, 0x5f, 0xb9, 0x65, 0x3a, 0x2b, 0xf2, 0xc3, 0x13, 0x21, 0x3f, 0x12, 0xe2, 0xb4, 0xff, 0x6a, 0xe7, 0xfa,
0x3d, 0xef, 0x3f, 0xf4, 0x10, 0x96, 0x19, 0x0e, 0x89, 0x37, 0x20, 0x6f, 0xb0, 0xcb, 0xc8, 0x1b, 0xaf, 0x9e, 0xf7, 0x1f, 0x7a, 0x08, 0xcb, 0x0c, 0x87, 0xc4, 0x1b, 0x90, 0x37, 0xd8, 0x65, 0xe4,
0xdc, 0x58, 0x96, 0x3a, 0xf5, 0x44, 0xda, 0x21, 0x6f, 0xb0, 0x30, 0xc5, 0xab, 0x90, 0x70, 0xec, 0x0d, 0x6e, 0x2c, 0x4b, 0x9d, 0x7a, 0x22, 0xed, 0x90, 0x37, 0x58, 0x98, 0xe2, 0x55, 0x48, 0x38,
0x9e, 0x78, 0x81, 0x4f, 0xfb, 0xfd, 0xc6, 0x8a, 0x3c, 0xa7, 0x26, 0x85, 0x1f, 0x2b, 0x99, 0xfd, 0x76, 0x4f, 0xbc, 0xc0, 0xa7, 0xfd, 0x7e, 0x63, 0x45, 0xee, 0x53, 0x93, 0xc2, 0x8f, 0x95, 0xcc,
0x27, 0x03, 0x6e, 0x39, 0xf8, 0x98, 0x30, 0x8e, 0xc3, 0x43, 0xea, 0x63, 0x07, 0xbf, 0x88, 0x30, 0xfe, 0x93, 0x01, 0xb7, 0x1c, 0x7c, 0x4c, 0x18, 0xc7, 0xe1, 0x21, 0xf5, 0xb1, 0x83, 0x5f, 0x44,
0xe3, 0xe8, 0x31, 0x54, 0xba, 0x1e, 0xc3, 0x1a, 0x96, 0x77, 0x0a, 0x2d, 0x74, 0xc0, 0x8e, 0x77, 0x98, 0x71, 0xf4, 0x18, 0x2a, 0x5d, 0x8f, 0x61, 0x0d, 0xcb, 0x3b, 0x85, 0x16, 0x3a, 0x60, 0xc7,
0x3c, 0x86, 0x1d, 0xa9, 0x89, 0x7e, 0x08, 0x4b, 0x9e, 0xef, 0x87, 0x98, 0x31, 0x09, 0x8e, 0x69, 0x3b, 0x1e, 0xc3, 0x8e, 0xd4, 0x44, 0x3f, 0x84, 0x25, 0xcf, 0xf7, 0x43, 0xcc, 0x98, 0x04, 0xc7,
0x8b, 0xb6, 0x95, 0x8e, 0x13, 0x2b, 0xa7, 0x3c, 0x59, 0x4e, 0x7b, 0xd2, 0xfe, 0xbd, 0x01, 0x6b, 0xb4, 0x49, 0xdb, 0x4a, 0xc7, 0x89, 0x95, 0x53, 0x9e, 0x2c, 0xa7, 0x3d, 0x69, 0xff, 0xde, 0x80,
0xd9, 0x9b, 0xb1, 0x11, 0x0d, 0x18, 0x46, 0xef, 0xc3, 0xa2, 0xf0, 0x47, 0xc4, 0xf4, 0xe5, 0x6e, 0xb5, 0xec, 0xc9, 0xd8, 0x88, 0x06, 0x0c, 0xa3, 0xf7, 0x61, 0x51, 0xf8, 0x23, 0x62, 0xfa, 0x70,
0x17, 0x9e, 0xd3, 0x91, 0x2a, 0x8e, 0x56, 0x15, 0x89, 0x92, 0x04, 0x84, 0xc7, 0x41, 0xac, 0x6e, 0xb7, 0x0b, 0xf7, 0xe9, 0x48, 0x15, 0x47, 0xab, 0x8a, 0x44, 0x49, 0x02, 0xc2, 0xe3, 0x20, 0x56,
0x78, 0x3f, 0x1f, 0x6d, 0x3a, 0xdd, 0xb7, 0x03, 0xc2, 0x55, 0xcc, 0x3a, 0x40, 0x92, 0xdf, 0xf6, 0x27, 0xbc, 0x9f, 0x8f, 0x36, 0x9d, 0xee, 0xdb, 0x01, 0xe1, 0x2a, 0x66, 0x1d, 0x20, 0xc9, 0x6f,
0x67, 0xb0, 0xf6, 0x14, 0xf3, 0x14, 0x2e, 0xb4, 0xad, 0xe6, 0x09, 0x9f, 0x6c, 0x86, 0x2f, 0xe5, 0xfb, 0x33, 0x58, 0x7b, 0x8a, 0x79, 0x0a, 0x17, 0xda, 0x56, 0xf3, 0x84, 0x4f, 0x36, 0xc3, 0x97,
0x32, 0xbc, 0xfd, 0x67, 0x03, 0xde, 0xca, 0xed, 0x7d, 0x95, 0xd7, 0x26, 0x00, 0x2f, 0x5d, 0x05, 0x72, 0x19, 0xde, 0xfe, 0xb3, 0x01, 0x6f, 0xe5, 0xd6, 0xbe, 0xca, 0x6d, 0x13, 0x80, 0x97, 0xae,
0xe0, 0xe5, 0x3c, 0xc0, 0xed, 0xdf, 0x18, 0x70, 0xfb, 0x29, 0xe6, 0xe9, 0xe4, 0x71, 0xcd, 0x96, 0x02, 0xf0, 0x72, 0x1e, 0xe0, 0xf6, 0x6f, 0x0c, 0xb8, 0xfd, 0x14, 0xf3, 0x74, 0xf2, 0xb8, 0x66,
0x40, 0xdf, 0x01, 0x48, 0x92, 0x06, 0x6b, 0x94, 0xd7, 0xcb, 0xad, 0xb2, 0x93, 0x92, 0xd8, 0x5f, 0x4b, 0xa0, 0xef, 0x00, 0x24, 0x49, 0x83, 0x35, 0xca, 0xeb, 0xe5, 0x56, 0xd9, 0x49, 0x49, 0xec,
0x1a, 0x70, 0x73, 0xe2, 0xfc, 0x6c, 0xee, 0x31, 0xf2, 0xb9, 0xe7, 0x7f, 0x65, 0x8e, 0x3f, 0x18, 0x2f, 0x0d, 0xb8, 0x39, 0xb1, 0x7f, 0x36, 0xf7, 0x18, 0xf9, 0xdc, 0xf3, 0xbf, 0x32, 0xc7, 0x1f,
0x70, 0xa7, 0xd8, 0x1c, 0x57, 0x71, 0xde, 0x4f, 0xd5, 0x22, 0x2c, 0x50, 0x2a, 0xa8, 0xe6, 0x61, 0x0c, 0xb8, 0x53, 0x6c, 0x8e, 0xab, 0x38, 0xef, 0xa7, 0x6a, 0x12, 0x16, 0x28, 0x15, 0x54, 0xf3,
0x11, 0x27, 0x4c, 0x9e, 0xa9, 0x17, 0xd9, 0x5f, 0x95, 0x01, 0xed, 0xca, 0x64, 0x21, 0x27, 0x2f, 0xb0, 0x88, 0x13, 0x26, 0xf7, 0xd4, 0x93, 0xec, 0xaf, 0xca, 0x80, 0x76, 0x65, 0xb2, 0x90, 0x1f,
0xe2, 0x9a, 0x4b, 0x17, 0x28, 0xb9, 0x32, 0xa4, 0x72, 0x1d, 0x65, 0xc8, 0xc2, 0xa5, 0xca, 0x90, 0x2f, 0xe2, 0x9a, 0x4b, 0x17, 0x28, 0xb9, 0x32, 0xa4, 0x72, 0x1d, 0x65, 0xc8, 0xc2, 0xa5, 0xca,
0x3b, 0x60, 0x8a, 0xac, 0xc9, 0xb8, 0x37, 0x1c, 0x49, 0xce, 0xa8, 0x38, 0x63, 0xc1, 0x24, 0xe9, 0x90, 0x3b, 0x60, 0x8a, 0xac, 0xc9, 0xb8, 0x37, 0x1c, 0x49, 0xce, 0xa8, 0x38, 0x63, 0xc1, 0x24,
0x2f, 0xcd, 0x49, 0xfa, 0xd5, 0x4b, 0x93, 0xfe, 0x6b, 0xb8, 0x15, 0x07, 0xb6, 0xa4, 0xf0, 0x0b, 0xe9, 0x2f, 0xcd, 0x49, 0xfa, 0xd5, 0x4b, 0x93, 0xfe, 0x6b, 0xb8, 0x15, 0x07, 0xb6, 0xa4, 0xf0,
0xb8, 0x23, 0x1b, 0x0a, 0xa5, 0x7c, 0x28, 0xcc, 0x70, 0x8a, 0xfd, 0xef, 0x12, 0xdc, 0x6c, 0xc7, 0x0b, 0xb8, 0x23, 0x1b, 0x0a, 0xa5, 0x7c, 0x28, 0xcc, 0x70, 0x8a, 0xfd, 0x9f, 0x12, 0xdc, 0x6c,
0xac, 0x23, 0x48, 0x47, 0xd6, 0x0d, 0xe7, 0x47, 0xca, 0x74, 0x04, 0xa4, 0x48, 0xba, 0x3c, 0x95, 0xc7, 0xac, 0x23, 0x48, 0x47, 0xd6, 0x0d, 0xe7, 0x47, 0xca, 0x74, 0x04, 0xa4, 0x48, 0xba, 0x3c,
0xa4, 0x2b, 0x59, 0x92, 0xce, 0x5e, 0x70, 0x21, 0x8f, 0x9a, 0xeb, 0x29, 0x3c, 0x5b, 0xb0, 0x3a, 0x95, 0xa4, 0x2b, 0x59, 0x92, 0xce, 0x1e, 0x70, 0x21, 0x8f, 0x9a, 0xeb, 0x29, 0x3c, 0x5b, 0xb0,
0x26, 0x5d, 0xcd, 0xb9, 0x4b, 0x92, 0x73, 0x97, 0x49, 0xfa, 0xf5, 0x0c, 0x3d, 0x82, 0x95, 0x84, 0x3a, 0x26, 0x5d, 0xcd, 0xb9, 0x4b, 0x92, 0x73, 0x97, 0x49, 0xfa, 0xf6, 0x0c, 0x3d, 0x82, 0x95,
0x21, 0x7d, 0x45, 0x9c, 0x55, 0x89, 0x90, 0x31, 0x9d, 0xfa, 0x31, 0x73, 0x66, 0x8b, 0x08, 0x73, 0x84, 0x21, 0x7d, 0x45, 0x9c, 0x55, 0x89, 0x90, 0x31, 0x9d, 0xfa, 0x31, 0x73, 0x66, 0x8b, 0x08,
0xb2, 0x88, 0xb0, 0xff, 0x6e, 0x80, 0x95, 0x44, 0xe1, 0x9c, 0x1d, 0x40, 0xc6, 0xf8, 0xa5, 0xbc, 0xb3, 0xa0, 0x88, 0x48, 0x17, 0x34, 0x90, 0x29, 0x68, 0xec, 0xbf, 0x1b, 0x60, 0x25, 0x01, 0x3a,
0xf1, 0xef, 0x43, 0x0d, 0x07, 0x5e, 0x77, 0x80, 0x35, 0x38, 0xcb, 0x0a, 0x9c, 0x4a, 0xa6, 0xc0, 0x67, 0x73, 0x90, 0xf1, 0x4b, 0x29, 0xef, 0x97, 0xfb, 0x50, 0xc3, 0x81, 0xd7, 0x1d, 0x60, 0x8d,
0xf9, 0x04, 0xac, 0x71, 0xcd, 0x18, 0x07, 0xda, 0xc3, 0xa9, 0x45, 0x63, 0xda, 0xf3, 0x0e, 0x24, 0xdb, 0xb2, 0xc2, 0xad, 0x92, 0x29, 0xdc, 0x3e, 0x01, 0x6b, 0x5c, 0x4e, 0xc6, 0x31, 0xf8, 0x70,
0xc5, 0x23, 0xb3, 0x7f, 0x57, 0x1a, 0x73, 0x99, 0x82, 0xe5, 0x55, 0x32, 0xd6, 0x2f, 0xa0, 0xa6, 0x6a, 0x3d, 0x99, 0x06, 0x85, 0x03, 0x49, 0x5d, 0xc9, 0xec, 0xdf, 0x95, 0xc6, 0x34, 0xa7, 0x10,
0x5f, 0xa1, 0x6a, 0x59, 0x95, 0xb7, 0x7e, 0x54, 0x74, 0xad, 0xa2, 0x43, 0x37, 0x52, 0x66, 0xfc, 0x7b, 0x95, 0x64, 0xf6, 0x0b, 0xa8, 0xe9, 0x5b, 0xa8, 0x32, 0x57, 0xa5, 0xb4, 0x1f, 0x15, 0x1d,
0x28, 0xe0, 0xe1, 0x99, 0x63, 0xb1, 0xb1, 0xa4, 0xe9, 0xc2, 0x6a, 0x5e, 0x01, 0xad, 0x42, 0xf9, 0xab, 0x68, 0xd3, 0x8d, 0x94, 0x19, 0x3f, 0x0a, 0x78, 0x78, 0xe6, 0x58, 0x6c, 0x2c, 0x69, 0xba,
0x14, 0x9f, 0x69, 0x1b, 0x8b, 0x9f, 0x22, 0xc7, 0xbf, 0x14, 0x00, 0xd1, 0xd4, 0x7e, 0xef, 0xdc, 0xb0, 0x9a, 0x57, 0x40, 0xab, 0x50, 0x3e, 0xc5, 0x67, 0xda, 0xc6, 0xe2, 0xa7, 0x48, 0xff, 0x2f,
0xa4, 0xd9, 0xa7, 0x8e, 0xd2, 0xfe, 0x71, 0xe9, 0x43, 0xc3, 0x3e, 0x83, 0xd5, 0xbd, 0x90, 0x8e, 0x05, 0x76, 0x34, 0xeb, 0xdf, 0x3b, 0x37, 0x9f, 0xf6, 0xa9, 0xa3, 0xb4, 0x7f, 0x5c, 0xfa, 0xd0,
0x2e, 0x9c, 0x2e, 0x6d, 0xa8, 0xa5, 0xea, 0xdf, 0x38, 0x42, 0x33, 0xb2, 0x59, 0x31, 0xfa, 0x19, 0xb0, 0xcf, 0x60, 0x75, 0x2f, 0xa4, 0xa3, 0x0b, 0x67, 0x52, 0x1b, 0x6a, 0xa9, 0xd2, 0x38, 0x0e,
0xac, 0xed, 0x61, 0xd6, 0x0b, 0x49, 0xf7, 0xe2, 0xd9, 0x7a, 0x46, 0x49, 0xf1, 0x95, 0x01, 0x6f, 0xde, 0x8c, 0x6c, 0x56, 0xf8, 0x7e, 0x06, 0x6b, 0x7b, 0x98, 0xf5, 0x42, 0xd2, 0xbd, 0x78, 0x22,
0xe5, 0xf6, 0xbe, 0x8a, 0x8f, 0x7f, 0x96, 0x45, 0x9e, 0x72, 0xf1, 0x8c, 0x76, 0x25, 0x8d, 0x38, 0x9f, 0x51, 0x6d, 0x7c, 0x65, 0xc0, 0x5b, 0xb9, 0xb5, 0xaf, 0xe2, 0xe3, 0x9f, 0x65, 0x91, 0xa7,
0x4f, 0x52, 0xa5, 0x9c, 0xdb, 0x11, 0xe9, 0xe1, 0x28, 0xa4, 0xc7, 0xb2, 0x10, 0xbc, 0xbe, 0x17, 0x5c, 0x3c, 0xa3, 0x93, 0x49, 0x23, 0xce, 0x93, 0x2c, 0x2a, 0xbf, 0xed, 0x88, 0xcc, 0x71, 0x14,
0xff, 0xd1, 0x80, 0xbb, 0x53, 0xce, 0xb8, 0xca, 0xcb, 0xf3, 0x9d, 0x6d, 0x69, 0x56, 0x67, 0x5b, 0xd2, 0x63, 0x59, 0x23, 0x5e, 0xdf, 0x8d, 0xff, 0x68, 0xc0, 0xdd, 0x29, 0x7b, 0x5c, 0xe5, 0xe6,
0xce, 0x75, 0xb6, 0xf6, 0x5f, 0x4b, 0x50, 0xef, 0x70, 0x1a, 0x7a, 0xc7, 0x78, 0x97, 0x06, 0x7d, 0xf9, 0xa6, 0xb7, 0x34, 0xab, 0xe9, 0x2d, 0xe7, 0x9a, 0x5e, 0xfb, 0xaf, 0x25, 0xa8, 0x77, 0x38,
0x72, 0x2c, 0x72, 0x66, 0x5c, 0x2c, 0x1b, 0xf2, 0x19, 0x49, 0x39, 0x7c, 0x1f, 0x6a, 0x5e, 0xaf, 0x0d, 0xbd, 0x63, 0xbc, 0x4b, 0x83, 0x3e, 0x39, 0x16, 0xe9, 0x34, 0xae, 0xa3, 0x0d, 0x79, 0x8d,
0x87, 0x19, 0x73, 0x4f, 0xf1, 0x99, 0xce, 0x12, 0xa6, 0x63, 0x29, 0xd9, 0x33, 0x21, 0x12, 0x6d, 0xa4, 0x52, 0xbe, 0x0f, 0x35, 0xaf, 0xd7, 0xc3, 0x8c, 0xb9, 0xa7, 0xf8, 0x4c, 0x67, 0x09, 0xd3,
0x06, 0xc3, 0xbd, 0x10, 0x73, 0x77, 0xac, 0xa9, 0xa1, 0xb5, 0xa2, 0x26, 0xb6, 0x63, 0x6d, 0x51, 0xb1, 0x94, 0xec, 0x99, 0x10, 0x89, 0x0e, 0x84, 0xe1, 0x5e, 0x88, 0xb9, 0x3b, 0xd6, 0xd4, 0xd0,
0x5d, 0x47, 0x0c, 0x77, 0x3a, 0x9f, 0xc8, 0xdc, 0x5c, 0x75, 0xf4, 0x48, 0xd4, 0x36, 0xdd, 0xa8, 0x5a, 0x51, 0x1f, 0xb6, 0x63, 0x6d, 0x51, 0x78, 0x47, 0x0c, 0x77, 0x3a, 0x9f, 0xc8, 0xb4, 0x5d,
0x77, 0x8a, 0x79, 0x3a, 0x37, 0x83, 0x12, 0xc9, 0xe4, 0x7c, 0x1b, 0xcc, 0x90, 0x52, 0x2e, 0x13, 0x75, 0xf4, 0x48, 0x94, 0x3d, 0xdd, 0xa8, 0x77, 0x8a, 0x79, 0x3a, 0x6d, 0x83, 0x12, 0xc9, 0xbc,
0xaa, 0x24, 0x52, 0xd3, 0xa9, 0x0a, 0x81, 0x48, 0x27, 0x7a, 0xd7, 0xf6, 0xf6, 0x81, 0x26, 0x50, 0x7d, 0x1b, 0xcc, 0x90, 0x52, 0x2e, 0x73, 0xad, 0xe4, 0x58, 0xd3, 0xa9, 0x0a, 0x81, 0x48, 0x27,
0x3d, 0x12, 0x4d, 0x62, 0x7b, 0xfb, 0xe0, 0xa3, 0xc0, 0x1f, 0x51, 0x12, 0x70, 0x99, 0x5d, 0x4d, 0x7a, 0xd5, 0xf6, 0xf6, 0x81, 0xe6, 0x56, 0x3d, 0x12, 0xfd, 0x63, 0x7b, 0xfb, 0xe0, 0xa3, 0xc0,
0x27, 0x2d, 0x12, 0xcf, 0x63, 0xca, 0x12, 0xae, 0xe0, 0x7e, 0x99, 0x59, 0x4d, 0xc7, 0xd2, 0xb2, 0x1f, 0x51, 0x12, 0x70, 0x99, 0x78, 0x4d, 0x27, 0x2d, 0x12, 0xd7, 0x63, 0xca, 0x12, 0xae, 0x28,
0xe7, 0x67, 0x23, 0x6c, 0xff, 0xa7, 0x0c, 0xab, 0xaa, 0x80, 0xd9, 0xa7, 0xdd, 0x18, 0x1e, 0x77, 0x0b, 0x64, 0xd2, 0x35, 0x1d, 0x4b, 0xcb, 0x9e, 0x9f, 0x8d, 0xb0, 0xfd, 0xef, 0x32, 0xac, 0xaa,
0xc0, 0xec, 0x0d, 0x22, 0xd1, 0x0b, 0x68, 0x6c, 0x98, 0xce, 0x58, 0x90, 0x6d, 0xbc, 0xdc, 0x51, 0xda, 0x66, 0x9f, 0x76, 0x63, 0x78, 0xdc, 0x01, 0xb3, 0x37, 0x88, 0x44, 0x9b, 0xa0, 0xb1, 0x61,
0x88, 0xfb, 0xe4, 0xb5, 0xb6, 0xdc, 0xb8, 0xf1, 0x3a, 0x92, 0xe2, 0x34, 0x5d, 0x95, 0x27, 0xe8, 0x3a, 0x63, 0x41, 0xb6, 0x27, 0x73, 0x47, 0x21, 0xee, 0x93, 0xd7, 0xda, 0x72, 0xe3, 0x9e, 0xec,
0xca, 0xf7, 0xb8, 0xa7, 0x39, 0xa4, 0x22, 0x39, 0xc4, 0x14, 0x12, 0x45, 0x1f, 0x13, 0xac, 0xb0, 0x48, 0x8a, 0xd3, 0x4c, 0x56, 0x9e, 0x60, 0x32, 0xdf, 0xe3, 0x9e, 0xa6, 0x97, 0x8a, 0xa4, 0x17,
0x50, 0xd0, 0x5a, 0xa6, 0x68, 0x72, 0x31, 0x4b, 0x93, 0x59, 0xf0, 0x2e, 0xe5, 0xc9, 0xf0, 0x63, 0x53, 0x48, 0x14, 0xb3, 0x4c, 0x10, 0xc6, 0x42, 0x01, 0x61, 0xa4, 0x18, 0x74, 0x31, 0xcb, 0xa0,
0x58, 0x8e, 0x0d, 0xd3, 0x93, 0x18, 0x91, 0xd6, 0x2b, 0xe8, 0x51, 0x64, 0x22, 0x4b, 0x83, 0xc9, 0x59, 0xf0, 0x2e, 0xe5, 0x79, 0xf2, 0x63, 0x58, 0x8e, 0x0d, 0xd3, 0x93, 0x18, 0x91, 0xd6, 0x2b,
0xa9, 0xb3, 0x0c, 0xb6, 0xf2, 0xb4, 0x6a, 0x5e, 0x8a, 0x56, 0x73, 0x25, 0x1d, 0x5c, 0xa6, 0xa4, 0x68, 0x5f, 0x64, 0x22, 0x4b, 0x83, 0xc9, 0xa9, 0xb3, 0x0c, 0xb6, 0xf2, 0x8c, 0x6b, 0x5e, 0x8a,
0x4b, 0xf7, 0xfc, 0x56, 0xa6, 0xe7, 0xb7, 0x3f, 0x81, 0xd5, 0x9f, 0x47, 0x38, 0x3c, 0xdb, 0xa7, 0x71, 0x73, 0xd5, 0x1e, 0x5c, 0xa6, 0xda, 0x4b, 0xb3, 0xa7, 0x95, 0x65, 0xcf, 0x4f, 0x60, 0xf5,
0x5d, 0x36, 0x9f, 0x8f, 0x9b, 0x50, 0xd5, 0x8e, 0x8a, 0x33, 0x6d, 0x32, 0xb6, 0xff, 0x69, 0x40, 0xe7, 0x11, 0x0e, 0xcf, 0xf6, 0x69, 0x97, 0xcd, 0xe7, 0xe3, 0x26, 0x54, 0xb5, 0xa3, 0xe2, 0x4c,
0x5d, 0x86, 0xfd, 0x73, 0x8f, 0x9d, 0xc6, 0x9f, 0x47, 0x62, 0x2f, 0x1b, 0x59, 0x2f, 0x5f, 0xbe, 0x9b, 0x8c, 0xed, 0x7f, 0x1a, 0x50, 0x97, 0x61, 0xff, 0xdc, 0x63, 0xa7, 0xf1, 0xcb, 0x49, 0xec,
0x19, 0x48, 0xf5, 0xf6, 0xb2, 0x31, 0x31, 0x75, 0x82, 0x93, 0x5d, 0x7d, 0x51, 0x75, 0x51, 0x29, 0x65, 0x23, 0xeb, 0xe5, 0xcb, 0xf7, 0x09, 0xa9, 0xb6, 0x5f, 0xf6, 0x2c, 0xa6, 0x4e, 0x70, 0xb2,
0xac, 0x2e, 0x72, 0x6d, 0xc5, 0xc2, 0x44, 0x5b, 0xf1, 0xb5, 0x01, 0x37, 0x53, 0xc6, 0xb9, 0x4a, 0xe1, 0x2f, 0x2a, 0x3c, 0x2a, 0x85, 0x85, 0x47, 0xae, 0xe3, 0x58, 0x98, 0xe8, 0x38, 0xbe, 0x36,
0xee, 0xca, 0x98, 0xb4, 0x94, 0x37, 0xe9, 0x4e, 0x36, 0xa7, 0x97, 0x8b, 0x7c, 0x9c, 0xca, 0xe9, 0xe0, 0x66, 0xca, 0x38, 0x57, 0xc9, 0x5d, 0x19, 0x93, 0x96, 0xf2, 0x26, 0xdd, 0xc9, 0xe6, 0xf4,
0xb1, 0x71, 0x33, 0x79, 0xfd, 0x19, 0xac, 0x08, 0xf2, 0xbc, 0x1e, 0x3f, 0xfe, 0xcb, 0x80, 0xa5, 0x72, 0x91, 0x8f, 0x53, 0x39, 0x3d, 0x36, 0x6e, 0x26, 0xaf, 0x3f, 0x83, 0x15, 0x41, 0x9e, 0xd7,
0x7d, 0xda, 0x95, 0x1e, 0x4c, 0x83, 0xc7, 0xc8, 0x7e, 0x30, 0x5a, 0x85, 0xb2, 0x4f, 0x86, 0x3a, 0xe3, 0xc7, 0x7f, 0x19, 0xb0, 0xb4, 0x4f, 0xbb, 0xd2, 0x83, 0x69, 0xf0, 0x18, 0xd9, 0xb7, 0xa4,
0x11, 0x8b, 0x9f, 0x22, 0xb8, 0x18, 0xf7, 0x42, 0x3e, 0xfe, 0xe4, 0x25, 0x2a, 0x2b, 0x21, 0x91, 0x55, 0x28, 0xfb, 0x64, 0xa8, 0x13, 0xb1, 0xf8, 0x29, 0x82, 0x8b, 0x71, 0x2f, 0xe4, 0xe3, 0xd7,
0x5f, 0x4c, 0xde, 0x86, 0x2a, 0x0e, 0x7c, 0x35, 0xa9, 0x6b, 0x54, 0x1c, 0xf8, 0x72, 0xea, 0x7a, 0x30, 0x51, 0x59, 0x09, 0x89, 0x7c, 0x4c, 0x79, 0x1b, 0xaa, 0x38, 0xf0, 0xd5, 0x47, 0x5d, 0xbe,
0xda, 0x8e, 0x35, 0x58, 0x18, 0xd1, 0xf1, 0x67, 0x2a, 0x35, 0xb0, 0xd7, 0x00, 0x3d, 0xc5, 0x7c, 0xe2, 0xc0, 0x97, 0x9f, 0xae, 0xa7, 0x23, 0x59, 0x83, 0x85, 0x11, 0x1d, 0xbf, 0x60, 0xa9, 0x81,
0x9f, 0x76, 0x85, 0x57, 0x62, 0xf3, 0xd8, 0xff, 0x28, 0xc9, 0x96, 0x60, 0x2c, 0xbe, 0x8a, 0x83, 0xbd, 0x06, 0xe8, 0x29, 0xe6, 0xfb, 0xb4, 0x2b, 0xbc, 0x12, 0x9b, 0xc7, 0xfe, 0x47, 0x49, 0x76,
0x6d, 0xa8, 0x2b, 0xe6, 0xf9, 0x82, 0x76, 0xdd, 0x20, 0x8a, 0x8d, 0x62, 0x49, 0xe1, 0x3e, 0xed, 0x0b, 0x63, 0xf1, 0x55, 0x1c, 0x6c, 0x43, 0x5d, 0x31, 0xcf, 0x17, 0xb4, 0xeb, 0x06, 0x51, 0x6c,
0x1e, 0x46, 0x43, 0xf4, 0x1e, 0xdc, 0x22, 0x81, 0x3b, 0xd2, 0x64, 0x98, 0x68, 0x2a, 0x2b, 0xad, 0x14, 0x4b, 0x0a, 0xf7, 0x69, 0xf7, 0x30, 0x1a, 0xa2, 0xf7, 0xe0, 0x16, 0x09, 0xdc, 0x91, 0x26,
0x92, 0x20, 0xa6, 0x49, 0xad, 0xfe, 0x2e, 0xac, 0xe0, 0xe0, 0x45, 0x84, 0x23, 0x9c, 0xa8, 0x2a, 0xc3, 0x44, 0x53, 0x59, 0x69, 0x95, 0x04, 0x31, 0x4d, 0x6a, 0xf5, 0x77, 0x61, 0x05, 0x07, 0x2f,
0x9b, 0xd5, 0xb5, 0x58, 0xeb, 0x09, 0xd2, 0xf3, 0xd8, 0xa9, 0xcb, 0x06, 0x94, 0x33, 0x9d, 0x0c, 0x22, 0x1c, 0xe1, 0x44, 0x55, 0xd9, 0xac, 0xae, 0xc5, 0x5a, 0x4f, 0x90, 0x9e, 0xc7, 0x4e, 0x5d,
0x4d, 0x21, 0xe9, 0x08, 0x01, 0xfa, 0x10, 0x4c, 0xb1, 0x5c, 0x41, 0x4b, 0x95, 0xf6, 0xb7, 0x8b, 0x36, 0xa0, 0x9c, 0xe9, 0x64, 0x68, 0x0a, 0x49, 0x47, 0x08, 0xd0, 0x87, 0x60, 0x8a, 0xe9, 0x0a,
0xa0, 0xa5, 0xfd, 0xed, 0x54, 0xbf, 0x50, 0x3f, 0x98, 0x08, 0x10, 0x5d, 0x07, 0xfb, 0x84, 0x9d, 0x5a, 0xaa, 0xea, 0xbf, 0x5d, 0x04, 0x2d, 0xed, 0x6f, 0xa7, 0xfa, 0x85, 0xfa, 0xc1, 0x44, 0x80,
0x6a, 0x8a, 0x01, 0x25, 0xda, 0x23, 0xec, 0x74, 0xeb, 0x2f, 0x26, 0x80, 0x44, 0xe4, 0x2e, 0xa5, 0xe8, 0x3a, 0xd8, 0x27, 0xec, 0x54, 0x53, 0x0c, 0x28, 0xd1, 0x1e, 0x61, 0xa7, 0x5b, 0x7f, 0x31,
0xa1, 0x8f, 0x06, 0xd2, 0xcc, 0xbb, 0x74, 0x38, 0xa2, 0x01, 0x0e, 0xb8, 0x0c, 0x5b, 0x86, 0x36, 0x01, 0x24, 0x22, 0x77, 0x29, 0x0d, 0x7d, 0x34, 0x90, 0x66, 0xde, 0xa5, 0xc3, 0x11, 0x0d, 0x70,
0xb2, 0x87, 0xe9, 0xc1, 0xa4, 0xa2, 0x76, 0x4b, 0xf3, 0x9d, 0x42, 0xfd, 0x9c, 0xb2, 0x7d, 0x03, 0xc0, 0x65, 0xd8, 0x32, 0xb4, 0x91, 0xdd, 0x4c, 0x0f, 0x26, 0x15, 0xb5, 0x5b, 0x9a, 0xef, 0x14,
0xbd, 0x90, 0x95, 0xb3, 0x18, 0x12, 0xc6, 0x49, 0x8f, 0xed, 0x9e, 0x78, 0x41, 0x80, 0x07, 0x68, 0xea, 0xe7, 0x94, 0xed, 0x1b, 0xe8, 0x85, 0xac, 0x9c, 0xc5, 0x90, 0x30, 0x4e, 0x7a, 0x6c, 0xf7,
0x6b, 0xca, 0xc7, 0xa4, 0x22, 0xe5, 0xf8, 0xcc, 0x07, 0x85, 0x67, 0x76, 0x78, 0x48, 0x82, 0xe3, 0xc4, 0x0b, 0x02, 0x3c, 0x40, 0x5b, 0x53, 0xde, 0x99, 0x8a, 0x94, 0xe3, 0x3d, 0x1f, 0x14, 0xee,
0x18, 0x17, 0xf6, 0x0d, 0xf4, 0x1c, 0xac, 0x54, 0x47, 0x8f, 0xde, 0x2d, 0x32, 0xe3, 0x64, 0xcb, 0xd9, 0xe1, 0x21, 0x09, 0x8e, 0x63, 0x5c, 0xd8, 0x37, 0xd0, 0x73, 0xb0, 0x52, 0xcd, 0x3e, 0x7a,
0xdf, 0x3c, 0x0f, 0x40, 0xf6, 0x0d, 0xd4, 0x87, 0x7a, 0xe6, 0x93, 0x13, 0x6a, 0x9d, 0x57, 0xb0, 0xb7, 0xc8, 0x8c, 0x93, 0xaf, 0x01, 0xcd, 0xf3, 0x00, 0x64, 0xdf, 0x40, 0x7d, 0xa8, 0x67, 0x5e,
0xa7, 0xbf, 0xf3, 0x34, 0xbf, 0x3b, 0x87, 0x66, 0x72, 0xfb, 0x5f, 0x29, 0x83, 0x4d, 0x7c, 0xb3, 0xa3, 0x50, 0xeb, 0xbc, 0x82, 0x3d, 0xfd, 0x04, 0xd4, 0xfc, 0xee, 0x1c, 0x9a, 0xc9, 0xe9, 0x7f,
0xd9, 0x9c, 0xb2, 0xc9, 0xb4, 0xaf, 0x4b, 0xcd, 0xc7, 0xf3, 0x2f, 0x48, 0x0e, 0xf7, 0xc7, 0x8f, 0xa5, 0x0c, 0x36, 0xf1, 0x9c, 0xb3, 0x39, 0x65, 0x91, 0x69, 0x0f, 0x4f, 0xcd, 0xc7, 0xf3, 0x4f,
0x54, 0xe0, 0x7a, 0x34, 0xbb, 0x2b, 0x51, 0xa7, 0xb5, 0xe6, 0x6d, 0x5f, 0xec, 0x1b, 0xe8, 0x08, 0x48, 0x36, 0xf7, 0xc7, 0x97, 0x54, 0xe0, 0x7a, 0x34, 0xbb, 0x2b, 0x51, 0xbb, 0xb5, 0xe6, 0x6d,
0xcc, 0xa4, 0x83, 0x40, 0xef, 0x14, 0x2d, 0xcc, 0x37, 0x18, 0x73, 0x38, 0x27, 0x53, 0xbc, 0x17, 0x5f, 0xec, 0x1b, 0xe8, 0x08, 0xcc, 0xa4, 0x83, 0x40, 0xef, 0x14, 0x4d, 0xcc, 0x37, 0x18, 0x73,
0x3b, 0xa7, 0xa8, 0x77, 0x28, 0x76, 0x4e, 0x61, 0x27, 0x60, 0xdf, 0x40, 0xbf, 0x1e, 0x7f, 0x77, 0x38, 0x27, 0x53, 0xbc, 0x17, 0x3b, 0xa7, 0xa8, 0x77, 0x28, 0x76, 0x4e, 0x61, 0x27, 0x60, 0xdf,
0xcc, 0x94, 0xcc, 0xe8, 0xf1, 0x79, 0xcf, 0x2f, 0xaa, 0xe0, 0x9b, 0xdf, 0xbf, 0xc0, 0x8a, 0x14, 0x40, 0xbf, 0x1e, 0x3f, 0x49, 0x66, 0x4a, 0x66, 0xf4, 0xf8, 0xbc, 0xeb, 0x17, 0x55, 0xf0, 0xcd,
0x38, 0x50, 0xe7, 0x84, 0xbe, 0x52, 0xa5, 0x4b, 0x14, 0x7a, 0xa2, 0xd2, 0x2f, 0x38, 0x5c, 0xc7, 0xef, 0x5f, 0x60, 0x46, 0x0a, 0x1c, 0xa8, 0x73, 0x42, 0x5f, 0xa9, 0xd2, 0x25, 0x0a, 0x3d, 0x51,
0xd2, 0xa4, 0xea, 0xd4, 0xc3, 0xcf, 0x59, 0x91, 0x1c, 0xee, 0x02, 0x3c, 0xc5, 0xfc, 0x00, 0xf3, 0xe9, 0x17, 0x6c, 0xae, 0x63, 0x69, 0x52, 0x75, 0xea, 0xe6, 0xe7, 0xcc, 0x48, 0x36, 0x77, 0x01,
0x90, 0xf4, 0x58, 0x3e, 0xac, 0xc6, 0x09, 0x43, 0x2b, 0xc4, 0x47, 0x3d, 0x9a, 0xa9, 0x17, 0x1f, 0x9e, 0x62, 0x7e, 0x80, 0x79, 0x48, 0x7a, 0x2c, 0x1f, 0x56, 0xe3, 0x84, 0xa1, 0x15, 0xe2, 0xad,
0xb0, 0xf5, 0xf5, 0xa2, 0xfe, 0x8f, 0xf0, 0x90, 0xfa, 0xf8, 0xff, 0x3f, 0x4f, 0x1d, 0x81, 0x99, 0x1e, 0xcd, 0xd4, 0x8b, 0x37, 0xd8, 0xfa, 0x7a, 0x51, 0xff, 0x7d, 0x78, 0x48, 0x7d, 0xfc, 0xff,
0x14, 0xee, 0xc5, 0x61, 0x90, 0xaf, 0xeb, 0x67, 0x85, 0xc1, 0xe7, 0x60, 0x26, 0x95, 0x50, 0xf1, 0x9f, 0xa7, 0x8e, 0xc0, 0x4c, 0x0a, 0xf7, 0xe2, 0x30, 0xc8, 0xd7, 0xf5, 0xb3, 0xc2, 0xe0, 0x73,
0x8e, 0xf9, 0x2a, 0xb2, 0xf9, 0x70, 0x86, 0x56, 0x72, 0xdb, 0x43, 0xa8, 0xc6, 0x95, 0x0b, 0x7a, 0x30, 0x93, 0x4a, 0xa8, 0x78, 0xc5, 0x7c, 0x15, 0xd9, 0x7c, 0x38, 0x43, 0x2b, 0x39, 0xed, 0x21,
0x30, 0x2d, 0x66, 0xd3, 0x3b, 0xcf, 0xb8, 0xeb, 0x2f, 0xc1, 0x4a, 0xd1, 0x7a, 0x71, 0x96, 0x9e, 0x54, 0xe3, 0xca, 0x05, 0x3d, 0x98, 0x16, 0xb3, 0xe9, 0x95, 0x67, 0x9c, 0xf5, 0x97, 0x60, 0xa5,
0x2c, 0x07, 0x9a, 0x8f, 0x66, 0xea, 0x7d, 0x33, 0x82, 0x65, 0xe7, 0x07, 0x9f, 0x6f, 0x1d, 0x13, 0x68, 0xbd, 0x38, 0x4b, 0x4f, 0x96, 0x03, 0xcd, 0x47, 0x33, 0xf5, 0xbe, 0x19, 0xc1, 0xb2, 0xf3,
0x7e, 0x12, 0x75, 0x85, 0x65, 0x37, 0x95, 0xe6, 0x7b, 0x84, 0xea, 0x5f, 0x9b, 0xf1, 0x2d, 0x37, 0x83, 0xcf, 0xb7, 0x8e, 0x09, 0x3f, 0x89, 0xba, 0xc2, 0xb2, 0x9b, 0x4a, 0xf3, 0x3d, 0x42, 0xf5,
0xe5, 0x4e, 0x9b, 0xd2, 0x4e, 0xa3, 0x6e, 0x77, 0x51, 0x0e, 0xdf, 0xff, 0x6f, 0x00, 0x00, 0x00, 0xaf, 0xcd, 0xf8, 0x94, 0x9b, 0x72, 0xa5, 0x4d, 0x69, 0xa7, 0x51, 0xb7, 0xbb, 0x28, 0x87, 0xef,
0xff, 0xff, 0xe1, 0x00, 0x07, 0x45, 0xe2, 0x1f, 0x00, 0x00, 0xff, 0x37, 0x00, 0x00, 0xff, 0xff, 0x80, 0x81, 0x8c, 0x4f, 0xfd, 0x1f, 0x00, 0x00,
} }
// Reference imports to suppress errors if they are not otherwise used. // Reference imports to suppress errors if they are not otherwise used.

View File

@ -225,6 +225,7 @@ message FieldIndexInfo {
repeated string index_file_paths = 7; repeated string index_file_paths = 7;
int64 index_size = 8; int64 index_size = 8;
int64 index_version = 9; int64 index_version = 9;
int64 num_rows = 10;
} }
message LoadSegmentsRequest { message LoadSegmentsRequest {

View File

@ -1554,6 +1554,7 @@ type FieldIndexInfo struct {
IndexFilePaths []string `protobuf:"bytes,7,rep,name=index_file_paths,json=indexFilePaths,proto3" json:"index_file_paths,omitempty"` IndexFilePaths []string `protobuf:"bytes,7,rep,name=index_file_paths,json=indexFilePaths,proto3" json:"index_file_paths,omitempty"`
IndexSize int64 `protobuf:"varint,8,opt,name=index_size,json=indexSize,proto3" json:"index_size,omitempty"` IndexSize int64 `protobuf:"varint,8,opt,name=index_size,json=indexSize,proto3" json:"index_size,omitempty"`
IndexVersion int64 `protobuf:"varint,9,opt,name=index_version,json=indexVersion,proto3" json:"index_version,omitempty"` IndexVersion int64 `protobuf:"varint,9,opt,name=index_version,json=indexVersion,proto3" json:"index_version,omitempty"`
NumRows int64 `protobuf:"varint,10,opt,name=num_rows,json=numRows,proto3" json:"num_rows,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"` XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"` XXX_sizecache int32 `json:"-"`
@ -1647,6 +1648,13 @@ func (m *FieldIndexInfo) GetIndexVersion() int64 {
return 0 return 0
} }
func (m *FieldIndexInfo) GetNumRows() int64 {
if m != nil {
return m.NumRows
}
return 0
}
type LoadSegmentsRequest struct { type LoadSegmentsRequest struct {
Base *commonpb.MsgBase `protobuf:"bytes,1,opt,name=base,proto3" json:"base,omitempty"` Base *commonpb.MsgBase `protobuf:"bytes,1,opt,name=base,proto3" json:"base,omitempty"`
DstNodeID int64 `protobuf:"varint,2,opt,name=dst_nodeID,json=dstNodeID,proto3" json:"dst_nodeID,omitempty"` DstNodeID int64 `protobuf:"varint,2,opt,name=dst_nodeID,json=dstNodeID,proto3" json:"dst_nodeID,omitempty"`
@ -3654,229 +3662,229 @@ func init() {
func init() { proto.RegisterFile("query_coord.proto", fileDescriptor_aab7cc9a69ed26e8) } func init() { proto.RegisterFile("query_coord.proto", fileDescriptor_aab7cc9a69ed26e8) }
var fileDescriptor_aab7cc9a69ed26e8 = []byte{ var fileDescriptor_aab7cc9a69ed26e8 = []byte{
// 3543 bytes of a gzipped FileDescriptorProto // 3549 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x3b, 0x49, 0x6c, 0x1c, 0xd7, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x3b, 0x49, 0x6f, 0x1c, 0xd7,
0x95, 0xac, 0x5e, 0xc8, 0xee, 0xd7, 0x0b, 0x8b, 0x9f, 0x12, 0xd5, 0x6e, 0x6b, 0x73, 0x69, 0x31, 0x99, 0xac, 0x5e, 0xc8, 0xee, 0xaf, 0x17, 0x16, 0x1f, 0x25, 0xaa, 0xdd, 0xd6, 0xe6, 0xd2, 0x62,
0x87, 0xb2, 0x49, 0x99, 0xb2, 0x0d, 0x79, 0xc6, 0xc6, 0x8c, 0x44, 0x5a, 0x34, 0x47, 0x12, 0xcd, 0x0e, 0x65, 0x93, 0x32, 0x65, 0x1b, 0xf2, 0x8c, 0x8d, 0x19, 0x89, 0xb4, 0x68, 0x8e, 0x24, 0x9a,
0xa9, 0x96, 0x34, 0x03, 0xc1, 0x98, 0x9e, 0xea, 0xae, 0xcf, 0x66, 0x41, 0xd5, 0x55, 0xad, 0xaa, 0x53, 0x2d, 0x69, 0x06, 0x82, 0x31, 0x3d, 0xd5, 0x5d, 0x8f, 0xcd, 0x82, 0xaa, 0xab, 0x5a, 0x55,
0x6a, 0x4a, 0xf4, 0x5c, 0xe7, 0x32, 0xd9, 0x80, 0xe4, 0x10, 0x20, 0x40, 0x90, 0x53, 0x02, 0x24, 0xd5, 0x94, 0xe8, 0xb9, 0xce, 0x65, 0xb2, 0x01, 0xc9, 0x21, 0x40, 0x80, 0x20, 0xa7, 0x04, 0x48,
0x81, 0x0d, 0xe4, 0x90, 0x00, 0x39, 0x04, 0x41, 0x80, 0x1c, 0x92, 0x53, 0x90, 0x43, 0x8e, 0x01, 0x02, 0x1b, 0xc8, 0x21, 0x01, 0x72, 0x08, 0x82, 0x00, 0x39, 0x24, 0xa7, 0x20, 0x3f, 0x20, 0x40,
0x72, 0xcc, 0x21, 0xb9, 0xe6, 0x90, 0x5b, 0xf0, 0xb7, 0x5a, 0x7f, 0x91, 0x2d, 0x52, 0xde, 0x82, 0x8e, 0x39, 0x24, 0x40, 0x4e, 0x39, 0xe4, 0x16, 0xbc, 0xad, 0xd6, 0x57, 0x64, 0x8b, 0x94, 0xb7,
0xdc, 0xba, 0xde, 0x5f, 0xde, 0xfb, 0x6f, 0x7f, 0xef, 0xff, 0x86, 0xb9, 0xc7, 0x63, 0xec, 0xed, 0x20, 0xb7, 0xae, 0xef, 0x2d, 0xdf, 0xf7, 0xbe, 0xfd, 0xfb, 0xde, 0x6b, 0x98, 0x7b, 0x3c, 0xc6,
0x77, 0xfb, 0xae, 0xeb, 0x99, 0xcb, 0x23, 0xcf, 0x0d, 0x5c, 0x84, 0x86, 0x96, 0xbd, 0x37, 0xf6, 0xde, 0x7e, 0xb7, 0xef, 0xba, 0x9e, 0xb9, 0x3c, 0xf2, 0xdc, 0xc0, 0x45, 0x68, 0x68, 0xd9, 0x7b,
0xd9, 0xd7, 0x32, 0x1d, 0x6f, 0xd7, 0xfb, 0xee, 0x70, 0xe8, 0x3a, 0x0c, 0xd6, 0xae, 0xc7, 0x67, 0x63, 0x9f, 0x7d, 0x2d, 0xd3, 0xf1, 0x76, 0xbd, 0xef, 0x0e, 0x87, 0xae, 0xc3, 0x60, 0xed, 0x7a,
0xb4, 0x9b, 0x96, 0x13, 0x60, 0xcf, 0x31, 0x6c, 0x31, 0xea, 0xf7, 0x77, 0xf1, 0xd0, 0xe0, 0x5f, 0x7c, 0x46, 0xbb, 0x69, 0x39, 0x01, 0xf6, 0x1c, 0xc3, 0x16, 0xa3, 0x7e, 0x7f, 0x17, 0x0f, 0x0d,
0xaa, 0x69, 0x04, 0x46, 0x7c, 0x7f, 0xed, 0xff, 0x14, 0x58, 0xe8, 0xec, 0xba, 0x4f, 0xd6, 0x5c, 0xfe, 0xa5, 0x9a, 0x46, 0x60, 0xc4, 0xf7, 0xd7, 0xfe, 0x4f, 0x81, 0x85, 0xce, 0xae, 0xfb, 0x64,
0xdb, 0xc6, 0xfd, 0xc0, 0x72, 0x1d, 0x5f, 0xc7, 0x8f, 0xc7, 0xd8, 0x0f, 0xd0, 0x55, 0x28, 0xf5, 0xcd, 0xb5, 0x6d, 0xdc, 0x0f, 0x2c, 0xd7, 0xf1, 0x75, 0xfc, 0x78, 0x8c, 0xfd, 0x00, 0x5d, 0x85,
0x0c, 0x1f, 0xb7, 0x94, 0xf3, 0xca, 0x62, 0x6d, 0xf5, 0xf4, 0x72, 0x82, 0x12, 0x4e, 0xc2, 0x5d, 0x52, 0xcf, 0xf0, 0x71, 0x4b, 0x39, 0xaf, 0x2c, 0xd6, 0x56, 0x4f, 0x2f, 0x27, 0x28, 0xe1, 0x24,
0x7f, 0x70, 0xd3, 0xf0, 0xb1, 0x4e, 0x67, 0x22, 0x04, 0x25, 0xb3, 0xb7, 0xb9, 0xde, 0x2a, 0x9c, 0xdc, 0xf5, 0x07, 0x37, 0x0d, 0x1f, 0xeb, 0x74, 0x26, 0x42, 0x50, 0x32, 0x7b, 0x9b, 0xeb, 0xad,
0x57, 0x16, 0x8b, 0x3a, 0xfd, 0x8d, 0x2e, 0x42, 0xa3, 0x1f, 0xee, 0xbd, 0xb9, 0xee, 0xb7, 0x8a, 0xc2, 0x79, 0x65, 0xb1, 0xa8, 0xd3, 0xdf, 0xe8, 0x22, 0x34, 0xfa, 0xe1, 0xde, 0x9b, 0xeb, 0x7e,
0xe7, 0x8b, 0x8b, 0x45, 0x3d, 0x09, 0xd4, 0xfe, 0xa0, 0xc0, 0xa9, 0x0c, 0x19, 0xfe, 0xc8, 0x75, 0xab, 0x78, 0xbe, 0xb8, 0x58, 0xd4, 0x93, 0x40, 0xed, 0xf7, 0x0a, 0x9c, 0xca, 0x90, 0xe1, 0x8f,
0x7c, 0x8c, 0xae, 0xc1, 0xb4, 0x1f, 0x18, 0xc1, 0xd8, 0xe7, 0x94, 0xbc, 0x28, 0xa5, 0xa4, 0x43, 0x5c, 0xc7, 0xc7, 0xe8, 0x1a, 0x4c, 0xfb, 0x81, 0x11, 0x8c, 0x7d, 0x4e, 0xc9, 0x8b, 0x52, 0x4a,
0xa7, 0xe8, 0x7c, 0x6a, 0x16, 0x6d, 0x41, 0x82, 0x16, 0xbd, 0x06, 0x27, 0x2c, 0xe7, 0x2e, 0x1e, 0x3a, 0x74, 0x8a, 0xce, 0xa7, 0x66, 0xd1, 0x16, 0x24, 0x68, 0xd1, 0x6b, 0x70, 0xc2, 0x72, 0xee,
0xba, 0xde, 0x7e, 0x77, 0x84, 0xbd, 0x3e, 0x76, 0x02, 0x63, 0x80, 0x05, 0x8d, 0xf3, 0x62, 0x6c, 0xe2, 0xa1, 0xeb, 0xed, 0x77, 0x47, 0xd8, 0xeb, 0x63, 0x27, 0x30, 0x06, 0x58, 0xd0, 0x38, 0x2f,
0x3b, 0x1a, 0x42, 0x6f, 0xc2, 0x29, 0x26, 0x25, 0x1f, 0x7b, 0x7b, 0x56, 0x1f, 0x77, 0x8d, 0x3d, 0xc6, 0xb6, 0xa3, 0x21, 0xf4, 0x26, 0x9c, 0x62, 0x52, 0xf2, 0xb1, 0xb7, 0x67, 0xf5, 0x71, 0xd7,
0xc3, 0xb2, 0x8d, 0x9e, 0x8d, 0x5b, 0xa5, 0xf3, 0xc5, 0xc5, 0x8a, 0x7e, 0x92, 0x0e, 0x77, 0xd8, 0xd8, 0x33, 0x2c, 0xdb, 0xe8, 0xd9, 0xb8, 0x55, 0x3a, 0x5f, 0x5c, 0xac, 0xe8, 0x27, 0xe9, 0x70,
0xe8, 0x0d, 0x31, 0xa8, 0x7d, 0x4f, 0x81, 0x93, 0xe4, 0x84, 0xdb, 0x86, 0x17, 0x58, 0x9f, 0x00, 0x87, 0x8d, 0xde, 0x10, 0x83, 0xda, 0xf7, 0x14, 0x38, 0x49, 0x4e, 0xb8, 0x6d, 0x78, 0x81, 0xf5,
0x9f, 0x35, 0xa8, 0xc7, 0xcf, 0xd6, 0x2a, 0xd2, 0xb1, 0x04, 0x8c, 0xcc, 0x19, 0x09, 0xf4, 0x84, 0x09, 0xf0, 0x59, 0x83, 0x7a, 0xfc, 0x6c, 0xad, 0x22, 0x1d, 0x4b, 0xc0, 0xc8, 0x9c, 0x91, 0x40,
0x27, 0x25, 0x7a, 0xcc, 0x04, 0x4c, 0xfb, 0x2e, 0x57, 0x88, 0x38, 0x9d, 0xc7, 0x11, 0x44, 0x1a, 0x4f, 0x78, 0x52, 0xa2, 0xc7, 0x4c, 0xc0, 0xb4, 0xef, 0x72, 0x85, 0x88, 0xd3, 0x79, 0x1c, 0x41,
0x67, 0x21, 0x8b, 0xf3, 0x08, 0x62, 0xd0, 0xfe, 0xa8, 0xc0, 0xc9, 0x3b, 0xae, 0x61, 0x46, 0x0a, 0xa4, 0x71, 0x16, 0xb2, 0x38, 0x8f, 0x20, 0x06, 0xed, 0x0f, 0x0a, 0x9c, 0xbc, 0xe3, 0x1a, 0x66,
0xf3, 0xe9, 0xb3, 0xf3, 0x1d, 0x98, 0x66, 0xd6, 0xd5, 0x2a, 0x51, 0x5c, 0x97, 0x92, 0xb8, 0xb8, 0xa4, 0x30, 0x9f, 0x3e, 0x3b, 0xdf, 0x81, 0x69, 0x66, 0x5d, 0xad, 0x12, 0xc5, 0x75, 0x29, 0x89,
0xe5, 0x45, 0x14, 0x76, 0x28, 0x40, 0xe7, 0x8b, 0xd0, 0x25, 0x68, 0x7a, 0x78, 0x64, 0x5b, 0x7d, 0x8b, 0x5b, 0x5e, 0x44, 0x61, 0x87, 0x02, 0x74, 0xbe, 0x08, 0x5d, 0x82, 0xa6, 0x87, 0x47, 0xb6,
0xa3, 0xeb, 0x8c, 0x87, 0x3d, 0xec, 0xb5, 0xca, 0xe7, 0x95, 0xc5, 0xb2, 0xde, 0xe0, 0xd0, 0x2d, 0xd5, 0x37, 0xba, 0xce, 0x78, 0xd8, 0xc3, 0x5e, 0xab, 0x7c, 0x5e, 0x59, 0x2c, 0xeb, 0x0d, 0x0e,
0x0a, 0xd4, 0xbe, 0xad, 0x40, 0x4b, 0xc7, 0x36, 0x36, 0x7c, 0xfc, 0x59, 0x1e, 0x76, 0x01, 0xa6, 0xdd, 0xa2, 0x40, 0xed, 0xdb, 0x0a, 0xb4, 0x74, 0x6c, 0x63, 0xc3, 0xc7, 0x9f, 0xe5, 0x61, 0x17,
0x1d, 0xd7, 0xc4, 0x9b, 0xeb, 0xf4, 0xb0, 0x45, 0x9d, 0x7f, 0x69, 0x7f, 0x55, 0xe0, 0xc4, 0x06, 0x60, 0xda, 0x71, 0x4d, 0xbc, 0xb9, 0x4e, 0x0f, 0x5b, 0xd4, 0xf9, 0x97, 0xf6, 0x57, 0x05, 0x4e,
0x0e, 0x88, 0xd4, 0x2d, 0x3f, 0xb0, 0xfa, 0xa1, 0x5a, 0xbf, 0x03, 0x45, 0x0f, 0x3f, 0xe6, 0x94, 0x6c, 0xe0, 0x80, 0x48, 0xdd, 0xf2, 0x03, 0xab, 0x1f, 0xaa, 0xf5, 0x3b, 0x50, 0xf4, 0xf0, 0x63,
0x5d, 0x49, 0x52, 0x16, 0x3a, 0x29, 0xd9, 0x4a, 0x9d, 0xac, 0x43, 0x2f, 0x41, 0xdd, 0x1c, 0xda, 0x4e, 0xd9, 0x95, 0x24, 0x65, 0xa1, 0x93, 0x92, 0xad, 0xd4, 0xc9, 0x3a, 0xf4, 0x12, 0xd4, 0xcd,
0xdd, 0xfe, 0xae, 0xe1, 0x38, 0xd8, 0x66, 0x7a, 0x53, 0xd5, 0x6b, 0xe6, 0xd0, 0x5e, 0xe3, 0x20, 0xa1, 0xdd, 0xed, 0xef, 0x1a, 0x8e, 0x83, 0x6d, 0xa6, 0x37, 0x55, 0xbd, 0x66, 0x0e, 0xed, 0x35,
0x74, 0x16, 0xc0, 0xc7, 0x83, 0x21, 0x76, 0x82, 0xc8, 0xaf, 0xc4, 0x20, 0x68, 0x09, 0xe6, 0x76, 0x0e, 0x42, 0x67, 0x01, 0x7c, 0x3c, 0x18, 0x62, 0x27, 0x88, 0xfc, 0x4a, 0x0c, 0x82, 0x96, 0x60,
0x3c, 0x77, 0xd8, 0xf5, 0x77, 0x0d, 0xcf, 0xec, 0xda, 0xd8, 0x30, 0xb1, 0x47, 0xa9, 0xaf, 0xe8, 0x6e, 0xc7, 0x73, 0x87, 0x5d, 0x7f, 0xd7, 0xf0, 0xcc, 0xae, 0x8d, 0x0d, 0x13, 0x7b, 0x94, 0xfa,
0xb3, 0x64, 0xa0, 0x43, 0xe0, 0x77, 0x28, 0x18, 0x5d, 0x83, 0xb2, 0xdf, 0x77, 0x47, 0x98, 0xca, 0x8a, 0x3e, 0x4b, 0x06, 0x3a, 0x04, 0x7e, 0x87, 0x82, 0xd1, 0x35, 0x28, 0xfb, 0x7d, 0x77, 0x84,
0xa0, 0xb9, 0x7a, 0x66, 0x39, 0xeb, 0x77, 0x97, 0xd7, 0x8d, 0xc0, 0xe8, 0x90, 0x49, 0x3a, 0x9b, 0xa9, 0x0c, 0x9a, 0xab, 0x67, 0x96, 0xb3, 0x7e, 0x77, 0x79, 0xdd, 0x08, 0x8c, 0x0e, 0x99, 0xa4,
0xab, 0x7d, 0xb9, 0xc0, 0x94, 0xf0, 0x73, 0x6e, 0xd3, 0x31, 0x45, 0x2d, 0x3f, 0x1f, 0x45, 0x9d, 0xb3, 0xb9, 0xda, 0x97, 0x0b, 0x4c, 0x09, 0x3f, 0xe7, 0x36, 0x1d, 0x53, 0xd4, 0xf2, 0xf3, 0x51,
0x96, 0x29, 0xea, 0x2f, 0x22, 0x45, 0xfd, 0xbc, 0x33, 0x24, 0x52, 0xe6, 0x72, 0x42, 0x99, 0x7f, 0xd4, 0x69, 0x99, 0xa2, 0xfe, 0x22, 0x52, 0xd4, 0xcf, 0x3b, 0x43, 0x22, 0x65, 0x2e, 0x27, 0x94,
0xa0, 0xc0, 0x0b, 0x1b, 0x38, 0x08, 0xc9, 0x27, 0xba, 0x89, 0x3f, 0xa7, 0x8e, 0xfa, 0x63, 0x05, 0xf9, 0x07, 0x0a, 0xbc, 0xb0, 0x81, 0x83, 0x90, 0x7c, 0xa2, 0x9b, 0xf8, 0x73, 0xea, 0xa8, 0x3f,
0xda, 0x32, 0x5a, 0x8f, 0xe3, 0xac, 0x1f, 0xc2, 0x42, 0x88, 0xa3, 0x6b, 0x62, 0xbf, 0xef, 0x59, 0x56, 0xa0, 0x2d, 0xa3, 0xf5, 0x38, 0xce, 0xfa, 0x21, 0x2c, 0x84, 0x38, 0xba, 0x26, 0xf6, 0xfb,
0x23, 0x2a, 0x46, 0x6a, 0x7e, 0xb5, 0xd5, 0x0b, 0x32, 0xb3, 0x48, 0x53, 0x70, 0x32, 0xdc, 0x62, 0x9e, 0x35, 0xa2, 0x62, 0xa4, 0xe6, 0x57, 0x5b, 0xbd, 0x20, 0x33, 0x8b, 0x34, 0x05, 0x27, 0xc3,
0x3d, 0xb6, 0x83, 0xf6, 0x55, 0x05, 0x4e, 0x12, 0x73, 0xe7, 0xf6, 0xe9, 0xec, 0xb8, 0x47, 0xe7, 0x2d, 0xd6, 0x63, 0x3b, 0x68, 0x5f, 0x55, 0xe0, 0x24, 0x31, 0x77, 0x6e, 0x9f, 0xce, 0x8e, 0x7b,
0x6b, 0xd2, 0xf2, 0x0b, 0x19, 0xcb, 0x9f, 0x80, 0xc7, 0x34, 0xf3, 0x49, 0xd3, 0x73, 0x1c, 0xde, 0x74, 0xbe, 0x26, 0x2d, 0xbf, 0x90, 0xb1, 0xfc, 0x09, 0x78, 0x4c, 0x33, 0x9f, 0x34, 0x3d, 0xc7,
0xbd, 0x01, 0x65, 0xcb, 0xd9, 0x71, 0x05, 0xab, 0xce, 0xc9, 0x58, 0x15, 0x47, 0xc6, 0x66, 0x6b, 0xe1, 0xdd, 0x1b, 0x50, 0xb6, 0x9c, 0x1d, 0x57, 0xb0, 0xea, 0x9c, 0x8c, 0x55, 0x71, 0x64, 0x6c,
0x0e, 0xa3, 0x22, 0x72, 0x45, 0xc7, 0x50, 0xb7, 0xf4, 0xb1, 0x0b, 0x92, 0x63, 0x7f, 0x45, 0x81, 0xb6, 0xe6, 0x30, 0x2a, 0x22, 0x57, 0x74, 0x0c, 0x75, 0x4b, 0x1f, 0xbb, 0x20, 0x39, 0xf6, 0x57,
0x53, 0x19, 0x84, 0xc7, 0x39, 0xf7, 0xdb, 0x30, 0x4d, 0x1d, 0xac, 0x38, 0xf8, 0x45, 0xe9, 0xc1, 0x14, 0x38, 0x95, 0x41, 0x78, 0x9c, 0x73, 0xbf, 0x0d, 0xd3, 0xd4, 0xc1, 0x8a, 0x83, 0x5f, 0x94,
0x63, 0xe8, 0xee, 0x58, 0x7e, 0xa0, 0xf3, 0x35, 0x9a, 0x0b, 0x6a, 0x7a, 0x8c, 0xb8, 0x7e, 0xee, 0x1e, 0x3c, 0x86, 0xee, 0x8e, 0xe5, 0x07, 0x3a, 0x5f, 0xa3, 0xb9, 0xa0, 0xa6, 0xc7, 0x88, 0xeb,
0xf6, 0xbb, 0x8e, 0x31, 0x64, 0x0c, 0xa8, 0xea, 0x35, 0x0e, 0xdb, 0x32, 0x86, 0x18, 0xbd, 0x00, 0xe7, 0x6e, 0xbf, 0xeb, 0x18, 0x43, 0xc6, 0x80, 0xaa, 0x5e, 0xe3, 0xb0, 0x2d, 0x63, 0x88, 0xd1,
0x15, 0x62, 0xb2, 0x5d, 0xcb, 0x14, 0xe2, 0x9f, 0xa1, 0x26, 0x6c, 0xfa, 0xe8, 0x0c, 0x00, 0x1d, 0x0b, 0x50, 0x21, 0x26, 0xdb, 0xb5, 0x4c, 0x21, 0xfe, 0x19, 0x6a, 0xc2, 0xa6, 0x8f, 0xce, 0x00,
0x32, 0x4c, 0xd3, 0x63, 0x51, 0xa1, 0xaa, 0x57, 0x09, 0xe4, 0x06, 0x01, 0x68, 0x5f, 0x57, 0xa0, 0xd0, 0x21, 0xc3, 0x34, 0x3d, 0x16, 0x15, 0xaa, 0x7a, 0x95, 0x40, 0x6e, 0x10, 0x80, 0xf6, 0x75,
0x4e, 0x7c, 0xf6, 0x5d, 0x1c, 0x18, 0x44, 0x0e, 0xe8, 0x2d, 0xa8, 0xda, 0xae, 0x61, 0x76, 0x83, 0x05, 0xea, 0xc4, 0x67, 0xdf, 0xc5, 0x81, 0x41, 0xe4, 0x80, 0xde, 0x82, 0xaa, 0xed, 0x1a, 0x66,
0xfd, 0x11, 0x43, 0xd5, 0x4c, 0xf3, 0x9a, 0x1d, 0x81, 0x2c, 0xba, 0xb7, 0x3f, 0xc2, 0x7a, 0xc5, 0x37, 0xd8, 0x1f, 0x31, 0x54, 0xcd, 0x34, 0xaf, 0xd9, 0x11, 0xc8, 0xa2, 0x7b, 0xfb, 0x23, 0xac,
0xe6, 0xbf, 0x26, 0xe1, 0x77, 0xc6, 0x94, 0x8b, 0x12, 0x53, 0xfe, 0xa8, 0x0c, 0x0b, 0xff, 0x69, 0x57, 0x6c, 0xfe, 0x6b, 0x12, 0x7e, 0x67, 0x4c, 0xb9, 0x28, 0x31, 0xe5, 0x8f, 0xca, 0xb0, 0xf0,
0x04, 0xfd, 0xdd, 0xf5, 0xa1, 0x08, 0x6e, 0x47, 0x57, 0x82, 0xc8, 0xb7, 0x15, 0xe2, 0xbe, 0xed, 0x9f, 0x46, 0xd0, 0xdf, 0x5d, 0x1f, 0x8a, 0xe0, 0x76, 0x74, 0x25, 0x88, 0x7c, 0x5b, 0x21, 0xee,
0xb9, 0xf9, 0xce, 0x50, 0xcf, 0xcb, 0x32, 0x3d, 0x27, 0x05, 0xc6, 0xf2, 0x03, 0x2e, 0xaa, 0x98, 0xdb, 0x9e, 0x9b, 0xef, 0x0c, 0xf5, 0xbc, 0x2c, 0xd3, 0x73, 0x52, 0x60, 0x2c, 0x3f, 0xe0, 0xa2,
0x9e, 0xc7, 0x62, 0xd0, 0xf4, 0x51, 0x62, 0xd0, 0x1a, 0x34, 0xf0, 0xd3, 0xbe, 0x3d, 0x26, 0x32, 0x8a, 0xe9, 0x79, 0x2c, 0x06, 0x4d, 0x1f, 0x25, 0x06, 0xad, 0x41, 0x03, 0x3f, 0xed, 0xdb, 0x63,
0xa7, 0xd8, 0x67, 0x28, 0xf6, 0xb3, 0x12, 0xec, 0x71, 0x23, 0xab, 0xf3, 0x45, 0x9b, 0x9c, 0x06, 0x22, 0x73, 0x8a, 0x7d, 0x86, 0x62, 0x3f, 0x2b, 0xc1, 0x1e, 0x37, 0xb2, 0x3a, 0x5f, 0xb4, 0xc9,
0x26, 0xea, 0x21, 0x0e, 0x8c, 0x56, 0x85, 0x92, 0x71, 0x3e, 0x4f, 0xd4, 0x42, 0x3f, 0x98, 0xb8, 0x69, 0x60, 0xa2, 0x1e, 0xe2, 0xc0, 0x68, 0x55, 0x28, 0x19, 0xe7, 0xf3, 0x44, 0x2d, 0xf4, 0x83,
0xc9, 0x17, 0x3a, 0x0d, 0x55, 0x1e, 0xf1, 0x36, 0xd7, 0x5b, 0x55, 0xca, 0xbe, 0x08, 0x80, 0x0c, 0x89, 0x9b, 0x7c, 0xa1, 0xd3, 0x50, 0xe5, 0x11, 0x6f, 0x73, 0xbd, 0x55, 0xa5, 0xec, 0x8b, 0x00,
0x68, 0x70, 0x0f, 0xc4, 0x29, 0x04, 0x4a, 0xe1, 0xdb, 0x32, 0x04, 0x72, 0x61, 0xc7, 0x29, 0xf7, 0xc8, 0x80, 0x06, 0xf7, 0x40, 0x9c, 0x42, 0xa0, 0x14, 0xbe, 0x2d, 0x43, 0x20, 0x17, 0x76, 0x9c,
0xdf, 0x75, 0x02, 0x6f, 0x5f, 0xaf, 0xfb, 0x31, 0x10, 0x29, 0x6a, 0xdc, 0x9d, 0x1d, 0xdb, 0x72, 0x72, 0xff, 0x5d, 0x27, 0xf0, 0xf6, 0xf5, 0xba, 0x1f, 0x03, 0x91, 0xa2, 0xc6, 0xdd, 0xd9, 0xb1,
0xf0, 0x16, 0x93, 0x70, 0x8d, 0x12, 0x91, 0x04, 0xb6, 0xbb, 0x30, 0x97, 0xd9, 0x08, 0xa9, 0x50, 0x2d, 0x07, 0x6f, 0x31, 0x09, 0xd7, 0x28, 0x11, 0x49, 0x60, 0xbb, 0x0b, 0x73, 0x99, 0x8d, 0x90,
0x7c, 0x84, 0xf7, 0xa9, 0x1a, 0x15, 0x75, 0xf2, 0x13, 0xbd, 0x0e, 0xe5, 0x3d, 0xc3, 0x1e, 0x63, 0x0a, 0xc5, 0x47, 0x78, 0x9f, 0xaa, 0x51, 0x51, 0x27, 0x3f, 0xd1, 0xeb, 0x50, 0xde, 0x33, 0xec,
0xaa, 0x26, 0x87, 0x73, 0x92, 0x4d, 0xfe, 0xe7, 0xc2, 0x75, 0x45, 0xfb, 0xbe, 0x02, 0x27, 0xef, 0x31, 0xa6, 0x6a, 0x72, 0x38, 0x27, 0xd9, 0xe4, 0x7f, 0x2e, 0x5c, 0x57, 0xb4, 0xef, 0x2b, 0x70,
0x3b, 0xfe, 0xb8, 0x17, 0x9e, 0xe0, 0xb3, 0xd1, 0xd6, 0xb4, 0x9f, 0x28, 0x65, 0xfc, 0x84, 0xf6, 0xf2, 0xbe, 0xe3, 0x8f, 0x7b, 0xe1, 0x09, 0x3e, 0x1b, 0x6d, 0x4d, 0xfb, 0x89, 0x52, 0xc6, 0x4f,
0xf3, 0x12, 0xcc, 0xf2, 0x53, 0x10, 0xa1, 0x52, 0x83, 0x3f, 0x0d, 0xd5, 0x30, 0x54, 0x70, 0x86, 0x68, 0x3f, 0x2f, 0xc1, 0x2c, 0x3f, 0x05, 0x11, 0x2a, 0x35, 0xf8, 0xd3, 0x50, 0x0d, 0x43, 0x05,
0x44, 0x00, 0x74, 0x1e, 0x6a, 0x31, 0x75, 0xe7, 0x54, 0xc5, 0x41, 0x13, 0x91, 0x26, 0x02, 0x7f, 0x67, 0x48, 0x04, 0x40, 0xe7, 0xa1, 0x16, 0x53, 0x77, 0x4e, 0x55, 0x1c, 0x34, 0x11, 0x69, 0x22,
0x29, 0x16, 0xf8, 0xcf, 0x00, 0xec, 0xd8, 0x63, 0x7f, 0xb7, 0x1b, 0x58, 0x43, 0xcc, 0x13, 0x8f, 0xf0, 0x97, 0x62, 0x81, 0xff, 0x0c, 0xc0, 0x8e, 0x3d, 0xf6, 0x77, 0xbb, 0x81, 0x35, 0xc4, 0x3c,
0x2a, 0x85, 0xdc, 0xb3, 0x86, 0x18, 0xdd, 0x80, 0x7a, 0xcf, 0x72, 0x6c, 0x77, 0xd0, 0x1d, 0x19, 0xf1, 0xa8, 0x52, 0xc8, 0x3d, 0x6b, 0x88, 0xd1, 0x0d, 0xa8, 0xf7, 0x2c, 0xc7, 0x76, 0x07, 0xdd,
0xc1, 0xae, 0xdf, 0x9a, 0xce, 0x55, 0xf0, 0x5b, 0x16, 0xb6, 0xcd, 0x9b, 0x74, 0xae, 0x5e, 0x63, 0x91, 0x11, 0xec, 0xfa, 0xad, 0xe9, 0x5c, 0x05, 0xbf, 0x65, 0x61, 0xdb, 0xbc, 0x49, 0xe7, 0xea,
0x6b, 0xb6, 0xc9, 0x12, 0x74, 0x16, 0x6a, 0xce, 0x78, 0xd8, 0x75, 0x77, 0xba, 0x9e, 0xfb, 0x84, 0x35, 0xb6, 0x66, 0x9b, 0x2c, 0x41, 0x67, 0xa1, 0xe6, 0x8c, 0x87, 0x5d, 0x77, 0xa7, 0xeb, 0xb9,
0x98, 0x08, 0x45, 0xe1, 0x8c, 0x87, 0xef, 0xef, 0xe8, 0xee, 0x13, 0xe2, 0xaa, 0xab, 0xc4, 0x69, 0x4f, 0x88, 0x89, 0x50, 0x14, 0xce, 0x78, 0xf8, 0xfe, 0x8e, 0xee, 0x3e, 0x21, 0xae, 0xba, 0x4a,
0xfb, 0xb6, 0x3b, 0xf0, 0x5b, 0x95, 0x89, 0xf6, 0x8f, 0x16, 0x90, 0xd5, 0x26, 0xb6, 0x03, 0x83, 0x9c, 0xb6, 0x6f, 0xbb, 0x03, 0xbf, 0x55, 0x99, 0x68, 0xff, 0x68, 0x01, 0x59, 0x6d, 0x62, 0x3b,
0xae, 0xae, 0x4e, 0xb6, 0x3a, 0x5c, 0x80, 0x2e, 0x43, 0xb3, 0xef, 0x0e, 0x47, 0x06, 0xe5, 0xd0, 0x30, 0xe8, 0xea, 0xea, 0x64, 0xab, 0xc3, 0x05, 0xe8, 0x32, 0x34, 0xfb, 0xee, 0x70, 0x64, 0x50,
0x2d, 0xcf, 0x1d, 0x52, 0xfb, 0x28, 0xea, 0x29, 0x28, 0x5a, 0x83, 0x9a, 0xe5, 0x98, 0xf8, 0x29, 0x0e, 0xdd, 0xf2, 0xdc, 0x21, 0xb5, 0x8f, 0xa2, 0x9e, 0x82, 0xa2, 0x35, 0xa8, 0x59, 0x8e, 0x89,
0x37, 0xa2, 0x1a, 0xc5, 0xa3, 0xc9, 0x8c, 0x88, 0x22, 0xda, 0x24, 0x73, 0xa9, 0x82, 0x82, 0x25, 0x9f, 0x72, 0x23, 0xaa, 0x51, 0x3c, 0x9a, 0xcc, 0x88, 0x28, 0xa2, 0x4d, 0x32, 0x97, 0x2a, 0x28,
0x7e, 0xfa, 0x44, 0x33, 0x84, 0x2d, 0xfa, 0xd6, 0x87, 0xb8, 0x55, 0x67, 0x52, 0xe4, 0xb0, 0x8e, 0x58, 0xe2, 0xa7, 0x4f, 0x34, 0x43, 0xd8, 0xa2, 0x6f, 0x7d, 0x88, 0x5b, 0x75, 0x26, 0x45, 0x0e,
0xf5, 0x21, 0x26, 0x49, 0xad, 0xe5, 0xf8, 0xd8, 0x0b, 0x44, 0x89, 0xd1, 0x6a, 0x50, 0xf5, 0x69, 0xeb, 0x58, 0x1f, 0x62, 0x92, 0xd4, 0x5a, 0x8e, 0x8f, 0xbd, 0x40, 0x94, 0x18, 0xad, 0x06, 0x55,
0x30, 0x28, 0x57, 0x6c, 0xed, 0x77, 0x05, 0x68, 0x26, 0x11, 0xa1, 0x16, 0xcc, 0xec, 0x50, 0x88, 0x9f, 0x06, 0x83, 0x72, 0xc5, 0xd6, 0xfe, 0x5c, 0x80, 0x66, 0x12, 0x11, 0x6a, 0xc1, 0xcc, 0x0e,
0xd0, 0x1e, 0xf1, 0x49, 0xd0, 0x62, 0x87, 0x54, 0xfb, 0x5d, 0x4a, 0x0b, 0x55, 0x9e, 0x8a, 0x5e, 0x85, 0x08, 0xed, 0x11, 0x9f, 0x04, 0x2d, 0x76, 0x48, 0xb5, 0xdf, 0xa5, 0xb4, 0x50, 0xe5, 0xa9,
0x63, 0x30, 0xba, 0x01, 0x51, 0x02, 0x76, 0x3c, 0xaa, 0xb1, 0x45, 0x8a, 0xb2, 0x4a, 0x21, 0x34, 0xe8, 0x35, 0x06, 0xa3, 0x1b, 0x10, 0x25, 0x60, 0xc7, 0xa3, 0x1a, 0x5b, 0xa4, 0x28, 0xab, 0x14,
0xae, 0xb5, 0x60, 0x86, 0x1d, 0x43, 0xa8, 0x8e, 0xf8, 0x24, 0x23, 0xbd, 0xb1, 0x45, 0xb1, 0x32, 0x42, 0xe3, 0x5a, 0x0b, 0x66, 0xd8, 0x31, 0x84, 0xea, 0x88, 0x4f, 0x32, 0xd2, 0x1b, 0x5b, 0x14,
0xd5, 0x11, 0x9f, 0x68, 0x1d, 0xea, 0x6c, 0xcb, 0x91, 0xe1, 0x19, 0x43, 0xa1, 0x38, 0x2f, 0x49, 0x2b, 0x53, 0x1d, 0xf1, 0x89, 0xd6, 0xa1, 0xce, 0xb6, 0x1c, 0x19, 0x9e, 0x31, 0x14, 0x8a, 0xf3,
0x8d, 0xef, 0x36, 0xde, 0x7f, 0x40, 0xec, 0x78, 0xdb, 0xb0, 0x3c, 0x9d, 0x31, 0x7a, 0x9b, 0xae, 0x92, 0xd4, 0xf8, 0x6e, 0xe3, 0xfd, 0x07, 0xc4, 0x8e, 0xb7, 0x0d, 0xcb, 0xd3, 0x19, 0xa3, 0xb7,
0x42, 0x8b, 0xa0, 0xb2, 0x5d, 0x76, 0x2c, 0x1b, 0x73, 0x15, 0x9c, 0xa1, 0xc1, 0xb3, 0x49, 0xe1, 0xe9, 0x2a, 0xb4, 0x08, 0x2a, 0xdb, 0x65, 0xc7, 0xb2, 0x31, 0x57, 0xc1, 0x19, 0x1a, 0x3c, 0x9b,
0xb7, 0x2c, 0x1b, 0x33, 0x2d, 0x0b, 0x8f, 0x40, 0x59, 0x5b, 0x61, 0x4a, 0x46, 0x21, 0x94, 0xb1, 0x14, 0x7e, 0xcb, 0xb2, 0x31, 0xd3, 0xb2, 0xf0, 0x08, 0x94, 0xb5, 0x15, 0xa6, 0x64, 0x14, 0x42,
0x17, 0xa0, 0xc1, 0x86, 0xf7, 0xb0, 0xe7, 0x5b, 0xae, 0xc3, 0x3d, 0x25, 0xa3, 0xf1, 0x01, 0x83, 0x19, 0x7b, 0x01, 0x1a, 0x6c, 0x78, 0x0f, 0x7b, 0xbe, 0xe5, 0x3a, 0xdc, 0x53, 0x32, 0x1a, 0x1f,
0x69, 0xdf, 0x28, 0xc1, 0x3c, 0x31, 0x48, 0x6e, 0x9b, 0xc7, 0x08, 0x77, 0x67, 0x00, 0x4c, 0x3f, 0x30, 0x18, 0x8d, 0xdf, 0xe3, 0x21, 0x53, 0x53, 0x60, 0xc7, 0x71, 0xc6, 0x43, 0xa2, 0xa4, 0xda,
0xe8, 0x26, 0x9c, 0x48, 0xd5, 0xf4, 0x03, 0xe6, 0x0c, 0xd1, 0x5b, 0x22, 0x5a, 0x15, 0xf3, 0x13, 0x37, 0x4a, 0x30, 0x4f, 0x6c, 0x95, 0x9b, 0xed, 0x31, 0x22, 0xe1, 0x19, 0x00, 0xd3, 0x0f, 0xba,
0xd8, 0x94, 0x83, 0xc8, 0x46, 0xac, 0x23, 0x95, 0xf7, 0x17, 0xa0, 0xe1, 0xbb, 0x63, 0xaf, 0x8f, 0x09, 0xff, 0x52, 0x35, 0xfd, 0x80, 0xf9, 0x49, 0xf4, 0x96, 0x08, 0x64, 0xc5, 0xfc, 0xdc, 0x36,
0xbb, 0x89, 0x52, 0xa3, 0xce, 0x80, 0x5b, 0x72, 0x37, 0x37, 0x2d, 0x6d, 0x33, 0xc4, 0xa2, 0xd6, 0xe5, 0x3b, 0xb2, 0xc1, 0xec, 0x48, 0x95, 0xff, 0x05, 0x68, 0xf8, 0xee, 0xd8, 0xeb, 0xe3, 0x6e,
0xcc, 0xf1, 0xa2, 0x56, 0x25, 0x1d, 0xb5, 0x6e, 0xc3, 0x2c, 0xb5, 0xd1, 0xee, 0xc8, 0xf5, 0x59, 0xa2, 0x0a, 0xa9, 0x33, 0xe0, 0x96, 0xdc, 0x03, 0x4e, 0x4b, 0x3b, 0x10, 0xb1, 0x80, 0x36, 0x73,
0xc5, 0xc6, 0x4d, 0x5b, 0xcb, 0xa9, 0xd8, 0xef, 0xfa, 0x83, 0x6d, 0x3e, 0x55, 0x6f, 0xd2, 0xa5, 0xbc, 0x80, 0x56, 0x49, 0x07, 0xb4, 0xdb, 0x30, 0x4b, 0xcd, 0xb7, 0x3b, 0x72, 0x7d, 0x56, 0xcc,
0xe2, 0xd3, 0x27, 0x3a, 0x2a, 0x84, 0x0e, 0x4c, 0x47, 0xf9, 0x27, 0x61, 0x86, 0x83, 0xb1, 0xd9, 0x71, 0xab, 0xd7, 0x72, 0x8a, 0xf9, 0xbb, 0xfe, 0x60, 0x9b, 0x4f, 0xd5, 0x9b, 0x74, 0xa9, 0xf8,
0x0d, 0x3c, 0xc3, 0xf1, 0x77, 0xb0, 0x47, 0x23, 0x57, 0x45, 0xaf, 0x13, 0xe0, 0x3d, 0x0e, 0xd3, 0xf4, 0x89, 0xfa, 0x0a, 0x7d, 0xe0, 0xf2, 0xe6, 0x9f, 0x84, 0x19, 0x0e, 0xc6, 0x66, 0x37, 0xf0,
0x7e, 0x53, 0x80, 0x05, 0x5e, 0x40, 0x1e, 0x5f, 0x2f, 0xf2, 0x02, 0x8b, 0xf0, 0xcc, 0xc5, 0x03, 0x0c, 0xc7, 0xdf, 0xc1, 0x1e, 0x0d, 0x6a, 0x15, 0xbd, 0x4e, 0x80, 0xf7, 0x38, 0x4c, 0xfb, 0x4d,
0x4a, 0xb2, 0xd2, 0x04, 0xa9, 0x51, 0x59, 0x92, 0x1a, 0x25, 0xcb, 0x92, 0xe9, 0x4c, 0x59, 0x12, 0x01, 0x16, 0x78, 0x6d, 0x79, 0x7c, 0xbd, 0xc8, 0x8b, 0x39, 0xc2, 0x69, 0x17, 0x0f, 0xa8, 0xd6,
0x36, 0x19, 0x66, 0x26, 0x6f, 0x32, 0xa0, 0x13, 0x50, 0xa6, 0xb9, 0x32, 0x95, 0x5d, 0x55, 0x67, 0x4a, 0x13, 0x64, 0x4d, 0x65, 0x49, 0xd6, 0x94, 0xac, 0x58, 0xa6, 0x33, 0x15, 0x4b, 0xd8, 0x7f,
0x1f, 0x93, 0x31, 0xf4, 0x4f, 0x0a, 0x34, 0x3a, 0xd8, 0xf0, 0xfa, 0xbb, 0x82, 0x8f, 0x6f, 0xc6, 0x98, 0x99, 0xbc, 0xff, 0x80, 0x4e, 0x40, 0x99, 0xa6, 0xd1, 0x54, 0x76, 0x55, 0x9d, 0x7d, 0x4c,
0x9b, 0x32, 0x17, 0x73, 0x44, 0x9c, 0x58, 0xf2, 0xc5, 0xe9, 0xc6, 0xfc, 0x59, 0x81, 0xfa, 0x7f, 0xc6, 0xd0, 0x3f, 0x2a, 0xd0, 0xe8, 0x60, 0xc3, 0xeb, 0xef, 0x0a, 0x3e, 0xbe, 0x19, 0xef, 0xd7,
0x90, 0x21, 0x71, 0xd8, 0xeb, 0xf1, 0xc3, 0x5e, 0xce, 0x39, 0xac, 0x8e, 0x03, 0xcf, 0xc2, 0x7b, 0x5c, 0xcc, 0x11, 0x71, 0x62, 0xc9, 0x17, 0xa7, 0x51, 0xf3, 0x27, 0x05, 0xea, 0xff, 0x41, 0x86,
0xf8, 0x0b, 0x77, 0xdc, 0x5f, 0x29, 0xd0, 0xee, 0xec, 0x3b, 0x7d, 0x9d, 0xd9, 0xf2, 0xf1, 0x2d, 0xc4, 0x61, 0xaf, 0xc7, 0x0f, 0x7b, 0x39, 0xe7, 0xb0, 0x3a, 0x0e, 0x3c, 0x0b, 0xef, 0xe1, 0x2f,
0xe6, 0x02, 0x34, 0xf6, 0x12, 0xf9, 0x54, 0x81, 0x2a, 0x5c, 0x7d, 0x2f, 0x5e, 0x78, 0xe9, 0xa0, 0xdc, 0x71, 0x7f, 0xa5, 0x40, 0xbb, 0xb3, 0xef, 0xf4, 0x75, 0x66, 0xcb, 0xc7, 0xb7, 0x98, 0x0b,
0x8a, 0x5e, 0x10, 0x3f, 0xac, 0x70, 0xad, 0x2f, 0xcb, 0xa8, 0x4e, 0x11, 0x47, 0x5d, 0xd3, 0xac, 0xd0, 0xd8, 0x4b, 0xa4, 0x5a, 0x05, 0xaa, 0x70, 0xf5, 0xbd, 0x78, 0x4d, 0xa6, 0x83, 0x2a, 0xda,
0x97, 0x04, 0x6a, 0x5f, 0x53, 0x60, 0x5e, 0x32, 0x11, 0x9d, 0x82, 0x19, 0x5e, 0xe4, 0xf1, 0x40, 0x44, 0xfc, 0xb0, 0xc2, 0xb5, 0xbe, 0x2c, 0xa3, 0x3a, 0x45, 0x1c, 0x75, 0x4d, 0xb3, 0x5e, 0x12,
0xcb, 0x6c, 0xd8, 0x24, 0xe2, 0x89, 0xda, 0x14, 0x96, 0x99, 0x4d, 0xd2, 0x4c, 0x74, 0x0e, 0x6a, 0xa8, 0x7d, 0x4d, 0x81, 0x79, 0xc9, 0x44, 0x74, 0x0a, 0x66, 0x78, 0xfd, 0xc7, 0x63, 0x30, 0xb3,
0x61, 0x36, 0x6e, 0x66, 0xe4, 0x63, 0xfa, 0xa8, 0x0d, 0x15, 0xee, 0x9c, 0x44, 0x99, 0x13, 0x7e, 0x61, 0x93, 0x88, 0x27, 0xea, 0x60, 0x58, 0x66, 0x36, 0x7f, 0x33, 0xd1, 0x39, 0xa8, 0x85, 0x89,
0x6b, 0x3f, 0x53, 0x60, 0xe1, 0x3d, 0xc3, 0x31, 0xdd, 0x9d, 0x9d, 0xe3, 0xb3, 0x75, 0x0d, 0x12, 0xba, 0x99, 0x91, 0x8f, 0xe9, 0xa3, 0x36, 0x54, 0xb8, 0x73, 0x12, 0x15, 0x50, 0xf8, 0xad, 0xfd,
0x49, 0xfc, 0xa4, 0xed, 0x81, 0x64, 0xe6, 0x7f, 0x05, 0xe6, 0x3c, 0xe6, 0x19, 0xcd, 0x24, 0xdf, 0x4c, 0x81, 0x85, 0xf7, 0x0c, 0xc7, 0x74, 0x77, 0x76, 0x8e, 0xcf, 0xd6, 0x35, 0x48, 0xe4, 0xf7,
0x8b, 0xba, 0x2a, 0x06, 0x42, 0x7e, 0x7e, 0x54, 0x00, 0x44, 0x82, 0xc1, 0x4d, 0xc3, 0x36, 0x9c, 0x93, 0x76, 0x0e, 0x92, 0x45, 0xc1, 0x15, 0x98, 0xf3, 0x98, 0x67, 0x34, 0x93, 0x7c, 0x2f, 0xea,
0x3e, 0x3e, 0x3a, 0xe9, 0x97, 0xa0, 0x99, 0x08, 0x61, 0xe1, 0x2d, 0x4a, 0x3c, 0x86, 0xf9, 0xe8, 0xaa, 0x18, 0x08, 0xf9, 0xf9, 0x51, 0x01, 0x10, 0x09, 0x06, 0x37, 0x0d, 0xdb, 0x70, 0xfa, 0xf8,
0x36, 0x34, 0x7b, 0x0c, 0x55, 0xd7, 0xc3, 0x86, 0xef, 0x3a, 0xd4, 0xb9, 0x36, 0xe5, 0x9d, 0x80, 0xe8, 0xa4, 0x5f, 0x82, 0x66, 0x22, 0x84, 0x85, 0x17, 0x2c, 0xf1, 0x18, 0xe6, 0xa3, 0xdb, 0xd0,
0x7b, 0x9e, 0x35, 0x18, 0x60, 0x6f, 0xcd, 0x75, 0x4c, 0x16, 0x44, 0x1a, 0x3d, 0x41, 0x26, 0x59, 0xec, 0x31, 0x54, 0x5d, 0x0f, 0x1b, 0xbe, 0xeb, 0x50, 0xe7, 0xda, 0x94, 0x37, 0x09, 0xee, 0x79,
0x4a, 0x04, 0x17, 0xc5, 0x73, 0x21, 0x1a, 0x08, 0x03, 0x3a, 0x65, 0x85, 0x8f, 0x0d, 0x3b, 0x62, 0xd6, 0x60, 0x80, 0xbd, 0x35, 0xd7, 0x31, 0x59, 0x10, 0x69, 0xf4, 0x04, 0x99, 0x64, 0x29, 0x11,
0x44, 0xe4, 0x8d, 0x55, 0x36, 0xd0, 0xc9, 0x6f, 0x04, 0x49, 0xe2, 0xab, 0xf6, 0x63, 0x05, 0x50, 0x5c, 0x14, 0xcf, 0x85, 0x68, 0x20, 0x0c, 0xe8, 0x94, 0x15, 0x3e, 0x36, 0xec, 0x88, 0x11, 0x91,
0x58, 0xc9, 0xd0, 0xca, 0x8c, 0x6a, 0x5f, 0x7a, 0xa9, 0x22, 0x09, 0x0a, 0xa7, 0xa1, 0x6a, 0x8a, 0x37, 0x56, 0xd9, 0x40, 0x27, 0xbf, 0x47, 0x24, 0x89, 0xaf, 0xda, 0x8f, 0x15, 0x40, 0x61, 0x91,
0x95, 0xdc, 0x5c, 0x22, 0x00, 0xf5, 0xd1, 0x94, 0xe8, 0x2e, 0x09, 0xc6, 0xd8, 0x14, 0x95, 0x02, 0x43, 0x8b, 0x36, 0xaa, 0x7d, 0xe9, 0xa5, 0x8a, 0x24, 0x28, 0x9c, 0x86, 0xaa, 0x29, 0x56, 0x72,
0x03, 0xde, 0xa1, 0xb0, 0x64, 0x78, 0x2e, 0xa5, 0xc3, 0x73, 0xbc, 0xcf, 0x51, 0x4e, 0xf4, 0x39, 0x73, 0x89, 0x00, 0xd4, 0x47, 0x53, 0xa2, 0xbb, 0x24, 0x18, 0x63, 0x53, 0x14, 0x11, 0x0c, 0x78,
0xb4, 0x8f, 0x0b, 0xa0, 0x52, 0x77, 0xb7, 0x16, 0x15, 0xdb, 0x13, 0x11, 0x7d, 0x01, 0x1a, 0xfc, 0x87, 0xc2, 0x92, 0xe1, 0xb9, 0x94, 0x0e, 0xcf, 0xf1, 0x16, 0x48, 0x39, 0xd1, 0x02, 0xd1, 0x3e,
0x9e, 0x31, 0x41, 0x78, 0xfd, 0x71, 0x6c, 0x33, 0x74, 0x15, 0x4e, 0xb0, 0x49, 0x1e, 0xf6, 0xc7, 0x2e, 0x80, 0x4a, 0xdd, 0xdd, 0x5a, 0x54, 0x87, 0x4f, 0x44, 0xf4, 0x05, 0x68, 0xf0, 0x2b, 0xc8,
0x76, 0x94, 0x24, 0xb3, 0x8c, 0x15, 0x3d, 0x66, 0x7e, 0x96, 0x0c, 0x89, 0x15, 0xf7, 0x61, 0x61, 0x04, 0xe1, 0xf5, 0xc7, 0xb1, 0xcd, 0xd0, 0x55, 0x38, 0xc1, 0x26, 0x79, 0xd8, 0x1f, 0xdb, 0x51,
0x60, 0xbb, 0x3d, 0xc3, 0xee, 0x26, 0xc5, 0xc3, 0x64, 0x38, 0x81, 0xc6, 0x9f, 0x60, 0xcb, 0x3b, 0xfe, 0xcc, 0x92, 0x59, 0xf4, 0x98, 0xf9, 0x59, 0x32, 0x24, 0x56, 0xdc, 0x87, 0x85, 0x81, 0xed,
0x71, 0x19, 0xfa, 0x68, 0x83, 0x94, 0xd5, 0xf8, 0x51, 0x98, 0x9f, 0xf0, 0x16, 0xf6, 0x24, 0xe9, 0xf6, 0x0c, 0xbb, 0x9b, 0x14, 0x0f, 0x93, 0xe1, 0x04, 0x1a, 0x7f, 0x82, 0x2d, 0xef, 0xc4, 0x65,
0x49, 0x9d, 0x2c, 0x14, 0x5f, 0xda, 0x77, 0x14, 0x98, 0x4d, 0xb5, 0x2a, 0xd3, 0xc5, 0x9e, 0x92, 0xe8, 0xa3, 0x0d, 0x52, 0x71, 0xe3, 0x47, 0x61, 0x7e, 0xc2, 0xbb, 0xdb, 0x93, 0xa4, 0x27, 0x75,
0x2d, 0xf6, 0xae, 0x43, 0x99, 0x54, 0x40, 0xcc, 0x19, 0x36, 0xe5, 0x85, 0x48, 0x72, 0x57, 0x9d, 0xb2, 0x50, 0x7c, 0x69, 0xdf, 0x51, 0x60, 0x36, 0xd5, 0xc5, 0x4c, 0xd7, 0x81, 0x4a, 0xb6, 0x0e,
0x2d, 0x40, 0x2b, 0x30, 0x2f, 0xb9, 0xd4, 0xe2, 0x3a, 0x80, 0xb2, 0x77, 0x5a, 0xda, 0xef, 0x4b, 0xbc, 0x0e, 0x65, 0x52, 0x1c, 0x31, 0x67, 0xd8, 0x94, 0xd7, 0x28, 0xc9, 0x5d, 0x75, 0xb6, 0x00,
0x50, 0x8b, 0xf1, 0xe3, 0x90, 0x3a, 0x75, 0x92, 0xde, 0x53, 0xea, 0x78, 0xc5, 0xec, 0xf1, 0x72, 0xad, 0xc0, 0xbc, 0xe4, 0xbe, 0x8b, 0xeb, 0x00, 0xca, 0x5e, 0x77, 0x69, 0xbf, 0x2b, 0x41, 0x2d,
0x6e, 0x75, 0x88, 0xde, 0x0d, 0xf1, 0x90, 0x65, 0xf8, 0xbc, 0xdc, 0x18, 0xe2, 0x21, 0xcd, 0xef, 0xc6, 0x8f, 0x43, 0x4a, 0xd8, 0x49, 0xda, 0x52, 0xa9, 0xe3, 0x15, 0xb3, 0xc7, 0xcb, 0xb9, 0xf0,
0x89, 0x4a, 0x8e, 0x87, 0xac, 0xc2, 0x64, 0xe6, 0x34, 0xe3, 0x8c, 0x87, 0xb4, 0xbe, 0x4c, 0x16, 0x21, 0x7a, 0x37, 0xc4, 0x43, 0x96, 0xfc, 0xf3, 0x4a, 0x64, 0x88, 0x87, 0x34, 0xf5, 0x8f, 0x67,
0x37, 0x33, 0x07, 0x14, 0x37, 0x95, 0x64, 0x71, 0x93, 0xb0, 0xa3, 0x6a, 0xda, 0x8e, 0x26, 0x2d, 0xf5, 0xd3, 0x89, 0xac, 0x3e, 0x55, 0xf7, 0xcc, 0x1c, 0x50, 0xf7, 0x54, 0x92, 0x75, 0x4f, 0xc2,
0x1d, 0xaf, 0xc2, 0x7c, 0xdf, 0xc3, 0x46, 0x80, 0xcd, 0x9b, 0xfb, 0x6b, 0xe1, 0x10, 0xcf, 0x8c, 0x8e, 0xaa, 0x69, 0x3b, 0x9a, 0xb4, 0xaa, 0xbc, 0x0a, 0xf3, 0x7d, 0x0f, 0x1b, 0x01, 0x36, 0x6f,
0x64, 0x43, 0xe8, 0x56, 0xd4, 0xb3, 0x61, 0x52, 0xae, 0x53, 0x29, 0xcb, 0x6b, 0x27, 0x2e, 0x1b, 0xee, 0xaf, 0x85, 0x43, 0x3c, 0x33, 0x92, 0x0d, 0xa1, 0x5b, 0x51, 0x3b, 0x87, 0x49, 0xb9, 0x4e,
0x26, 0x64, 0xe1, 0x9e, 0xe9, 0x57, 0xba, 0x68, 0x6d, 0x1c, 0xa9, 0x68, 0x3d, 0x07, 0x35, 0x11, 0xa5, 0x2c, 0x2f, 0xab, 0xb8, 0x6c, 0x98, 0x90, 0x85, 0x7b, 0xa6, 0x5f, 0xe9, 0x7a, 0xb6, 0x71,
0x5a, 0x89, 0xb9, 0x37, 0x99, 0xe7, 0x13, 0xbe, 0xc0, 0xf4, 0x13, 0xce, 0x60, 0x36, 0xd9, 0xf4, 0xa4, 0x7a, 0xf6, 0x1c, 0xd4, 0x44, 0x68, 0x25, 0xe6, 0xde, 0x64, 0x9e, 0x4f, 0xf8, 0x02, 0xd3,
0x4c, 0x57, 0x9e, 0x6a, 0xa6, 0xf2, 0xd4, 0x7e, 0x5b, 0x84, 0x66, 0x54, 0xac, 0x4c, 0xec, 0x2d, 0x4f, 0x38, 0x83, 0xd9, 0x64, 0x3f, 0x34, 0x5d, 0x94, 0xaa, 0x99, 0xa2, 0x54, 0xfb, 0x6d, 0x11,
0x26, 0xb9, 0xbf, 0xdd, 0x02, 0x35, 0x8a, 0xc7, 0x94, 0x91, 0x07, 0xd6, 0x5b, 0xe9, 0x0b, 0x83, 0x9a, 0x51, 0xb1, 0x32, 0xb1, 0xb7, 0x98, 0xe4, 0x6a, 0x77, 0x0b, 0xd4, 0x28, 0x1e, 0x53, 0x46,
0xd9, 0x51, 0xca, 0x2c, 0x13, 0x2d, 0xd9, 0xd2, 0x33, 0xb5, 0x64, 0x8f, 0x79, 0xd5, 0x75, 0x0d, 0x1e, 0x58, 0x6f, 0xa5, 0xef, 0x12, 0x66, 0x47, 0x29, 0xb3, 0x4c, 0x74, 0x6b, 0x4b, 0xcf, 0xd4,
0x4e, 0x86, 0x71, 0x36, 0x71, 0x6c, 0x96, 0xcc, 0x9f, 0x10, 0x83, 0xdb, 0xf1, 0xe3, 0xe7, 0x58, 0xad, 0x3d, 0xe6, 0x2d, 0xd8, 0x35, 0x38, 0x19, 0xc6, 0xd9, 0xc4, 0xb1, 0x59, 0x32, 0x7f, 0x42,
0xfa, 0x4c, 0x9e, 0xa5, 0xa7, 0x25, 0x5d, 0xc9, 0x48, 0x3a, 0x7b, 0xe3, 0x56, 0x95, 0xdd, 0xb8, 0x0c, 0x6e, 0xc7, 0x8f, 0x9f, 0x63, 0xe9, 0x33, 0x79, 0x96, 0x9e, 0x96, 0x74, 0x25, 0x23, 0xe9,
0xdd, 0x87, 0x79, 0xda, 0x87, 0xf3, 0xfb, 0x9e, 0xd5, 0xc3, 0x61, 0x6a, 0x3a, 0x89, 0x58, 0xdb, 0xec, 0x65, 0x5c, 0x55, 0x76, 0x19, 0x77, 0x1f, 0xe6, 0x69, 0x8b, 0xce, 0xef, 0x7b, 0x56, 0x0f,
0x50, 0x49, 0x65, 0xb7, 0xe1, 0xb7, 0xf6, 0x25, 0x05, 0x16, 0xb2, 0xfb, 0x52, 0x8d, 0x89, 0xfc, 0x87, 0xa9, 0xe9, 0x24, 0x62, 0x6d, 0x43, 0x25, 0x95, 0xdd, 0x86, 0xdf, 0xda, 0x97, 0x14, 0x58,
0x85, 0x92, 0xf0, 0x17, 0xff, 0x05, 0xf3, 0xd1, 0xf6, 0xc9, 0xbc, 0x39, 0x27, 0x33, 0x94, 0x10, 0xc8, 0xee, 0x4b, 0x35, 0x26, 0xf2, 0x17, 0x4a, 0xc2, 0x5f, 0xfc, 0x17, 0xcc, 0x47, 0xdb, 0x27,
0xae, 0xa3, 0x68, 0x0f, 0x01, 0xd3, 0xfe, 0xa2, 0x84, 0xed, 0x4c, 0x02, 0x1b, 0xd0, 0x56, 0x2e, 0xf3, 0xe6, 0x9c, 0xcc, 0x50, 0x42, 0xb8, 0x8e, 0xa2, 0x3d, 0x04, 0x4c, 0xfb, 0x8b, 0x12, 0x76,
0x89, 0x61, 0xae, 0x63, 0x5b, 0x4e, 0x58, 0x5c, 0xf3, 0x33, 0x32, 0x20, 0x2f, 0xae, 0xdf, 0x83, 0x3a, 0x09, 0x6c, 0x40, 0xbb, 0xbc, 0x24, 0x86, 0xb9, 0x8e, 0x6d, 0x39, 0x61, 0x71, 0xcd, 0xcf,
0x59, 0x3e, 0x29, 0x0c, 0x45, 0x13, 0x26, 0x5f, 0x4d, 0xb6, 0x2e, 0x0c, 0x42, 0x97, 0xa0, 0xc9, 0xc8, 0x80, 0xbc, 0xb8, 0x7e, 0x0f, 0x66, 0xf9, 0xa4, 0x30, 0x14, 0x4d, 0x98, 0x7c, 0x35, 0xd9,
0x7b, 0xac, 0x02, 0x5f, 0x51, 0xd2, 0x79, 0x45, 0xff, 0x0e, 0xaa, 0x98, 0xf6, 0xac, 0xc1, 0x6f, 0xba, 0x30, 0x08, 0x5d, 0x82, 0x26, 0x6f, 0xbf, 0x0a, 0x7c, 0x45, 0x49, 0x53, 0x16, 0xfd, 0x3b,
0x96, 0x2f, 0x0c, 0x93, 0xb8, 0xff, 0x57, 0xa0, 0x95, 0x0c, 0x85, 0xb1, 0xe3, 0x3f, 0x7b, 0x2a, 0xa8, 0x62, 0xda, 0xb3, 0x06, 0xbf, 0x59, 0xbe, 0x30, 0x4c, 0xe2, 0xfe, 0x5f, 0x81, 0x56, 0x32,
0xf7, 0x2f, 0xc9, 0xdb, 0xa9, 0x4b, 0x07, 0xd0, 0x13, 0xe1, 0x11, 0x77, 0x54, 0x5b, 0xf4, 0xa6, 0x14, 0xc6, 0x8e, 0xff, 0xec, 0xa9, 0xdc, 0xbf, 0x24, 0x2f, 0xae, 0x2e, 0x1d, 0x40, 0x4f, 0x84,
0x91, 0x54, 0x20, 0xeb, 0x96, 0x1f, 0x78, 0x56, 0x6f, 0x7c, 0xac, 0x37, 0x08, 0xda, 0x4f, 0x0a, 0x47, 0x5c, 0x5f, 0x6d, 0xd1, 0x4b, 0x48, 0x52, 0x81, 0xac, 0x5b, 0x7e, 0xe0, 0x59, 0xbd, 0xf1,
0xf0, 0xa2, 0x74, 0xc3, 0xe3, 0xdc, 0x43, 0xe5, 0x15, 0xfc, 0x37, 0xa1, 0x92, 0xaa, 0x54, 0x2e, 0xb1, 0x9e, 0x27, 0x68, 0x3f, 0x29, 0xc0, 0x8b, 0xd2, 0x0d, 0x8f, 0x73, 0x45, 0x95, 0x57, 0xf0,
0x1f, 0x70, 0x78, 0xde, 0xa0, 0x62, 0x3d, 0x14, 0xb1, 0x8e, 0xec, 0x11, 0xea, 0x74, 0x29, 0x7f, 0xdf, 0x84, 0x4a, 0xaa, 0x52, 0xb9, 0x7c, 0xc0, 0xe1, 0x79, 0xef, 0x8a, 0xf5, 0x50, 0xc4, 0x3a,
0x0f, 0xae, 0xb4, 0x89, 0x3d, 0xc4, 0x3a, 0x74, 0x03, 0xea, 0xac, 0x0a, 0xec, 0xee, 0x59, 0xf8, 0xb2, 0x47, 0xa8, 0xd3, 0xa5, 0xfc, 0x3d, 0xb8, 0xd2, 0x26, 0xf6, 0x10, 0xeb, 0xd0, 0x0d, 0xa8,
0x89, 0xb8, 0x3e, 0x39, 0x2b, 0xf5, 0x6b, 0x74, 0xde, 0x03, 0x0b, 0x3f, 0xd1, 0x6b, 0x76, 0xf8, 0xb3, 0x2a, 0xb0, 0xbb, 0x67, 0xe1, 0x27, 0xe2, 0x66, 0xe5, 0xac, 0xd4, 0xaf, 0xd1, 0x79, 0x0f,
0xdb, 0xd7, 0x7e, 0x58, 0x00, 0x88, 0xc6, 0x48, 0x09, 0x1a, 0x19, 0x0c, 0xb7, 0x80, 0x18, 0x84, 0x2c, 0xfc, 0x44, 0xaf, 0xd9, 0xe1, 0x6f, 0x5f, 0xfb, 0x61, 0x01, 0x20, 0x1a, 0x23, 0x25, 0x68,
0xc4, 0xdb, 0x64, 0x8a, 0x27, 0x3e, 0x91, 0x1e, 0xf5, 0x47, 0x4d, 0xcb, 0x0f, 0x38, 0x5f, 0x56, 0x64, 0x30, 0xdc, 0x02, 0x62, 0x10, 0x12, 0x6f, 0x93, 0x29, 0x9e, 0xf8, 0x44, 0x7a, 0xd4, 0x3a,
0x0e, 0xa6, 0x45, 0xb0, 0x88, 0x88, 0x8c, 0xdd, 0x4e, 0x88, 0x12, 0x8b, 0x40, 0xd0, 0xab, 0x80, 0x35, 0x2d, 0x3f, 0xe0, 0x7c, 0x59, 0x39, 0x98, 0x16, 0xc1, 0x22, 0x22, 0x32, 0x76, 0x71, 0x21,
0x06, 0x9e, 0xfb, 0xc4, 0x72, 0x06, 0xf1, 0xc4, 0x9c, 0xe5, 0xef, 0x73, 0x7c, 0x24, 0xca, 0xcc, 0x4a, 0x2c, 0x02, 0x41, 0xaf, 0x02, 0x1a, 0x78, 0xee, 0x13, 0xcb, 0x19, 0xc4, 0x13, 0x73, 0x96,
0xdb, 0x5d, 0x50, 0xd3, 0xfb, 0x49, 0x2e, 0x29, 0xde, 0x48, 0x5e, 0x52, 0x1c, 0x64, 0x46, 0x64, 0xbf, 0xcf, 0xf1, 0x91, 0x28, 0x33, 0x6f, 0x77, 0x41, 0x4d, 0xef, 0x27, 0xb9, 0xbf, 0x78, 0x23,
0x9b, 0xf8, 0x2d, 0xc5, 0xbf, 0x86, 0xd9, 0x14, 0x25, 0x2f, 0xcf, 0x73, 0xc5, 0x7a, 0x56, 0x85, 0x79, 0x7f, 0x71, 0x90, 0x19, 0x91, 0x6d, 0xe2, 0x17, 0x18, 0xff, 0x1a, 0x66, 0x53, 0x94, 0xbc,
0x44, 0xcf, 0x4a, 0xfb, 0xa6, 0x02, 0x28, 0xab, 0x15, 0xa8, 0x09, 0x85, 0x70, 0x93, 0xc2, 0xe6, 0x3c, 0xcf, 0x15, 0xeb, 0x59, 0x15, 0x12, 0x3d, 0x2b, 0xed, 0x9b, 0x0a, 0xa0, 0xac, 0x56, 0xa0,
0x7a, 0x4a, 0x0a, 0x85, 0x8c, 0x14, 0x4e, 0x43, 0x35, 0x8c, 0x24, 0xdc, 0x6d, 0x44, 0x80, 0xb8, 0x26, 0x14, 0xc2, 0x4d, 0x0a, 0x9b, 0xeb, 0x29, 0x29, 0x14, 0x32, 0x52, 0x38, 0x0d, 0xd5, 0x30,
0x8c, 0x4a, 0x49, 0x19, 0xc5, 0x08, 0x2b, 0x27, 0x09, 0xdb, 0x05, 0x94, 0xd5, 0xb4, 0xf8, 0x4e, 0x92, 0x70, 0xb7, 0x11, 0x01, 0xe2, 0x32, 0x2a, 0x25, 0x65, 0x14, 0x23, 0xac, 0x9c, 0x24, 0x6c,
0x4a, 0x72, 0xa7, 0xc3, 0x28, 0x8c, 0x61, 0x2a, 0x26, 0x31, 0xfd, 0x5a, 0x01, 0x14, 0xc5, 0xca, 0x17, 0x50, 0x56, 0xd3, 0xe2, 0x3b, 0x29, 0xc9, 0x9d, 0x0e, 0xa3, 0x30, 0x86, 0xa9, 0x98, 0xc4,
0xf0, 0x06, 0x65, 0x92, 0x00, 0xb3, 0x02, 0xf3, 0xd9, 0x48, 0x2a, 0xd2, 0x07, 0x94, 0x89, 0xa3, 0xf4, 0x6b, 0x05, 0x50, 0x14, 0x2b, 0xc3, 0xcb, 0x95, 0x49, 0x02, 0xcc, 0x0a, 0xcc, 0x67, 0x23,
0xb2, 0x98, 0x57, 0x94, 0xc4, 0x3c, 0xf4, 0x66, 0xe8, 0x1b, 0x58, 0x62, 0x70, 0x36, 0x2f, 0x31, 0xa9, 0x48, 0x1f, 0x50, 0x26, 0x8e, 0xca, 0x62, 0x5e, 0x51, 0x12, 0xf3, 0xd0, 0x9b, 0xa1, 0x6f,
0x48, 0xba, 0x07, 0xed, 0xa7, 0x0a, 0xcc, 0x85, 0xd8, 0x9e, 0xe9, 0x24, 0x87, 0xdf, 0x08, 0x7d, 0x60, 0x89, 0xc1, 0xd9, 0xbc, 0xc4, 0x20, 0xe9, 0x1e, 0xb4, 0x9f, 0x2a, 0x30, 0x17, 0x62, 0x7b,
0xc2, 0xa4, 0x77, 0x60, 0x86, 0xb7, 0x47, 0x32, 0xca, 0x37, 0x49, 0x15, 0x70, 0x02, 0xca, 0x44, 0xa6, 0x93, 0x1c, 0x7e, 0x59, 0xf4, 0x09, 0x93, 0xde, 0x81, 0x19, 0xde, 0x1e, 0xc9, 0x28, 0xdf,
0xd7, 0x45, 0xbf, 0x80, 0x7d, 0x68, 0x3f, 0x52, 0x00, 0x3a, 0xfb, 0x4e, 0xff, 0x06, 0xd3, 0x81, 0x24, 0x55, 0xc0, 0x09, 0x28, 0x13, 0x5d, 0x17, 0xfd, 0x02, 0xf6, 0xa1, 0xfd, 0x48, 0x01, 0xe8,
0xab, 0x50, 0x3a, 0xec, 0x02, 0x9c, 0xcc, 0xa6, 0xd9, 0x16, 0x9d, 0x39, 0x01, 0x5b, 0x12, 0x05, 0xec, 0x3b, 0xfd, 0x1b, 0x4c, 0x07, 0xae, 0x42, 0xe9, 0xb0, 0xbb, 0x71, 0x32, 0x9b, 0x66, 0x5b,
0x4c, 0x31, 0x5d, 0xc0, 0xe4, 0x95, 0x1e, 0xf9, 0x7a, 0xff, 0x4b, 0x05, 0x4e, 0x11, 0x22, 0x9e, 0x74, 0xe6, 0x04, 0x6c, 0x49, 0x14, 0x30, 0xc5, 0x74, 0x01, 0x93, 0x57, 0x7a, 0xe4, 0xeb, 0xfd,
0x4b, 0x10, 0x9a, 0x88, 0x75, 0x31, 0x9b, 0x2a, 0x26, 0x6d, 0xea, 0x3a, 0xcc, 0xb0, 0x1a, 0x42, 0x2f, 0x15, 0x38, 0x45, 0x88, 0x78, 0x2e, 0x41, 0x68, 0x22, 0xd6, 0xc5, 0x6c, 0xaa, 0x98, 0xb4,
0x04, 0x84, 0xb3, 0x79, 0x2c, 0x63, 0x0c, 0xd6, 0xc5, 0xf4, 0xa5, 0x7f, 0x83, 0x6a, 0xd8, 0xcb, 0xa9, 0xeb, 0x30, 0xc3, 0x6a, 0x08, 0x11, 0x10, 0xce, 0xe6, 0xb1, 0x8c, 0x31, 0x58, 0x17, 0xd3,
0x43, 0x35, 0x98, 0xb9, 0xef, 0xdc, 0x76, 0xdc, 0x27, 0x8e, 0x3a, 0x85, 0x66, 0xa0, 0x78, 0xc3, 0x97, 0xfe, 0x0d, 0xaa, 0x61, 0x2f, 0x0f, 0xd5, 0x60, 0xe6, 0xbe, 0x73, 0xdb, 0x71, 0x9f, 0x38,
0xb6, 0x55, 0x05, 0x35, 0xa0, 0xda, 0x09, 0x3c, 0x6c, 0x0c, 0x2d, 0x67, 0xa0, 0x16, 0x50, 0x13, 0xea, 0x14, 0x9a, 0x81, 0xe2, 0x0d, 0xdb, 0x56, 0x15, 0xd4, 0x80, 0x6a, 0x27, 0xf0, 0xb0, 0x31,
0xe0, 0x3d, 0xcb, 0x0f, 0x5c, 0xcf, 0xea, 0x1b, 0xb6, 0x5a, 0x5c, 0xfa, 0x10, 0x9a, 0xc9, 0x14, 0xb4, 0x9c, 0x81, 0x5a, 0x40, 0x4d, 0x80, 0xf7, 0x2c, 0x3f, 0x70, 0x3d, 0xab, 0x6f, 0xd8, 0x6a,
0x1a, 0xd5, 0xa1, 0xb2, 0xe5, 0x06, 0xef, 0x3e, 0xb5, 0xfc, 0x40, 0x9d, 0x22, 0xf3, 0xb7, 0xdc, 0x71, 0xe9, 0x43, 0x68, 0x26, 0x53, 0x68, 0x54, 0x87, 0xca, 0x96, 0x1b, 0xbc, 0xfb, 0xd4, 0xf2,
0x60, 0xdb, 0xc3, 0x3e, 0x76, 0x02, 0x55, 0x41, 0x00, 0xd3, 0xef, 0x3b, 0xeb, 0x96, 0xff, 0x48, 0x03, 0x75, 0x8a, 0xcc, 0xdf, 0x72, 0x83, 0x6d, 0x0f, 0xfb, 0xd8, 0x09, 0x54, 0x05, 0x01, 0x4c,
0x2d, 0xa0, 0x79, 0x5e, 0x04, 0x1b, 0xf6, 0x26, 0xcf, 0x4b, 0xd5, 0x22, 0x59, 0x1e, 0x7e, 0x95, 0xbf, 0xef, 0xac, 0x5b, 0xfe, 0x23, 0xb5, 0x80, 0xe6, 0x79, 0x11, 0x6c, 0xd8, 0x9b, 0x3c, 0x2f,
0x90, 0x0a, 0xf5, 0x70, 0xca, 0xc6, 0xf6, 0x7d, 0xb5, 0x8c, 0xaa, 0x50, 0x66, 0x3f, 0xa7, 0x97, 0x55, 0x8b, 0x64, 0x79, 0xf8, 0x55, 0x42, 0x2a, 0xd4, 0xc3, 0x29, 0x1b, 0xdb, 0xf7, 0xd5, 0x32,
0x4c, 0x50, 0xd3, 0x1d, 0x1c, 0xb2, 0x27, 0x3b, 0x44, 0x08, 0x52, 0xa7, 0xc8, 0xc9, 0x78, 0x0b, 0xaa, 0x42, 0x99, 0xfd, 0x9c, 0x5e, 0x32, 0x41, 0x4d, 0x77, 0x70, 0xc8, 0x9e, 0xec, 0x10, 0x21,
0x4d, 0x55, 0xd0, 0x2c, 0xd4, 0x62, 0x0d, 0x29, 0xb5, 0x40, 0x00, 0x1b, 0xde, 0xa8, 0xcf, 0xa5, 0x48, 0x9d, 0x22, 0x27, 0xe3, 0x2d, 0x34, 0x55, 0x41, 0xb3, 0x50, 0x8b, 0x35, 0xa4, 0xd4, 0x02,
0xc7, 0x48, 0x20, 0x49, 0xd4, 0x3a, 0xe1, 0x44, 0x69, 0xe9, 0x26, 0x54, 0x44, 0x6e, 0x4f, 0xa6, 0x01, 0x6c, 0x78, 0xa3, 0x3e, 0x97, 0x1e, 0x23, 0x81, 0x24, 0x51, 0xeb, 0x84, 0x13, 0xa5, 0xa5,
0x72, 0x16, 0x91, 0x4f, 0x75, 0x0a, 0xcd, 0x41, 0x23, 0xf1, 0xe8, 0x4e, 0x55, 0x10, 0x82, 0x66, 0x9b, 0x50, 0x11, 0xb9, 0x3d, 0x99, 0xca, 0x59, 0x44, 0x3e, 0xd5, 0x29, 0x34, 0x07, 0x8d, 0xc4,
0xf2, 0x31, 0xa8, 0x5a, 0x58, 0x5a, 0x05, 0x88, 0x6c, 0x89, 0x90, 0xb3, 0xe9, 0xec, 0x19, 0xb6, 0x7b, 0x3c, 0x55, 0x41, 0x08, 0x9a, 0xc9, 0x77, 0xa2, 0x6a, 0x61, 0x69, 0x15, 0x20, 0xb2, 0x25,
0x65, 0x32, 0xda, 0xc8, 0x10, 0xe1, 0x2e, 0xe5, 0x0e, 0x6b, 0xc5, 0xa8, 0x85, 0xa5, 0x73, 0x50, 0x42, 0xce, 0xa6, 0xb3, 0x67, 0xd8, 0x96, 0xc9, 0x68, 0x23, 0x43, 0x84, 0xbb, 0x94, 0x3b, 0xac,
0x11, 0x5a, 0x4e, 0xe0, 0x3a, 0x1e, 0xba, 0x7b, 0x98, 0x49, 0xa6, 0x83, 0x03, 0x55, 0x59, 0xfd, 0x15, 0xa3, 0x16, 0x96, 0xce, 0x41, 0x45, 0x68, 0x39, 0x81, 0xeb, 0x78, 0xe8, 0xee, 0x61, 0x26,
0x56, 0x03, 0x80, 0x35, 0x5d, 0x5c, 0xd7, 0x33, 0x91, 0x0d, 0x68, 0x03, 0x07, 0xa4, 0xa0, 0x74, 0x99, 0x0e, 0x0e, 0x54, 0x65, 0xf5, 0x5b, 0x0d, 0x00, 0xd6, 0x74, 0x71, 0x5d, 0xcf, 0x44, 0x36,
0x1d, 0x51, 0x0c, 0xfa, 0x68, 0x39, 0xa9, 0x0a, 0xfc, 0x23, 0x3b, 0x91, 0x9f, 0xbe, 0x7d, 0x51, 0xa0, 0x0d, 0x1c, 0x90, 0x82, 0xd2, 0x75, 0x44, 0x31, 0xe8, 0xa3, 0xe5, 0xa4, 0x2a, 0xf0, 0x8f,
0x3a, 0x3f, 0x35, 0x59, 0x9b, 0x42, 0x43, 0x8a, 0xed, 0x9e, 0x35, 0xc4, 0xf7, 0xac, 0xfe, 0xa3, 0xec, 0x44, 0x7e, 0xfa, 0xf6, 0x45, 0xe9, 0xfc, 0xd4, 0x64, 0x6d, 0x0a, 0x0d, 0x29, 0xb6, 0x7b,
0xb0, 0x53, 0x93, 0xff, 0xb4, 0x32, 0x35, 0x55, 0xe0, 0xbb, 0x20, 0xc5, 0xd7, 0x09, 0x3c, 0xcb, 0xd6, 0x10, 0xdf, 0xb3, 0xfa, 0x8f, 0xc2, 0x4e, 0x4d, 0xfe, 0xab, 0xcb, 0xd4, 0x54, 0x81, 0xef,
0x19, 0x88, 0x1c, 0x4c, 0x9b, 0x42, 0x8f, 0x53, 0x0f, 0x3b, 0x05, 0xc2, 0xd5, 0x49, 0xde, 0x72, 0x82, 0x14, 0x5f, 0x27, 0xf0, 0x2c, 0x67, 0x20, 0x72, 0x30, 0x6d, 0x0a, 0x3d, 0x4e, 0xbd, 0xf9,
0x1e, 0x0d, 0xa5, 0x0d, 0xb3, 0xa9, 0x57, 0xe0, 0x68, 0x49, 0xfe, 0x9c, 0x48, 0xf6, 0x62, 0xbd, 0x14, 0x08, 0x57, 0x27, 0x79, 0xe6, 0x79, 0x34, 0x94, 0x36, 0xcc, 0xa6, 0x1e, 0x88, 0xa3, 0x25,
0x7d, 0x65, 0xa2, 0xb9, 0x21, 0x36, 0x0b, 0x9a, 0xc9, 0x97, 0xce, 0xe8, 0x9f, 0xf2, 0x36, 0xc8, 0xf9, 0x4b, 0x23, 0xd9, 0x63, 0xf6, 0xf6, 0x95, 0x89, 0xe6, 0x86, 0xd8, 0x2c, 0x68, 0x26, 0x1f,
0x3c, 0x68, 0x6c, 0x2f, 0x4d, 0x32, 0x35, 0x44, 0xf5, 0x90, 0x29, 0xe8, 0x61, 0xa8, 0xa4, 0x8f, 0x41, 0xa3, 0x7f, 0xca, 0xdb, 0x20, 0xf3, 0xd6, 0xb1, 0xbd, 0x34, 0xc9, 0xd4, 0x10, 0xd5, 0x43,
0x49, 0xdb, 0x07, 0xa5, 0xbf, 0xda, 0x14, 0xfa, 0x1f, 0x98, 0xcb, 0x3c, 0xbb, 0x44, 0xaf, 0xc8, 0xa6, 0xa0, 0x87, 0xa1, 0x92, 0xbe, 0x33, 0x6d, 0x1f, 0x94, 0xfe, 0x6a, 0x53, 0xe8, 0x7f, 0x60,
0xbb, 0xf1, 0xf2, 0xd7, 0x99, 0x87, 0x61, 0x78, 0x98, 0x36, 0xaf, 0x7c, 0xea, 0x33, 0x4f, 0x94, 0x2e, 0xf3, 0x22, 0x13, 0xbd, 0x22, 0xef, 0xc6, 0xcb, 0x1f, 0x6e, 0x1e, 0x86, 0xe1, 0x61, 0xda,
0x27, 0xa7, 0x3e, 0xb6, 0xfd, 0x41, 0xd4, 0x3f, 0x33, 0x86, 0x31, 0x35, 0x9b, 0x74, 0xeb, 0xef, 0xbc, 0xf2, 0xa9, 0xcf, 0xbc, 0x5e, 0x9e, 0x9c, 0xfa, 0xd8, 0xf6, 0x07, 0x51, 0xff, 0xcc, 0x18,
0x55, 0x19, 0x8a, 0xdc, 0xb7, 0x9f, 0xed, 0xe5, 0x49, 0xa7, 0xc7, 0xb5, 0x2b, 0xf9, 0xbc, 0x50, 0xc6, 0xd4, 0x6c, 0xd2, 0xad, 0xbf, 0x57, 0x65, 0x28, 0x72, 0x9f, 0x85, 0xb6, 0x97, 0x27, 0x9d,
0xce, 0x34, 0xe9, 0x93, 0x48, 0xb9, 0x76, 0xc9, 0x5f, 0x2b, 0x6a, 0x53, 0xe8, 0x5e, 0xc2, 0xbd, 0x1e, 0xd7, 0xae, 0xe4, 0xcb, 0x43, 0x39, 0xd3, 0xa4, 0xaf, 0x25, 0xe5, 0xda, 0x25, 0x7f, 0xc8,
0xa2, 0xcb, 0x79, 0xc2, 0x49, 0x5e, 0x08, 0x1c, 0xc6, 0xb7, 0xff, 0x05, 0xc4, 0x6c, 0xc7, 0xd9, 0xa8, 0x4d, 0xa1, 0x7b, 0x09, 0xf7, 0x8a, 0x2e, 0xe7, 0x09, 0x27, 0x79, 0x21, 0x70, 0x18, 0xdf,
0xb1, 0x06, 0x63, 0xcf, 0x60, 0x8a, 0x95, 0xe7, 0x6e, 0xb2, 0x53, 0x05, 0x9a, 0xd7, 0x9e, 0x61, 0xfe, 0x17, 0x10, 0xb3, 0x1d, 0x67, 0xc7, 0x1a, 0x8c, 0x3d, 0x83, 0x29, 0x56, 0x9e, 0xbb, 0xc9,
0x45, 0x78, 0xa4, 0x2e, 0xc0, 0x06, 0x0e, 0xee, 0xe2, 0xc0, 0xb3, 0xfa, 0x7e, 0xfa, 0x44, 0x91, 0x4e, 0x15, 0x68, 0x5e, 0x7b, 0x86, 0x15, 0xe1, 0x91, 0xba, 0x00, 0x1b, 0x38, 0xb8, 0x8b, 0x03,
0x47, 0xe5, 0x13, 0x04, 0xaa, 0x97, 0x0f, 0x9d, 0x17, 0x22, 0xe8, 0x41, 0x6d, 0x03, 0x07, 0x3c, 0xcf, 0xea, 0xfb, 0xe9, 0x13, 0x45, 0x1e, 0x95, 0x4f, 0x10, 0xa8, 0x5e, 0x3e, 0x74, 0x5e, 0x88,
0xaf, 0xf2, 0x51, 0xee, 0x4a, 0x31, 0x43, 0xa0, 0x58, 0x3c, 0x7c, 0x62, 0xdc, 0x9d, 0xa5, 0x9e, 0xa0, 0x07, 0xb5, 0x0d, 0x1c, 0xf0, 0xbc, 0xca, 0x47, 0xb9, 0x2b, 0xc5, 0x0c, 0x81, 0x62, 0xf1,
0x5a, 0xa2, 0x5c, 0xc1, 0x66, 0x1f, 0x80, 0xca, 0xdd, 0x59, 0xce, 0xdb, 0x4d, 0x6d, 0x6a, 0xf5, 0xf0, 0x89, 0x71, 0x77, 0x96, 0x7a, 0x85, 0x89, 0x72, 0x05, 0x9b, 0x7d, 0x1b, 0x2a, 0x77, 0x67,
0xe3, 0x26, 0x54, 0x69, 0x6c, 0x22, 0x81, 0xf4, 0x1f, 0xa1, 0xe9, 0x39, 0x87, 0xa6, 0x0f, 0x60, 0x39, 0xcf, 0x3a, 0xb5, 0xa9, 0xd5, 0x8f, 0x9b, 0x50, 0xa5, 0xb1, 0x89, 0x04, 0xd2, 0x7f, 0x84,
0x36, 0xf5, 0x6a, 0x4f, 0x2e, 0x4b, 0xf9, 0xd3, 0xbe, 0x09, 0x3c, 0x6c, 0xf2, 0x45, 0x9d, 0xdc, 0xa6, 0xe7, 0x1c, 0x9a, 0x3e, 0x80, 0xd9, 0xd4, 0x83, 0x3e, 0xb9, 0x2c, 0xe5, 0xaf, 0xfe, 0x26,
0x59, 0x48, 0x5f, 0xdd, 0x1d, 0xb6, 0xf7, 0x03, 0xf6, 0xe0, 0x35, 0x6c, 0x66, 0xbd, 0x9c, 0x5b, 0xf0, 0xb0, 0xc9, 0xc7, 0x76, 0x72, 0x67, 0x21, 0x7d, 0x90, 0x77, 0xd8, 0xde, 0x0f, 0xd8, 0x5b,
0x76, 0x24, 0xef, 0x3a, 0x3f, 0x7b, 0xcf, 0xfd, 0xc9, 0x47, 0xb6, 0x0f, 0x60, 0x36, 0xf5, 0xe2, 0xd8, 0xb0, 0x99, 0xf5, 0x72, 0x6e, 0xd9, 0x91, 0xbc, 0xeb, 0xfc, 0xec, 0x3d, 0xf7, 0x27, 0x1f,
0x44, 0x2e, 0x55, 0xf9, 0xb3, 0x94, 0xc3, 0x76, 0xff, 0x14, 0x43, 0x80, 0x09, 0xf3, 0x92, 0xc7, 0xd9, 0x3e, 0x80, 0xd9, 0xd4, 0x8b, 0x13, 0xb9, 0x54, 0xe5, 0xcf, 0x52, 0x0e, 0xdb, 0xfd, 0x53,
0x00, 0x68, 0x39, 0xaf, 0x2a, 0x91, 0xbf, 0x1a, 0x38, 0xfc, 0x40, 0x8d, 0x84, 0x29, 0xa1, 0xc5, 0x0c, 0x01, 0x26, 0xcc, 0x4b, 0x1e, 0x03, 0xa0, 0xe5, 0xbc, 0xaa, 0x44, 0xfe, 0x6a, 0xe0, 0xf0,
0x3c, 0x22, 0xd3, 0x7f, 0xea, 0x69, 0xbf, 0x32, 0xd9, 0x3f, 0x80, 0xc2, 0x03, 0x75, 0x60, 0x9a, 0x03, 0x35, 0x12, 0xa6, 0x84, 0x16, 0xf3, 0x88, 0x4c, 0xff, 0xdf, 0xa7, 0xfd, 0xca, 0x64, 0x7f,
0xbd, 0x43, 0x41, 0x2f, 0xc9, 0x9b, 0x3e, 0xb1, 0x37, 0x2a, 0xed, 0xc3, 0x5e, 0xb2, 0xf8, 0x63, 0x0e, 0x0a, 0x0f, 0xd4, 0x81, 0x69, 0xf6, 0x0e, 0x05, 0xbd, 0x24, 0x6f, 0xfa, 0xc4, 0xde, 0xa8,
0x3b, 0xf0, 0xe9, 0xa6, 0x65, 0xea, 0x21, 0x91, 0xf4, 0x01, 0x55, 0xfc, 0xf1, 0x48, 0xfb, 0xf0, 0xb4, 0x0f, 0x7b, 0xc9, 0xe2, 0x8f, 0xed, 0xc0, 0xa7, 0x9b, 0x96, 0xa9, 0x87, 0x44, 0xd2, 0x07,
0xf7, 0x22, 0x62, 0xd3, 0xbf, 0xef, 0x38, 0xf9, 0x14, 0xe6, 0x25, 0xad, 0x5a, 0x94, 0x97, 0x0f, 0x54, 0xf1, 0xc7, 0x23, 0xed, 0xc3, 0xdf, 0x8b, 0x88, 0x4d, 0xff, 0xbe, 0xe3, 0xe4, 0x53, 0x98,
0xe5, 0x34, 0x89, 0xdb, 0x2b, 0x13, 0xcf, 0x0f, 0x31, 0xff, 0x37, 0xa8, 0xe9, 0x6a, 0x1f, 0x5d, 0x97, 0xb4, 0x6a, 0x51, 0x5e, 0x3e, 0x94, 0xd3, 0x24, 0x6e, 0xaf, 0x4c, 0x3c, 0x3f, 0xc4, 0xfc,
0xc9, 0xd3, 0x67, 0x19, 0xce, 0x83, 0x95, 0xf9, 0xe6, 0xeb, 0x0f, 0x57, 0x07, 0x56, 0xb0, 0x3b, 0xdf, 0xa0, 0xa6, 0xab, 0x7d, 0x74, 0x25, 0x4f, 0x9f, 0x65, 0x38, 0x0f, 0x56, 0xe6, 0x9b, 0xaf,
0xee, 0x91, 0x91, 0x15, 0x36, 0xf5, 0x55, 0xcb, 0xe5, 0xbf, 0x56, 0x04, 0xff, 0x57, 0xe8, 0xea, 0x3f, 0x5c, 0x1d, 0x58, 0xc1, 0xee, 0xb8, 0x47, 0x46, 0x56, 0xd8, 0xd4, 0x57, 0x2d, 0x97, 0xff,
0x15, 0x8a, 0x6a, 0xd4, 0xeb, 0x4d, 0xd3, 0xcf, 0x6b, 0x7f, 0x0b, 0x00, 0x00, 0xff, 0xff, 0x1f, 0x5a, 0x11, 0xfc, 0x5f, 0xa1, 0xab, 0x57, 0x28, 0xaa, 0x51, 0xaf, 0x37, 0x4d, 0x3f, 0xaf, 0xfd,
0xf2, 0x39, 0xb5, 0xac, 0x3b, 0x00, 0x00, 0x2d, 0x00, 0x00, 0xff, 0xff, 0x8f, 0xa9, 0xd4, 0xdf, 0xc7, 0x3b, 0x00, 0x00,
} }
// Reference imports to suppress errors if they are not otherwise used. // Reference imports to suppress errors if they are not otherwise used.

View File

@ -23,6 +23,7 @@ import (
"github.com/milvus-io/milvus/api/commonpb" "github.com/milvus-io/milvus/api/commonpb"
"github.com/milvus-io/milvus/api/milvuspb" "github.com/milvus-io/milvus/api/milvuspb"
"github.com/milvus-io/milvus/internal/proto/internalpb" "github.com/milvus-io/milvus/internal/proto/internalpb"
"github.com/milvus-io/milvus/internal/util/hardware"
"github.com/milvus-io/milvus/internal/util/metricsinfo" "github.com/milvus-io/milvus/internal/util/metricsinfo"
"github.com/milvus-io/milvus/internal/util/ratelimitutil" "github.com/milvus-io/milvus/internal/util/ratelimitutil"
"github.com/milvus-io/milvus/internal/util/typeutil" "github.com/milvus-io/milvus/internal/util/typeutil"
@ -62,20 +63,20 @@ func getQuotaMetrics() (*metricsinfo.ProxyQuotaMetrics, error) {
// getProxyMetrics get metrics of Proxy, not including the topological metrics of Query cluster and Data cluster. // getProxyMetrics get metrics of Proxy, not including the topological metrics of Query cluster and Data cluster.
func getProxyMetrics(ctx context.Context, request *milvuspb.GetMetricsRequest, node *Proxy) (*milvuspb.GetMetricsResponse, error) { func getProxyMetrics(ctx context.Context, request *milvuspb.GetMetricsRequest, node *Proxy) (*milvuspb.GetMetricsResponse, error) {
totalMem := metricsinfo.GetMemoryCount() totalMem := hardware.GetMemoryCount()
usedMem := metricsinfo.GetUsedMemoryCount() usedMem := hardware.GetUsedMemoryCount()
quotaMetrics, err := getQuotaMetrics() quotaMetrics, err := getQuotaMetrics()
if err != nil { if err != nil {
return nil, err return nil, err
} }
hardwareMetrics := metricsinfo.HardwareMetrics{ hardwareMetrics := metricsinfo.HardwareMetrics{
IP: node.session.Address, IP: node.session.Address,
CPUCoreCount: metricsinfo.GetCPUCoreCount(false), CPUCoreCount: hardware.GetCPUNum(),
CPUCoreUsage: metricsinfo.GetCPUUsage(), CPUCoreUsage: hardware.GetCPUUsage(),
Memory: totalMem, Memory: totalMem,
MemoryUsage: usedMem, MemoryUsage: usedMem,
Disk: metricsinfo.GetDiskCount(), Disk: hardware.GetDiskCount(),
DiskUsage: metricsinfo.GetDiskUsage(), DiskUsage: hardware.GetDiskUsage(),
} }
quotaMetrics.Hms = hardwareMetrics quotaMetrics.Hms = hardwareMetrics
@ -138,12 +139,12 @@ func getSystemInfoMetrics(
Name: proxyRoleName, Name: proxyRoleName,
HardwareInfos: metricsinfo.HardwareMetrics{ HardwareInfos: metricsinfo.HardwareMetrics{
IP: node.session.Address, IP: node.session.Address,
CPUCoreCount: metricsinfo.GetCPUCoreCount(false), CPUCoreCount: hardware.GetCPUNum(),
CPUCoreUsage: metricsinfo.GetCPUUsage(), CPUCoreUsage: hardware.GetCPUUsage(),
Memory: metricsinfo.GetMemoryCount(), Memory: hardware.GetMemoryCount(),
MemoryUsage: metricsinfo.GetUsedMemoryCount(), MemoryUsage: hardware.GetUsedMemoryCount(),
Disk: metricsinfo.GetDiskCount(), Disk: hardware.GetDiskCount(),
DiskUsage: metricsinfo.GetDiskUsage(), DiskUsage: hardware.GetDiskUsage(),
}, },
SystemInfo: metricsinfo.DeployMetrics{}, SystemInfo: metricsinfo.DeployMetrics{},
CreatedTime: Params.ProxyCfg.CreatedTime.String(), CreatedTime: Params.ProxyCfg.CreatedTime.String(),

View File

@ -21,19 +21,18 @@ import (
"errors" "errors"
"fmt" "fmt"
"github.com/milvus-io/milvus/internal/proto/indexpb"
"go.uber.org/zap" "go.uber.org/zap"
"github.com/milvus-io/milvus/internal/common"
"github.com/milvus-io/milvus/internal/log"
"github.com/milvus-io/milvus/internal/types"
"github.com/milvus-io/milvus/api/commonpb" "github.com/milvus-io/milvus/api/commonpb"
"github.com/milvus-io/milvus/api/milvuspb" "github.com/milvus-io/milvus/api/milvuspb"
"github.com/milvus-io/milvus/api/schemapb" "github.com/milvus-io/milvus/api/schemapb"
"github.com/milvus-io/milvus/internal/common"
"github.com/milvus-io/milvus/internal/log"
"github.com/milvus-io/milvus/internal/proto/indexpb"
"github.com/milvus-io/milvus/internal/types"
"github.com/milvus-io/milvus/internal/util/funcutil" "github.com/milvus-io/milvus/internal/util/funcutil"
"github.com/milvus-io/milvus/internal/util/indexparamcheck" "github.com/milvus-io/milvus/internal/util/indexparamcheck"
"github.com/milvus-io/milvus/internal/util/indexparams"
"github.com/milvus-io/milvus/internal/util/typeutil" "github.com/milvus-io/milvus/internal/util/typeutil"
) )
@ -144,6 +143,18 @@ func (cit *createIndexTask) parseIndexParams() error {
return fmt.Errorf("IndexType not specified") return fmt.Errorf("IndexType not specified")
} }
} }
indexType, exist := indexParamsMap[common.IndexTypeKey]
if !exist {
return fmt.Errorf("IndexType not specified")
}
if indexType == indexparamcheck.IndexDISKANN {
err := indexparams.FillDiskIndexParams(&Params, indexParamsMap)
if err != nil {
return err
}
}
err := checkTrain(cit.fieldSchema, indexParamsMap) err := checkTrain(cit.fieldSchema, indexParamsMap)
if err != nil { if err != nil {
return err return err

View File

@ -34,6 +34,7 @@ import (
"github.com/milvus-io/milvus/internal/querycoordv2/session" "github.com/milvus-io/milvus/internal/querycoordv2/session"
"github.com/milvus-io/milvus/internal/querycoordv2/task" "github.com/milvus-io/milvus/internal/querycoordv2/task"
"github.com/milvus-io/milvus/internal/querycoordv2/utils" "github.com/milvus-io/milvus/internal/querycoordv2/utils"
"github.com/milvus-io/milvus/internal/util/hardware"
"github.com/milvus-io/milvus/internal/util/metricsinfo" "github.com/milvus-io/milvus/internal/util/metricsinfo"
"github.com/milvus-io/milvus/internal/util/typeutil" "github.com/milvus-io/milvus/internal/util/typeutil"
"github.com/milvus-io/milvus/internal/util/uniquegenerator" "github.com/milvus-io/milvus/internal/util/uniquegenerator"
@ -142,12 +143,12 @@ func (s *Server) getSystemInfoMetrics(
Name: metricsinfo.ConstructComponentName(typeutil.QueryCoordRole, Params.QueryCoordCfg.GetNodeID()), Name: metricsinfo.ConstructComponentName(typeutil.QueryCoordRole, Params.QueryCoordCfg.GetNodeID()),
HardwareInfos: metricsinfo.HardwareMetrics{ HardwareInfos: metricsinfo.HardwareMetrics{
IP: s.session.Address, IP: s.session.Address,
CPUCoreCount: metricsinfo.GetCPUCoreCount(false), CPUCoreCount: hardware.GetCPUNum(),
CPUCoreUsage: metricsinfo.GetCPUUsage(), CPUCoreUsage: hardware.GetCPUUsage(),
Memory: metricsinfo.GetMemoryCount(), Memory: hardware.GetMemoryCount(),
MemoryUsage: metricsinfo.GetUsedMemoryCount(), MemoryUsage: hardware.GetUsedMemoryCount(),
Disk: metricsinfo.GetDiskCount(), Disk: hardware.GetDiskCount(),
DiskUsage: metricsinfo.GetDiskUsage(), DiskUsage: hardware.GetDiskUsage(),
}, },
SystemInfo: metricsinfo.DeployMetrics{}, SystemInfo: metricsinfo.DeployMetrics{},
CreatedTime: Params.QueryCoordCfg.CreatedTime.String(), CreatedTime: Params.QueryCoordCfg.CreatedTime.String(),

View File

@ -191,6 +191,7 @@ func (broker *CoordinatorBroker) GetIndexInfo(ctx context.Context, collectionID
IndexFilePaths: info.GetIndexFilePaths(), IndexFilePaths: info.GetIndexFilePaths(),
IndexSize: int64(info.GetSerializedSize()), IndexSize: int64(info.GetSerializedSize()),
IndexVersion: info.GetIndexVersion(), IndexVersion: info.GetIndexVersion(),
NumRows: info.GetNumRows(),
} }
indexes = append(indexes, indexInfo) indexes = append(indexes, indexInfo)

View File

@ -25,6 +25,12 @@ package querynode
import "C" import "C"
import ( import (
"encoding/json"
"fmt"
"github.com/milvus-io/milvus/internal/log"
"github.com/milvus-io/milvus/internal/util/funcutil"
"github.com/milvus-io/milvus/internal/util/indexparams"
"go.uber.org/zap"
"path/filepath" "path/filepath"
"unsafe" "unsafe"
@ -95,8 +101,19 @@ func (li *LoadIndexInfo) appendLoadIndexInfo(bytesIndex [][]byte, indexInfo *que
return err return err
} }
for _, param := range indexInfo.IndexParams { // some build params also exist in indexParams, which are useless during loading process
err = li.appendIndexParam(param.Key, param.Value) indexParams := funcutil.KeyValuePair2Map(indexInfo.IndexParams)
indexparams.SetDiskIndexLoadParams(indexParams, indexInfo.GetNumRows())
jsonIndexParams, err := json.Marshal(indexParams)
if err != nil {
err = fmt.Errorf("failed to json marshal index params %w", err)
return err
}
log.Info("start append index params", zap.String("index params", string(jsonIndexParams)))
for key, value := range indexParams {
err = li.appendIndexParam(key, value)
if err != nil { if err != nil {
return err return err
} }

View File

@ -22,6 +22,7 @@ import (
"github.com/milvus-io/milvus/api/commonpb" "github.com/milvus-io/milvus/api/commonpb"
"github.com/milvus-io/milvus/api/milvuspb" "github.com/milvus-io/milvus/api/milvuspb"
"github.com/milvus-io/milvus/internal/proto/internalpb" "github.com/milvus-io/milvus/internal/proto/internalpb"
"github.com/milvus-io/milvus/internal/util/hardware"
"github.com/milvus-io/milvus/internal/util/metricsinfo" "github.com/milvus-io/milvus/internal/util/metricsinfo"
"github.com/milvus-io/milvus/internal/util/ratelimitutil" "github.com/milvus-io/milvus/internal/util/ratelimitutil"
"github.com/milvus-io/milvus/internal/util/typeutil" "github.com/milvus-io/milvus/internal/util/typeutil"
@ -86,8 +87,8 @@ func getQuotaMetrics(node *QueryNode) (*metricsinfo.QueryNodeQuotaMetrics, error
// getSystemInfoMetrics returns metrics info of QueryNode // getSystemInfoMetrics returns metrics info of QueryNode
func getSystemInfoMetrics(ctx context.Context, req *milvuspb.GetMetricsRequest, node *QueryNode) (*milvuspb.GetMetricsResponse, error) { func getSystemInfoMetrics(ctx context.Context, req *milvuspb.GetMetricsRequest, node *QueryNode) (*milvuspb.GetMetricsResponse, error) {
usedMem := metricsinfo.GetUsedMemoryCount() usedMem := hardware.GetUsedMemoryCount()
totalMem := metricsinfo.GetMemoryCount() totalMem := hardware.GetMemoryCount()
quotaMetrics, err := getQuotaMetrics(node) quotaMetrics, err := getQuotaMetrics(node)
if err != nil { if err != nil {
@ -101,12 +102,12 @@ func getSystemInfoMetrics(ctx context.Context, req *milvuspb.GetMetricsRequest,
} }
hardwareInfos := metricsinfo.HardwareMetrics{ hardwareInfos := metricsinfo.HardwareMetrics{
IP: node.session.Address, IP: node.session.Address,
CPUCoreCount: metricsinfo.GetCPUCoreCount(false), CPUCoreCount: hardware.GetCPUNum(),
CPUCoreUsage: metricsinfo.GetCPUUsage(), CPUCoreUsage: hardware.GetCPUUsage(),
Memory: totalMem, Memory: totalMem,
MemoryUsage: usedMem, MemoryUsage: usedMem,
Disk: metricsinfo.GetDiskCount(), Disk: hardware.GetDiskCount(),
DiskUsage: metricsinfo.GetDiskUsage(), DiskUsage: hardware.GetDiskUsage(),
} }
quotaMetrics.Hms = hardwareInfos quotaMetrics.Hms = hardwareInfos

View File

@ -42,8 +42,8 @@ import (
"github.com/milvus-io/milvus/internal/types" "github.com/milvus-io/milvus/internal/types"
"github.com/milvus-io/milvus/internal/util/concurrency" "github.com/milvus-io/milvus/internal/util/concurrency"
"github.com/milvus-io/milvus/internal/util/funcutil" "github.com/milvus-io/milvus/internal/util/funcutil"
"github.com/milvus-io/milvus/internal/util/hardware"
"github.com/milvus-io/milvus/internal/util/indexparamcheck" "github.com/milvus-io/milvus/internal/util/indexparamcheck"
"github.com/milvus-io/milvus/internal/util/metricsinfo"
"github.com/milvus-io/milvus/internal/util/timerecord" "github.com/milvus-io/milvus/internal/util/timerecord"
) )
@ -245,12 +245,19 @@ func (loader *segmentLoader) loadFiles(ctx context.Context, segment *Segment,
for _, fieldBinlog := range loadInfo.BinlogPaths { for _, fieldBinlog := range loadInfo.BinlogPaths {
fieldID := fieldBinlog.FieldID fieldID := fieldBinlog.FieldID
// check num rows of data meta and index meta are consistent
if indexInfo, ok := fieldID2IndexInfo[fieldID]; ok { if indexInfo, ok := fieldID2IndexInfo[fieldID]; ok {
// TODO:: ugly if loadInfo.GetNumOfRows() != indexInfo.GetNumRows() {
indexInfo.IndexParams = append(indexInfo.IndexParams, &commonpb.KeyValuePair{ err = fmt.Errorf("num rows of segment binlog file %d mismatch with num rows of index file %d",
Key: "count", loadInfo.GetNumOfRows(), indexInfo.GetNumRows())
Value: strconv.FormatInt(loadInfo.NumOfRows, 10), log.Error("load segment failed, set segment to meta failed",
}) zap.Int64("collectionID", segment.collectionID),
zap.Int64("partitionID", segment.partitionID),
zap.Int64("segmentID", segment.segmentID),
zap.Int64("indexBuildID", indexInfo.BuildID),
zap.Error(err))
return err
}
fieldInfo := &IndexedFieldInfo{ fieldInfo := &IndexedFieldInfo{
fieldBinlog: fieldBinlog, fieldBinlog: fieldBinlog,
@ -836,8 +843,8 @@ func GetStorageSizeByIndexInfo(indexInfo *querypb.FieldIndexInfo) (uint64, uint6
} }
func (loader *segmentLoader) checkSegmentSize(collectionID UniqueID, segmentLoadInfos []*querypb.SegmentLoadInfo, concurrency int) error { func (loader *segmentLoader) checkSegmentSize(collectionID UniqueID, segmentLoadInfos []*querypb.SegmentLoadInfo, concurrency int) error {
usedMem := metricsinfo.GetUsedMemoryCount() usedMem := hardware.GetUsedMemoryCount()
totalMem := metricsinfo.GetMemoryCount() totalMem := hardware.GetMemoryCount()
if len(segmentLoadInfos) < concurrency { if len(segmentLoadInfos) < concurrency {
concurrency = len(segmentLoadInfos) concurrency = len(segmentLoadInfos)
} }

View File

@ -32,7 +32,7 @@ import (
"github.com/milvus-io/milvus/internal/proto/internalpb" "github.com/milvus-io/milvus/internal/proto/internalpb"
"github.com/milvus-io/milvus/internal/proto/querypb" "github.com/milvus-io/milvus/internal/proto/querypb"
"github.com/milvus-io/milvus/internal/util/funcutil" "github.com/milvus-io/milvus/internal/util/funcutil"
"github.com/milvus-io/milvus/internal/util/metricsinfo" "github.com/milvus-io/milvus/internal/util/hardware"
"github.com/milvus-io/milvus/internal/util/typeutil" "github.com/milvus-io/milvus/internal/util/typeutil"
) )
@ -528,7 +528,7 @@ func TestTask_loadSegmentsTask(t *testing.T) {
node, err := genSimpleQueryNode(ctx) node, err := genSimpleQueryNode(ctx)
assert.NoError(t, err) assert.NoError(t, err)
totalRAM := int64(metricsinfo.GetMemoryCount()) totalRAM := int64(hardware.GetMemoryCount())
col, err := node.metaReplica.getCollectionByID(defaultCollectionID) col, err := node.metaReplica.getCollectionByID(defaultCollectionID)
assert.NoError(t, err) assert.NoError(t, err)

View File

@ -19,13 +19,15 @@ package rootcoord
import ( import (
"context" "context"
"go.uber.org/zap"
"github.com/milvus-io/milvus/api/commonpb" "github.com/milvus-io/milvus/api/commonpb"
"github.com/milvus-io/milvus/api/milvuspb" "github.com/milvus-io/milvus/api/milvuspb"
"github.com/milvus-io/milvus/internal/log" "github.com/milvus-io/milvus/internal/log"
"github.com/milvus-io/milvus/internal/proto/internalpb" "github.com/milvus-io/milvus/internal/proto/internalpb"
"github.com/milvus-io/milvus/internal/util/hardware"
"github.com/milvus-io/milvus/internal/util/metricsinfo" "github.com/milvus-io/milvus/internal/util/metricsinfo"
"github.com/milvus-io/milvus/internal/util/typeutil" "github.com/milvus-io/milvus/internal/util/typeutil"
"go.uber.org/zap"
) )
//getComponentConfigurations returns the configurations of rootcoord matching req.Pattern //getComponentConfigurations returns the configurations of rootcoord matching req.Pattern
@ -57,12 +59,12 @@ func (c *Core) getSystemInfoMetrics(ctx context.Context, req *milvuspb.GetMetric
Name: metricsinfo.ConstructComponentName(typeutil.RootCoordRole, c.session.ServerID), Name: metricsinfo.ConstructComponentName(typeutil.RootCoordRole, c.session.ServerID),
HardwareInfos: metricsinfo.HardwareMetrics{ HardwareInfos: metricsinfo.HardwareMetrics{
IP: c.session.Address, IP: c.session.Address,
CPUCoreCount: metricsinfo.GetCPUCoreCount(false), CPUCoreCount: hardware.GetCPUNum(),
CPUCoreUsage: metricsinfo.GetCPUUsage(), CPUCoreUsage: hardware.GetCPUUsage(),
Memory: metricsinfo.GetMemoryCount(), Memory: hardware.GetMemoryCount(),
MemoryUsage: metricsinfo.GetUsedMemoryCount(), MemoryUsage: hardware.GetUsedMemoryCount(),
Disk: metricsinfo.GetDiskCount(), Disk: hardware.GetDiskCount(),
DiskUsage: metricsinfo.GetDiskUsage(), DiskUsage: hardware.GetDiskUsage(),
}, },
SystemInfo: metricsinfo.DeployMetrics{}, SystemInfo: metricsinfo.DeployMetrics{},
CreatedTime: Params.RootCoordCfg.CreatedTime.String(), CreatedTime: Params.RootCoordCfg.CreatedTime.String(),

View File

@ -33,82 +33,94 @@ const (
BuildRatioKey = "build_ratio" BuildRatioKey = "build_ratio"
PrepareRatioKey = "prepare_ratio" PrepareRatioKey = "prepare_ratio"
BeamWidthRatioKey = "beamwidth_ratio" BeamWidthRatioKey = "beamwidth_ratio"
DefaultPGCodeBudgetGBRatio = 0.125
DefaultBuildNumThreadsRatio = 1.0
DefaultSearchCacheBudgetGBRatio = 0.125
DefaultLoadNumThreadRatio = 8.0
DefaultBeamWidthRatio = 4.0
) )
func NewBigDataIndexExtraParams() *BigDataIndexExtraParams { func NewBigDataIndexExtraParams() *BigDataIndexExtraParams {
ret := &BigDataIndexExtraParams{ ret := &BigDataIndexExtraParams{
PGCodeBudgetGBRatio: 0.125, PGCodeBudgetGBRatio: DefaultPGCodeBudgetGBRatio,
BuildNumThreadsRatio: 1.0, BuildNumThreadsRatio: DefaultBuildNumThreadsRatio,
SearchCacheBudgetGBRatio: 0.125, SearchCacheBudgetGBRatio: DefaultSearchCacheBudgetGBRatio,
LoadNumThreadRatio: 8.0, LoadNumThreadRatio: DefaultLoadNumThreadRatio,
BeamWidthRatio: 4.0, BeamWidthRatio: DefaultBeamWidthRatio,
} }
return ret return ret
} }
func NewBigDataExtraParamsFromJSON(jsonStr string) *BigDataIndexExtraParams { func NewBigDataExtraParamsFromJSON(jsonStr string) (*BigDataIndexExtraParams, error) {
buffer := make(map[string]string) buffer := make(map[string]string)
err := json.Unmarshal([]byte(jsonStr), &buffer) err := json.Unmarshal([]byte(jsonStr), &buffer)
if err != nil { if err != nil {
return NewBigDataIndexExtraParams() return nil, err
} }
return NewBigDataExtraParamsFromMap(buffer) return NewBigDataExtraParamsFromMap(buffer)
} }
func NewBigDataExtraParamsFromMap(value map[string]string) *BigDataIndexExtraParams { func NewBigDataExtraParamsFromMap(value map[string]string) (*BigDataIndexExtraParams, error) {
ret := &BigDataIndexExtraParams{} ret := &BigDataIndexExtraParams{}
var err error var err error
buildRatio, ok := value[BuildRatioKey] buildRatio, ok := value[BuildRatioKey]
if !ok { if !ok {
ret.PGCodeBudgetGBRatio = 0.125 ret.PGCodeBudgetGBRatio = DefaultPGCodeBudgetGBRatio
ret.BuildNumThreadsRatio = 1.0 ret.BuildNumThreadsRatio = DefaultBuildNumThreadsRatio
} else { } else {
valueMap1 := make(map[string]float64) valueMap1 := make(map[string]float64)
err = json.Unmarshal([]byte(buildRatio), &valueMap1) err = json.Unmarshal([]byte(buildRatio), &valueMap1)
if err != nil { if err != nil {
ret.PGCodeBudgetGBRatio = 0.125 return ret, err
ret.BuildNumThreadsRatio = 1.0 }
PGCodeBudgetGBRatio, ok := valueMap1["pg_code_budget_gb"]
if !ok {
ret.PGCodeBudgetGBRatio = DefaultPGCodeBudgetGBRatio
} else { } else {
ret.PGCodeBudgetGBRatio = valueMap1["pg_code_budget_gb"] ret.PGCodeBudgetGBRatio = PGCodeBudgetGBRatio
ret.BuildNumThreadsRatio = valueMap1["num_threads"] }
BuildNumThreadsRatio, ok := valueMap1["num_threads"]
if !ok {
ret.BuildNumThreadsRatio = DefaultBuildNumThreadsRatio
} else {
ret.BuildNumThreadsRatio = BuildNumThreadsRatio
} }
} }
prepareRatio, ok := value[PrepareRatioKey] prepareRatio, ok := value[PrepareRatioKey]
if !ok { if !ok {
ret.SearchCacheBudgetGBRatio = 0.125 ret.SearchCacheBudgetGBRatio = DefaultSearchCacheBudgetGBRatio
ret.LoadNumThreadRatio = 8 ret.LoadNumThreadRatio = DefaultLoadNumThreadRatio
} else { } else {
valueMap2 := make(map[string]float64) valueMap2 := make(map[string]float64)
err = json.Unmarshal([]byte(prepareRatio), &valueMap2) err = json.Unmarshal([]byte(prepareRatio), &valueMap2)
if err != nil { if err != nil {
ret.SearchCacheBudgetGBRatio = 0.125 return ret, err
ret.LoadNumThreadRatio = 8 }
} else {
SearchCacheBudgetGBRatio, ok := valueMap2["search_cache_budget_gb"] SearchCacheBudgetGBRatio, ok := valueMap2["search_cache_budget_gb"]
if !ok { if !ok {
ret.SearchCacheBudgetGBRatio = 0.125 ret.SearchCacheBudgetGBRatio = DefaultSearchCacheBudgetGBRatio
} else { } else {
ret.SearchCacheBudgetGBRatio = SearchCacheBudgetGBRatio ret.SearchCacheBudgetGBRatio = SearchCacheBudgetGBRatio
} }
LoadNumThreadRatio, ok := valueMap2["num_threads"] LoadNumThreadRatio, ok := valueMap2["num_threads"]
if !ok { if !ok {
ret.LoadNumThreadRatio = 8 ret.LoadNumThreadRatio = DefaultLoadNumThreadRatio
} else { } else {
ret.LoadNumThreadRatio = LoadNumThreadRatio ret.LoadNumThreadRatio = LoadNumThreadRatio
} }
} }
}
beamWidthRatioStr, ok := value[BeamWidthRatioKey] beamWidthRatioStr, ok := value[BeamWidthRatioKey]
if !ok { if !ok {
ret.BeamWidthRatio = 4.0 ret.BeamWidthRatio = DefaultBeamWidthRatio
} else { } else {
beamWidthRatio, err := strconv.ParseFloat(beamWidthRatioStr, 64) beamWidthRatio, err := strconv.ParseFloat(beamWidthRatioStr, 64)
if err != nil { if err != nil {
ret.BeamWidthRatio = 4.0 ret.BeamWidthRatio = DefaultBeamWidthRatio
} else { } else {
ret.BeamWidthRatio = beamWidthRatio ret.BeamWidthRatio = beamWidthRatio
} }
} }
return ret return ret, nil
} }

View File

@ -27,7 +27,8 @@ func TestBigDataIndex_parse(t *testing.T) {
mapString := make(map[string]string) mapString := make(map[string]string)
mapString[BuildRatioKey] = "{\"pg_code_budget_gb\": 0.125, \"num_threads\": 1}" mapString[BuildRatioKey] = "{\"pg_code_budget_gb\": 0.125, \"num_threads\": 1}"
mapString[PrepareRatioKey] = "{\"search_cache_budget_gb\": 0.225, \"num_threads\": 8}" mapString[PrepareRatioKey] = "{\"search_cache_budget_gb\": 0.225, \"num_threads\": 8}"
extraParams := NewBigDataExtraParamsFromMap(mapString) extraParams, err := NewBigDataExtraParamsFromMap(mapString)
assert.NoError(t, err)
assert.Equal(t, 1.0, extraParams.BuildNumThreadsRatio) assert.Equal(t, 1.0, extraParams.BuildNumThreadsRatio)
assert.Equal(t, 8.0, extraParams.LoadNumThreadRatio) assert.Equal(t, 8.0, extraParams.LoadNumThreadRatio)
assert.Equal(t, 0.125, extraParams.PGCodeBudgetGBRatio) assert.Equal(t, 0.125, extraParams.PGCodeBudgetGBRatio)
@ -37,7 +38,8 @@ func TestBigDataIndex_parse(t *testing.T) {
t.Run("parse with partial", func(t *testing.T) { t.Run("parse with partial", func(t *testing.T) {
mapString := make(map[string]string) mapString := make(map[string]string)
mapString[PrepareRatioKey] = "{\"search_cache_budget_gb\": 0.225, \"num_threads\": 8}" mapString[PrepareRatioKey] = "{\"search_cache_budget_gb\": 0.225, \"num_threads\": 8}"
extraParams := NewBigDataExtraParamsFromMap(mapString) extraParams, err := NewBigDataExtraParamsFromMap(mapString)
assert.NoError(t, err)
assert.Equal(t, 1.0, extraParams.BuildNumThreadsRatio) assert.Equal(t, 1.0, extraParams.BuildNumThreadsRatio)
assert.Equal(t, 8.0, extraParams.LoadNumThreadRatio) assert.Equal(t, 8.0, extraParams.LoadNumThreadRatio)
assert.Equal(t, 0.125, extraParams.PGCodeBudgetGBRatio) assert.Equal(t, 0.125, extraParams.PGCodeBudgetGBRatio)
@ -46,7 +48,8 @@ func TestBigDataIndex_parse(t *testing.T) {
t.Run("parse with empty", func(t *testing.T) { t.Run("parse with empty", func(t *testing.T) {
mapString := make(map[string]string) mapString := make(map[string]string)
extraParams := NewBigDataExtraParamsFromMap(mapString) extraParams, err := NewBigDataExtraParamsFromMap(mapString)
assert.NoError(t, err)
assert.Equal(t, 1.0, extraParams.BuildNumThreadsRatio) assert.Equal(t, 1.0, extraParams.BuildNumThreadsRatio)
assert.Equal(t, 8.0, extraParams.LoadNumThreadRatio) assert.Equal(t, 8.0, extraParams.LoadNumThreadRatio)
assert.Equal(t, 0.125, extraParams.PGCodeBudgetGBRatio) assert.Equal(t, 0.125, extraParams.PGCodeBudgetGBRatio)
@ -54,7 +57,8 @@ func TestBigDataIndex_parse(t *testing.T) {
}) })
t.Run("parse with nil", func(t *testing.T) { t.Run("parse with nil", func(t *testing.T) {
extraParams := NewBigDataExtraParamsFromMap(nil) extraParams, err := NewBigDataExtraParamsFromMap(nil)
assert.NoError(t, err)
assert.Equal(t, 1.0, extraParams.BuildNumThreadsRatio) assert.Equal(t, 1.0, extraParams.BuildNumThreadsRatio)
assert.Equal(t, 8.0, extraParams.LoadNumThreadRatio) assert.Equal(t, 8.0, extraParams.LoadNumThreadRatio)
assert.Equal(t, 0.125, extraParams.PGCodeBudgetGBRatio) assert.Equal(t, 0.125, extraParams.PGCodeBudgetGBRatio)
@ -69,7 +73,8 @@ func TestBigDataIndex_parse(t *testing.T) {
"beamwidth_ratio": "8.0" "beamwidth_ratio": "8.0"
} }
` `
extraParams := NewBigDataExtraParamsFromJSON(jsonStr) extraParams, err := NewBigDataExtraParamsFromJSON(jsonStr)
assert.NoError(t, err)
assert.Equal(t, 1.0, extraParams.BuildNumThreadsRatio) assert.Equal(t, 1.0, extraParams.BuildNumThreadsRatio)
assert.Equal(t, 8.0, extraParams.LoadNumThreadRatio) assert.Equal(t, 8.0, extraParams.LoadNumThreadRatio)
assert.Equal(t, 0.125, extraParams.PGCodeBudgetGBRatio) assert.Equal(t, 0.125, extraParams.PGCodeBudgetGBRatio)
@ -83,7 +88,8 @@ func TestBigDataIndex_parse(t *testing.T) {
"build_ratio": "{\"pg_code_budget_gb\": 0.125, \"num_threads\": 1}" "build_ratio": "{\"pg_code_budget_gb\": 0.125, \"num_threads\": 1}"
} }
` `
extraParams := NewBigDataExtraParamsFromJSON(jsonStr) extraParams, err := NewBigDataExtraParamsFromJSON(jsonStr)
assert.NoError(t, err)
assert.Equal(t, 1.0, extraParams.BuildNumThreadsRatio) assert.Equal(t, 1.0, extraParams.BuildNumThreadsRatio)
assert.Equal(t, 8.0, extraParams.LoadNumThreadRatio) assert.Equal(t, 8.0, extraParams.LoadNumThreadRatio)
assert.Equal(t, 0.125, extraParams.PGCodeBudgetGBRatio) assert.Equal(t, 0.125, extraParams.PGCodeBudgetGBRatio)
@ -96,7 +102,8 @@ func TestBigDataIndex_parse(t *testing.T) {
{ {
} }
` `
extraParams := NewBigDataExtraParamsFromJSON(jsonStr) extraParams, err := NewBigDataExtraParamsFromJSON(jsonStr)
assert.NoError(t, err)
assert.Equal(t, 1.0, extraParams.BuildNumThreadsRatio) assert.Equal(t, 1.0, extraParams.BuildNumThreadsRatio)
assert.Equal(t, 8.0, extraParams.LoadNumThreadRatio) assert.Equal(t, 8.0, extraParams.LoadNumThreadRatio)
assert.Equal(t, 0.125, extraParams.PGCodeBudgetGBRatio) assert.Equal(t, 0.125, extraParams.PGCodeBudgetGBRatio)
@ -109,24 +116,15 @@ func TestBigDataIndex_parse(t *testing.T) {
{ x { x
} }
` `
extraParams := NewBigDataExtraParamsFromJSON(jsonStr) _, err := NewBigDataExtraParamsFromJSON(jsonStr)
assert.Equal(t, 1.0, extraParams.BuildNumThreadsRatio) assert.Error(t, err)
assert.Equal(t, 8.0, extraParams.LoadNumThreadRatio)
assert.Equal(t, 0.125, extraParams.PGCodeBudgetGBRatio)
assert.Equal(t, 0.125, extraParams.SearchCacheBudgetGBRatio)
assert.Equal(t, 4.0, extraParams.BeamWidthRatio)
}) })
t.Run("new from json invalid1", func(t *testing.T) { t.Run("new from json invalid1", func(t *testing.T) {
jsonStr := ` jsonStr := `
"" ""
` `
extraParams := NewBigDataExtraParamsFromJSON(jsonStr) _, err := NewBigDataExtraParamsFromJSON(jsonStr)
assert.Equal(t, 1.0, extraParams.BuildNumThreadsRatio) assert.Error(t, err)
assert.Equal(t, 8.0, extraParams.LoadNumThreadRatio)
assert.Equal(t, 0.125, extraParams.PGCodeBudgetGBRatio)
assert.Equal(t, 0.125, extraParams.SearchCacheBudgetGBRatio)
assert.Equal(t, 4.0, extraParams.BeamWidthRatio)
}) })
} }

View File

@ -109,7 +109,7 @@ func ParseIndexParamsMap(mStr string) (map[string]string, error) {
buffer := make(map[string]interface{}) buffer := make(map[string]interface{})
err := json.Unmarshal([]byte(mStr), &buffer) err := json.Unmarshal([]byte(mStr), &buffer)
if err != nil { if err != nil {
return nil, errors.New("unmarshal params failed") return nil, fmt.Errorf("unmarshal params failed, %w", err)
} }
ret := make(map[string]string) ret := make(map[string]string)
for key, value := range buffer { for key, value := range buffer {

View File

@ -9,7 +9,7 @@
// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express // is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
// or implied. See the License for the specific language governing permissions and limitations under the License. // or implied. See the License for the specific language governing permissions and limitations under the License.
package metricsinfo package hardware
import ( import (
"errors" "errors"

View File

@ -9,7 +9,7 @@
// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express // is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
// or implied. See the License for the specific language governing permissions and limitations under the License. // or implied. See the License for the specific language governing permissions and limitations under the License.
package metricsinfo package hardware
import ( import (
"errors" "errors"

View File

@ -12,7 +12,7 @@
//go:build linux //go:build linux
// +build linux // +build linux
package metricsinfo package hardware
import ( import (
"testing" "testing"

View File

@ -9,7 +9,7 @@
// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express // is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
// or implied. See the License for the specific language governing permissions and limitations under the License. // or implied. See the License for the specific language governing permissions and limitations under the License.
package metricsinfo package hardware
import ( import (
"errors" "errors"

View File

@ -9,16 +9,21 @@
// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express // is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
// or implied. See the License for the specific language governing permissions and limitations under the License. // or implied. See the License for the specific language governing permissions and limitations under the License.
package metricsinfo package hardware
import ( import (
"flag"
syslog "log"
"runtime"
"sync" "sync"
"github.com/shirou/gopsutil/v3/cpu" "github.com/shirou/gopsutil/v3/cpu"
"github.com/shirou/gopsutil/v3/mem" "github.com/shirou/gopsutil/v3/mem"
"go.uber.org/automaxprocs/maxprocs"
"go.uber.org/zap" "go.uber.org/zap"
"github.com/milvus-io/milvus/internal/log" "github.com/milvus-io/milvus/internal/log"
"github.com/milvus-io/milvus/internal/util/typeutil"
) )
var ( var (
@ -27,16 +32,24 @@ var (
icErr error icErr error
) )
// GetCPUCoreCount returns the count of cpu core. // Initialize maxprocs
func GetCPUCoreCount(logical bool) int { func InitMaxprocs(serverType string, flags *flag.FlagSet) {
c, err := cpu.Counts(logical) if serverType == typeutil.EmbeddedRole {
if err != nil { // Initialize maxprocs while discarding log.
log.Warn("failed to get cpu counts", maxprocs.Set(maxprocs.Logger(nil))
zap.Error(err)) } else {
return 0 // Initialize maxprocs.
maxprocs.Set(maxprocs.Logger(syslog.Printf))
} }
}
return c // GetCPUNum returns the count of cpu core.
func GetCPUNum() int {
cur := runtime.GOMAXPROCS(0)
if cur <= 0 {
cur = runtime.NumCPU()
}
return cur
} }
// GetCPUUsage returns the cpu usage in percentage. // GetCPUUsage returns the cpu usage in percentage.
@ -120,6 +133,11 @@ func GetUsedMemoryCount() uint64 {
return stats.Used return stats.Used
} }
// GetFreeMemoryCount returns the free memory in bytes.
func GetFreeMemoryCount() uint64 {
return GetMemoryCount() - GetUsedMemoryCount()
}
// TODO(dragondriver): not accurate to calculate disk usage when we use distributed storage // TODO(dragondriver): not accurate to calculate disk usage when we use distributed storage
// GetDiskCount returns the disk count in bytes. // GetDiskCount returns the disk count in bytes.

View File

@ -9,7 +9,7 @@
// is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express // is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
// or implied. See the License for the specific language governing permissions and limitations under the License. // or implied. See the License for the specific language governing permissions and limitations under the License.
package metricsinfo package hardware
import ( import (
"testing" "testing"
@ -22,10 +22,7 @@ import (
func Test_GetCPUCoreCount(t *testing.T) { func Test_GetCPUCoreCount(t *testing.T) {
log.Info("TestGetCPUCoreCount", log.Info("TestGetCPUCoreCount",
zap.Int("physical CPUCoreCount", GetCPUCoreCount(false))) zap.Int("physical CPUCoreCount", GetCPUNum()))
log.Info("TestGetCPUCoreCount",
zap.Int("logical CPUCoreCount", GetCPUCoreCount(true)))
} }
func Test_GetCPUUsage(t *testing.T) { func Test_GetCPUUsage(t *testing.T) {

View File

@ -0,0 +1,186 @@
// Licensed to the LF AI & Data foundation under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package indexparams
import (
"fmt"
"strconv"
"unsafe"
"github.com/milvus-io/milvus/internal/util/hardware"
"github.com/milvus-io/milvus/internal/util/paramtable"
)
const (
PQCodeBudgetRatioKey = "pq_code_budget_gb_ratio"
NumBuildThreadRatioKey = "num_build_thread_ratio"
SearchCacheBudgetRatioKey = "search_cache_budget_gb_ratio"
NumLoadThreadRatioKey = "num_load_thread_ratio"
BeamWidthRatioKey = "beamwidth_ratio"
MaxDegreeKey = "max_degree"
SearchListSizeKey = "search_list_size"
PQCodeBudgetKey = "pq_code_budget_gb"
BuildDramBudgetKey = "build_dram_budget_gb"
NumBuildThreadKey = "num_build_thread"
SearchCacheBudgetKey = "search_cache_budget_gb"
NumLoadThreadKey = "num_load_thread"
BeamWidthKey = "beamwidth"
MaxLoadThread = 64
MaxBeamWidth = 16
)
func getRowDataSizeOfFloatVector(numRows int64, dim int64) int64 {
var floatValue float32
/* #nosec G103 */
return int64(unsafe.Sizeof(floatValue)) * dim * numRows
}
// FillDiskIndexParams fill ratio params to index param on proxy node
// Which will be used to calculate build and load params
func FillDiskIndexParams(params *paramtable.ComponentParam, indexParams map[string]string) error {
maxDegree := strconv.FormatInt(params.CommonCfg.MaxDegree, 10)
searchListSize := strconv.FormatInt(params.CommonCfg.SearchListSize, 10)
pgCodeBudgetGBRatio := params.CommonCfg.PGCodeBudgetGBRatio
buildNumThreadsRatio := params.CommonCfg.BuildNumThreadsRatio
searchCacheBudgetGBRatio := params.CommonCfg.SearchCacheBudgetGBRatio
loadNumThreadRatio := params.CommonCfg.LoadNumThreadRatio
beamWidthRatio := params.CommonCfg.BeamWidthRatio
if params.AutoIndexConfig.Enable {
var ok bool
maxDegree, ok = params.AutoIndexConfig.IndexParams[MaxDegreeKey]
if !ok {
return fmt.Errorf("index param max_degree not exist")
}
searchListSize, ok = params.AutoIndexConfig.IndexParams[SearchListSizeKey]
if !ok {
return fmt.Errorf("index param search_list_size not exist")
}
pgCodeBudgetGBRatio = params.AutoIndexConfig.BigDataExtraParams.PGCodeBudgetGBRatio
buildNumThreadsRatio = params.AutoIndexConfig.BigDataExtraParams.BuildNumThreadsRatio
searchCacheBudgetGBRatio = params.AutoIndexConfig.BigDataExtraParams.SearchCacheBudgetGBRatio
loadNumThreadRatio = params.AutoIndexConfig.BigDataExtraParams.LoadNumThreadRatio
beamWidthRatio = params.AutoIndexConfig.BigDataExtraParams.BeamWidthRatio
}
indexParams[MaxDegreeKey] = maxDegree
indexParams[SearchListSizeKey] = searchListSize
indexParams[PQCodeBudgetRatioKey] = fmt.Sprintf("%f", pgCodeBudgetGBRatio)
indexParams[NumBuildThreadRatioKey] = fmt.Sprintf("%f", buildNumThreadsRatio)
indexParams[SearchCacheBudgetRatioKey] = fmt.Sprintf("%f", searchCacheBudgetGBRatio)
indexParams[NumLoadThreadRatioKey] = fmt.Sprintf("%f", loadNumThreadRatio)
indexParams[BeamWidthRatioKey] = fmt.Sprintf("%f", beamWidthRatio)
return nil
}
// SetDiskIndexBuildParams set index build params with ratio params on indexNode
// IndexNode cal build param with ratio params and cpu count, memory count...
func SetDiskIndexBuildParams(indexParams map[string]string, numRows int64) error {
dimStr, ok := indexParams["dim"]
if !ok {
// type param dim has been put into index params before build index
return fmt.Errorf("type param dim not exist")
}
dim, err := strconv.ParseInt(dimStr, 10, 64)
if err != nil {
return err
}
pgCodeBudgetGBRatioStr, ok := indexParams[PQCodeBudgetRatioKey]
if !ok {
return fmt.Errorf("index param pgCodeBudgetGBRatio not exist")
}
pgCodeBudgetGBRatio, err := strconv.ParseFloat(pgCodeBudgetGBRatioStr, 64)
if err != nil {
return err
}
buildNumThreadsRatioStr, ok := indexParams[NumBuildThreadRatioKey]
if !ok {
return fmt.Errorf("index param buildNumThreadsRatio not exist")
}
buildNumThreadsRatio, err := strconv.ParseFloat(buildNumThreadsRatioStr, 64)
if err != nil {
return err
}
indexParams[PQCodeBudgetKey] = fmt.Sprintf("%f",
float32(getRowDataSizeOfFloatVector(numRows, dim))*float32(pgCodeBudgetGBRatio)/(1<<30))
indexParams[NumBuildThreadKey] = strconv.Itoa(int(float32(hardware.GetCPUNum()) * float32(buildNumThreadsRatio)))
indexParams[BuildDramBudgetKey] = fmt.Sprintf("%f", float32(hardware.GetFreeMemoryCount())/(1<<30))
return nil
}
// SetDiskIndexLoadParams set disk index load params with ratio params on queryNode
// QueryNode cal load params with ratio params ans cpu count...
func SetDiskIndexLoadParams(indexParams map[string]string, numRows int64) error {
dimStr, ok := indexParams["dim"]
if !ok {
// type param dim has been put into index params before build index
return fmt.Errorf("type param dim not exist")
}
dim, err := strconv.ParseInt(dimStr, 10, 64)
if err != nil {
return err
}
searchCacheBudgetGBRatioStr, ok := indexParams[SearchCacheBudgetRatioKey]
if !ok {
return fmt.Errorf("index param searchCacheBudgetGBRatio not exist")
}
searchCacheBudgetGBRatio, err := strconv.ParseFloat(searchCacheBudgetGBRatioStr, 64)
if err != nil {
return err
}
loadNumThreadRatioStr, ok := indexParams[NumLoadThreadRatioKey]
if !ok {
return fmt.Errorf("index param loadNumThreadRatio not exist")
}
loadNumThreadRatio, err := strconv.ParseFloat(loadNumThreadRatioStr, 64)
if err != nil {
return err
}
beamWidthRatioStr, ok := indexParams[BeamWidthRatioKey]
if !ok {
return fmt.Errorf("index param beamWidthRatio not exist")
}
beamWidthRatio, err := strconv.ParseFloat(beamWidthRatioStr, 64)
if err != nil {
return err
}
indexParams[SearchCacheBudgetKey] = fmt.Sprintf("%f",
float32(getRowDataSizeOfFloatVector(numRows, dim))*float32(searchCacheBudgetGBRatio)/(1<<30))
numLoadThread := int(float32(hardware.GetCPUNum()) * float32(loadNumThreadRatio))
if numLoadThread > MaxLoadThread {
numLoadThread = MaxLoadThread
}
indexParams[NumLoadThreadKey] = strconv.Itoa(numLoadThread)
beamWidth := int(float32(hardware.GetCPUNum()) * float32(beamWidthRatio))
if beamWidth > MaxBeamWidth {
beamWidth = MaxBeamWidth
}
indexParams[BeamWidthKey] = strconv.Itoa(beamWidth)
return nil
}

View File

@ -0,0 +1,139 @@
// Licensed to the LF AI & Data foundation under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package indexparams
import (
"strconv"
"testing"
"github.com/stretchr/testify/assert"
"github.com/milvus-io/milvus/internal/util/autoindex"
"github.com/milvus-io/milvus/internal/util/paramtable"
)
func TestDiskIndexParams(t *testing.T) {
t.Run("fill index params without auto index param", func(t *testing.T) {
var params paramtable.ComponentParam
params.Init()
indexParams := make(map[string]string)
err := FillDiskIndexParams(&params, indexParams)
assert.NoError(t, err)
pgCodeBudgetGBRatio, err := strconv.ParseFloat(indexParams[PQCodeBudgetRatioKey], 64)
assert.NoError(t, err)
assert.Equal(t, 0.125, pgCodeBudgetGBRatio)
buildNumThreadsRatio, err := strconv.ParseFloat(indexParams[NumBuildThreadRatioKey], 64)
assert.NoError(t, err)
assert.Equal(t, 1.0, buildNumThreadsRatio)
searchCacheBudgetGBRatio, err := strconv.ParseFloat(indexParams[SearchCacheBudgetRatioKey], 64)
assert.NoError(t, err)
assert.Equal(t, 0.125, searchCacheBudgetGBRatio)
loadNumThreadRatio, err := strconv.ParseFloat(indexParams[NumLoadThreadRatioKey], 64)
assert.NoError(t, err)
assert.Equal(t, 8.0, loadNumThreadRatio)
beamWidthRatio, err := strconv.ParseFloat(indexParams[BeamWidthRatioKey], 64)
assert.NoError(t, err)
assert.Equal(t, 4.0, beamWidthRatio)
})
t.Run("fill index params with auto index", func(t *testing.T) {
var params paramtable.ComponentParam
params.AutoIndexConfig.Enable = true
mapString := make(map[string]string)
mapString[autoindex.BuildRatioKey] = "{\"pg_code_budget_gb\": 0.125, \"num_threads\": 1}"
mapString[autoindex.PrepareRatioKey] = "{\"search_cache_budget_gb\": 0.225, \"num_threads\": 4}"
extraParams, err := autoindex.NewBigDataExtraParamsFromMap(mapString)
assert.NoError(t, err)
params.AutoIndexConfig.BigDataExtraParams = extraParams
params.AutoIndexConfig.IndexParams = make(map[string]string)
params.AutoIndexConfig.IndexParams["max_degree"] = "56"
params.AutoIndexConfig.IndexParams["search_list_size"] = "100"
params.AutoIndexConfig.IndexParams["index_type"] = "DISKANN"
indexParams := make(map[string]string)
err = FillDiskIndexParams(&params, indexParams)
assert.NoError(t, err)
pgCodeBudgetGBRatio, err := strconv.ParseFloat(indexParams[PQCodeBudgetRatioKey], 64)
assert.NoError(t, err)
assert.Equal(t, 0.125, pgCodeBudgetGBRatio)
buildNumThreadsRatio, err := strconv.ParseFloat(indexParams[NumBuildThreadRatioKey], 64)
assert.NoError(t, err)
assert.Equal(t, 1.0, buildNumThreadsRatio)
searchCacheBudgetGBRatio, err := strconv.ParseFloat(indexParams[SearchCacheBudgetRatioKey], 64)
assert.NoError(t, err)
assert.Equal(t, 0.225, searchCacheBudgetGBRatio)
loadNumThreadRatio, err := strconv.ParseFloat(indexParams[NumLoadThreadRatioKey], 64)
assert.NoError(t, err)
assert.Equal(t, 4.0, loadNumThreadRatio)
beamWidthRatio, err := strconv.ParseFloat(indexParams[BeamWidthRatioKey], 64)
assert.NoError(t, err)
assert.Equal(t, 4.0, beamWidthRatio)
})
t.Run("set disk index build params", func(t *testing.T) {
indexParams := make(map[string]string)
indexParams[PQCodeBudgetRatioKey] = "0.125"
indexParams[NumBuildThreadRatioKey] = "1.0"
err := SetDiskIndexBuildParams(indexParams, 100)
assert.Error(t, err)
indexParams["dim"] = "128"
err = SetDiskIndexBuildParams(indexParams, 100)
assert.NoError(t, err)
_, ok := indexParams[PQCodeBudgetKey]
assert.True(t, ok)
_, ok = indexParams[BuildDramBudgetKey]
assert.True(t, ok)
_, ok = indexParams[NumBuildThreadKey]
assert.True(t, ok)
})
t.Run("set disk index load params", func(t *testing.T) {
indexParams := make(map[string]string)
indexParams[SearchCacheBudgetRatioKey] = "0.125"
indexParams[NumLoadThreadRatioKey] = "8.0"
indexParams[BeamWidthRatioKey] = "4.0"
err := SetDiskIndexLoadParams(indexParams, 100)
assert.Error(t, err)
indexParams["dim"] = "128"
err = SetDiskIndexLoadParams(indexParams, 100)
assert.NoError(t, err)
_, ok := indexParams[SearchCacheBudgetKey]
assert.True(t, ok)
_, ok = indexParams[NumLoadThreadKey]
assert.True(t, ok)
_, ok = indexParams[BeamWidthKey]
assert.True(t, ok)
})
}

View File

@ -92,7 +92,12 @@ func (p *autoIndexConfig) parseBuildParams(paramsStr string) {
} }
func (p *autoIndexConfig) parseExtraParams(paramsStr string) { func (p *autoIndexConfig) parseExtraParams(paramsStr string) {
p.BigDataExtraParams = autoindex.NewBigDataExtraParamsFromJSON(paramsStr) var err error
p.BigDataExtraParams, err = autoindex.NewBigDataExtraParamsFromJSON(paramsStr)
if err != nil {
err2 := fmt.Errorf("parse auto index extra params failed:%w", err)
panic(err2)
}
} }
func (p *autoIndexConfig) parseSearchParams(paramsStr string) { func (p *autoIndexConfig) parseSearchParams(paramsStr string) {

View File

@ -21,9 +21,10 @@ import (
"strconv" "strconv"
"testing" "testing"
"github.com/stretchr/testify/assert"
"github.com/milvus-io/milvus/internal/common" "github.com/milvus-io/milvus/internal/common"
"github.com/milvus-io/milvus/internal/util/autoindex" "github.com/milvus-io/milvus/internal/util/autoindex"
"github.com/stretchr/testify/assert"
) )
const ( const (

View File

@ -37,6 +37,14 @@ const (
DefaultSessionTTL = 60 //s DefaultSessionTTL = 60 //s
DefaultSessionRetryTimes = 30 DefaultSessionRetryTimes = 30
DefaultMaxDegree = 56
DefaultSearchListSize = 100
DefaultPGCodeBudgetGBRatio = 0.125
DefaultBuildNumThreadsRatio = 1.0
DefaultSearchCacheBudgetGBRatio = 0.125
DefaultLoadNumThreadRatio = 8.0
DefaultBeamWidthRatio = 4.0
) )
// ComponentParam is used to quickly and easily access all components' configurations. // ComponentParam is used to quickly and easily access all components' configurations.
@ -135,6 +143,13 @@ type commonConfig struct {
EntityExpirationTTL time.Duration EntityExpirationTTL time.Duration
IndexSliceSize int64 IndexSliceSize int64
MaxDegree int64
SearchListSize int64
PGCodeBudgetGBRatio float64
BuildNumThreadsRatio float64
SearchCacheBudgetGBRatio float64
LoadNumThreadRatio float64
BeamWidthRatio float64
GracefulTime int64 GracefulTime int64
StorageType string StorageType string
@ -179,6 +194,13 @@ func (p *commonConfig) init(base *BaseTable) {
p.initSimdType() p.initSimdType()
p.initIndexSliceSize() p.initIndexSliceSize()
p.initMaxDegree()
p.initSearchListSize()
p.initPGCodeBudgetGBRatio()
p.initBuildNumThreadsRatio()
p.initSearchCacheBudgetGBRatio()
p.initLoadNumThreadRatio()
p.initBeamWidthRatio()
p.initGracefulTime() p.initGracefulTime()
p.initStorageType() p.initStorageType()
@ -379,6 +401,34 @@ func (p *commonConfig) initIndexSliceSize() {
p.IndexSliceSize = p.Base.ParseInt64WithDefault("common.indexSliceSize", DefaultIndexSliceSize) p.IndexSliceSize = p.Base.ParseInt64WithDefault("common.indexSliceSize", DefaultIndexSliceSize)
} }
func (p *commonConfig) initPGCodeBudgetGBRatio() {
p.PGCodeBudgetGBRatio = p.Base.ParseFloatWithDefault("common.DiskIndex.PGCodeBudgetGBRatio", DefaultPGCodeBudgetGBRatio)
}
func (p *commonConfig) initBuildNumThreadsRatio() {
p.BuildNumThreadsRatio = p.Base.ParseFloatWithDefault("common.DiskIndex.BuildNumThreadsRatio", DefaultBuildNumThreadsRatio)
}
func (p *commonConfig) initSearchCacheBudgetGBRatio() {
p.SearchCacheBudgetGBRatio = p.Base.ParseFloatWithDefault("common.DiskIndex.SearchCacheBudgetGBRatio", DefaultSearchCacheBudgetGBRatio)
}
func (p *commonConfig) initLoadNumThreadRatio() {
p.LoadNumThreadRatio = p.Base.ParseFloatWithDefault("common.DiskIndex.LoadNumThreadRatio", DefaultLoadNumThreadRatio)
}
func (p *commonConfig) initBeamWidthRatio() {
p.BeamWidthRatio = p.Base.ParseFloatWithDefault("common.DiskIndex.BeamWidthRatio", DefaultBeamWidthRatio)
}
func (p *commonConfig) initMaxDegree() {
p.MaxDegree = p.Base.ParseInt64WithDefault("common.DiskIndex.MaxDegree", DefaultMaxDegree)
}
func (p *commonConfig) initSearchListSize() {
p.SearchListSize = p.Base.ParseInt64WithDefault("common.DiskIndex.SearchListSize", DefaultSearchListSize)
}
func (p *commonConfig) initGracefulTime() { func (p *commonConfig) initGracefulTime() {
p.GracefulTime = p.Base.ParseInt64WithDefault("common.gracefulTime", DefaultGracefulTime) p.GracefulTime = p.Base.ParseInt64WithDefault("common.gracefulTime", DefaultGracefulTime)
} }