mirror of https://github.com/milvus-io/milvus.git
Fix config path error
Signed-off-by: zhenshan.cao <zhenshan.cao@zilliz.com>pull/4973/head^2
parent
a177f48577
commit
3acd55f675
|
@ -0,0 +1,124 @@
|
|||
// s3-benchmark.go
|
||||
// Copyright (c) 2017 Wasabi Technology, Inc.
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"github.com/czs007/suvlim/storage/pkg"
|
||||
. "github.com/czs007/suvlim/storage/pkg/types"
|
||||
"crypto/md5"
|
||||
"flag"
|
||||
"fmt"
|
||||
"code.cloudfoundry.org/bytefmt"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"math/rand"
|
||||
"net/http"
|
||||
"os"
|
||||
"sync/atomic"
|
||||
"time"
|
||||
"context"
|
||||
)
|
||||
|
||||
// Global variables
|
||||
var duration_secs, threads int
|
||||
var object_size uint64
|
||||
var object_data []byte
|
||||
var running_threads, upload_count, upload_slowdown_count int32
|
||||
var endtime, upload_finish time.Time
|
||||
|
||||
|
||||
func logit(msg string) {
|
||||
fmt.Println(msg)
|
||||
logfile, _ := os.OpenFile("benchmark.log", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666)
|
||||
if logfile != nil {
|
||||
logfile.WriteString(time.Now().Format(http.TimeFormat) + ": " + msg + "\n")
|
||||
logfile.Close()
|
||||
}
|
||||
}
|
||||
|
||||
func _putFile(ctx context.Context, store Store){
|
||||
//objnum := atomic.AddInt32(&upload_count, 1)
|
||||
key := "collection_abc"
|
||||
err := store.PutRow(ctx, []byte(key), object_data, "abc", uint64(time.Now().Unix()))
|
||||
if err != nil {
|
||||
atomic.AddInt32(&upload_slowdown_count, 1)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func runPutFile(thread_num int) {
|
||||
var store Store
|
||||
var err error
|
||||
ctx := context.Background()
|
||||
store, err = storage.NewStore(ctx, TIKVDriver)
|
||||
if err != nil {
|
||||
panic(err.Error())
|
||||
}
|
||||
|
||||
for time.Now().Before(endtime) {
|
||||
_putFile(ctx, store)
|
||||
}
|
||||
|
||||
// Remember last done time
|
||||
upload_finish = time.Now()
|
||||
// One less thread
|
||||
atomic.AddInt32(&running_threads, -1)
|
||||
}
|
||||
|
||||
func main() {
|
||||
// Hello
|
||||
|
||||
// Parse command line
|
||||
myflag := flag.NewFlagSet("myflag", flag.ExitOnError)
|
||||
myflag.IntVar(&duration_secs, "d", 1, "Duration of each test in seconds")
|
||||
myflag.IntVar(&threads, "t", 1, "Number of threads to run")
|
||||
|
||||
var sizeArg string
|
||||
myflag.StringVar(&sizeArg, "z", "1M", "Size of objects in bytes with postfix K, M, and G")
|
||||
if err := myflag.Parse(os.Args[1:]); err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
// Check the arguments
|
||||
var err error
|
||||
if object_size, err = bytefmt.ToBytes(sizeArg); err != nil {
|
||||
log.Fatalf("Invalid -z argument for object size: %v", err)
|
||||
}
|
||||
|
||||
logit(fmt.Sprintf("Parameters: duration=%d, threads=%d, size=%s",
|
||||
duration_secs, threads, sizeArg))
|
||||
|
||||
// Initialize data for the bucket
|
||||
object_data = make([]byte, object_size)
|
||||
rand.Read(object_data)
|
||||
hasher := md5.New()
|
||||
hasher.Write(object_data)
|
||||
|
||||
// reset counters
|
||||
upload_count = 0
|
||||
upload_slowdown_count = 0
|
||||
|
||||
running_threads = int32(threads)
|
||||
|
||||
// Run the upload case
|
||||
starttime := time.Now()
|
||||
endtime = starttime.Add(time.Second * time.Duration(duration_secs))
|
||||
|
||||
for n := 1; n <= threads; n++ {
|
||||
go runPutFile(n)
|
||||
}
|
||||
|
||||
// Wait for it to finish
|
||||
for atomic.LoadInt32(&running_threads) > 0 {
|
||||
time.Sleep(time.Millisecond)
|
||||
}
|
||||
upload_time := upload_finish.Sub(starttime).Seconds()
|
||||
|
||||
bps := float64(uint64(upload_count)*object_size) / upload_time
|
||||
logit(fmt.Sprintf("PUT time %.1f secs, objects = %d, speed = %sB/sec, %.1f operations/sec. Slowdowns = %d",
|
||||
upload_time, upload_count, bytefmt.ByteSize(uint64(bps)), float64(upload_count)/upload_time, upload_slowdown_count))
|
||||
|
||||
fmt.Println(" upload_count :", upload_count)
|
||||
|
||||
}
|
12
conf/conf.go
12
conf/conf.go
|
@ -4,6 +4,8 @@ import (
|
|||
"github.com/czs007/suvlim/storage/pkg/types"
|
||||
yaml "gopkg.in/yaml.v2"
|
||||
"io/ioutil"
|
||||
"path"
|
||||
"runtime"
|
||||
)
|
||||
|
||||
// yaml.MapSlice
|
||||
|
@ -58,10 +60,14 @@ func init() {
|
|||
load_config()
|
||||
}
|
||||
|
||||
func getCurrentFileDir() string {
|
||||
_, fpath, _, _ := runtime.Caller(0)
|
||||
return path.Dir(fpath)
|
||||
}
|
||||
|
||||
func load_config() {
|
||||
//var config ServerConfig
|
||||
filename := "../conf/config.yaml"
|
||||
source, err := ioutil.ReadFile(filename)
|
||||
filePath := path.Join(getCurrentFileDir(), "config.yaml")
|
||||
source, err := ioutil.ReadFile(filePath)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
|
|
@ -15,8 +15,8 @@ master:
|
|||
|
||||
etcd:
|
||||
address: localhost
|
||||
port: 0
|
||||
rootpath: a
|
||||
port: 2379
|
||||
rootpath: suvlim
|
||||
segthreshold: 10000
|
||||
|
||||
timesync:
|
||||
|
|
|
@ -7,6 +7,12 @@ extern "C" {
|
|||
|
||||
typedef void* CSegmentBase;
|
||||
|
||||
typedef struct CQueryInfo {
|
||||
long int num_queries;
|
||||
int topK;
|
||||
const char* field_name;
|
||||
} CQueryInfo;
|
||||
|
||||
CSegmentBase
|
||||
NewSegment(CPartition partition, unsigned long segment_id);
|
||||
|
||||
|
@ -38,14 +44,23 @@ Delete(CSegmentBase c_segment,
|
|||
long int
|
||||
PreDelete(CSegmentBase c_segment, long int size);
|
||||
|
||||
//int
|
||||
//Search(CSegmentBase c_segment,
|
||||
// const char* query_json,
|
||||
// unsigned long timestamp,
|
||||
// float* query_raw_data,
|
||||
// int num_of_query_raw_data,
|
||||
// long int* result_ids,
|
||||
// float* result_distances);
|
||||
|
||||
int
|
||||
Search(CSegmentBase c_segment,
|
||||
const char* query_json,
|
||||
unsigned long timestamp,
|
||||
float* query_raw_data,
|
||||
int num_of_query_raw_data,
|
||||
long int* result_ids,
|
||||
float* result_distances);
|
||||
CQueryInfo c_query_info,
|
||||
unsigned long timestamp,
|
||||
float* query_raw_data,
|
||||
int num_of_query_raw_data,
|
||||
long int* result_ids,
|
||||
float* result_distances);
|
||||
|
||||
//////////////////////////////////////////////////////////////////
|
||||
|
||||
|
|
|
@ -89,26 +89,56 @@ PreDelete(CSegmentBase c_segment, long int size) {
|
|||
}
|
||||
|
||||
|
||||
//int
|
||||
//Search(CSegmentBase c_segment,
|
||||
// const char* query_json,
|
||||
// unsigned long timestamp,
|
||||
// float* query_raw_data,
|
||||
// int num_of_query_raw_data,
|
||||
// long int* result_ids,
|
||||
// float* result_distances) {
|
||||
// auto segment = (milvus::dog_segment::SegmentBase*)c_segment;
|
||||
// milvus::dog_segment::QueryResult query_result;
|
||||
//
|
||||
// // parse query param json
|
||||
// auto query_param_json_string = std::string(query_json);
|
||||
// auto query_param_json = nlohmann::json::parse(query_param_json_string);
|
||||
//
|
||||
// // construct QueryPtr
|
||||
// auto query_ptr = std::make_shared<milvus::query::Query>();
|
||||
// query_ptr->num_queries = query_param_json["num_queries"];
|
||||
// query_ptr->topK = query_param_json["topK"];
|
||||
// query_ptr->field_name = query_param_json["field_name"];
|
||||
//
|
||||
// query_ptr->query_raw_data.resize(num_of_query_raw_data);
|
||||
// memcpy(query_ptr->query_raw_data.data(), query_raw_data, num_of_query_raw_data * sizeof(float));
|
||||
//
|
||||
// auto res = segment->Query(query_ptr, timestamp, query_result);
|
||||
//
|
||||
// // result_ids and result_distances have been allocated memory in goLang,
|
||||
// // so we don't need to malloc here.
|
||||
// memcpy(result_ids, query_result.result_ids_.data(), query_result.row_num_ * sizeof(long int));
|
||||
// memcpy(result_distances, query_result.result_distances_.data(), query_result.row_num_ * sizeof(float));
|
||||
//
|
||||
// return res.code();
|
||||
//}
|
||||
|
||||
int
|
||||
Search(CSegmentBase c_segment,
|
||||
const char* query_json,
|
||||
unsigned long timestamp,
|
||||
float* query_raw_data,
|
||||
int num_of_query_raw_data,
|
||||
long int* result_ids,
|
||||
float* result_distances) {
|
||||
CQueryInfo c_query_info,
|
||||
unsigned long timestamp,
|
||||
float* query_raw_data,
|
||||
int num_of_query_raw_data,
|
||||
long int* result_ids,
|
||||
float* result_distances) {
|
||||
auto segment = (milvus::dog_segment::SegmentBase*)c_segment;
|
||||
milvus::dog_segment::QueryResult query_result;
|
||||
|
||||
// parse query param json
|
||||
auto query_param_json_string = std::string(query_json);
|
||||
auto query_param_json = nlohmann::json::parse(query_param_json_string);
|
||||
|
||||
// construct QueryPtr
|
||||
auto query_ptr = std::make_shared<milvus::query::Query>();
|
||||
query_ptr->num_queries = query_param_json["num_queries"];
|
||||
query_ptr->topK = query_param_json["topK"];
|
||||
query_ptr->field_name = query_param_json["field_name"];
|
||||
query_ptr->num_queries = c_query_info.num_queries;
|
||||
query_ptr->topK = c_query_info.topK;
|
||||
query_ptr->field_name = c_query_info.field_name;
|
||||
|
||||
query_ptr->query_raw_data.resize(num_of_query_raw_data);
|
||||
memcpy(query_ptr->query_raw_data.data(), query_raw_data, num_of_query_raw_data * sizeof(float));
|
||||
|
|
|
@ -7,6 +7,12 @@ extern "C" {
|
|||
|
||||
typedef void* CSegmentBase;
|
||||
|
||||
typedef struct CQueryInfo {
|
||||
long int num_queries;
|
||||
int topK;
|
||||
const char* field_name;
|
||||
} CQueryInfo;
|
||||
|
||||
CSegmentBase
|
||||
NewSegment(CPartition partition, unsigned long segment_id);
|
||||
|
||||
|
@ -38,14 +44,23 @@ Delete(CSegmentBase c_segment,
|
|||
long int
|
||||
PreDelete(CSegmentBase c_segment, long int size);
|
||||
|
||||
//int
|
||||
//Search(CSegmentBase c_segment,
|
||||
// const char* query_json,
|
||||
// unsigned long timestamp,
|
||||
// float* query_raw_data,
|
||||
// int num_of_query_raw_data,
|
||||
// long int* result_ids,
|
||||
// float* result_distances);
|
||||
|
||||
int
|
||||
Search(CSegmentBase c_segment,
|
||||
const char* query_json,
|
||||
unsigned long timestamp,
|
||||
float* query_raw_data,
|
||||
int num_of_query_raw_data,
|
||||
long int* result_ids,
|
||||
float* result_distances);
|
||||
CQueryInfo c_query_info,
|
||||
unsigned long timestamp,
|
||||
float* query_raw_data,
|
||||
int num_of_query_raw_data,
|
||||
long int* result_ids,
|
||||
float* result_distances);
|
||||
|
||||
//////////////////////////////////////////////////////////////////
|
||||
|
||||
|
|
|
@ -8,267 +8,328 @@
|
|||
|
||||
|
||||
TEST(CApiTest, CollectionTest) {
|
||||
auto collection_name = "collection0";
|
||||
auto schema_tmp_conf = "null_schema";
|
||||
auto collection = NewCollection(collection_name, schema_tmp_conf);
|
||||
DeleteCollection(collection);
|
||||
auto collection_name = "collection0";
|
||||
auto schema_tmp_conf = "null_schema";
|
||||
auto collection = NewCollection(collection_name, schema_tmp_conf);
|
||||
DeleteCollection(collection);
|
||||
}
|
||||
|
||||
|
||||
TEST(CApiTest, PartitonTest) {
|
||||
auto collection_name = "collection0";
|
||||
auto schema_tmp_conf = "null_schema";
|
||||
auto collection = NewCollection(collection_name, schema_tmp_conf);
|
||||
auto partition_name = "partition0";
|
||||
auto partition = NewPartition(collection, partition_name);
|
||||
DeleteCollection(collection);
|
||||
DeletePartition(partition);
|
||||
auto collection_name = "collection0";
|
||||
auto schema_tmp_conf = "null_schema";
|
||||
auto collection = NewCollection(collection_name, schema_tmp_conf);
|
||||
auto partition_name = "partition0";
|
||||
auto partition = NewPartition(collection, partition_name);
|
||||
DeleteCollection(collection);
|
||||
DeletePartition(partition);
|
||||
}
|
||||
|
||||
|
||||
TEST(CApiTest, SegmentTest) {
|
||||
auto collection_name = "collection0";
|
||||
auto schema_tmp_conf = "null_schema";
|
||||
auto collection = NewCollection(collection_name, schema_tmp_conf);
|
||||
auto partition_name = "partition0";
|
||||
auto partition = NewPartition(collection, partition_name);
|
||||
auto segment = NewSegment(partition, 0);
|
||||
DeleteCollection(collection);
|
||||
DeletePartition(partition);
|
||||
DeleteSegment(segment);
|
||||
auto collection_name = "collection0";
|
||||
auto schema_tmp_conf = "null_schema";
|
||||
auto collection = NewCollection(collection_name, schema_tmp_conf);
|
||||
auto partition_name = "partition0";
|
||||
auto partition = NewPartition(collection, partition_name);
|
||||
auto segment = NewSegment(partition, 0);
|
||||
DeleteCollection(collection);
|
||||
DeletePartition(partition);
|
||||
DeleteSegment(segment);
|
||||
}
|
||||
|
||||
|
||||
TEST(CApiTest, InsertTest) {
|
||||
auto collection_name = "collection0";
|
||||
auto schema_tmp_conf = "null_schema";
|
||||
auto collection = NewCollection(collection_name, schema_tmp_conf);
|
||||
auto partition_name = "partition0";
|
||||
auto partition = NewPartition(collection, partition_name);
|
||||
auto segment = NewSegment(partition, 0);
|
||||
auto collection_name = "collection0";
|
||||
auto schema_tmp_conf = "null_schema";
|
||||
auto collection = NewCollection(collection_name, schema_tmp_conf);
|
||||
auto partition_name = "partition0";
|
||||
auto partition = NewPartition(collection, partition_name);
|
||||
auto segment = NewSegment(partition, 0);
|
||||
|
||||
std::vector<char> raw_data;
|
||||
std::vector<uint64_t> timestamps;
|
||||
std::vector<int64_t> uids;
|
||||
int N = 10000;
|
||||
std::default_random_engine e(67);
|
||||
for (int i = 0; i < N; ++i) {
|
||||
uids.push_back(100000 + i);
|
||||
timestamps.push_back(0);
|
||||
// append vec
|
||||
float vec[16];
|
||||
for (auto &x: vec) {
|
||||
x = e() % 2000 * 0.001 - 1.0;
|
||||
}
|
||||
raw_data.insert(raw_data.end(), (const char *) std::begin(vec), (const char *) std::end(vec));
|
||||
int age = e() % 100;
|
||||
raw_data.insert(raw_data.end(), (const char *) &age, ((const char *) &age) + sizeof(age));
|
||||
std::vector<char> raw_data;
|
||||
std::vector<uint64_t> timestamps;
|
||||
std::vector<int64_t> uids;
|
||||
int N = 10000;
|
||||
std::default_random_engine e(67);
|
||||
for (int i = 0; i < N; ++i) {
|
||||
uids.push_back(100000 + i);
|
||||
timestamps.push_back(0);
|
||||
// append vec
|
||||
float vec[16];
|
||||
for (auto &x: vec) {
|
||||
x = e() % 2000 * 0.001 - 1.0;
|
||||
}
|
||||
raw_data.insert(raw_data.end(), (const char *) std::begin(vec), (const char *) std::end(vec));
|
||||
int age = e() % 100;
|
||||
raw_data.insert(raw_data.end(), (const char *) &age, ((const char *) &age) + sizeof(age));
|
||||
}
|
||||
|
||||
auto line_sizeof = (sizeof(int) + sizeof(float) * 16);
|
||||
auto line_sizeof = (sizeof(int) + sizeof(float) * 16);
|
||||
|
||||
auto offset = PreInsert(segment, N);
|
||||
auto offset = PreInsert(segment, N);
|
||||
|
||||
auto res = Insert(segment, offset, N, uids.data(), timestamps.data(), raw_data.data(), (int) line_sizeof, N);
|
||||
auto res = Insert(segment, offset, N, uids.data(), timestamps.data(), raw_data.data(), (int) line_sizeof, N);
|
||||
|
||||
assert(res == 0);
|
||||
assert(res == 0);
|
||||
|
||||
DeleteCollection(collection);
|
||||
DeletePartition(partition);
|
||||
DeleteSegment(segment);
|
||||
DeleteCollection(collection);
|
||||
DeletePartition(partition);
|
||||
DeleteSegment(segment);
|
||||
}
|
||||
|
||||
|
||||
TEST(CApiTest, DeleteTest) {
|
||||
auto collection_name = "collection0";
|
||||
auto schema_tmp_conf = "null_schema";
|
||||
auto collection = NewCollection(collection_name, schema_tmp_conf);
|
||||
auto partition_name = "partition0";
|
||||
auto partition = NewPartition(collection, partition_name);
|
||||
auto segment = NewSegment(partition, 0);
|
||||
auto collection_name = "collection0";
|
||||
auto schema_tmp_conf = "null_schema";
|
||||
auto collection = NewCollection(collection_name, schema_tmp_conf);
|
||||
auto partition_name = "partition0";
|
||||
auto partition = NewPartition(collection, partition_name);
|
||||
auto segment = NewSegment(partition, 0);
|
||||
|
||||
long delete_primary_keys[] = {100000, 100001, 100002};
|
||||
unsigned long delete_timestamps[] = {0, 0, 0};
|
||||
long delete_primary_keys[] = {100000, 100001, 100002};
|
||||
unsigned long delete_timestamps[] = {0, 0, 0};
|
||||
|
||||
auto offset = PreDelete(segment, 3);
|
||||
auto offset = PreDelete(segment, 3);
|
||||
|
||||
auto del_res = Delete(segment, offset, 3, delete_primary_keys, delete_timestamps);
|
||||
assert(del_res == 0);
|
||||
auto del_res = Delete(segment, offset, 3, delete_primary_keys, delete_timestamps);
|
||||
assert(del_res == 0);
|
||||
|
||||
DeleteCollection(collection);
|
||||
DeletePartition(partition);
|
||||
DeleteSegment(segment);
|
||||
DeleteCollection(collection);
|
||||
DeletePartition(partition);
|
||||
DeleteSegment(segment);
|
||||
}
|
||||
|
||||
|
||||
TEST(CApiTest, SearchTest) {
|
||||
auto collection_name = "collection0";
|
||||
auto schema_tmp_conf = "null_schema";
|
||||
auto collection = NewCollection(collection_name, schema_tmp_conf);
|
||||
auto partition_name = "partition0";
|
||||
auto partition = NewPartition(collection, partition_name);
|
||||
auto segment = NewSegment(partition, 0);
|
||||
auto collection_name = "collection0";
|
||||
auto schema_tmp_conf = "null_schema";
|
||||
auto collection = NewCollection(collection_name, schema_tmp_conf);
|
||||
auto partition_name = "partition0";
|
||||
auto partition = NewPartition(collection, partition_name);
|
||||
auto segment = NewSegment(partition, 0);
|
||||
|
||||
std::vector<char> raw_data;
|
||||
std::vector<uint64_t> timestamps;
|
||||
std::vector<int64_t> uids;
|
||||
int N = 10000;
|
||||
std::default_random_engine e(67);
|
||||
for (int i = 0; i < N; ++i) {
|
||||
uids.push_back(100000 + i);
|
||||
timestamps.push_back(0);
|
||||
// append vec
|
||||
float vec[16];
|
||||
for (auto &x: vec) {
|
||||
x = e() % 2000 * 0.001 - 1.0;
|
||||
}
|
||||
raw_data.insert(raw_data.end(), (const char *) std::begin(vec), (const char *) std::end(vec));
|
||||
int age = e() % 100;
|
||||
raw_data.insert(raw_data.end(), (const char *) &age, ((const char *) &age) + sizeof(age));
|
||||
std::vector<char> raw_data;
|
||||
std::vector<uint64_t> timestamps;
|
||||
std::vector<int64_t> uids;
|
||||
int N = 10000;
|
||||
std::default_random_engine e(67);
|
||||
for (int i = 0; i < N; ++i) {
|
||||
uids.push_back(100000 + i);
|
||||
timestamps.push_back(0);
|
||||
// append vec
|
||||
float vec[16];
|
||||
for (auto &x: vec) {
|
||||
x = e() % 2000 * 0.001 - 1.0;
|
||||
}
|
||||
raw_data.insert(raw_data.end(), (const char *) std::begin(vec), (const char *) std::end(vec));
|
||||
int age = e() % 100;
|
||||
raw_data.insert(raw_data.end(), (const char *) &age, ((const char *) &age) + sizeof(age));
|
||||
}
|
||||
|
||||
auto line_sizeof = (sizeof(int) + sizeof(float) * 16);
|
||||
auto line_sizeof = (sizeof(int) + sizeof(float) * 16);
|
||||
|
||||
auto offset = PreInsert(segment, N);
|
||||
auto offset = PreInsert(segment, N);
|
||||
|
||||
auto ins_res = Insert(segment, offset, N, uids.data(), timestamps.data(), raw_data.data(), (int) line_sizeof, N);
|
||||
assert(ins_res == 0);
|
||||
auto ins_res = Insert(segment, offset, N, uids.data(), timestamps.data(), raw_data.data(), (int) line_sizeof, N);
|
||||
assert(ins_res == 0);
|
||||
|
||||
long result_ids[10];
|
||||
float result_distances[10];
|
||||
long result_ids[10];
|
||||
float result_distances[10];
|
||||
|
||||
auto query_json = std::string(R"({"field_name":"fakevec","num_queries":1,"topK":10})");
|
||||
std::vector<float> query_raw_data(16);
|
||||
for (int i = 0; i < 16; i++) {
|
||||
query_raw_data[i] = e() % 2000 * 0.001 - 1.0;
|
||||
}
|
||||
auto query_json = std::string(R"({"field_name":"fakevec","num_queries":1,"topK":10})");
|
||||
std::vector<float> query_raw_data(16);
|
||||
for (int i = 0; i < 16; i++) {
|
||||
query_raw_data[i] = e() % 2000 * 0.001 - 1.0;
|
||||
}
|
||||
|
||||
auto sea_res = Search(segment, query_json.data(), 1, query_raw_data.data(), 16, result_ids, result_distances);
|
||||
assert(sea_res == 0);
|
||||
CQueryInfo queryInfo{1, 10, "fakevec"};
|
||||
|
||||
DeleteCollection(collection);
|
||||
DeletePartition(partition);
|
||||
DeleteSegment(segment);
|
||||
auto sea_res = Search(segment, queryInfo, 1, query_raw_data.data(), 16, result_ids, result_distances);
|
||||
assert(sea_res == 0);
|
||||
|
||||
DeleteCollection(collection);
|
||||
DeletePartition(partition);
|
||||
DeleteSegment(segment);
|
||||
}
|
||||
|
||||
|
||||
TEST(CApiTest, SearchSimpleTest) {
|
||||
auto collection_name = "collection0";
|
||||
auto schema_tmp_conf = "null_schema";
|
||||
auto collection = NewCollection(collection_name, schema_tmp_conf);
|
||||
auto partition_name = "partition0";
|
||||
auto partition = NewPartition(collection, partition_name);
|
||||
auto segment = NewSegment(partition, 0);
|
||||
|
||||
std::vector<char> raw_data;
|
||||
std::vector<uint64_t> timestamps;
|
||||
std::vector<int64_t> uids;
|
||||
|
||||
int N = 3;
|
||||
int DIM = 16;
|
||||
|
||||
std::vector<float> vec(DIM);
|
||||
for (int i = 0; i < DIM; i++) {
|
||||
vec[i] = i;
|
||||
}
|
||||
|
||||
for (int i = 0; i < N; i++) {
|
||||
uids.push_back(i);
|
||||
timestamps.emplace_back(i);
|
||||
// append vec
|
||||
|
||||
raw_data.insert(raw_data.end(), (const char *) &vec, ((const char *) &vec) + sizeof(float) * vec.size());
|
||||
int age = i;
|
||||
raw_data.insert(raw_data.end(), (const char *) &age, ((const char *) &age) + sizeof(age));
|
||||
}
|
||||
|
||||
auto line_sizeof = (sizeof(int) + sizeof(float) * DIM);
|
||||
|
||||
auto offset = PreInsert(segment, N);
|
||||
|
||||
auto ins_res = Insert(segment, offset, N, uids.data(), timestamps.data(), raw_data.data(), (int) line_sizeof, N);
|
||||
assert(ins_res == 0);
|
||||
|
||||
Close(segment);
|
||||
BuildIndex(segment);
|
||||
|
||||
long result_ids[10];
|
||||
float result_distances[10];
|
||||
|
||||
std::vector<float> query_raw_data(DIM);
|
||||
for (int i = 0; i < DIM; i++) {
|
||||
query_raw_data[i] = i;
|
||||
}
|
||||
|
||||
CQueryInfo queryInfo{1, 10, "fakevec"};
|
||||
|
||||
auto sea_res = Search(segment, queryInfo, 1, query_raw_data.data(), DIM, result_ids, result_distances);
|
||||
assert(sea_res == 0);
|
||||
|
||||
DeleteCollection(collection);
|
||||
DeletePartition(partition);
|
||||
DeleteSegment(segment);
|
||||
}
|
||||
|
||||
|
||||
TEST(CApiTest, IsOpenedTest) {
|
||||
auto collection_name = "collection0";
|
||||
auto schema_tmp_conf = "null_schema";
|
||||
auto collection = NewCollection(collection_name, schema_tmp_conf);
|
||||
auto partition_name = "partition0";
|
||||
auto partition = NewPartition(collection, partition_name);
|
||||
auto segment = NewSegment(partition, 0);
|
||||
auto collection_name = "collection0";
|
||||
auto schema_tmp_conf = "null_schema";
|
||||
auto collection = NewCollection(collection_name, schema_tmp_conf);
|
||||
auto partition_name = "partition0";
|
||||
auto partition = NewPartition(collection, partition_name);
|
||||
auto segment = NewSegment(partition, 0);
|
||||
|
||||
auto is_opened = IsOpened(segment);
|
||||
assert(is_opened);
|
||||
auto is_opened = IsOpened(segment);
|
||||
assert(is_opened);
|
||||
|
||||
DeleteCollection(collection);
|
||||
DeletePartition(partition);
|
||||
DeleteSegment(segment);
|
||||
DeleteCollection(collection);
|
||||
DeletePartition(partition);
|
||||
DeleteSegment(segment);
|
||||
}
|
||||
|
||||
|
||||
TEST(CApiTest, CloseTest) {
|
||||
auto collection_name = "collection0";
|
||||
auto schema_tmp_conf = "null_schema";
|
||||
auto collection = NewCollection(collection_name, schema_tmp_conf);
|
||||
auto partition_name = "partition0";
|
||||
auto partition = NewPartition(collection, partition_name);
|
||||
auto segment = NewSegment(partition, 0);
|
||||
auto collection_name = "collection0";
|
||||
auto schema_tmp_conf = "null_schema";
|
||||
auto collection = NewCollection(collection_name, schema_tmp_conf);
|
||||
auto partition_name = "partition0";
|
||||
auto partition = NewPartition(collection, partition_name);
|
||||
auto segment = NewSegment(partition, 0);
|
||||
|
||||
auto status = Close(segment);
|
||||
assert(status == 0);
|
||||
auto status = Close(segment);
|
||||
assert(status == 0);
|
||||
|
||||
DeleteCollection(collection);
|
||||
DeletePartition(partition);
|
||||
DeleteSegment(segment);
|
||||
DeleteCollection(collection);
|
||||
DeletePartition(partition);
|
||||
DeleteSegment(segment);
|
||||
}
|
||||
|
||||
|
||||
namespace {
|
||||
auto generate_data(int N) {
|
||||
std::vector<char> raw_data;
|
||||
std::vector<uint64_t> timestamps;
|
||||
std::vector<int64_t> uids;
|
||||
std::default_random_engine er(42);
|
||||
std::uniform_real_distribution<> distribution(0.0, 1.0);
|
||||
std::default_random_engine ei(42);
|
||||
for (int i = 0; i < N; ++i) {
|
||||
auto generate_data(int N) {
|
||||
std::vector<char> raw_data;
|
||||
std::vector<uint64_t> timestamps;
|
||||
std::vector<int64_t> uids;
|
||||
std::default_random_engine er(42);
|
||||
std::uniform_real_distribution<> distribution(0.0, 1.0);
|
||||
std::default_random_engine ei(42);
|
||||
for (int i = 0; i < N; ++i) {
|
||||
uids.push_back(10 * N + i);
|
||||
timestamps.push_back(0);
|
||||
// append vec
|
||||
float vec[16];
|
||||
for (auto &x: vec) {
|
||||
x = distribution(er);
|
||||
x = distribution(er);
|
||||
}
|
||||
raw_data.insert(raw_data.end(), (const char *) std::begin(vec), (const char *) std::end(vec));
|
||||
int age = ei() % 100;
|
||||
raw_data.insert(raw_data.end(), (const char *) &age, ((const char *) &age) + sizeof(age));
|
||||
}
|
||||
return std::make_tuple(raw_data, timestamps, uids);
|
||||
}
|
||||
return std::make_tuple(raw_data, timestamps, uids);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
TEST(CApiTest, TestQuery) {
|
||||
auto collection_name = "collection0";
|
||||
auto schema_tmp_conf = "null_schema";
|
||||
auto collection = NewCollection(collection_name, schema_tmp_conf);
|
||||
auto partition_name = "partition0";
|
||||
auto partition = NewPartition(collection, partition_name);
|
||||
auto segment = NewSegment(partition, 0);
|
||||
TEST(CApiTest, TestSearchWithIndex) {
|
||||
auto collection_name = "collection0";
|
||||
auto schema_tmp_conf = "null_schema";
|
||||
auto collection = NewCollection(collection_name, schema_tmp_conf);
|
||||
auto partition_name = "partition0";
|
||||
auto partition = NewPartition(collection, partition_name);
|
||||
auto segment = NewSegment(partition, 0);
|
||||
|
||||
|
||||
int N = 1000 * 1000;
|
||||
auto[raw_data, timestamps, uids] = generate_data(N);
|
||||
auto line_sizeof = (sizeof(int) + sizeof(float) * 16);
|
||||
auto offset = PreInsert(segment, N);
|
||||
auto res = Insert(segment, offset, N, uids.data(), timestamps.data(), raw_data.data(), (int) line_sizeof, N);
|
||||
assert(res == 0);
|
||||
int N = 1000 * 1000;
|
||||
auto[raw_data, timestamps, uids] = generate_data(N);
|
||||
auto line_sizeof = (sizeof(int) + sizeof(float) * 16);
|
||||
auto offset = PreInsert(segment, N);
|
||||
auto res = Insert(segment, offset, N, uids.data(), timestamps.data(), raw_data.data(), (int) line_sizeof, N);
|
||||
assert(res == 0);
|
||||
|
||||
auto row_count = GetRowCount(segment);
|
||||
assert(row_count == N);
|
||||
auto row_count = GetRowCount(segment);
|
||||
assert(row_count == N);
|
||||
|
||||
std::vector<long> result_ids(10);
|
||||
std::vector<float> result_distances(10);
|
||||
auto query_json = std::string(R"({"field_name":"fakevec","num_queries":1,"topK":10})");
|
||||
auto sea_res = Search(segment, query_json.data(), 1, (float *) raw_data.data(), 16, result_ids.data(),
|
||||
result_distances.data());
|
||||
std::vector<long> result_ids(10);
|
||||
std::vector<float> result_distances(10);
|
||||
CQueryInfo queryInfo{1, 10, "fakevec"};
|
||||
auto sea_res = Search(segment, queryInfo, 1, (float *) raw_data.data(), 16, result_ids.data(),
|
||||
result_distances.data());
|
||||
|
||||
ASSERT_EQ(sea_res, 0);
|
||||
ASSERT_EQ(result_ids[0], 10 * N);
|
||||
ASSERT_EQ(result_distances[0], 0);
|
||||
ASSERT_EQ(sea_res, 0);
|
||||
ASSERT_EQ(result_ids[0], 10 * N);
|
||||
ASSERT_EQ(result_distances[0], 0);
|
||||
|
||||
auto N_del = N / 2;
|
||||
std::vector<uint64_t> del_ts(N_del, 100);
|
||||
auto pre_off = PreDelete(segment, N_del);
|
||||
Delete(segment, pre_off, N_del, uids.data(), del_ts.data());
|
||||
auto N_del = N / 2;
|
||||
std::vector<uint64_t> del_ts(N_del, 100);
|
||||
auto pre_off = PreDelete(segment, N_del);
|
||||
Delete(segment, pre_off, N_del, uids.data(), del_ts.data());
|
||||
|
||||
Close(segment);
|
||||
BuildIndex(segment);
|
||||
Close(segment);
|
||||
BuildIndex(segment);
|
||||
|
||||
|
||||
std::vector<long> result_ids2(10);
|
||||
std::vector<float> result_distances2(10);
|
||||
std::vector<long> result_ids2(10);
|
||||
std::vector<float> result_distances2(10);
|
||||
|
||||
sea_res = Search(segment, query_json.data(), 104, (float *) raw_data.data(), 16, result_ids2.data(),
|
||||
result_distances2.data());
|
||||
sea_res = Search(segment, queryInfo, 104, (float *) raw_data.data(), 16, result_ids2.data(),
|
||||
result_distances2.data());
|
||||
// sea_res = Search(segment, nullptr, 104, result_ids2.data(), result_distances2.data());
|
||||
|
||||
std::cout << "case 1" << std::endl;
|
||||
for (int i = 0; i < 10; ++i) {
|
||||
std::cout << result_ids[i] << "->" << result_distances[i] << std::endl;
|
||||
}
|
||||
std::cout << "case 2" << std::endl;
|
||||
for (int i = 0; i < 10; ++i) {
|
||||
std::cout << result_ids2[i] << "->" << result_distances2[i] << std::endl;
|
||||
}
|
||||
std::cout << "case 1" << std::endl;
|
||||
for (int i = 0; i < 10; ++i) {
|
||||
std::cout << result_ids[i] << "->" << result_distances[i] << std::endl;
|
||||
}
|
||||
std::cout << "case 2" << std::endl;
|
||||
for (int i = 0; i < 10; ++i) {
|
||||
std::cout << result_ids2[i] << "->" << result_distances2[i] << std::endl;
|
||||
}
|
||||
|
||||
for (auto x: result_ids2) {
|
||||
ASSERT_GE(x, 10 * N + N_del);
|
||||
ASSERT_LT(x, 10 * N + N);
|
||||
}
|
||||
for (auto x: result_ids2) {
|
||||
ASSERT_GE(x, 10 * N + N_del);
|
||||
ASSERT_LT(x, 10 * N + N);
|
||||
}
|
||||
|
||||
// auto iter = 0;
|
||||
// for(int i = 0; i < result_ids.size(); ++i) {
|
||||
|
@ -284,57 +345,57 @@ TEST(CApiTest, TestQuery) {
|
|||
// }
|
||||
|
||||
|
||||
DeleteCollection(collection);
|
||||
DeletePartition(partition);
|
||||
DeleteSegment(segment);
|
||||
DeleteCollection(collection);
|
||||
DeletePartition(partition);
|
||||
DeleteSegment(segment);
|
||||
}
|
||||
|
||||
TEST(CApiTest, GetDeletedCountTest) {
|
||||
auto collection_name = "collection0";
|
||||
auto schema_tmp_conf = "null_schema";
|
||||
auto collection = NewCollection(collection_name, schema_tmp_conf);
|
||||
auto partition_name = "partition0";
|
||||
auto partition = NewPartition(collection, partition_name);
|
||||
auto segment = NewSegment(partition, 0);
|
||||
auto collection_name = "collection0";
|
||||
auto schema_tmp_conf = "null_schema";
|
||||
auto collection = NewCollection(collection_name, schema_tmp_conf);
|
||||
auto partition_name = "partition0";
|
||||
auto partition = NewPartition(collection, partition_name);
|
||||
auto segment = NewSegment(partition, 0);
|
||||
|
||||
long delete_primary_keys[] = {100000, 100001, 100002};
|
||||
unsigned long delete_timestamps[] = {0, 0, 0};
|
||||
long delete_primary_keys[] = {100000, 100001, 100002};
|
||||
unsigned long delete_timestamps[] = {0, 0, 0};
|
||||
|
||||
auto offset = PreDelete(segment, 3);
|
||||
auto offset = PreDelete(segment, 3);
|
||||
|
||||
auto del_res = Delete(segment, offset, 3, delete_primary_keys, delete_timestamps);
|
||||
assert(del_res == 0);
|
||||
auto del_res = Delete(segment, offset, 3, delete_primary_keys, delete_timestamps);
|
||||
assert(del_res == 0);
|
||||
|
||||
// TODO: assert(deleted_count == len(delete_primary_keys))
|
||||
auto deleted_count = GetDeletedCount(segment);
|
||||
assert(deleted_count == 0);
|
||||
// TODO: assert(deleted_count == len(delete_primary_keys))
|
||||
auto deleted_count = GetDeletedCount(segment);
|
||||
assert(deleted_count == 0);
|
||||
|
||||
DeleteCollection(collection);
|
||||
DeletePartition(partition);
|
||||
DeleteSegment(segment);
|
||||
DeleteCollection(collection);
|
||||
DeletePartition(partition);
|
||||
DeleteSegment(segment);
|
||||
}
|
||||
|
||||
|
||||
TEST(CApiTest, GetRowCountTest) {
|
||||
auto collection_name = "collection0";
|
||||
auto schema_tmp_conf = "null_schema";
|
||||
auto collection = NewCollection(collection_name, schema_tmp_conf);
|
||||
auto partition_name = "partition0";
|
||||
auto partition = NewPartition(collection, partition_name);
|
||||
auto segment = NewSegment(partition, 0);
|
||||
auto collection_name = "collection0";
|
||||
auto schema_tmp_conf = "null_schema";
|
||||
auto collection = NewCollection(collection_name, schema_tmp_conf);
|
||||
auto partition_name = "partition0";
|
||||
auto partition = NewPartition(collection, partition_name);
|
||||
auto segment = NewSegment(partition, 0);
|
||||
|
||||
|
||||
int N = 10000;
|
||||
auto[raw_data, timestamps, uids] = generate_data(N);
|
||||
auto line_sizeof = (sizeof(int) + sizeof(float) * 16);
|
||||
auto offset = PreInsert(segment, N);
|
||||
auto res = Insert(segment, offset, N, uids.data(), timestamps.data(), raw_data.data(), (int) line_sizeof, N);
|
||||
assert(res == 0);
|
||||
int N = 10000;
|
||||
auto[raw_data, timestamps, uids] = generate_data(N);
|
||||
auto line_sizeof = (sizeof(int) + sizeof(float) * 16);
|
||||
auto offset = PreInsert(segment, N);
|
||||
auto res = Insert(segment, offset, N, uids.data(), timestamps.data(), raw_data.data(), (int) line_sizeof, N);
|
||||
assert(res == 0);
|
||||
|
||||
auto row_count = GetRowCount(segment);
|
||||
assert(row_count == N);
|
||||
auto row_count = GetRowCount(segment);
|
||||
assert(row_count == N);
|
||||
|
||||
DeleteCollection(collection);
|
||||
DeletePartition(partition);
|
||||
DeleteSegment(segment);
|
||||
DeleteCollection(collection);
|
||||
DeletePartition(partition);
|
||||
DeleteSegment(segment);
|
||||
}
|
47
go.mod
47
go.mod
|
@ -3,10 +3,13 @@ module github.com/czs007/suvlim
|
|||
go 1.15
|
||||
|
||||
require (
|
||||
cloud.google.com/go/bigquery v1.4.0 // indirect
|
||||
code.cloudfoundry.org/bytefmt v0.0.0-20200131002437-cf55d5288a48 // indirect
|
||||
github.com/99designs/keyring v1.1.5 // indirect
|
||||
github.com/BurntSushi/toml v0.3.1
|
||||
github.com/apache/pulsar-client-go v0.2.0
|
||||
github.com/apache/pulsar-client-go/oauth2 v0.0.0-20200825011529-c078454b47b6 // indirect
|
||||
github.com/DataDog/zstd v1.4.6-0.20200617134701-89f69fb7df32 // indirect
|
||||
github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d // indirect
|
||||
github.com/apache/pulsar-client-go v0.1.1
|
||||
github.com/apache/pulsar/pulsar-client-go v0.0.0-20200901051823-800681aaa9af
|
||||
github.com/coreos/etcd v3.3.25+incompatible // indirect
|
||||
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f
|
||||
|
@ -14,41 +17,65 @@ require (
|
|||
github.com/docker/go-units v0.4.0
|
||||
github.com/dvsekhvalnov/jose2go v0.0.0-20200901110807-248326c1351b // indirect
|
||||
github.com/frankban/quicktest v1.10.2 // indirect
|
||||
github.com/fsnotify/fsnotify v1.4.9 // indirect
|
||||
github.com/go-kit/kit v0.10.0 // indirect
|
||||
github.com/gogo/protobuf v1.3.1
|
||||
github.com/golang/protobuf v1.4.2
|
||||
github.com/golang/mock v1.4.4 // indirect
|
||||
github.com/golang/protobuf v1.3.2
|
||||
github.com/google/btree v1.0.0
|
||||
github.com/google/martian/v3 v3.0.0 // indirect
|
||||
github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99 // indirect
|
||||
github.com/google/uuid v1.1.1
|
||||
github.com/jpillora/backoff v1.0.0 // indirect
|
||||
github.com/json-iterator/go v1.1.10
|
||||
github.com/julienschmidt/httprouter v1.3.0 // indirect
|
||||
github.com/keybase/go-keychain v0.0.0-20200502122510-cda31fe0c86d // indirect
|
||||
github.com/klauspost/compress v1.10.11 // indirect
|
||||
github.com/minio/minio-go/v7 v7.0.5
|
||||
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f // indirect
|
||||
github.com/onsi/ginkgo v1.12.1 // indirect
|
||||
github.com/onsi/gomega v1.10.0 // indirect
|
||||
github.com/opentracing/opentracing-go v1.2.0
|
||||
github.com/pierrec/lz4 v2.5.2+incompatible // indirect
|
||||
github.com/pingcap/check v0.0.0-20200212061837-5e12011dc712
|
||||
github.com/pingcap/errors v0.11.4 // indirect
|
||||
github.com/pingcap/log v0.0.0-20200828042413-fce0951f1463
|
||||
github.com/pivotal-golang/bytefmt v0.0.0-20200131002437-cf55d5288a48
|
||||
github.com/prometheus/common v0.13.0 // indirect
|
||||
github.com/prometheus/client_golang v1.5.1 // indirect
|
||||
github.com/prometheus/common v0.10.0 // indirect
|
||||
github.com/prometheus/procfs v0.1.3 // indirect
|
||||
github.com/sirupsen/logrus v1.6.0
|
||||
github.com/stretchr/testify v1.6.1
|
||||
github.com/tikv/client-go v0.0.0-20200824032810-95774393107b
|
||||
github.com/tikv/pd v2.1.19+incompatible
|
||||
github.com/yahoo/athenz v1.9.16 // indirect
|
||||
go.etcd.io/etcd v0.5.0-alpha.5.0.20191023171146-3cf2f69b5738
|
||||
go.opencensus.io v0.22.4 // indirect
|
||||
go.uber.org/zap v1.15.0
|
||||
golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a // indirect
|
||||
golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6 // indirect
|
||||
golang.org/x/lint v0.0.0-20200302205851-738671d3881b // indirect
|
||||
golang.org/x/net v0.0.0-20200904194848-62affa334b73 // indirect
|
||||
golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43 // indirect
|
||||
golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f // indirect
|
||||
golang.org/x/tools v0.0.0-20200825202427-b303f430e36d // indirect
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
|
||||
google.golang.org/api v0.22.0 // indirect
|
||||
google.golang.org/appengine v1.6.6 // indirect
|
||||
google.golang.org/grpc v1.31.0
|
||||
google.golang.org/grpc/examples v0.0.0-20200828165940-d8ef479ab79a // indirect
|
||||
gopkg.in/natefinch/lumberjack.v2 v2.0.0
|
||||
gopkg.in/yaml.v2 v2.3.0
|
||||
honnef.co/go/tools v0.0.1-2020.1.4 // indirect
|
||||
k8s.io/utils v0.0.0-20200912215256-4140de9c8800 // indirect
|
||||
rsc.io/quote/v3 v3.1.0 // indirect
|
||||
sigs.k8s.io/yaml v1.2.0 // indirect
|
||||
)
|
||||
|
||||
replace go.etcd.io/bbolt => go.etcd.io/bbolt v1.3.5
|
||||
replace (
|
||||
github.com/coreos/etcd => github.com/ozonru/etcd v3.3.20-grpc1.27-origmodule+incompatible
|
||||
go.etcd.io/bbolt => go.etcd.io/bbolt v1.3.5
|
||||
|
||||
//replace go.etcd.io/etcd => go.etcd.io/etcd v0.5.0-alpha.5.0.20200329194405-dd816f0735f8
|
||||
replace google.golang.org/grpc => google.golang.org/grpc v1.26.0
|
||||
google.golang.org/api => google.golang.org/api v0.14.0
|
||||
|
||||
replace github.com/coreos/etcd => github.com/ozonru/etcd v3.3.20-grpc1.27-origmodule+incompatible
|
||||
//replace go.etcd.io/etcd => go.etcd.io/etcd v0.5.0-alpha.5.0.20200329194405-dd816f0735f8
|
||||
google.golang.org/grpc => google.golang.org/grpc v1.26.0
|
||||
)
|
||||
|
|
58
go.sum
58
go.sum
|
@ -9,15 +9,22 @@ cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6T
|
|||
cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4=
|
||||
cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M=
|
||||
cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc=
|
||||
cloud.google.com/go v0.55.0/go.mod h1:ZHmoY+/lIMNkN2+fBmuTiqZ4inFhvQad8ft7MT8IV5Y=
|
||||
cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk=
|
||||
cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs=
|
||||
cloud.google.com/go v0.58.0/go.mod h1:W+9FnSUw6nhVwXlFcp1eL+krq5+HQUJeUogSeJZZiWg=
|
||||
cloud.google.com/go v0.59.0/go.mod h1:qJxNOVCRTxHfwLhvDxxSI9vQc1zI59b9pEglp1Iv60E=
|
||||
cloud.google.com/go v0.60.0/go.mod h1:yw2G51M9IfRboUH61Us8GqCeF1PzPblB823Mn2q2eAU=
|
||||
cloud.google.com/go v0.61.0/go.mod h1:XukKJg4Y7QsUu0Hxg3qQKUWR4VuWivmyMK2+rUyxAqw=
|
||||
cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc=
|
||||
cloud.google.com/go v0.63.0/go.mod h1:GmezbQc7T2snqkEXWfZ0sy0VfkB/ivI2DdtJL2DEmlg=
|
||||
cloud.google.com/go v0.64.0/go.mod h1:xfORb36jGvE+6EexW71nMEtL025s3x6xvuYUKM4JLv4=
|
||||
cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY=
|
||||
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
|
||||
cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
|
||||
cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
|
||||
cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg=
|
||||
cloud.google.com/go/bigquery v1.6.0/go.mod h1:hyFDG0qSGdHNz8Q6nDN8rYIkld0q/+5uBZaelxiDLfE=
|
||||
cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
|
||||
cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
|
||||
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
|
||||
|
@ -25,11 +32,14 @@ cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1
|
|||
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
|
||||
cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
|
||||
cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
|
||||
cloud.google.com/go/pubsub v1.3.0/go.mod h1:FUF/vIYUAYfHCORqBhpurOjkuFRAzDyUJa92uzz+FXE=
|
||||
cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU=
|
||||
cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
|
||||
cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=
|
||||
cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
|
||||
cloud.google.com/go/storage v1.7.0/go.mod h1:jGMIBwF+L/tL6WN/W5InNgYYu4HP0DvGB6rQ1mufWfs=
|
||||
cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
|
||||
cloud.google.com/go/storage v1.9.0/go.mod h1:m+/etGaqZbylxaNT876QGXqEHp4PR2Rq5GMqICWb9bU=
|
||||
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
|
||||
code.cloudfoundry.org/bytefmt v0.0.0-20200131002437-cf55d5288a48 h1:/EMHruHCFXR9xClkGV/t0rmHrdhX4+trQUcBqjwc9xE=
|
||||
code.cloudfoundry.org/bytefmt v0.0.0-20200131002437-cf55d5288a48/go.mod h1:wN/zk7mhREp/oviagqUXY3EwuHhWyOvAdsn5Y4CzOrc=
|
||||
|
@ -53,6 +63,9 @@ github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRF
|
|||
github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
|
||||
github.com/apache/pulsar v1.22.1-incubating-candidate-2 h1:L4EBghcly9NMPtMKm6g+rHCz+0SR9rPHy7ejbnHwsBs=
|
||||
github.com/apache/pulsar v2.6.1+incompatible h1:zzRPza6C/gbycCruI5JKhsOqbHXQ15gGwPj7W32RFoU=
|
||||
github.com/apache/pulsar-client-go v0.1.1 h1:v/kU+2ZCC6yFIcbZrFtWa9/nvVzVr18L+xYJUvZSxEQ=
|
||||
github.com/apache/pulsar-client-go v0.1.1/go.mod h1:mlxC65KL1BLhGO2bnT9zWMttVzR2czVPb27D477YpyU=
|
||||
github.com/apache/pulsar-client-go v0.2.0-candidate-1/go.mod h1:POSPPmXv1RuoM7FzHaS3NurCSOopwin2ekGK2PcOgVM=
|
||||
github.com/apache/pulsar-client-go v0.2.0 h1:7teu0FaXzzKPjDdUNjA7dVYKFjCy6OVX5as6nUww4qk=
|
||||
github.com/apache/pulsar-client-go v0.2.0/go.mod h1:POSPPmXv1RuoM7FzHaS3NurCSOopwin2ekGK2PcOgVM=
|
||||
github.com/apache/pulsar-client-go/oauth2 v0.0.0-20200715083626-b9f8c5cedefb h1:E1P0FudxDdj2RhbveZC9i3PwukLCA/4XQSkBS/dw6/I=
|
||||
|
@ -146,6 +159,7 @@ github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385 h1:clC1lXBpe2kTj2VHdaI
|
|||
github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM=
|
||||
github.com/envoyproxy/data-plane-api v0.0.0-20200904023242-f4d8a28107ca h1:EvL1gA7uyPU2JVN93HbQwYOXyUjUJKYGStDN8eKD/Ss=
|
||||
github.com/envoyproxy/data-plane-api v0.0.0-20200909004014-2bb47b2b6fb0 h1:0edaQ8F7kgXmqz/tFjjl5rW/nAKUZ5Zg0Rv5vKiE6+U=
|
||||
github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g=
|
||||
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
|
||||
|
@ -169,12 +183,14 @@ github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgO
|
|||
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
|
||||
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
|
||||
github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
|
||||
github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
|
||||
github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
|
||||
github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
|
||||
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
|
||||
github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0=
|
||||
github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4=
|
||||
github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
|
||||
github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s=
|
||||
github.com/gogo/protobuf v0.0.0-20180717141946-636bf0302bc9/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
||||
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
||||
github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
||||
|
@ -199,7 +215,9 @@ github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71
|
|||
github.com/golang/protobuf v0.0.0-20180814211427-aa810b61a9c7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=
|
||||
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
github.com/golang/protobuf v1.3.3 h1:gyjaxf+svBWX08ZjK86iN9geUJF0H6gp2IRKX6Nf6/I=
|
||||
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
|
||||
github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
|
||||
github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk=
|
||||
|
@ -208,6 +226,7 @@ github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:x
|
|||
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
|
||||
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
|
||||
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
|
||||
github.com/golang/protobuf v1.4.1 h1:ZFgWrT+bLgsYPirOnRfKLYJLvssAegOj/hgyMFdJZe0=
|
||||
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
|
||||
github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0=
|
||||
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
|
||||
|
@ -301,6 +320,7 @@ github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX
|
|||
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
|
||||
github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
||||
github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
||||
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
||||
github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68=
|
||||
github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
||||
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
|
||||
|
@ -342,6 +362,7 @@ github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-b
|
|||
github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4=
|
||||
github.com/linkedin/goavro v2.1.0+incompatible h1:DV2aUlj2xZiuxQyvag8Dy7zjY69ENjS66bWkSfdpddY=
|
||||
github.com/linkedin/goavro v2.1.0+incompatible/go.mod h1:bBCwI2eGYpUI/4820s67MElg9tdeLbINjLjiM2xZFYM=
|
||||
github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ=
|
||||
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
|
||||
github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
|
||||
github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
|
||||
|
@ -393,12 +414,18 @@ github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:v
|
|||
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||
github.com/onsi/ginkgo v1.7.0 h1:WSHQ+IS43OoUrWtD1/bbclrwK8TTH5hzp+umCiuxHgs=
|
||||
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||
github.com/onsi/ginkgo v1.12.1 h1:mFwc4LvZ0xpSvDZ3E+k8Yte0hLOMxXUlP+yXtJqkYfQ=
|
||||
github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
|
||||
github.com/onsi/ginkgo v1.12.2/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
|
||||
github.com/onsi/ginkgo v1.12.3/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
|
||||
github.com/onsi/ginkgo v1.13.0/go.mod h1:+REjRxOmWfHCjfv9TTWB1jD1Frx4XydAD3zm1lskyM0=
|
||||
github.com/onsi/ginkgo v1.14.0 h1:2mOpI4JVVPBN+WQRa0WKH2eXR+Ey+uK4n7Zj0aYpIQA=
|
||||
github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
|
||||
github.com/onsi/gomega v1.4.3 h1:RE1xgDvH7imwFD45h+u2SgIfERHlS2yNG4DObb5BSKU=
|
||||
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
|
||||
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
|
||||
github.com/onsi/gomega v1.10.0 h1:Gwkk+PTu/nfOwNMtUB/mRUv0X7ewW5dO4AERT1ThVKo=
|
||||
github.com/onsi/gomega v1.10.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA=
|
||||
github.com/onsi/gomega v1.10.1 h1:o0+MgICZLuZ7xjH7Vx6zS/zcu93/BEp1VwkIW1mEXCE=
|
||||
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
|
||||
github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk=
|
||||
|
@ -458,6 +485,10 @@ github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod
|
|||
github.com/prometheus/client_golang v1.0.0 h1:vrDKnkGzuGvhNAL56c7DBz29ZL+KxnoR0x7enabFceM=
|
||||
github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
|
||||
github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og=
|
||||
github.com/prometheus/client_golang v1.5.1 h1:bdHYieyGlH+6OLEk2YQha8THib30KP0/yD0YH9m6xcA=
|
||||
github.com/prometheus/client_golang v1.5.1/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU=
|
||||
github.com/prometheus/client_golang v1.6.0/go.mod h1:ZLOG9ck3JLRdB5MgO8f+lLTe83AXG6ro35rLTxvnIl4=
|
||||
github.com/prometheus/client_golang v1.7.0/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
|
||||
github.com/prometheus/client_golang v1.7.1 h1:NTGy1Ja9pByO+xAeH/qiWnLrKtr3hJPNjaVUwnjpdpA=
|
||||
github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
|
||||
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
||||
|
@ -473,8 +504,12 @@ github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y8
|
|||
github.com/prometheus/common v0.4.1 h1:K0MGApIoQvMw27RTdJkPbr3JZ7DNbtxQNyi5STVM6Kw=
|
||||
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
||||
github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA=
|
||||
github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4=
|
||||
github.com/prometheus/common v0.10.0 h1:RyRA7RzGXQZiW+tGMr7sxa85G1z0yOpM1qq5c8lNawc=
|
||||
github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
|
||||
github.com/prometheus/common v0.11.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s=
|
||||
github.com/prometheus/common v0.11.1/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s=
|
||||
github.com/prometheus/common v0.12.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s=
|
||||
github.com/prometheus/common v0.13.0 h1:vJlpe9wPgDRM1Z+7Wj3zUUjY1nr6/1jNKyl7llliccg=
|
||||
github.com/prometheus/common v0.13.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s=
|
||||
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
||||
|
@ -499,6 +534,7 @@ github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg
|
|||
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
|
||||
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
||||
github.com/sirupsen/logrus v1.3.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
||||
github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
|
||||
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
|
||||
github.com/sirupsen/logrus v1.6.0 h1:UBcNElsrwanuuMsnGSlYmtmgbb23qDR5dG+6X6Oo89I=
|
||||
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
|
||||
|
@ -514,6 +550,7 @@ github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJ
|
|||
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
|
||||
github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI=
|
||||
github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
|
||||
github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
|
||||
github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
|
||||
github.com/spf13/pflag v1.0.1 h1:aCvUg6QPl3ibpQUxyLkrEkCHtPqYJL4x9AuhqVqFis4=
|
||||
github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
||||
|
@ -545,6 +582,8 @@ github.com/unrolled/render v1.0.0 h1:XYtvhA3UkpB7PqkvhUFYmpKD55OudoIeygcfus4vcd4
|
|||
github.com/unrolled/render v1.0.0/go.mod h1:tu82oB5W2ykJRVioYsB+IQKcft7ryBr7w12qMBUPyXg=
|
||||
github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
|
||||
github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
|
||||
github.com/valyala/gozstd v1.7.0 h1:Ljh5c9zboqLhwTI33al32R72iCZfn0mCbVGcFWbGwRQ=
|
||||
github.com/valyala/gozstd v1.7.0/go.mod h1:y5Ew47GLlP37EkTB+B4s7r6A5rdaeB7ftbl9zoYiIPQ=
|
||||
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8=
|
||||
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
|
||||
github.com/yahoo/athenz v1.8.55 h1:xGhxN3yLq334APyn0Zvcc+aqu78Q7BBhYJevM3EtTW0=
|
||||
|
@ -746,6 +785,7 @@ golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxb
|
|||
golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs=
|
||||
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
|
@ -814,7 +854,11 @@ google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/
|
|||
google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
|
||||
google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
|
||||
google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
|
||||
google.golang.org/api v0.23.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
|
||||
google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
|
||||
google.golang.org/api v0.25.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
|
||||
google.golang.org/api v0.26.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
|
||||
google.golang.org/api v0.27.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
|
||||
google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
|
||||
google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM=
|
||||
google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc=
|
||||
|
@ -841,9 +885,11 @@ google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvx
|
|||
google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
|
||||
google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
|
||||
google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
|
||||
google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150 h1:VPpdpQkGvFicX9yo4G5oxZPi9ALBnEOZblPSa/Wa2m4=
|
||||
google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
|
||||
google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA=
|
||||
google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
||||
google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63 h1:YzfoEYWbODU5Fbt37+h7X16BWQbad7Q4S6gclTKFXM8=
|
||||
google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
||||
google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
||||
google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
||||
|
@ -852,6 +898,7 @@ google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfG
|
|||
google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
||||
google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
||||
google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U=
|
||||
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 h1:+kGHl1aib/qcwaRi1CbqBZ1rk19r85MNUf8HaBghugY=
|
||||
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
|
||||
google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=
|
||||
google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
|
@ -861,9 +908,13 @@ google.golang.org/genproto v0.0.0-20200806141610-86f49bd18e98/go.mod h1:FWY/as6D
|
|||
google.golang.org/genproto v0.0.0-20200825200019-8632dd797987 h1:PDIOdWxZ8eRizhKa1AAvY53xsvLB1cWorMjslvY3VA8=
|
||||
google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/grpc v0.0.0-20180607172857-7a6a684ca69e/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
|
||||
google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
|
||||
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
||||
google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM=
|
||||
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
|
||||
google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
|
||||
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
|
||||
google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
|
||||
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
|
||||
google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
|
||||
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
|
||||
|
@ -884,9 +935,12 @@ google.golang.org/grpc/examples v0.0.0-20200828165940-d8ef479ab79a/go.mod h1:Lh5
|
|||
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
||||
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
|
||||
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
|
||||
google.golang.org/protobuf v1.20.0/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
|
||||
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
|
||||
google.golang.org/protobuf v1.20.1/go.mod h1:KqelGeouBkcbcuB3HCk4/YH2tmNLk6YSWA5LIWeI/lY=
|
||||
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
|
||||
google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||
google.golang.org/protobuf v1.23.0 h1:4MY060fB1DLGMB/7MBTLnwQUY6+F09GEiz6SsrNqyzM=
|
||||
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||
google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
|
||||
|
@ -927,6 +981,7 @@ gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=
|
|||
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||
|
@ -935,6 +990,9 @@ honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt
|
|||
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
|
||||
honnef.co/go/tools v0.0.1-2020.1.4 h1:UoveltGrhghAA7ePc+e+QYDHXrBps2PqFZiHkGR/xK8=
|
||||
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
|
||||
k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
|
||||
k8s.io/utils v0.0.0-20200912215256-4140de9c8800 h1:9ZNvfPvVIEsp/T1ez4GQuzCcCTEQWhovSofhqR73A6g=
|
||||
k8s.io/utils v0.0.0-20200912215256-4140de9c8800/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
|
||||
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
|
||||
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
|
||||
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
|
||||
|
|
|
@ -2843,11 +2843,13 @@ func (m *InsertOrDeleteMsg) GetExtraParams() []*KeyValuePair {
|
|||
type SearchMsg struct {
|
||||
CollectionName string `protobuf:"bytes,1,opt,name=collection_name,json=collectionName,proto3" json:"collection_name,omitempty"`
|
||||
Records *VectorRowRecord `protobuf:"bytes,2,opt,name=records,proto3" json:"records,omitempty"`
|
||||
PartitionTag string `protobuf:"bytes,3,opt,name=partition_tag,json=partitionTag,proto3" json:"partition_tag,omitempty"`
|
||||
PartitionTag []string `protobuf:"bytes,3,rep,name=partition_tag,json=partitionTag,proto3" json:"partition_tag,omitempty"`
|
||||
Uid int64 `protobuf:"varint,4,opt,name=uid,proto3" json:"uid,omitempty"`
|
||||
Timestamp uint64 `protobuf:"varint,5,opt,name=timestamp,proto3" json:"timestamp,omitempty"`
|
||||
ClientId int64 `protobuf:"varint,6,opt,name=client_id,json=clientId,proto3" json:"client_id,omitempty"`
|
||||
ExtraParams []*KeyValuePair `protobuf:"bytes,7,rep,name=extra_params,json=extraParams,proto3" json:"extra_params,omitempty"`
|
||||
Json []string `protobuf:"bytes,8,rep,name=json,proto3" json:"json,omitempty"`
|
||||
Dsl string `protobuf:"bytes,9,opt,name=dsl,proto3" json:"dsl,omitempty"`
|
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||
XXX_unrecognized []byte `json:"-"`
|
||||
XXX_sizecache int32 `json:"-"`
|
||||
|
@ -2892,11 +2894,11 @@ func (m *SearchMsg) GetRecords() *VectorRowRecord {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (m *SearchMsg) GetPartitionTag() string {
|
||||
func (m *SearchMsg) GetPartitionTag() []string {
|
||||
if m != nil {
|
||||
return m.PartitionTag
|
||||
}
|
||||
return ""
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *SearchMsg) GetUid() int64 {
|
||||
|
@ -2927,6 +2929,20 @@ func (m *SearchMsg) GetExtraParams() []*KeyValuePair {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (m *SearchMsg) GetJson() []string {
|
||||
if m != nil {
|
||||
return m.Json
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *SearchMsg) GetDsl() string {
|
||||
if m != nil {
|
||||
return m.Dsl
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
type TimeSyncMsg struct {
|
||||
Peer_Id int64 `protobuf:"varint,1,opt,name=peer_Id,json=peerId,proto3" json:"peer_Id,omitempty"`
|
||||
Timestamp uint64 `protobuf:"varint,2,opt,name=Timestamp,proto3" json:"Timestamp,omitempty"`
|
||||
|
@ -3098,189 +3114,190 @@ func init() {
|
|||
}
|
||||
|
||||
var fileDescriptor_0802b3a25fb57244 = []byte{
|
||||
// 2900 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x3a, 0xdd, 0x72, 0xdb, 0xc6,
|
||||
0xd5, 0x04, 0x49, 0x91, 0xc4, 0x01, 0x25, 0x41, 0x6b, 0xd9, 0x96, 0xed, 0xf8, 0xb3, 0x83, 0x6f,
|
||||
0xda, 0x3a, 0xee, 0x8c, 0xed, 0x30, 0xa9, 0xed, 0xd6, 0x49, 0x1a, 0xfe, 0x40, 0x12, 0x6a, 0x8a,
|
||||
0x94, 0x97, 0x90, 0x9d, 0x9f, 0xe9, 0xa0, 0x10, 0xb1, 0xa6, 0xd1, 0x10, 0x00, 0x0b, 0x80, 0x92,
|
||||
0xd9, 0xcb, 0xde, 0xb7, 0x33, 0xbd, 0xec, 0x4c, 0x6f, 0xda, 0x47, 0x68, 0xdf, 0xa2, 0x2f, 0x90,
|
||||
0x8b, 0xcc, 0xf4, 0xb2, 0xd3, 0xc7, 0xe8, 0xec, 0x0f, 0x48, 0x80, 0x22, 0x65, 0x31, 0x6a, 0xaf,
|
||||
0xb8, 0x38, 0xbb, 0xe7, 0xec, 0xf9, 0xdf, 0x73, 0x76, 0x09, 0x3f, 0x18, 0x7d, 0x33, 0x78, 0xe8,
|
||||
0xd9, 0x51, 0x4c, 0xc2, 0x87, 0x83, 0x70, 0xd4, 0x7f, 0xe8, 0x91, 0x28, 0xb2, 0x07, 0x24, 0xf9,
|
||||
0x7d, 0x30, 0x0a, 0x83, 0x38, 0x40, 0x8a, 0xe7, 0x0e, 0x4f, 0xc6, 0xd1, 0x03, 0xba, 0x44, 0x7b,
|
||||
// 2918 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x3a, 0xcd, 0x72, 0xdb, 0xc8,
|
||||
0xd1, 0x04, 0x49, 0x91, 0x44, 0x83, 0x92, 0xa0, 0xb1, 0x6c, 0xcb, 0xf6, 0xfa, 0xb3, 0x17, 0x5f,
|
||||
0x25, 0xf1, 0x3a, 0x55, 0xb6, 0x97, 0xbb, 0xb1, 0x9d, 0x78, 0x77, 0xb3, 0xfc, 0x81, 0x24, 0xc4,
|
||||
0x14, 0x29, 0x0f, 0x21, 0x7b, 0x7f, 0x2a, 0x85, 0x40, 0xc4, 0x98, 0x46, 0x96, 0x00, 0x18, 0x00,
|
||||
0x94, 0xcc, 0x1c, 0x73, 0x4f, 0xaa, 0x72, 0xcc, 0x31, 0x79, 0x84, 0xe4, 0x0d, 0x72, 0xcc, 0x0b,
|
||||
0xec, 0x61, 0xab, 0x72, 0x4c, 0xe5, 0x31, 0x52, 0xf3, 0x03, 0x12, 0xa0, 0x48, 0x59, 0x5c, 0x25,
|
||||
0x27, 0x0d, 0x7b, 0xa6, 0x7b, 0xfa, 0x7f, 0xba, 0x1b, 0x82, 0x1f, 0x8c, 0xbe, 0x19, 0x3c, 0xf4,
|
||||
0xec, 0x28, 0x26, 0xe1, 0xc3, 0x41, 0x38, 0xea, 0x3f, 0xf4, 0x48, 0x14, 0xd9, 0x03, 0x92, 0xfc,
|
||||
0x7d, 0x30, 0x0a, 0x83, 0x38, 0x40, 0x8a, 0xe7, 0x0e, 0x4f, 0xc6, 0xd1, 0x03, 0x7a, 0x44, 0x7b,
|
||||
0x05, 0xa5, 0x5e, 0x6c, 0xc7, 0xe3, 0x08, 0xfd, 0x04, 0x80, 0x84, 0x61, 0x10, 0x5a, 0xfd, 0xc0,
|
||||
0x21, 0x3b, 0xd2, 0x5d, 0xe9, 0xde, 0x46, 0xed, 0xda, 0x83, 0xd4, 0xda, 0x07, 0x3a, 0x9d, 0x6e,
|
||||
0x06, 0x0e, 0xc1, 0x32, 0x49, 0x86, 0xe8, 0x1a, 0x94, 0x42, 0x62, 0x47, 0x81, 0xbf, 0x93, 0xbf,
|
||||
0x2b, 0xdd, 0x93, 0xb1, 0xf8, 0xd2, 0x1e, 0x43, 0xf5, 0x39, 0x99, 0xbc, 0xb4, 0x87, 0x63, 0x72,
|
||||
0x68, 0xbb, 0x21, 0x52, 0xa1, 0xf0, 0x0d, 0x99, 0x30, 0xba, 0x32, 0xa6, 0x43, 0xb4, 0x0d, 0x6b,
|
||||
0x27, 0x74, 0x5a, 0x20, 0xf2, 0x0f, 0xed, 0xa7, 0xb0, 0xd1, 0x0c, 0x86, 0x43, 0xd2, 0x8f, 0xdd,
|
||||
0xc0, 0xef, 0xd8, 0x1e, 0x41, 0x3f, 0x82, 0xcd, 0xfe, 0x14, 0x62, 0xf9, 0xb6, 0x47, 0x04, 0x95,
|
||||
0x8d, 0x7e, 0x66, 0xa1, 0x36, 0x04, 0x94, 0x45, 0x6d, 0xbb, 0x51, 0x8c, 0x7e, 0x0c, 0xa5, 0x88,
|
||||
0x49, 0xc8, 0xb0, 0x94, 0xda, 0x95, 0x8c, 0x4c, 0x5c, 0x78, 0x2c, 0x96, 0xa0, 0x0f, 0x40, 0x9d,
|
||||
0xdb, 0x2b, 0xda, 0xc9, 0xdf, 0x2d, 0xdc, 0x93, 0xf1, 0x66, 0x76, 0xb3, 0x48, 0xeb, 0x81, 0xbc,
|
||||
0xeb, 0x92, 0xa1, 0xb3, 0x12, 0x8f, 0xe8, 0x36, 0xc0, 0x6b, 0x8a, 0xc5, 0xd7, 0x70, 0xc9, 0xe5,
|
||||
0xd7, 0x09, 0x1d, 0xed, 0x1f, 0x12, 0x94, 0x0f, 0xec, 0xd1, 0xc8, 0xf5, 0x07, 0xab, 0x31, 0xbe,
|
||||
0x80, 0x81, 0xfc, 0x42, 0x06, 0x28, 0xd5, 0xfe, 0x1b, 0xe2, 0xd9, 0x3b, 0x85, 0x45, 0x54, 0xd9,
|
||||
0x14, 0x16, 0x4b, 0xd0, 0x27, 0x50, 0x25, 0x6f, 0xe3, 0xd0, 0xb6, 0x46, 0x76, 0x68, 0x7b, 0xd1,
|
||||
0x4e, 0xf1, 0x6e, 0xe1, 0x9e, 0x52, 0xbb, 0x91, 0x41, 0x49, 0x5b, 0x19, 0x2b, 0x6c, 0xf9, 0x21,
|
||||
0x5b, 0xad, 0x45, 0xa0, 0x08, 0x59, 0x56, 0x37, 0xc4, 0x13, 0xa8, 0x7a, 0x1c, 0xd7, 0x1a, 0xba,
|
||||
0x51, 0xcc, 0x8c, 0xa0, 0xd4, 0xb6, 0x33, 0x28, 0x82, 0x38, 0x56, 0xbc, 0xd9, 0x2e, 0xda, 0x73,
|
||||
0xd8, 0x38, 0xb4, 0xc3, 0xd8, 0xa5, 0x02, 0x33, 0x3e, 0x2e, 0x6e, 0x1b, 0x15, 0x0a, 0xb1, 0x3d,
|
||||
0x10, 0x7a, 0xa3, 0x43, 0x6d, 0x08, 0xeb, 0x53, 0x62, 0xab, 0xcb, 0xf0, 0x00, 0xae, 0x8c, 0x12,
|
||||
0x6c, 0x2b, 0xb6, 0x07, 0x96, 0x1d, 0x86, 0xf6, 0x44, 0xf8, 0xd3, 0xd6, 0x74, 0xca, 0xb4, 0x07,
|
||||
0x75, 0x3a, 0xa1, 0xbd, 0x80, 0xcd, 0x97, 0xa4, 0x1f, 0x07, 0x21, 0x0e, 0x4e, 0x31, 0xe9, 0x07,
|
||||
0xa1, 0xc3, 0xdc, 0x65, 0x18, 0xd8, 0xb1, 0xe5, 0xd8, 0xb1, 0xbd, 0x23, 0xdd, 0x2d, 0xdc, 0xcb,
|
||||
0x63, 0x99, 0x41, 0x5a, 0x76, 0x6c, 0xa3, 0x3b, 0xa0, 0x1c, 0xbb, 0xbe, 0x1d, 0x4e, 0xf8, 0x3c,
|
||||
0xe5, 0xbc, 0x8a, 0x81, 0x83, 0xe8, 0x02, 0xed, 0x57, 0x20, 0xeb, 0x7e, 0xec, 0xc6, 0x13, 0xc3,
|
||||
0x89, 0x56, 0x63, 0xfe, 0x87, 0xb0, 0x49, 0x18, 0xa6, 0xe5, 0x3a, 0x29, 0xc6, 0x0b, 0x78, 0x9d,
|
||||
0x08, 0x82, 0x9c, 0xe9, 0x5d, 0xa8, 0x0a, 0xa6, 0x39, 0xc7, 0x8f, 0xa1, 0x1c, 0xb2, 0x51, 0xc4,
|
||||
0xd8, 0x55, 0x6a, 0xef, 0x65, 0x76, 0x99, 0x13, 0x10, 0x27, 0x8b, 0xb5, 0xaf, 0x41, 0xe1, 0x73,
|
||||
0xdc, 0x68, 0x08, 0x8a, 0xbf, 0xa6, 0x49, 0x85, 0x5b, 0x8a, 0x8d, 0xd1, 0x53, 0x80, 0x30, 0x38,
|
||||
0xb5, 0x38, 0x06, 0x13, 0x76, 0xde, 0x17, 0xd3, 0x9c, 0x60, 0x39, 0x4c, 0x76, 0xd1, 0x06, 0x22,
|
||||
0x56, 0x0f, 0x48, 0x6c, 0xcf, 0x85, 0xa0, 0x34, 0x17, 0x82, 0xe8, 0x03, 0x28, 0xc6, 0x93, 0x11,
|
||||
0x0f, 0x9f, 0x8d, 0xda, 0xd5, 0x0c, 0x7d, 0xaa, 0x53, 0x73, 0x32, 0x22, 0x98, 0x2d, 0xa1, 0x0e,
|
||||
0xe3, 0xb8, 0x1e, 0x0b, 0xa4, 0x02, 0xa6, 0x43, 0xad, 0x0e, 0x25, 0x1e, 0x42, 0xe8, 0x09, 0x28,
|
||||
0x7c, 0x17, 0x8f, 0xc4, 0x76, 0xa2, 0x8b, 0x6c, 0x3e, 0x9d, 0xb2, 0x84, 0x39, 0x43, 0x74, 0x18,
|
||||
0x69, 0xb7, 0xa1, 0x8c, 0x83, 0x53, 0x66, 0x5e, 0x04, 0xc5, 0xe3, 0x61, 0x70, 0xcc, 0x78, 0xac,
|
||||
0x62, 0x36, 0xd6, 0xfe, 0x92, 0x07, 0xc5, 0xf0, 0x23, 0x12, 0xc6, 0x2b, 0x7a, 0xf7, 0x2c, 0xf0,
|
||||
0xf3, 0xef, 0x0e, 0xfc, 0x0f, 0x81, 0x6a, 0x2f, 0xe2, 0x6e, 0x55, 0x58, 0x10, 0x7b, 0x82, 0x45,
|
||||
0x5c, 0xa1, 0xcb, 0x18, 0xb3, 0x0b, 0x1c, 0xa6, 0xb8, 0xc0, 0x61, 0xd0, 0xff, 0xc3, 0x7a, 0x26,
|
||||
0x2a, 0x76, 0xd6, 0x18, 0xbb, 0xd5, 0x74, 0x3c, 0x9c, 0x49, 0x3c, 0xa5, 0x95, 0x12, 0xcf, 0xbf,
|
||||
0x25, 0x50, 0x7a, 0xc4, 0x0e, 0xfb, 0x6f, 0x56, 0xd4, 0xd1, 0x33, 0xa8, 0x9e, 0x30, 0x17, 0xe2,
|
||||
0xfb, 0x8a, 0xac, 0xb3, 0xb3, 0xc0, 0xc7, 0x18, 0x61, 0xac, 0x9c, 0xa4, 0x5c, 0x96, 0x7a, 0x43,
|
||||
0x34, 0x64, 0xde, 0x20, 0x63, 0x3a, 0x3c, 0x2b, 0x6a, 0x91, 0x85, 0xfe, 0xf9, 0xa2, 0xae, 0xad,
|
||||
0x24, 0xea, 0x29, 0x6c, 0x73, 0x49, 0x0d, 0xbf, 0x47, 0x06, 0x1e, 0xf1, 0x85, 0x5b, 0x68, 0xb0,
|
||||
0xfe, 0xda, 0x1d, 0x92, 0x99, 0x2d, 0x24, 0xb6, 0xb5, 0x42, 0x81, 0x89, 0x25, 0x9e, 0x41, 0x35,
|
||||
0x62, 0xb8, 0x53, 0x69, 0xa5, 0x33, 0xd2, 0xa6, 0xd4, 0x88, 0x95, 0x68, 0xf6, 0xa1, 0xfd, 0x49,
|
||||
0x82, 0x0a, 0x4b, 0x2d, 0x2e, 0x59, 0x31, 0xb3, 0xa8, 0x50, 0x70, 0x9d, 0x48, 0x64, 0x13, 0x3a,
|
||||
0x44, 0xb7, 0x40, 0x3e, 0xb1, 0x87, 0xae, 0x63, 0x85, 0xc1, 0x29, 0xf3, 0xb6, 0x0a, 0xae, 0x30,
|
||||
0x00, 0x0e, 0x4e, 0xb3, 0xae, 0x58, 0xbc, 0x88, 0x2b, 0x6a, 0x7f, 0xcb, 0x83, 0xf2, 0x62, 0x4c,
|
||||
0xc2, 0x09, 0x26, 0xd1, 0x78, 0xb8, 0x62, 0xd6, 0xfe, 0x10, 0x2a, 0x44, 0xc8, 0x25, 0x34, 0x92,
|
||||
0xcd, 0x01, 0x89, 0xd0, 0x78, 0xba, 0x0c, 0x5d, 0x87, 0x32, 0x4d, 0x4c, 0xfe, 0x38, 0xc9, 0x05,
|
||||
0xa5, 0x30, 0x38, 0xed, 0x8c, 0x3d, 0x5a, 0x1c, 0x45, 0xfd, 0x20, 0x24, 0xfc, 0xe4, 0xcc, 0x63,
|
||||
0xf1, 0x85, 0xde, 0x03, 0xd9, 0x71, 0xa3, 0xd8, 0xf6, 0xfb, 0x84, 0x1b, 0x3c, 0x8f, 0x67, 0x80,
|
||||
0xcb, 0x39, 0x3f, 0xba, 0x01, 0x95, 0xdf, 0x50, 0xd9, 0x2d, 0xd7, 0xd9, 0x29, 0x33, 0x6e, 0xca,
|
||||
0xec, 0xdb, 0x70, 0xa8, 0x9e, 0xfb, 0x43, 0x97, 0xf8, 0x31, 0x9d, 0xab, 0xb0, 0xb9, 0x0a, 0x07,
|
||||
0x18, 0x8e, 0xf6, 0x4b, 0x50, 0x7a, 0x71, 0x48, 0xcf, 0x53, 0x32, 0x1a, 0x4e, 0x56, 0xd3, 0xd9,
|
||||
0xfb, 0x50, 0x8d, 0x18, 0xae, 0x15, 0x52, 0x64, 0x71, 0x84, 0x2a, 0xd1, 0x8c, 0x9e, 0xf6, 0x0a,
|
||||
0xe4, 0x46, 0x10, 0x0c, 0xbf, 0x07, 0xf1, 0xdb, 0x00, 0xc7, 0x41, 0x30, 0x4c, 0x91, 0xae, 0x60,
|
||||
0xf9, 0x38, 0xa1, 0xa5, 0x45, 0xe9, 0xaa, 0x0f, 0x07, 0xa7, 0xcd, 0x60, 0xec, 0xaf, 0x68, 0xf2,
|
||||
0x47, 0xb0, 0x9d, 0xca, 0x0f, 0xd4, 0x94, 0x7d, 0x4a, 0x84, 0xed, 0x55, 0xc0, 0xa8, 0x7f, 0x86,
|
||||
0xbc, 0x76, 0x0b, 0xca, 0xcd, 0xc0, 0xf3, 0x6c, 0xdf, 0xa1, 0xee, 0xdc, 0xf7, 0x9c, 0xa4, 0xb0,
|
||||
0xed, 0x7b, 0x8e, 0xf6, 0x4f, 0x09, 0xc0, 0xf0, 0x1d, 0xf2, 0x96, 0x87, 0xe2, 0xff, 0xa6, 0x8e,
|
||||
0xcb, 0x9e, 0x62, 0x85, 0xf9, 0x53, 0xec, 0x36, 0x80, 0x4b, 0x59, 0xe0, 0xd3, 0x45, 0x3e, 0xcd,
|
||||
0x20, 0x6c, 0xfa, 0x72, 0x49, 0xe7, 0x73, 0x80, 0xdd, 0xe1, 0x38, 0x12, 0xd9, 0xb5, 0x06, 0x57,
|
||||
0xe7, 0x58, 0xce, 0xa4, 0x9c, 0x2b, 0x59, 0xc6, 0x79, 0xd5, 0x70, 0x04, 0xd5, 0x66, 0xe0, 0x8d,
|
||||
0xec, 0xfe, 0xaa, 0xa7, 0xd8, 0x7b, 0x20, 0xc7, 0x6f, 0x42, 0x12, 0xbd, 0x09, 0x86, 0xbc, 0x04,
|
||||
0x90, 0xf0, 0x0c, 0xa0, 0x1d, 0xc1, 0x66, 0x8b, 0x0c, 0x49, 0x4c, 0x1a, 0x13, 0xa3, 0xb5, 0x22,
|
||||
0xe5, 0x1b, 0x50, 0x99, 0xab, 0x74, 0xca, 0xae, 0xa8, 0x71, 0xbe, 0x4a, 0xf7, 0x24, 0x86, 0xff,
|
||||
0x3a, 0x58, 0xcd, 0xa6, 0xb7, 0x40, 0xa6, 0xf5, 0x8b, 0xe5, 0xfa, 0xaf, 0x03, 0x61, 0xcd, 0x0a,
|
||||
0x05, 0x50, 0x4a, 0xda, 0xd7, 0xb0, 0xb5, 0x47, 0x62, 0x51, 0xa4, 0xb5, 0xa2, 0x15, 0x99, 0xbe,
|
||||
0x0d, 0x10, 0xf1, 0xb4, 0x4f, 0x43, 0x9a, 0xfb, 0xab, 0x2c, 0x20, 0x86, 0xa3, 0x8d, 0x61, 0x23,
|
||||
0x29, 0xff, 0xf8, 0x21, 0xfc, 0xdf, 0x50, 0x07, 0xad, 0x3a, 0x67, 0xae, 0x17, 0xb1, 0x84, 0x2d,
|
||||
0x8b, 0x12, 0x86, 0xb7, 0x46, 0x8f, 0x40, 0xe5, 0xa7, 0x24, 0xab, 0x70, 0xb8, 0x48, 0x2c, 0xe5,
|
||||
0x79, 0xc4, 0x8f, 0x5c, 0x51, 0xd5, 0x15, 0xf0, 0x0c, 0xa0, 0xfd, 0x41, 0x12, 0x15, 0x1a, 0xad,
|
||||
0xae, 0xd0, 0xc7, 0x20, 0xd3, 0x6c, 0x6f, 0xb1, 0x3a, 0x4c, 0x3a, 0xa7, 0x0e, 0xdb, 0xcf, 0xe1,
|
||||
0x8a, 0x23, 0xc6, 0xa8, 0x71, 0xe6, 0xf0, 0xa6, 0x96, 0xb9, 0xbd, 0xe0, 0xf0, 0x9e, 0xb1, 0xb5,
|
||||
0x9f, 0xcb, 0x9c, 0xe1, 0x8d, 0xb2, 0xe8, 0x49, 0xb5, 0x6f, 0x25, 0x80, 0x14, 0xf7, 0x1b, 0x90,
|
||||
0x77, 0x79, 0x8c, 0x17, 0x71, 0xde, 0x75, 0x68, 0x65, 0x96, 0x8a, 0x4d, 0x36, 0x9e, 0x16, 0x8e,
|
||||
0x85, 0x77, 0x17, 0x8e, 0x9f, 0x40, 0x95, 0x47, 0xe7, 0x85, 0xfb, 0x2a, 0x77, 0x9a, 0x4f, 0xa2,
|
||||
0x4b, 0x06, 0xef, 0x1e, 0x6c, 0xa5, 0xb4, 0x20, 0xaa, 0xf6, 0x5a, 0xd2, 0x8b, 0x5f, 0xa4, 0x66,
|
||||
0x17, 0x2a, 0xfa, 0x4e, 0x02, 0xd9, 0x24, 0xa1, 0xc7, 0x4e, 0xda, 0x77, 0x55, 0xd5, 0xb7, 0x40,
|
||||
0x76, 0xfd, 0xd8, 0x4a, 0x1a, 0x7e, 0xea, 0x4f, 0x15, 0xd7, 0x8f, 0x19, 0x8f, 0xf4, 0xf8, 0x70,
|
||||
0x82, 0xf1, 0xf1, 0x90, 0x88, 0x79, 0xea, 0x51, 0x12, 0x56, 0x38, 0x8c, 0x2f, 0xe1, 0x25, 0xc2,
|
||||
0x98, 0xb0, 0x43, 0xb6, 0xc8, 0x8f, 0x2e, 0x06, 0xa0, 0xc7, 0xec, 0x36, 0xac, 0x1d, 0x07, 0x41,
|
||||
0x14, 0xb3, 0x52, 0x32, 0x8f, 0xf9, 0xc7, 0x25, 0x6b, 0x48, 0x1b, 0x14, 0x96, 0xa1, 0x42, 0xa2,
|
||||
0xbf, 0x1d, 0x85, 0xe8, 0x29, 0x54, 0x82, 0x11, 0x09, 0xed, 0x38, 0x08, 0x85, 0x47, 0x66, 0x75,
|
||||
0x24, 0xd6, 0x76, 0xc5, 0x1a, 0x3c, 0x5d, 0x8d, 0x76, 0xa0, 0xcc, 0xc6, 0xbe, 0x23, 0xbc, 0x25,
|
||||
0xf9, 0xd4, 0xfe, 0x2e, 0x01, 0x60, 0xdb, 0x1f, 0x90, 0x0b, 0x69, 0xb0, 0x96, 0xa6, 0x73, 0xb6,
|
||||
0x2c, 0x4d, 0x31, 0x3b, 0xdd, 0x61, 0xa6, 0x98, 0xc2, 0x79, 0x8a, 0x59, 0xad, 0xab, 0xff, 0x56,
|
||||
0x4a, 0x3a, 0xb5, 0x0b, 0xb1, 0x7d, 0x07, 0x14, 0x5e, 0x8e, 0x70, 0x46, 0xf2, 0x8c, 0x11, 0x60,
|
||||
0xa0, 0x06, 0xe3, 0x26, 0xd5, 0x30, 0x16, 0x56, 0x68, 0x18, 0x69, 0x08, 0xc6, 0xc1, 0xe8, 0x1b,
|
||||
0xe1, 0x0c, 0x6c, 0x7c, 0xc9, 0xc8, 0x78, 0x0b, 0x55, 0x5a, 0xa2, 0x10, 0xdb, 0xe7, 0x92, 0xdd,
|
||||
0x83, 0xb5, 0xa0, 0xdf, 0x1f, 0x27, 0x06, 0x47, 0x19, 0x32, 0x5d, 0x3a, 0x83, 0xf9, 0x02, 0xf4,
|
||||
0x19, 0xac, 0x0f, 0x88, 0x4f, 0x42, 0x7b, 0x68, 0x31, 0xc9, 0x84, 0x85, 0xb2, 0x1b, 0xef, 0xf1,
|
||||
0x15, 0xbc, 0x30, 0xad, 0x0e, 0x52, 0x5f, 0xda, 0xef, 0xf3, 0x50, 0x4d, 0x4f, 0xa3, 0xcf, 0x61,
|
||||
0xfd, 0x98, 0xb3, 0x22, 0x08, 0x4a, 0x0b, 0xba, 0xdd, 0x34, 0xb3, 0xfb, 0x39, 0x5c, 0x3d, 0x4e,
|
||||
0x33, 0xff, 0x04, 0x20, 0x26, 0xa1, 0x37, 0xe5, 0x47, 0x3a, 0xd3, 0x7e, 0x4e, 0x63, 0x77, 0x3f,
|
||||
0x87, 0xe5, 0x78, 0x1a, 0xc8, 0x3f, 0x03, 0x25, 0xa4, 0x4e, 0x29, 0x30, 0xf9, 0x2d, 0xd1, 0xf5,
|
||||
0x6c, 0xc5, 0x3d, 0x75, 0xda, 0xfd, 0x1c, 0x86, 0x70, 0xe6, 0xc2, 0x9f, 0x4e, 0x53, 0x30, 0x47,
|
||||
0x2e, 0x2e, 0xe8, 0x28, 0x52, 0xbe, 0x33, 0xcb, 0xbe, 0xec, 0x93, 0x66, 0x5f, 0x86, 0xa7, 0xfd,
|
||||
0x4b, 0x82, 0xf5, 0x54, 0xe7, 0x71, 0xd8, 0xb8, 0xf8, 0xb9, 0xb5, 0xe2, 0xa5, 0xcb, 0x59, 0xd3,
|
||||
0x15, 0x16, 0x68, 0x7a, 0xb9, 0xe9, 0x2e, 0x19, 0x4c, 0xbf, 0x2b, 0xc0, 0x16, 0xef, 0xe6, 0xbb,
|
||||
0x21, 0xaf, 0x5c, 0x0e, 0xa2, 0xc1, 0xc5, 0x85, 0xcd, 0xf4, 0x46, 0xdc, 0xc6, 0xef, 0x6a, 0xd3,
|
||||
0x55, 0x28, 0x8c, 0x5d, 0x27, 0xb9, 0xb3, 0x18, 0xbb, 0xce, 0xa2, 0x2e, 0xf5, 0x6c, 0x43, 0x4e,
|
||||
0xeb, 0x2e, 0xd7, 0x23, 0x51, 0x6c, 0x7b, 0x23, 0x96, 0x66, 0x8b, 0x78, 0x06, 0x98, 0x2b, 0x43,
|
||||
0x4a, 0x73, 0x65, 0x08, 0x9d, 0xee, 0xbf, 0xb1, 0x7d, 0x9f, 0x0c, 0x67, 0x4d, 0x89, 0x2c, 0x20,
|
||||
0x06, 0x65, 0x20, 0x1f, 0x8c, 0x58, 0x3f, 0xb2, 0x31, 0x57, 0x48, 0x75, 0x47, 0xec, 0xd0, 0xcc,
|
||||
0x07, 0xa3, 0x6c, 0xef, 0x22, 0x67, 0x7b, 0x97, 0x33, 0x46, 0x80, 0x95, 0x8c, 0xf0, 0xe7, 0x3c,
|
||||
0xc8, 0xdc, 0xdb, 0x56, 0x52, 0x7e, 0x2a, 0x71, 0x71, 0xd5, 0x5f, 0x30, 0x71, 0x9d, 0xd1, 0x77,
|
||||
0x61, 0x81, 0xbe, 0x85, 0x99, 0x8a, 0x33, 0x33, 0x9d, 0x6f, 0x81, 0x8c, 0x7a, 0x4a, 0xef, 0x50,
|
||||
0x4f, 0x79, 0xc5, 0xb4, 0xa8, 0x98, 0xae, 0x47, 0x7a, 0x13, 0xbf, 0x4f, 0xf5, 0x73, 0x1d, 0xca,
|
||||
0x23, 0x42, 0x42, 0xcb, 0x70, 0x44, 0x19, 0x57, 0xa2, 0x9f, 0x06, 0x63, 0xd0, 0x9c, 0x32, 0x98,
|
||||
0xe7, 0x0c, 0x4e, 0x01, 0xa8, 0x06, 0x72, 0x34, 0xf1, 0xfb, 0xd6, 0xd2, 0x12, 0x89, 0xd2, 0x67,
|
||||
0xd6, 0xae, 0x44, 0x62, 0xa4, 0x7d, 0x0d, 0xf0, 0x9c, 0x4c, 0x6a, 0x3d, 0x32, 0xa0, 0x1b, 0x0b,
|
||||
0x95, 0x48, 0x4b, 0x54, 0x92, 0x3f, 0xdf, 0x29, 0x0b, 0xac, 0xe6, 0x98, 0x39, 0xe5, 0xfd, 0xbf,
|
||||
0x16, 0x41, 0x9e, 0xbe, 0x68, 0x20, 0x05, 0xca, 0xbd, 0xa3, 0x66, 0x53, 0xef, 0xf5, 0xd4, 0x1c,
|
||||
0xda, 0x06, 0xf5, 0xa8, 0xa3, 0x7f, 0x71, 0xa8, 0x37, 0x4d, 0xbd, 0x65, 0xe9, 0x18, 0x77, 0xb1,
|
||||
0x2a, 0x21, 0x04, 0x1b, 0xcd, 0x6e, 0xa7, 0xa3, 0x37, 0x4d, 0x6b, 0xb7, 0x6e, 0xb4, 0xf5, 0x96,
|
||||
0x9a, 0x47, 0x57, 0x61, 0xeb, 0x50, 0xc7, 0x07, 0x46, 0xaf, 0x67, 0x74, 0x3b, 0x56, 0x4b, 0xef,
|
||||
0x18, 0x7a, 0x4b, 0x2d, 0xa0, 0x1b, 0x70, 0xb5, 0xd9, 0x6d, 0xb7, 0xf5, 0xa6, 0x49, 0xc1, 0x9d,
|
||||
0xae, 0x69, 0xe9, 0x5f, 0x18, 0x3d, 0xb3, 0xa7, 0x16, 0x29, 0x6d, 0xa3, 0xdd, 0xd6, 0xf7, 0xea,
|
||||
0x6d, 0xab, 0x8e, 0xf7, 0x8e, 0x0e, 0xf4, 0x8e, 0xa9, 0xae, 0x51, 0x3a, 0x09, 0xb4, 0x65, 0x1c,
|
||||
0xe8, 0x1d, 0x4a, 0x4e, 0x2d, 0xa3, 0x6b, 0x80, 0x12, 0xb0, 0xd1, 0x69, 0xe9, 0x5f, 0x58, 0xe6,
|
||||
0x97, 0x87, 0xba, 0x5a, 0x41, 0xb7, 0xe0, 0x7a, 0x02, 0x4f, 0xef, 0x53, 0x3f, 0xd0, 0x55, 0x19,
|
||||
0xa9, 0x50, 0x4d, 0x26, 0xcd, 0xee, 0xe1, 0x73, 0x15, 0xd2, 0xd4, 0x71, 0xf7, 0x15, 0xd6, 0x9b,
|
||||
0x5d, 0xdc, 0x52, 0x95, 0x34, 0xf8, 0xa5, 0xde, 0x34, 0xbb, 0xd8, 0x32, 0x5a, 0x6a, 0x95, 0x32,
|
||||
0x9f, 0x80, 0x7b, 0x7a, 0x1d, 0x37, 0xf7, 0x2d, 0xac, 0xf7, 0x8e, 0xda, 0xa6, 0xba, 0x4e, 0x55,
|
||||
0xb0, 0x6b, 0xb4, 0x75, 0x26, 0xd1, 0x6e, 0xf7, 0xa8, 0xd3, 0x52, 0x37, 0xd0, 0x26, 0x28, 0x07,
|
||||
0xba, 0x59, 0x4f, 0x74, 0xb2, 0x49, 0xf7, 0x6f, 0xd6, 0x9b, 0xfb, 0x7a, 0x02, 0x51, 0xd1, 0x0e,
|
||||
0x6c, 0x37, 0xeb, 0x1d, 0x8a, 0xd4, 0xc4, 0x7a, 0xdd, 0xd4, 0xad, 0xdd, 0x6e, 0xbb, 0xa5, 0x63,
|
||||
0x75, 0x8b, 0x0a, 0x38, 0x37, 0x63, 0xb4, 0x75, 0x15, 0xa5, 0x30, 0x5a, 0x7a, 0x5b, 0x9f, 0x61,
|
||||
0x5c, 0x49, 0x61, 0x24, 0x33, 0x14, 0x63, 0x9b, 0x0a, 0xd3, 0x38, 0x32, 0xda, 0x2d, 0xa1, 0x28,
|
||||
0x6e, 0xb4, 0xab, 0x68, 0x0b, 0xd6, 0x13, 0x61, 0x3a, 0x6d, 0xa3, 0x67, 0xaa, 0xd7, 0xd0, 0x75,
|
||||
0xb8, 0x92, 0x80, 0x0e, 0x74, 0x13, 0x1b, 0x4d, 0xae, 0xd5, 0xeb, 0x74, 0x6d, 0xf7, 0xc8, 0xb4,
|
||||
0xba, 0xbb, 0xd6, 0x81, 0x7e, 0xd0, 0xc5, 0x5f, 0xaa, 0x3b, 0xf7, 0xff, 0x28, 0x41, 0x25, 0xa9,
|
||||
0xdd, 0x51, 0x05, 0x8a, 0x9d, 0x6e, 0x47, 0x57, 0x73, 0x74, 0xd4, 0xe8, 0x76, 0xdb, 0xaa, 0x44,
|
||||
0x47, 0x46, 0xc7, 0x7c, 0xaa, 0xe6, 0x91, 0x0c, 0x6b, 0x46, 0xc7, 0xfc, 0xf0, 0xb1, 0x5a, 0x10,
|
||||
0xc3, 0x8f, 0x6a, 0x6a, 0x51, 0x0c, 0x1f, 0x7f, 0xac, 0xae, 0xd1, 0xe1, 0x6e, 0xbb, 0x5b, 0x37,
|
||||
0x55, 0x40, 0x00, 0xa5, 0x56, 0xf7, 0xa8, 0xd1, 0xd6, 0x55, 0x85, 0x8e, 0x7b, 0x26, 0x36, 0x3a,
|
||||
0x7b, 0xea, 0x36, 0xe5, 0x40, 0x58, 0xa2, 0x61, 0x74, 0xea, 0xf8, 0x4b, 0xd5, 0xa1, 0xda, 0x14,
|
||||
0x20, 0x8e, 0x4c, 0xee, 0x37, 0x61, 0x73, 0xae, 0xda, 0x44, 0x25, 0xc8, 0xb7, 0x4d, 0x35, 0x87,
|
||||
0xca, 0x50, 0x68, 0x9b, 0xba, 0x2a, 0x51, 0x80, 0xfe, 0x42, 0xcd, 0xd3, 0xdf, 0x3d, 0x53, 0x2d,
|
||||
0xd0, 0x89, 0x3d, 0x53, 0x57, 0x8b, 0x14, 0xd0, 0xd1, 0xd5, 0xb5, 0xfb, 0x4f, 0x61, 0x8d, 0x55,
|
||||
0x30, 0xd4, 0xf1, 0x8d, 0xce, 0xcb, 0x7a, 0xdb, 0x68, 0x71, 0xb9, 0x0e, 0x8e, 0x7a, 0xa6, 0x2a,
|
||||
0x31, 0xae, 0xf6, 0xbb, 0x47, 0x6d, 0xea, 0xe4, 0x55, 0xa8, 0x50, 0x28, 0xb5, 0xba, 0x5a, 0xb8,
|
||||
0x7f, 0x17, 0x4a, 0x3c, 0x2d, 0xd3, 0x35, 0x46, 0xa7, 0xa7, 0x63, 0xba, 0x33, 0x95, 0x88, 0xd9,
|
||||
0x43, 0x95, 0xee, 0xdf, 0x81, 0x4a, 0x12, 0xcc, 0x94, 0x22, 0xd6, 0xeb, 0x94, 0xb6, 0x0c, 0x6b,
|
||||
0xaf, 0xb0, 0x41, 0x17, 0xd4, 0xbe, 0x5b, 0x87, 0xf5, 0x03, 0x16, 0xfa, 0x3d, 0x12, 0x9e, 0xb8,
|
||||
0x7d, 0x82, 0x7e, 0x0e, 0x6a, 0x33, 0x24, 0x76, 0x4c, 0x66, 0x7d, 0x36, 0x5a, 0xf8, 0xd8, 0x73,
|
||||
0x73, 0x51, 0xa7, 0xad, 0xe5, 0xd0, 0x2e, 0xac, 0xef, 0xdb, 0x51, 0x0a, 0xfb, 0xd6, 0x5c, 0x75,
|
||||
0x9c, 0x4e, 0xdd, 0x37, 0xaf, 0x9d, 0xa9, 0xa3, 0xf8, 0x5d, 0x52, 0x0e, 0x19, 0x80, 0x5a, 0x24,
|
||||
0xea, 0x87, 0xee, 0x31, 0xb9, 0x28, 0xb1, 0x85, 0x7c, 0x6a, 0x39, 0xf4, 0x82, 0xda, 0x69, 0xec,
|
||||
0xc7, 0x17, 0xa5, 0x73, 0x67, 0xc9, 0xe4, 0xf4, 0xd2, 0x29, 0x87, 0x7e, 0x01, 0x9b, 0xbd, 0x37,
|
||||
0xf4, 0x33, 0x99, 0x8b, 0xe6, 0xb4, 0x24, 0x2e, 0xa5, 0x96, 0xd2, 0x4a, 0x5e, 0x45, 0xb5, 0x1c,
|
||||
0x3a, 0x04, 0x94, 0xa5, 0xc5, 0x2e, 0x36, 0xce, 0xe5, 0x70, 0xd9, 0x24, 0xbb, 0xc8, 0xc8, 0xa1,
|
||||
0x16, 0x6c, 0xb4, 0xc2, 0x60, 0x74, 0x51, 0x79, 0x97, 0x58, 0xf2, 0x53, 0x50, 0xb8, 0x2b, 0xb0,
|
||||
0x2b, 0x34, 0x94, 0xad, 0x3c, 0x67, 0xd7, 0x6a, 0xcb, 0xd0, 0x9b, 0xb0, 0x9e, 0x18, 0xf0, 0x1d,
|
||||
0x04, 0x96, 0x4d, 0x68, 0x39, 0xf4, 0x0c, 0x64, 0x2a, 0xc9, 0xf7, 0xe3, 0x40, 0x87, 0x4d, 0x2e,
|
||||
0xc0, 0xf4, 0xe9, 0x70, 0x4e, 0x0f, 0xd9, 0xf7, 0xc9, 0xe5, 0x64, 0xaa, 0xfb, 0x76, 0x74, 0x41,
|
||||
0x1a, 0xcb, 0x1d, 0xfa, 0x39, 0x6c, 0x50, 0x33, 0x4f, 0xd7, 0x47, 0xe7, 0x1b, 0xe5, 0xe6, 0xe2,
|
||||
0x5d, 0x84, 0xcf, 0x50, 0xe5, 0x86, 0xc1, 0xe8, 0x72, 0x82, 0x7d, 0x02, 0x25, 0x5e, 0xf2, 0xa2,
|
||||
0x9d, 0x39, 0xcd, 0x4e, 0x5f, 0xb5, 0xe6, 0xe4, 0x99, 0x3e, 0x61, 0x32, 0xb5, 0xac, 0x4f, 0xef,
|
||||
0xcb, 0x1a, 0x13, 0xa3, 0x35, 0xc7, 0x42, 0xf6, 0xba, 0xeb, 0xe6, 0xe2, 0xab, 0x7b, 0x2d, 0x87,
|
||||
0xf6, 0x69, 0xc3, 0x35, 0xbb, 0x76, 0x43, 0xff, 0x37, 0x57, 0xef, 0xcf, 0xdd, 0xc8, 0x9d, 0xc3,
|
||||
0xd0, 0x67, 0x50, 0xe2, 0xc5, 0x23, 0x5a, 0xfa, 0x72, 0x72, 0x33, 0x3b, 0x93, 0x7a, 0x9a, 0x60,
|
||||
0x71, 0xb8, 0x39, 0xf7, 0x82, 0x83, 0xde, 0x5f, 0x40, 0x28, 0xfb, 0xbe, 0x73, 0x2e, 0xc5, 0x27,
|
||||
0x50, 0x68, 0x7a, 0xce, 0x92, 0xcc, 0x30, 0xc7, 0x64, 0xea, 0x86, 0x3e, 0x87, 0xea, 0x00, 0xb3,
|
||||
0xeb, 0x53, 0x94, 0x2d, 0x67, 0xe7, 0xee, 0x55, 0x97, 0x19, 0x77, 0x0f, 0xb6, 0x0e, 0x43, 0x32,
|
||||
0x0c, 0x6c, 0xe7, 0x92, 0x69, 0xe0, 0x09, 0xac, 0xb1, 0x3b, 0xe6, 0xb9, 0xf0, 0x9b, 0xdd, 0x3b,
|
||||
0x2f, 0x43, 0x7c, 0xc6, 0xae, 0xe6, 0x47, 0x76, 0x3f, 0x46, 0x37, 0xce, 0xde, 0x90, 0x88, 0x0b,
|
||||
0xe7, 0x65, 0xc8, 0x0d, 0xa8, 0x08, 0xbb, 0x35, 0xd0, 0xcd, 0x65, 0xe6, 0x3c, 0x6c, 0x9c, 0xa7,
|
||||
0xfe, 0x46, 0xed, 0xab, 0x47, 0x03, 0x37, 0x7e, 0x33, 0x3e, 0x7e, 0xd0, 0x0f, 0xbc, 0x87, 0xfd,
|
||||
0xdf, 0x46, 0x8f, 0x1e, 0x3d, 0x79, 0x18, 0x8d, 0x4f, 0x86, 0xae, 0xf7, 0x70, 0xc9, 0x3f, 0x74,
|
||||
0x8e, 0x4b, 0xec, 0xaf, 0x39, 0x1f, 0xfd, 0x27, 0x00, 0x00, 0xff, 0xff, 0x1a, 0x56, 0x8b, 0xe9,
|
||||
0xc3, 0x23, 0x00, 0x00,
|
||||
0x21, 0x3b, 0xd2, 0x5d, 0xe9, 0xde, 0x46, 0xed, 0xda, 0x83, 0xd4, 0xd9, 0x07, 0x3a, 0xdd, 0x6e,
|
||||
0x06, 0x0e, 0xc1, 0x32, 0x49, 0x96, 0xe8, 0x1a, 0x94, 0x42, 0x62, 0x47, 0x81, 0xbf, 0x93, 0xbf,
|
||||
0x2b, 0xdd, 0x93, 0xb1, 0xf8, 0xa5, 0x3d, 0x86, 0xea, 0x73, 0x32, 0x79, 0x69, 0x0f, 0xc7, 0xe4,
|
||||
0xd0, 0x76, 0x43, 0xa4, 0x42, 0xe1, 0x1b, 0x32, 0x61, 0x74, 0x65, 0x4c, 0x97, 0x68, 0x1b, 0xd6,
|
||||
0x4e, 0xe8, 0xb6, 0x40, 0xe4, 0x3f, 0xb4, 0x9f, 0xc2, 0x46, 0x33, 0x18, 0x0e, 0x49, 0x3f, 0x76,
|
||||
0x03, 0xbf, 0x63, 0x7b, 0x04, 0xfd, 0x08, 0x36, 0xfb, 0x53, 0x88, 0xe5, 0xdb, 0x1e, 0x11, 0x54,
|
||||
0x36, 0xfa, 0x99, 0x83, 0xda, 0x10, 0x50, 0x16, 0xb5, 0xed, 0x46, 0x31, 0xfa, 0x31, 0x94, 0x22,
|
||||
0x26, 0x21, 0xc3, 0x52, 0x6a, 0x57, 0x32, 0x32, 0x71, 0xe1, 0xb1, 0x38, 0x82, 0x3e, 0x00, 0x75,
|
||||
0xee, 0xae, 0x68, 0x27, 0x7f, 0xb7, 0x70, 0x4f, 0xc6, 0x9b, 0xd9, 0xcb, 0x22, 0xad, 0x07, 0xf2,
|
||||
0xae, 0x4b, 0x86, 0xce, 0x4a, 0x3c, 0xa2, 0xdb, 0x00, 0xaf, 0x29, 0x16, 0x3f, 0xc3, 0x25, 0x97,
|
||||
0x5f, 0x27, 0x74, 0xb4, 0x7f, 0x48, 0x50, 0x3e, 0xb0, 0x47, 0x23, 0xd7, 0x1f, 0xac, 0xc6, 0xf8,
|
||||
0x02, 0x06, 0xf2, 0x0b, 0x19, 0xa0, 0x54, 0xfb, 0x6f, 0x88, 0x67, 0xef, 0x14, 0x16, 0x51, 0x65,
|
||||
0x5b, 0x58, 0x1c, 0x41, 0x9f, 0x40, 0x95, 0xbc, 0x8d, 0x43, 0xdb, 0x1a, 0xd9, 0xa1, 0xed, 0x45,
|
||||
0x3b, 0xc5, 0xbb, 0x85, 0x7b, 0x4a, 0xed, 0x46, 0x06, 0x25, 0x6d, 0x65, 0xac, 0xb0, 0xe3, 0x87,
|
||||
0xec, 0xb4, 0x16, 0x81, 0x22, 0x64, 0x59, 0xdd, 0x10, 0x4f, 0xa0, 0xea, 0x71, 0x5c, 0x6b, 0xe8,
|
||||
0x46, 0x31, 0x33, 0x82, 0x52, 0xdb, 0xce, 0xa0, 0x08, 0xe2, 0x58, 0xf1, 0x66, 0xb7, 0x68, 0xcf,
|
||||
0x61, 0xe3, 0xd0, 0x0e, 0x63, 0x97, 0x0a, 0xcc, 0xf8, 0xb8, 0xb8, 0x6d, 0x54, 0x28, 0xc4, 0xf6,
|
||||
0x40, 0xe8, 0x8d, 0x2e, 0xb5, 0x21, 0xac, 0x4f, 0x89, 0xad, 0x2e, 0xc3, 0x03, 0xb8, 0x32, 0x4a,
|
||||
0xb0, 0xad, 0xd8, 0x1e, 0x58, 0x76, 0x18, 0xda, 0x13, 0xe1, 0x4f, 0x5b, 0xd3, 0x2d, 0xd3, 0x1e,
|
||||
0xd4, 0xe9, 0x86, 0xf6, 0x02, 0x36, 0x5f, 0x92, 0x7e, 0x1c, 0x84, 0x38, 0x38, 0xc5, 0xa4, 0x1f,
|
||||
0x84, 0x0e, 0x73, 0x97, 0x61, 0x60, 0xc7, 0x96, 0x63, 0xc7, 0xf6, 0x8e, 0x74, 0xb7, 0x70, 0x2f,
|
||||
0x8f, 0x65, 0x06, 0x69, 0xd9, 0xb1, 0x8d, 0xee, 0x80, 0x72, 0xec, 0xfa, 0x76, 0x38, 0xe1, 0xfb,
|
||||
0x94, 0xf3, 0x2a, 0x06, 0x0e, 0xa2, 0x07, 0xb4, 0x5f, 0x81, 0xac, 0xfb, 0xb1, 0x1b, 0x4f, 0x0c,
|
||||
0x27, 0x5a, 0x8d, 0xf9, 0x1f, 0xc2, 0x26, 0x61, 0x98, 0x96, 0xeb, 0xa4, 0x18, 0x2f, 0xe0, 0x75,
|
||||
0x22, 0x08, 0x72, 0xa6, 0x77, 0xa1, 0x2a, 0x98, 0xe6, 0x1c, 0x3f, 0x86, 0x72, 0xc8, 0x56, 0x11,
|
||||
0x63, 0x57, 0xa9, 0xbd, 0x97, 0xb9, 0x65, 0x4e, 0x40, 0x9c, 0x1c, 0xd6, 0xbe, 0x06, 0x85, 0xef,
|
||||
0x71, 0xa3, 0x21, 0x28, 0xfe, 0x9a, 0x26, 0x15, 0x6e, 0x29, 0xb6, 0x46, 0x4f, 0x01, 0xc2, 0xe0,
|
||||
0xd4, 0xe2, 0x18, 0x4c, 0xd8, 0x79, 0x5f, 0x4c, 0x73, 0x82, 0xe5, 0x30, 0xb9, 0x45, 0x1b, 0x88,
|
||||
0x58, 0x3d, 0x20, 0xb1, 0x3d, 0x17, 0x82, 0xd2, 0x5c, 0x08, 0xa2, 0x0f, 0xa0, 0x18, 0x4f, 0x46,
|
||||
0x3c, 0x7c, 0x36, 0x6a, 0x57, 0x33, 0xf4, 0xa9, 0x4e, 0xcd, 0xc9, 0x88, 0x60, 0x76, 0x84, 0x3a,
|
||||
0x8c, 0xe3, 0x7a, 0x2c, 0x90, 0x0a, 0x98, 0x2e, 0xb5, 0x3a, 0x94, 0x78, 0x08, 0xa1, 0x27, 0xa0,
|
||||
0xf0, 0x5b, 0x3c, 0x12, 0xdb, 0x89, 0x2e, 0xb2, 0xf9, 0x74, 0xca, 0x12, 0xe6, 0x0c, 0xd1, 0x65,
|
||||
0xa4, 0xdd, 0x86, 0x32, 0x0e, 0x4e, 0x99, 0x79, 0x11, 0x14, 0x8f, 0x87, 0xc1, 0x31, 0xe3, 0xb1,
|
||||
0x8a, 0xd9, 0x5a, 0xfb, 0x73, 0x1e, 0x14, 0xc3, 0x8f, 0x48, 0x18, 0xaf, 0xe8, 0xdd, 0xb3, 0xc0,
|
||||
0xcf, 0xbf, 0x3b, 0xf0, 0x3f, 0x04, 0xaa, 0xbd, 0x88, 0xbb, 0x55, 0x61, 0x41, 0xec, 0x09, 0x16,
|
||||
0x71, 0x85, 0x1e, 0x63, 0xcc, 0x2e, 0x70, 0x98, 0xe2, 0x02, 0x87, 0x41, 0xff, 0x0f, 0xeb, 0x99,
|
||||
0xa8, 0xd8, 0x59, 0x63, 0xec, 0x56, 0xd3, 0xf1, 0x70, 0x26, 0xf1, 0x94, 0x56, 0x4a, 0x3c, 0xff,
|
||||
0x96, 0x40, 0xe9, 0x11, 0x3b, 0xec, 0xbf, 0x59, 0x51, 0x47, 0xcf, 0xa0, 0x7a, 0xc2, 0x5c, 0x88,
|
||||
0xdf, 0x2b, 0xb2, 0xce, 0xce, 0x02, 0x1f, 0x63, 0x84, 0xb1, 0x72, 0x92, 0x72, 0x59, 0xea, 0x0d,
|
||||
0xd1, 0x90, 0x79, 0x83, 0x8c, 0xe9, 0xf2, 0xac, 0xa8, 0x45, 0x16, 0xfa, 0xe7, 0x8b, 0xba, 0xb6,
|
||||
0x92, 0xa8, 0xa7, 0xb0, 0xcd, 0x25, 0x35, 0xfc, 0x1e, 0x19, 0x78, 0xc4, 0x17, 0x6e, 0xa1, 0xc1,
|
||||
0xfa, 0x6b, 0x77, 0x48, 0x66, 0xb6, 0x90, 0xd8, 0xd5, 0x0a, 0x05, 0x26, 0x96, 0x78, 0x06, 0xd5,
|
||||
0x88, 0xe1, 0x4e, 0xa5, 0x95, 0xce, 0x48, 0x9b, 0x52, 0x23, 0x56, 0xa2, 0xd9, 0x0f, 0xed, 0x4f,
|
||||
0x12, 0x54, 0x58, 0x6a, 0x71, 0xc9, 0x8a, 0x99, 0x45, 0x85, 0x82, 0xeb, 0x44, 0x22, 0x9b, 0xd0,
|
||||
0x25, 0xba, 0x05, 0xf2, 0x89, 0x3d, 0x74, 0x1d, 0x2b, 0x0c, 0x4e, 0x99, 0xb7, 0x55, 0x70, 0x85,
|
||||
0x01, 0x70, 0x70, 0x9a, 0x75, 0xc5, 0xe2, 0x45, 0x5c, 0x51, 0xfb, 0x6b, 0x1e, 0x94, 0x17, 0x63,
|
||||
0x12, 0x4e, 0x30, 0x89, 0xc6, 0xc3, 0x15, 0xb3, 0xf6, 0x87, 0x50, 0x21, 0x42, 0x2e, 0xa1, 0x91,
|
||||
0x6c, 0x0e, 0x48, 0x84, 0xc6, 0xd3, 0x63, 0xe8, 0x3a, 0x94, 0x69, 0x62, 0xf2, 0xc7, 0x49, 0x2e,
|
||||
0x28, 0x85, 0xc1, 0x69, 0x67, 0xec, 0xd1, 0xe2, 0x28, 0xea, 0x07, 0x21, 0xe1, 0x2f, 0x67, 0x1e,
|
||||
0x8b, 0x5f, 0xe8, 0x3d, 0x90, 0x1d, 0x37, 0x8a, 0x6d, 0xbf, 0x4f, 0xb8, 0xc1, 0xf3, 0x78, 0x06,
|
||||
0xb8, 0x9c, 0xf3, 0xa3, 0x1b, 0x50, 0xf9, 0x0d, 0x95, 0xdd, 0x72, 0x9d, 0x9d, 0x32, 0xe3, 0xa6,
|
||||
0xcc, 0x7e, 0x1b, 0x0e, 0xd5, 0x73, 0x7f, 0xe8, 0x12, 0x3f, 0xa6, 0x7b, 0x15, 0xb6, 0x57, 0xe1,
|
||||
0x00, 0xc3, 0xd1, 0x7e, 0x09, 0x4a, 0x2f, 0x0e, 0xe9, 0x7b, 0x4a, 0x46, 0xc3, 0xc9, 0x6a, 0x3a,
|
||||
0x7b, 0x1f, 0xaa, 0x11, 0xc3, 0xb5, 0x42, 0x8a, 0x2c, 0x9e, 0x50, 0x25, 0x9a, 0xd1, 0xd3, 0x5e,
|
||||
0x81, 0xdc, 0x08, 0x82, 0xe1, 0xf7, 0x20, 0x7e, 0x1b, 0xe0, 0x38, 0x08, 0x86, 0x29, 0xd2, 0x15,
|
||||
0x2c, 0x1f, 0x27, 0xb4, 0xb4, 0x28, 0x5d, 0xf5, 0xe1, 0xe0, 0xb4, 0x19, 0x8c, 0xfd, 0x15, 0x4d,
|
||||
0xfe, 0x08, 0xb6, 0x53, 0xf9, 0x81, 0x9a, 0xb2, 0x4f, 0x89, 0xb0, 0xbb, 0x0a, 0x18, 0xf5, 0xcf,
|
||||
0x90, 0xd7, 0x6e, 0x41, 0xb9, 0x19, 0x78, 0x9e, 0xed, 0x3b, 0xd4, 0x9d, 0xfb, 0x9e, 0x93, 0x14,
|
||||
0xb6, 0x7d, 0xcf, 0xd1, 0xfe, 0x29, 0x01, 0x18, 0xbe, 0x43, 0xde, 0xf2, 0x50, 0xfc, 0xdf, 0xd4,
|
||||
0x71, 0xd9, 0x57, 0xac, 0x30, 0xff, 0x8a, 0xdd, 0x06, 0x70, 0x29, 0x0b, 0x7c, 0xbb, 0xc8, 0xb7,
|
||||
0x19, 0x84, 0x6d, 0x5f, 0x2e, 0xe9, 0x7c, 0x0e, 0xb0, 0x3b, 0x1c, 0x47, 0x22, 0xbb, 0xd6, 0xe0,
|
||||
0xea, 0x1c, 0xcb, 0x99, 0x94, 0x73, 0x25, 0xcb, 0x38, 0xaf, 0x1a, 0x8e, 0xa0, 0xda, 0x0c, 0xbc,
|
||||
0x91, 0xdd, 0x5f, 0xf5, 0x15, 0x7b, 0x0f, 0xe4, 0xf8, 0x4d, 0x48, 0xa2, 0x37, 0xc1, 0x90, 0x97,
|
||||
0x00, 0x12, 0x9e, 0x01, 0xb4, 0x23, 0xd8, 0x6c, 0x91, 0x21, 0x89, 0x49, 0x63, 0x62, 0xb4, 0x56,
|
||||
0xa4, 0x7c, 0x03, 0x2a, 0x73, 0x95, 0x4e, 0xd9, 0x15, 0x35, 0xce, 0x57, 0xe9, 0x9e, 0xc4, 0xf0,
|
||||
0x5f, 0x07, 0xab, 0xd9, 0xf4, 0x16, 0xc8, 0xb4, 0x7e, 0xb1, 0x5c, 0xff, 0x75, 0x20, 0xac, 0x59,
|
||||
0xa1, 0x00, 0x4a, 0x49, 0xfb, 0x1a, 0xb6, 0xf6, 0x48, 0x2c, 0x8a, 0xb4, 0x56, 0xb4, 0x22, 0xd3,
|
||||
0xb7, 0x01, 0x22, 0x9e, 0xf6, 0x69, 0x48, 0x73, 0x7f, 0x95, 0x05, 0xc4, 0x70, 0xb4, 0x31, 0x6c,
|
||||
0x24, 0xe5, 0x1f, 0x7f, 0x84, 0xff, 0x1b, 0xea, 0xa0, 0x55, 0xe7, 0xcc, 0xf5, 0x22, 0x96, 0xb0,
|
||||
0x65, 0x51, 0xc2, 0xf0, 0xd6, 0xe8, 0x11, 0xa8, 0xfc, 0x95, 0x64, 0x15, 0x0e, 0x17, 0x89, 0xa5,
|
||||
0x3c, 0x8f, 0xf8, 0x91, 0x2b, 0xaa, 0xba, 0x02, 0x9e, 0x01, 0xb4, 0x3f, 0x48, 0xa2, 0x42, 0xa3,
|
||||
0xd5, 0x15, 0xfa, 0x18, 0x64, 0x9a, 0xed, 0x2d, 0x56, 0x87, 0x49, 0xe7, 0xd4, 0x61, 0xfb, 0x39,
|
||||
0x5c, 0x71, 0xc4, 0x1a, 0x35, 0xce, 0x3c, 0xde, 0xd4, 0x32, 0xb7, 0x17, 0x3c, 0xde, 0x33, 0xb6,
|
||||
0xf6, 0x73, 0x99, 0x37, 0xbc, 0x51, 0x16, 0x3d, 0xa9, 0xf6, 0xad, 0x04, 0x90, 0xe2, 0x7e, 0x03,
|
||||
0xf2, 0x2e, 0x8f, 0xf1, 0x22, 0xce, 0xbb, 0x0e, 0xad, 0xcc, 0x52, 0xb1, 0xc9, 0xd6, 0xd3, 0xc2,
|
||||
0xb1, 0xf0, 0xee, 0xc2, 0xf1, 0x13, 0xa8, 0xf2, 0xe8, 0xbc, 0x70, 0x5f, 0xe5, 0x4e, 0xf3, 0x49,
|
||||
0x74, 0xc9, 0xe0, 0xdd, 0x83, 0xad, 0x94, 0x16, 0x44, 0xd5, 0x5e, 0x4b, 0x7a, 0xf1, 0x8b, 0xd4,
|
||||
0xec, 0x42, 0x45, 0xdf, 0x49, 0x20, 0x9b, 0x24, 0xf4, 0xd8, 0x4b, 0xfb, 0xae, 0xaa, 0xfa, 0x16,
|
||||
0xc8, 0xae, 0x1f, 0x5b, 0x49, 0xc3, 0x4f, 0xfd, 0xa9, 0xe2, 0xfa, 0x31, 0xe3, 0x91, 0x3e, 0x1f,
|
||||
0x4e, 0x30, 0x3e, 0x1e, 0x12, 0xb1, 0x4f, 0x3d, 0x4a, 0xc2, 0x0a, 0x87, 0xf1, 0x23, 0xbc, 0x44,
|
||||
0x18, 0x13, 0xf6, 0xc8, 0x16, 0xf9, 0xd3, 0xc5, 0x00, 0xf4, 0x99, 0xdd, 0x86, 0xb5, 0xe3, 0x20,
|
||||
0x88, 0x62, 0x56, 0x4a, 0xe6, 0x31, 0xff, 0x71, 0xc9, 0x1a, 0xd2, 0x06, 0x85, 0x65, 0xa8, 0x90,
|
||||
0xe8, 0x6f, 0x47, 0x21, 0x7a, 0x0a, 0x95, 0x60, 0x44, 0x42, 0x3b, 0x0e, 0x42, 0xe1, 0x91, 0x59,
|
||||
0x1d, 0x89, 0xb3, 0x5d, 0x71, 0x06, 0x4f, 0x4f, 0xa3, 0x1d, 0x28, 0xb3, 0xb5, 0xef, 0x08, 0x6f,
|
||||
0x49, 0x7e, 0x6a, 0x7f, 0x93, 0x00, 0xb0, 0xed, 0x0f, 0xc8, 0x85, 0x34, 0x58, 0x4b, 0xd3, 0x39,
|
||||
0x5b, 0x96, 0xa6, 0x98, 0x9d, 0xde, 0x30, 0x53, 0x4c, 0xe1, 0x3c, 0xc5, 0xac, 0xd6, 0xd5, 0x7f,
|
||||
0x2b, 0x25, 0x9d, 0xda, 0x85, 0xd8, 0xbe, 0x03, 0x0a, 0x2f, 0x47, 0x38, 0x23, 0x79, 0xc6, 0x08,
|
||||
0x30, 0x50, 0x83, 0x71, 0x93, 0x6a, 0x18, 0x0b, 0x2b, 0x34, 0x8c, 0x34, 0x04, 0xe3, 0x60, 0xf4,
|
||||
0x8d, 0x70, 0x06, 0xb6, 0xbe, 0x64, 0x64, 0xbc, 0x85, 0x2a, 0x2d, 0x51, 0x88, 0xed, 0x73, 0xc9,
|
||||
0xee, 0xc1, 0x5a, 0xd0, 0xef, 0x8f, 0x13, 0x83, 0xa3, 0x0c, 0x99, 0x2e, 0xdd, 0xc1, 0xfc, 0x00,
|
||||
0xfa, 0x0c, 0xd6, 0x07, 0xc4, 0x27, 0xa1, 0x3d, 0xb4, 0x98, 0x64, 0xc2, 0x42, 0xd9, 0x8b, 0xf7,
|
||||
0xf8, 0x09, 0x5e, 0x98, 0x56, 0x07, 0xa9, 0x5f, 0xda, 0xef, 0xf3, 0x50, 0x4d, 0x6f, 0xa3, 0xcf,
|
||||
0x61, 0xfd, 0x98, 0xb3, 0x22, 0x08, 0x4a, 0x0b, 0xba, 0xdd, 0x34, 0xb3, 0xfb, 0x39, 0x5c, 0x3d,
|
||||
0x4e, 0x33, 0xff, 0x04, 0x20, 0x26, 0xa1, 0x37, 0xe5, 0x47, 0x3a, 0xd3, 0x7e, 0x4e, 0x63, 0x77,
|
||||
0x3f, 0x87, 0xe5, 0x78, 0x1a, 0xc8, 0x3f, 0x03, 0x25, 0xa4, 0x4e, 0x29, 0x30, 0xf9, 0x94, 0xe8,
|
||||
0x7a, 0xb6, 0xe2, 0x9e, 0x3a, 0xed, 0x7e, 0x0e, 0x43, 0x38, 0x73, 0xe1, 0x4f, 0xa7, 0x29, 0x98,
|
||||
0x23, 0x17, 0x17, 0x74, 0x14, 0x29, 0xdf, 0x99, 0x65, 0x5f, 0xf6, 0x93, 0x66, 0x5f, 0x86, 0xa7,
|
||||
0xfd, 0x4b, 0x82, 0xf5, 0x54, 0xe7, 0x71, 0xd8, 0xb8, 0xf8, 0xbb, 0xb5, 0xe2, 0xd0, 0xe5, 0xac,
|
||||
0xe9, 0x0a, 0x0b, 0x34, 0xbd, 0xdc, 0x74, 0x97, 0x0c, 0xa6, 0xdf, 0x15, 0x60, 0x8b, 0x77, 0xf3,
|
||||
0xdd, 0x90, 0x57, 0x2e, 0x07, 0xd1, 0xe0, 0xe2, 0xc2, 0x66, 0x7a, 0x23, 0x6e, 0xe3, 0x77, 0xb5,
|
||||
0xe9, 0x2a, 0x14, 0xc6, 0xae, 0x93, 0xcc, 0x2c, 0xc6, 0xae, 0xb3, 0xa8, 0x4b, 0x3d, 0xdb, 0x90,
|
||||
0xd3, 0xba, 0xcb, 0xf5, 0x48, 0x14, 0xdb, 0xde, 0x88, 0xa5, 0xd9, 0x22, 0x9e, 0x01, 0xe6, 0xca,
|
||||
0x90, 0xd2, 0x5c, 0x19, 0x42, 0xb7, 0xfb, 0x6f, 0x6c, 0xdf, 0x27, 0xc3, 0x59, 0x53, 0x22, 0x0b,
|
||||
0x88, 0x41, 0x19, 0xc8, 0x07, 0x23, 0xd6, 0x8f, 0x6c, 0xcc, 0x15, 0x52, 0xdd, 0x11, 0x7b, 0x34,
|
||||
0xf3, 0xc1, 0x28, 0xdb, 0xbb, 0xc8, 0xd9, 0xde, 0xe5, 0x8c, 0x11, 0x60, 0x25, 0x23, 0xfc, 0x3d,
|
||||
0x0f, 0x32, 0xf7, 0xb6, 0x95, 0x94, 0x9f, 0x4a, 0x5c, 0x5c, 0xf5, 0x17, 0x4c, 0x5c, 0x67, 0xf4,
|
||||
0x5d, 0x58, 0x30, 0x15, 0x10, 0x66, 0x2a, 0xce, 0xcc, 0x74, 0xbe, 0x05, 0x32, 0xea, 0x29, 0xbd,
|
||||
0x43, 0x3d, 0xe5, 0x95, 0x1a, 0xca, 0x64, 0x14, 0x57, 0x61, 0x6c, 0xf2, 0x51, 0x9c, 0x98, 0x75,
|
||||
0xc8, 0xd3, 0x59, 0x87, 0xf6, 0x16, 0x14, 0xd3, 0xf5, 0x48, 0x6f, 0xe2, 0xf7, 0xa9, 0x16, 0xaf,
|
||||
0x43, 0x79, 0x44, 0x48, 0x68, 0x19, 0x8e, 0x28, 0xf6, 0x4a, 0xf4, 0xa7, 0xc1, 0xc4, 0x30, 0xa7,
|
||||
0x62, 0xe4, 0xb9, 0x18, 0x53, 0x00, 0xaa, 0x81, 0x1c, 0x4d, 0xfc, 0xbe, 0xb5, 0xb4, 0x90, 0xa2,
|
||||
0xf4, 0x99, 0x4f, 0x54, 0x22, 0xb1, 0xd2, 0xbe, 0x06, 0x78, 0x4e, 0x26, 0xb5, 0x1e, 0x19, 0xd0,
|
||||
0x8b, 0x85, 0xe2, 0xa4, 0x25, 0x8a, 0xcb, 0x9f, 0xef, 0xba, 0x05, 0x56, 0x99, 0xcc, 0x5c, 0xf7,
|
||||
0xfe, 0x5f, 0x8a, 0x20, 0x4f, 0xbf, 0x7b, 0x20, 0x05, 0xca, 0xbd, 0xa3, 0x66, 0x53, 0xef, 0xf5,
|
||||
0xd4, 0x1c, 0xda, 0x06, 0xf5, 0xa8, 0xa3, 0x7f, 0x71, 0xa8, 0x37, 0x4d, 0xbd, 0x65, 0xe9, 0x18,
|
||||
0x77, 0xb1, 0x2a, 0x21, 0x04, 0x1b, 0xcd, 0x6e, 0xa7, 0xa3, 0x37, 0x4d, 0x6b, 0xb7, 0x6e, 0xb4,
|
||||
0xf5, 0x96, 0x9a, 0x47, 0x57, 0x61, 0xeb, 0x50, 0xc7, 0x07, 0x46, 0xaf, 0x67, 0x74, 0x3b, 0x56,
|
||||
0x4b, 0xef, 0x18, 0x7a, 0x4b, 0x2d, 0xa0, 0x1b, 0x70, 0xb5, 0xd9, 0x6d, 0xb7, 0xf5, 0xa6, 0x49,
|
||||
0xc1, 0x9d, 0xae, 0x69, 0xe9, 0x5f, 0x18, 0x3d, 0xb3, 0xa7, 0x16, 0x29, 0x6d, 0xa3, 0xdd, 0xd6,
|
||||
0xf7, 0xea, 0x6d, 0xab, 0x8e, 0xf7, 0x8e, 0x0e, 0xf4, 0x8e, 0xa9, 0xae, 0x51, 0x3a, 0x09, 0xb4,
|
||||
0x65, 0x1c, 0xe8, 0x1d, 0x4a, 0x4e, 0x2d, 0xa3, 0x6b, 0x80, 0x12, 0xb0, 0xd1, 0x69, 0xe9, 0x5f,
|
||||
0x58, 0xe6, 0x97, 0x87, 0xba, 0x5a, 0x41, 0xb7, 0xe0, 0x7a, 0x02, 0x4f, 0xdf, 0x53, 0x3f, 0xd0,
|
||||
0x55, 0x19, 0xa9, 0x50, 0x4d, 0x36, 0xcd, 0xee, 0xe1, 0x73, 0x15, 0xd2, 0xd4, 0x71, 0xf7, 0x15,
|
||||
0xd6, 0x9b, 0x5d, 0xdc, 0x52, 0x95, 0x34, 0xf8, 0xa5, 0xde, 0x34, 0xbb, 0xd8, 0x32, 0x5a, 0x6a,
|
||||
0x95, 0x32, 0x9f, 0x80, 0x7b, 0x7a, 0x1d, 0x37, 0xf7, 0x2d, 0xac, 0xf7, 0x8e, 0xda, 0xa6, 0xba,
|
||||
0x4e, 0x55, 0xb0, 0x6b, 0xb4, 0x75, 0x26, 0xd1, 0x6e, 0xf7, 0xa8, 0xd3, 0x52, 0x37, 0xd0, 0x26,
|
||||
0x28, 0x07, 0xba, 0x59, 0x4f, 0x74, 0xb2, 0x49, 0xef, 0x6f, 0xd6, 0x9b, 0xfb, 0x7a, 0x02, 0x51,
|
||||
0xd1, 0x0e, 0x6c, 0x37, 0xeb, 0x1d, 0x8a, 0xd4, 0xc4, 0x7a, 0xdd, 0xd4, 0xad, 0xdd, 0x6e, 0xbb,
|
||||
0xa5, 0x63, 0x75, 0x8b, 0x0a, 0x38, 0xb7, 0x63, 0xb4, 0x75, 0x15, 0xa5, 0x30, 0x5a, 0x7a, 0x5b,
|
||||
0x9f, 0x61, 0x5c, 0x49, 0x61, 0x24, 0x3b, 0x14, 0x63, 0x9b, 0x0a, 0xd3, 0x38, 0x32, 0xda, 0x2d,
|
||||
0xa1, 0x28, 0x6e, 0xb4, 0xab, 0x68, 0x0b, 0xd6, 0x13, 0x61, 0x3a, 0x6d, 0xa3, 0x67, 0xaa, 0xd7,
|
||||
0xd0, 0x75, 0xb8, 0x92, 0x80, 0x0e, 0x74, 0x13, 0x1b, 0x4d, 0xae, 0xd5, 0xeb, 0xf4, 0x6c, 0xf7,
|
||||
0xc8, 0xb4, 0xba, 0xbb, 0xd6, 0x81, 0x7e, 0xd0, 0xc5, 0x5f, 0xaa, 0x3b, 0xf7, 0xff, 0x28, 0x41,
|
||||
0x25, 0xa9, 0xf0, 0x51, 0x05, 0x8a, 0x9d, 0x6e, 0x47, 0x57, 0x73, 0x74, 0xd5, 0xe8, 0x76, 0xdb,
|
||||
0xaa, 0x44, 0x57, 0x46, 0xc7, 0x7c, 0xaa, 0xe6, 0x91, 0x0c, 0x6b, 0x46, 0xc7, 0xfc, 0xf0, 0xb1,
|
||||
0x5a, 0x10, 0xcb, 0x8f, 0x6a, 0x6a, 0x51, 0x2c, 0x1f, 0x7f, 0xac, 0xae, 0xd1, 0xe5, 0x6e, 0xbb,
|
||||
0x5b, 0x37, 0x55, 0x40, 0x00, 0xa5, 0x56, 0xf7, 0xa8, 0xd1, 0xd6, 0x55, 0x85, 0xae, 0x7b, 0x26,
|
||||
0x36, 0x3a, 0x7b, 0xea, 0x36, 0xe5, 0x40, 0x58, 0xa2, 0x61, 0x74, 0xea, 0xf8, 0x4b, 0xd5, 0xa1,
|
||||
0xda, 0x14, 0x20, 0x8e, 0x4c, 0xee, 0x37, 0x61, 0x73, 0xae, 0x26, 0x45, 0x25, 0xc8, 0xb7, 0x4d,
|
||||
0x35, 0x87, 0xca, 0x50, 0x68, 0x9b, 0xba, 0x2a, 0x51, 0x80, 0xfe, 0x42, 0xcd, 0xd3, 0xbf, 0x7b,
|
||||
0xa6, 0x5a, 0xa0, 0x1b, 0x7b, 0xa6, 0xae, 0x16, 0x29, 0xa0, 0xa3, 0xab, 0x6b, 0xf7, 0x9f, 0xc2,
|
||||
0x1a, 0xab, 0x73, 0xa8, 0xe3, 0x1b, 0x9d, 0x97, 0xf5, 0xb6, 0xd1, 0xe2, 0x72, 0x1d, 0x1c, 0xf5,
|
||||
0x4c, 0x55, 0x62, 0x5c, 0xed, 0x77, 0x8f, 0xda, 0xd4, 0xc9, 0xab, 0x50, 0xa1, 0x50, 0x6a, 0x75,
|
||||
0xb5, 0x70, 0xff, 0x2e, 0x94, 0x78, 0xf2, 0xa6, 0x67, 0x8c, 0x4e, 0x4f, 0xc7, 0xf4, 0x66, 0x2a,
|
||||
0x11, 0xb3, 0x87, 0x2a, 0xdd, 0xbf, 0x03, 0x95, 0x24, 0x98, 0x29, 0x45, 0xac, 0xd7, 0x29, 0x6d,
|
||||
0x19, 0xd6, 0x5e, 0x61, 0x83, 0x1e, 0xa8, 0x7d, 0xb7, 0x0e, 0xeb, 0x07, 0x2c, 0xf4, 0x7b, 0x24,
|
||||
0x3c, 0x71, 0xfb, 0x04, 0xfd, 0x1c, 0xd4, 0x66, 0x48, 0xec, 0x98, 0xcc, 0xba, 0x71, 0xb4, 0xf0,
|
||||
0x93, 0xd0, 0xcd, 0x45, 0xfd, 0xb8, 0x96, 0x43, 0xbb, 0xb0, 0xbe, 0x6f, 0x47, 0x29, 0xec, 0x5b,
|
||||
0x73, 0x35, 0x74, 0x3a, 0xc1, 0xdf, 0xbc, 0x76, 0xa6, 0xda, 0xe2, 0x13, 0xa7, 0x1c, 0x32, 0x00,
|
||||
0xb5, 0x48, 0xd4, 0x0f, 0xdd, 0x63, 0x72, 0x51, 0x62, 0x0b, 0xf9, 0xd4, 0x72, 0xe8, 0x05, 0xb5,
|
||||
0xd3, 0xd8, 0x8f, 0x2f, 0x4a, 0xe7, 0xce, 0x92, 0xcd, 0xe9, 0x68, 0x2a, 0x87, 0x7e, 0x01, 0x9b,
|
||||
0xbd, 0x37, 0xf4, 0x67, 0xb2, 0x17, 0xcd, 0x69, 0x49, 0x8c, 0xae, 0x96, 0xd2, 0x4a, 0xbe, 0x9d,
|
||||
0x6a, 0x39, 0x74, 0x08, 0x28, 0x4b, 0x8b, 0x8d, 0x3f, 0xce, 0xe5, 0x70, 0xd9, 0x26, 0x1b, 0x77,
|
||||
0xe4, 0x50, 0x0b, 0x36, 0x5a, 0x61, 0x30, 0xba, 0xa8, 0xbc, 0x4b, 0x2c, 0xf9, 0x29, 0x28, 0xdc,
|
||||
0x15, 0xd8, 0xa0, 0x0d, 0x65, 0xeb, 0xd3, 0xd9, 0xf0, 0x6d, 0x19, 0x7a, 0x13, 0xd6, 0x13, 0x03,
|
||||
0xbe, 0x83, 0xc0, 0xb2, 0x0d, 0x2d, 0x87, 0x9e, 0x81, 0x4c, 0x25, 0xf9, 0x7e, 0x1c, 0xe8, 0xb0,
|
||||
0xc9, 0x05, 0x98, 0x7e, 0x60, 0x9c, 0xd3, 0x43, 0xf6, 0x2b, 0xe6, 0x72, 0x32, 0xd5, 0x7d, 0x3b,
|
||||
0xba, 0x20, 0x8d, 0xe5, 0x0e, 0xfd, 0x1c, 0x36, 0xa8, 0x99, 0xa7, 0xe7, 0xa3, 0xf3, 0x8d, 0x72,
|
||||
0x73, 0xf1, 0x2d, 0xc2, 0x67, 0xa8, 0x72, 0xc3, 0x60, 0x74, 0x39, 0xc1, 0x3e, 0x81, 0x12, 0x2f,
|
||||
0x8c, 0xd1, 0xce, 0x9c, 0x66, 0xa7, 0xdf, 0xbe, 0xe6, 0xe4, 0x99, 0x7e, 0xe8, 0x64, 0x6a, 0x59,
|
||||
0x9f, 0x4e, 0xd5, 0x1a, 0x13, 0xa3, 0x35, 0xc7, 0x42, 0x76, 0x28, 0x76, 0x73, 0xf1, 0x80, 0x5f,
|
||||
0xcb, 0xa1, 0x7d, 0xda, 0x96, 0xcd, 0x86, 0x73, 0xe8, 0xff, 0xe6, 0xba, 0x82, 0xb9, 0xb9, 0xdd,
|
||||
0x39, 0x0c, 0x7d, 0x06, 0x25, 0x5e, 0x62, 0xa2, 0xa5, 0xdf, 0x57, 0x6e, 0x66, 0x77, 0x52, 0x1f,
|
||||
0x30, 0x58, 0x1c, 0x6e, 0xce, 0x7d, 0xe7, 0x41, 0xef, 0x2f, 0x20, 0x94, 0xfd, 0x0a, 0x74, 0x2e,
|
||||
0xc5, 0x27, 0x50, 0x68, 0x7a, 0xce, 0x92, 0xcc, 0x30, 0xc7, 0x64, 0x6a, 0x8e, 0x9f, 0x43, 0x75,
|
||||
0x80, 0xd9, 0x90, 0x15, 0x65, 0x8b, 0xde, 0xb9, 0xe9, 0xeb, 0x32, 0xe3, 0xee, 0xc1, 0xd6, 0x61,
|
||||
0x48, 0x86, 0x81, 0xed, 0x5c, 0x32, 0x0d, 0x3c, 0x81, 0x35, 0x36, 0x89, 0x9e, 0x0b, 0xbf, 0xd9,
|
||||
0x74, 0x7a, 0x19, 0xe2, 0x33, 0x36, 0xc0, 0x1f, 0xd9, 0xfd, 0x18, 0xdd, 0x38, 0x3b, 0x47, 0x11,
|
||||
0x63, 0xe9, 0x65, 0xc8, 0x0d, 0xa8, 0x08, 0xbb, 0x35, 0xd0, 0xcd, 0x65, 0xe6, 0x3c, 0x6c, 0x9c,
|
||||
0xa7, 0xfe, 0x46, 0xed, 0xab, 0x47, 0x03, 0x37, 0x7e, 0x33, 0x3e, 0x7e, 0xd0, 0x0f, 0xbc, 0x87,
|
||||
0xfd, 0xdf, 0x46, 0x8f, 0x1e, 0x3d, 0x79, 0x18, 0x8d, 0x4f, 0x86, 0xae, 0xf7, 0x70, 0xc9, 0xff,
|
||||
0xf1, 0x1c, 0x97, 0xd8, 0x3f, 0xf0, 0x7c, 0xf4, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xae, 0x2c,
|
||||
0xe7, 0xd4, 0xe9, 0x23, 0x00, 0x00,
|
||||
}
|
||||
|
||||
// Reference imports to suppress errors if they are not otherwise used.
|
||||
|
|
|
@ -691,11 +691,13 @@ message InsertOrDeleteMsg {
|
|||
message SearchMsg {
|
||||
string collection_name = 1;
|
||||
VectorRowRecord records = 2;
|
||||
string partition_tag = 3;
|
||||
repeated string partition_tag = 3;
|
||||
int64 uid = 4;
|
||||
uint64 timestamp =5;
|
||||
int64 client_id = 6;
|
||||
repeated KeyValuePair extra_params = 7;
|
||||
repeated string json = 8;
|
||||
string dsl = 9;
|
||||
}
|
||||
|
||||
enum SyncType {
|
||||
|
|
|
@ -21,20 +21,43 @@ var (
|
|||
errTxnFailed = errors.New("failed to commit transaction")
|
||||
)
|
||||
|
||||
type etcdKVBase struct {
|
||||
type EtcdKVBase struct {
|
||||
client *clientv3.Client
|
||||
rootPath string
|
||||
}
|
||||
|
||||
// NewEtcdKVBase creates a new etcd kv.
|
||||
func NewEtcdKVBase(client *clientv3.Client, rootPath string) *etcdKVBase {
|
||||
return &etcdKVBase{
|
||||
func NewEtcdKVBase(client *clientv3.Client, rootPath string) *EtcdKVBase {
|
||||
return &EtcdKVBase{
|
||||
client: client,
|
||||
rootPath: rootPath,
|
||||
}
|
||||
}
|
||||
|
||||
func (kv *etcdKVBase) Load(key string) (string, error) {
|
||||
func (kv *EtcdKVBase) LoadWithPrefix(key string) ( []string, []string) {
|
||||
key = path.Join(kv.rootPath, key)
|
||||
println("in loadWithPrefix,", key)
|
||||
resp, err := etcdutil.EtcdKVGet(kv.client, key,clientv3.WithPrefix())
|
||||
if err != nil {
|
||||
return [] string {}, [] string {}
|
||||
}
|
||||
var keys []string
|
||||
var values []string
|
||||
for _,kvs := range resp.Kvs{
|
||||
//println(len(kvs.))
|
||||
if len(kvs.Key) <= 0{
|
||||
println("KKK")
|
||||
continue
|
||||
}
|
||||
keys = append(keys, string(kvs.Key))
|
||||
values = append(values, string(kvs.Value))
|
||||
}
|
||||
//println(keys)
|
||||
//println(values)
|
||||
return keys, values
|
||||
}
|
||||
|
||||
func (kv *EtcdKVBase) Load(key string) (string, error) {
|
||||
key = path.Join(kv.rootPath, key)
|
||||
|
||||
resp, err := etcdutil.EtcdKVGet(kv.client, key)
|
||||
|
@ -49,7 +72,7 @@ func (kv *etcdKVBase) Load(key string) (string, error) {
|
|||
return string(resp.Kvs[0].Value), nil
|
||||
}
|
||||
|
||||
func (kv *etcdKVBase) Save(key, value string) error {
|
||||
func (kv *EtcdKVBase) Save(key, value string) error {
|
||||
key = path.Join(kv.rootPath, key)
|
||||
|
||||
txn := NewSlowLogTxn(kv.client)
|
||||
|
@ -64,7 +87,7 @@ func (kv *etcdKVBase) Save(key, value string) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (kv *etcdKVBase) Remove(key string) error {
|
||||
func (kv *EtcdKVBase) Remove(key string) error {
|
||||
key = path.Join(kv.rootPath, key)
|
||||
|
||||
txn := NewSlowLogTxn(kv.client)
|
||||
|
@ -79,12 +102,18 @@ func (kv *etcdKVBase) Remove(key string) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (kv *etcdKVBase) Watch(key string) clientv3.WatchChan {
|
||||
func (kv *EtcdKVBase) Watch(key string) clientv3.WatchChan {
|
||||
key = path.Join(kv.rootPath, key)
|
||||
rch := kv.client.Watch(context.Background(), key)
|
||||
return rch
|
||||
}
|
||||
|
||||
func (kv *EtcdKVBase) WatchWithPrefix(key string) clientv3.WatchChan {
|
||||
key = path.Join(kv.rootPath, key)
|
||||
rch := kv.client.Watch(context.Background(), key, clientv3.WithPrefix())
|
||||
return rch
|
||||
}
|
||||
|
||||
// SlowLogTxn wraps etcd transaction and log slow one.
|
||||
type SlowLogTxn struct {
|
||||
clientv3.Txn
|
||||
|
|
|
@ -7,4 +7,6 @@ type Base interface {
|
|||
Save(key, value string) error
|
||||
Remove(key string) error
|
||||
Watch(key string) clientv3.WatchChan
|
||||
WatchWithPrefix(key string) clientv3.WatchChan
|
||||
LoadWithPrefix(key string) ( []string, []string)
|
||||
}
|
||||
|
|
|
@ -97,8 +97,15 @@ type GRPCMasterServer struct {
|
|||
}
|
||||
|
||||
func (ms GRPCMasterServer) CreateCollection(ctx context.Context, in *messagepb.Mapping) (*messagepb.Status, error) {
|
||||
ms.CreateRequest <- in
|
||||
// ms.CreateRequest <- in
|
||||
fmt.Println("Handle a new create collection request")
|
||||
err := WriteCollection2Datastore(in)
|
||||
if err != nil {
|
||||
return &messagepb.Status{
|
||||
ErrorCode: 100,
|
||||
Reason: "",
|
||||
}, err
|
||||
}
|
||||
return &messagepb.Status{
|
||||
ErrorCode: 0,
|
||||
Reason: "",
|
||||
|
@ -145,3 +152,41 @@ func CollectionController(ch chan *messagepb.Mapping) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
func WriteCollection2Datastore(collection *messagepb.Mapping) error {
|
||||
cli, _ := clientv3.New(clientv3.Config{
|
||||
Endpoints: []string{"127.0.0.1:12379"},
|
||||
DialTimeout: 5 * time.Second,
|
||||
})
|
||||
defer cli.Close()
|
||||
kvbase := kv.NewEtcdKVBase(cli, common.ETCD_ROOT_PATH)
|
||||
sID := uuid.New()
|
||||
cID := uuid.New()
|
||||
fieldMetas := []*messagepb.FieldMeta{}
|
||||
if collection.Schema != nil {
|
||||
fieldMetas = collection.Schema.FieldMetas
|
||||
}
|
||||
c := mock.NewCollection(cID, collection.CollectionName,
|
||||
time.Now(), fieldMetas, []uuid.UUID{sID},
|
||||
[]string{"default"})
|
||||
cm := mock.GrpcMarshal(&c)
|
||||
s := mock.NewSegment(sID, cID, collection.CollectionName, "default", 0, 100, time.Now(), time.Unix(1<<36-1, 0))
|
||||
collectionData, _ := mock.Collection2JSON(*cm)
|
||||
segmentData, err := mock.Segment2JSON(s)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
return err
|
||||
}
|
||||
err = kvbase.Save("collection/"+cID.String(), collectionData)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
return err
|
||||
}
|
||||
err = kvbase.Save("segment/"+sID.String(), segmentData)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
|
||||
}
|
||||
|
|
|
@ -1,15 +0,0 @@
|
|||
package reader
|
||||
|
||||
import (
|
||||
msgPb "github.com/czs007/suvlim/pkg/master/grpc/message"
|
||||
)
|
||||
|
||||
type IndexConfig struct {}
|
||||
|
||||
func buildIndex(config IndexConfig) msgPb.Status {
|
||||
return msgPb.Status{ErrorCode: msgPb.ErrorCode_SUCCESS}
|
||||
}
|
||||
|
||||
func dropIndex(fieldName string) msgPb.Status {
|
||||
return msgPb.Status{ErrorCode: msgPb.ErrorCode_SUCCESS}
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
reader "github.com/czs007/suvlim/reader/read_node"
|
||||
"sync"
|
||||
)
|
||||
|
||||
func main() {
|
||||
pulsarURL := "pulsar://localhost:6650"
|
||||
|
||||
numOfQueryNode := 2
|
||||
|
||||
go reader.StartQueryNode(pulsarURL, numOfQueryNode, 0)
|
||||
reader.StartQueryNode(pulsarURL, numOfQueryNode, 1)
|
||||
|
||||
|
||||
}
|
||||
|
||||
func main2() {
|
||||
wg := sync.WaitGroup{}
|
||||
//ctx, cancel := context.WithCancel(context.Background())
|
||||
//defer cancel()
|
||||
wg.Add(1)
|
||||
reader.StartQueryNode2()
|
||||
wg.Wait()
|
||||
}
|
|
@ -2,9 +2,9 @@ package reader
|
|||
|
||||
/*
|
||||
|
||||
#cgo CFLAGS: -I../core/include
|
||||
#cgo CFLAGS: -I${SRCDIR}/../../core/include
|
||||
|
||||
#cgo LDFLAGS: -L../core/lib -lmilvus_dog_segment -Wl,-rpath=../core/lib
|
||||
#cgo LDFLAGS: -L${SRCDIR}/../../core/lib -lmilvus_dog_segment -Wl,-rpath=${SRCDIR}/../../core/lib
|
||||
|
||||
#include "collection_c.h"
|
||||
#include "partition_c.h"
|
||||
|
@ -16,6 +16,7 @@ import "C"
|
|||
type Collection struct {
|
||||
CollectionPtr C.CCollection
|
||||
CollectionName string
|
||||
CollectionID uint64
|
||||
Partitions []*Partition
|
||||
}
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
package reader
|
||||
|
||||
/*
|
||||
|
||||
#cgo CFLAGS: -I../core/include
|
||||
|
||||
#cgo LDFLAGS: -L../core/lib -lmilvus_dog_segment -Wl,-rpath=../core/lib
|
||||
|
||||
#include "collection_c.h"
|
||||
#include "partition_c.h"
|
||||
#include "segment_c.h"
|
||||
|
||||
*/
|
||||
import "C"
|
||||
import (
|
||||
msgPb "github.com/czs007/suvlim/pkg/master/grpc/message"
|
||||
)
|
||||
|
||||
type IndexConfig struct{}
|
||||
|
||||
func (s *Segment) buildIndex() msgPb.Status {
|
||||
/*C.BuildIndex
|
||||
int
|
||||
BuildIndex(CSegmentBase c_segment);
|
||||
*/
|
||||
var status = C.BuildIndex(s.SegmentPtr)
|
||||
if status != 0 {
|
||||
return msgPb.Status{ErrorCode: msgPb.ErrorCode_BUILD_INDEX_ERROR}
|
||||
}
|
||||
return msgPb.Status{ErrorCode: msgPb.ErrorCode_SUCCESS}
|
||||
}
|
||||
|
||||
func (s *Segment) dropIndex(fieldName string) msgPb.Status {
|
||||
// WARN: Not support yet
|
||||
|
||||
return msgPb.Status{ErrorCode: msgPb.ErrorCode_SUCCESS}
|
||||
}
|
|
@ -0,0 +1,74 @@
|
|||
package reader
|
||||
|
||||
import (
|
||||
"encoding/binary"
|
||||
"fmt"
|
||||
msgPb "github.com/czs007/suvlim/pkg/master/grpc/message"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"math"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestIndex_BuildIndex(t *testing.T) {
|
||||
// 1. Construct node, collection, partition and segment
|
||||
node := NewQueryNode(0, 0)
|
||||
var collection = node.NewCollection("collection0", "fake schema")
|
||||
var partition = collection.NewPartition("partition0")
|
||||
var segment = partition.NewSegment(0)
|
||||
|
||||
// 2. Create ids and timestamps
|
||||
ids := make([]int64, 0)
|
||||
timestamps := make([]uint64, 0)
|
||||
|
||||
// 3. Create records, use schema below:
|
||||
// schema_tmp->AddField("fakeVec", DataType::VECTOR_FLOAT, 16);
|
||||
// schema_tmp->AddField("age", DataType::INT32);
|
||||
const DIM = 16
|
||||
const N = 10000
|
||||
var vec = [DIM]float32{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}
|
||||
var rawData []byte
|
||||
for _, ele := range vec {
|
||||
buf := make([]byte, 4)
|
||||
binary.LittleEndian.PutUint32(buf, math.Float32bits(ele))
|
||||
rawData = append(rawData, buf...)
|
||||
}
|
||||
bs := make([]byte, 4)
|
||||
binary.LittleEndian.PutUint32(bs, 1)
|
||||
rawData = append(rawData, bs...)
|
||||
var records [][]byte
|
||||
for i := 0; i < N; i++ {
|
||||
ids = append(ids, int64(i))
|
||||
timestamps = append(timestamps, uint64(i))
|
||||
records = append(records, rawData)
|
||||
}
|
||||
|
||||
// 4. Do PreInsert
|
||||
var offset = segment.SegmentPreInsert(N)
|
||||
assert.GreaterOrEqual(t, offset, int64(0))
|
||||
|
||||
// 5. Do Insert
|
||||
var err = segment.SegmentInsert(offset, &ids, ×tamps, &records)
|
||||
assert.NoError(t, err)
|
||||
|
||||
// 6. Close segment, and build index
|
||||
err = segment.Close()
|
||||
assert.NoError(t, err)
|
||||
|
||||
// 7. Do search
|
||||
var queryJson = "{\"field_name\":\"fakevec\",\"num_queries\":1,\"topK\":10}"
|
||||
var queryRawData = make([]float32, 0)
|
||||
for i := 0; i < 16; i++ {
|
||||
queryRawData = append(queryRawData, float32(i))
|
||||
}
|
||||
var vectorRecord = msgPb.VectorRowRecord{
|
||||
FloatData: queryRawData,
|
||||
}
|
||||
var searchRes, searchErr = segment.SegmentSearch(queryJson, timestamps[N/2], &vectorRecord)
|
||||
assert.NoError(t, searchErr)
|
||||
fmt.Println(searchRes)
|
||||
|
||||
// 8. Destruct node, collection, and segment
|
||||
partition.DeleteSegment(segment)
|
||||
collection.DeletePartition(partition)
|
||||
node.DeleteCollection(collection)
|
||||
}
|
|
@ -0,0 +1,233 @@
|
|||
package reader
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"github.com/czs007/suvlim/pkg/master/mock"
|
||||
"reflect"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
"github.com/czs007/suvlim/conf"
|
||||
"github.com/czs007/suvlim/pkg/master/kv"
|
||||
"go.etcd.io/etcd/clientv3"
|
||||
"go.etcd.io/etcd/mvcc/mvccpb"
|
||||
)
|
||||
|
||||
const (
|
||||
CollectonPrefix = "/collection/"
|
||||
SegmentPrefix = "/segment/"
|
||||
)
|
||||
|
||||
|
||||
func GetCollectionObjId(key string) string {
|
||||
prefix := conf.Config.Etcd.Rootpath + CollectonPrefix
|
||||
return strings.TrimPrefix(key, prefix)
|
||||
}
|
||||
|
||||
func GetSegmentObjId(key string) string {
|
||||
prefix := conf.Config.Etcd.Rootpath + SegmentPrefix
|
||||
return strings.TrimPrefix(key, prefix)
|
||||
}
|
||||
|
||||
func isCollectionObj(key string) bool {
|
||||
prefix := conf.Config.Etcd.Rootpath + CollectonPrefix
|
||||
prefix = strings.TrimSpace(prefix)
|
||||
println("prefix is :$", prefix)
|
||||
index := strings.Index(key, prefix)
|
||||
println("index is :", index)
|
||||
return index == 0
|
||||
}
|
||||
|
||||
func isSegmentObj(key string) bool {
|
||||
prefix := conf.Config.Etcd.Rootpath + SegmentPrefix
|
||||
prefix = strings.TrimSpace(prefix)
|
||||
index := strings.Index(key, prefix)
|
||||
return index == 0
|
||||
}
|
||||
|
||||
func printCollectionStruct(obj *mock.Collection){
|
||||
v := reflect.ValueOf(obj)
|
||||
v = reflect.Indirect(v)
|
||||
typeOfS := v.Type()
|
||||
|
||||
for i := 0; i< v.NumField(); i++ {
|
||||
if typeOfS.Field(i).Name == "GrpcMarshalString"{
|
||||
continue
|
||||
}
|
||||
fmt.Printf("Field: %s\tValue: %v\n", typeOfS.Field(i).Name, v.Field(i).Interface())
|
||||
}
|
||||
}
|
||||
|
||||
func printSegmentStruct(obj *mock.Segment){
|
||||
v := reflect.ValueOf(obj)
|
||||
v = reflect.Indirect(v)
|
||||
typeOfS := v.Type()
|
||||
|
||||
for i := 0; i< v.NumField(); i++ {
|
||||
fmt.Printf("Field: %s\tValue: %v\n", typeOfS.Field(i).Name, v.Field(i).Interface())
|
||||
}
|
||||
}
|
||||
|
||||
func (node *QueryNode) processCollectionCreate(id string, value string) {
|
||||
println(fmt.Sprintf("Create Collection:$%s$", id))
|
||||
collection, err := mock.JSON2Collection(value)
|
||||
if err != nil {
|
||||
println("error of json 2 collection")
|
||||
println(err.Error())
|
||||
}
|
||||
printCollectionStruct(collection)
|
||||
}
|
||||
|
||||
func (node *QueryNode) processSegmentCreate(id string, value string) {
|
||||
println("Create Segment: ", id)
|
||||
segment, err := mock.JSON2Segment(value)
|
||||
if err != nil {
|
||||
println("error of json 2 segment")
|
||||
println(err.Error())
|
||||
}
|
||||
printSegmentStruct(segment)
|
||||
}
|
||||
|
||||
func (node *QueryNode) processCreate(key string, msg string) {
|
||||
println("process create", key, ":", msg)
|
||||
if isCollectionObj(key){
|
||||
objID := GetCollectionObjId(key)
|
||||
node.processCollectionCreate(objID, msg)
|
||||
}else if isSegmentObj(key){
|
||||
objID := GetSegmentObjId(key)
|
||||
node.processSegmentCreate(objID, msg)
|
||||
}else {
|
||||
println("can not process create msg:", key)
|
||||
}
|
||||
}
|
||||
|
||||
func (node *QueryNode) processSegmentModify(id string, value string) {
|
||||
println("Modify Segment: ", id)
|
||||
|
||||
segment, err := mock.JSON2Segment(value)
|
||||
if err != nil {
|
||||
println("error of json 2 segment")
|
||||
println(err.Error())
|
||||
}
|
||||
printSegmentStruct(segment)
|
||||
}
|
||||
|
||||
func (node *QueryNode) processCollectionModify(id string, value string) {
|
||||
println("Modify Collection: ", id)
|
||||
collection, err := mock.JSON2Collection(value)
|
||||
if err != nil {
|
||||
println("error of json 2 collection")
|
||||
println(err.Error())
|
||||
}
|
||||
printCollectionStruct(collection)
|
||||
}
|
||||
|
||||
func (node *QueryNode) processModify(key string, msg string){
|
||||
println("process modify")
|
||||
if isCollectionObj(key){
|
||||
objID := GetCollectionObjId(key)
|
||||
node.processCollectionModify(objID, msg)
|
||||
}else if isSegmentObj(key){
|
||||
objID := GetSegmentObjId(key)
|
||||
node.processSegmentModify(objID, msg)
|
||||
}else {
|
||||
println("can not process modify msg:", key)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
func (node *QueryNode) processSegmentDelete(id string){
|
||||
println("Delete segment: ", id)
|
||||
|
||||
}
|
||||
func (node *QueryNode) processCollectionDelete(id string){
|
||||
println("Delete collection: ", id)
|
||||
}
|
||||
|
||||
func (node *QueryNode) processDelete(key string){
|
||||
println("process delete")
|
||||
if isCollectionObj(key){
|
||||
objID := GetCollectionObjId(key)
|
||||
node.processCollectionDelete(objID)
|
||||
}else if isSegmentObj(key){
|
||||
objID := GetSegmentObjId(key)
|
||||
node.processSegmentDelete(objID)
|
||||
}else {
|
||||
println("can not process delete msg:", key)
|
||||
}
|
||||
}
|
||||
|
||||
func (node *QueryNode) processResp(resp clientv3.WatchResponse) error {
|
||||
err := resp.Err()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for _, ev := range resp.Events {
|
||||
if ev.IsCreate() {
|
||||
key := string(ev.Kv.Key)
|
||||
msg := string(ev.Kv.Value)
|
||||
node.processCreate(key, msg)
|
||||
} else if ev.IsModify() {
|
||||
key := string(ev.Kv.Key)
|
||||
msg := string(ev.Kv.Value)
|
||||
node.processModify(key, msg)
|
||||
} else if ev.Type == mvccpb.DELETE {
|
||||
key := string(ev.Kv.Key)
|
||||
node.processDelete(key)
|
||||
} else {
|
||||
println("Unrecognized etcd msg!")
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (node *QueryNode) loadCollections() error {
|
||||
keys, values := node.kvBase.LoadWithPrefix(CollectonPrefix)
|
||||
for i:= range keys{
|
||||
objID := GetCollectionObjId(keys[i])
|
||||
node.processCollectionCreate(objID, values[i])
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func (node *QueryNode) loadSegments() error {
|
||||
keys, values := node.kvBase.LoadWithPrefix(SegmentPrefix)
|
||||
for i:= range keys{
|
||||
objID := GetSegmentObjId(keys[i])
|
||||
node.processSegmentCreate(objID, values[i])
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (node *QueryNode) InitFromMeta() error {
|
||||
//pass
|
||||
etcdAddr := "http://"
|
||||
etcdAddr += conf.Config.Etcd.Address
|
||||
etcdPort := conf.Config.Etcd.Port
|
||||
etcdAddr = etcdAddr + ":" + strconv.FormatInt(int64(etcdPort), 10)
|
||||
cli, _ := clientv3.New(clientv3.Config{
|
||||
Endpoints: []string{etcdAddr},
|
||||
DialTimeout: 5 * time.Second,
|
||||
})
|
||||
defer cli.Close()
|
||||
node.kvBase = kv.NewEtcdKVBase(cli, conf.Config.Etcd.Rootpath)
|
||||
node.loadCollections()
|
||||
node.loadSegments()
|
||||
return nil
|
||||
}
|
||||
|
||||
func (node *QueryNode) RunMetaService(ctx context.Context, wg *sync.WaitGroup) {
|
||||
node.InitFromMeta()
|
||||
metaChan := node.kvBase.WatchWithPrefix("")
|
||||
for {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
wg.Done()
|
||||
println("DONE!!!!!!")
|
||||
return
|
||||
case resp := <-metaChan:
|
||||
node.processResp(resp)
|
||||
}
|
||||
}
|
||||
}
|
|
@ -2,9 +2,9 @@ package reader
|
|||
|
||||
/*
|
||||
|
||||
#cgo CFLAGS: -I../core/include
|
||||
#cgo CFLAGS: -I${SRCDIR}/../../core/include
|
||||
|
||||
#cgo LDFLAGS: -L../core/lib -lmilvus_dog_segment -Wl,-rpath=../core/lib
|
||||
#cgo LDFLAGS: -L${SRCDIR}/../../core/lib -lmilvus_dog_segment -Wl,-rpath=${SRCDIR}/../../core/lib
|
||||
|
||||
#include "collection_c.h"
|
||||
#include "partition_c.h"
|
|
@ -2,9 +2,9 @@ package reader
|
|||
|
||||
/*
|
||||
|
||||
#cgo CFLAGS: -I../core/include
|
||||
#cgo CFLAGS: -I${SRCDIR}/../../core/include
|
||||
|
||||
#cgo LDFLAGS: -L../core/lib -lmilvus_dog_segment -Wl,-rpath=../core/lib
|
||||
#cgo LDFLAGS: -L${SRCDIR}/../../core/lib -lmilvus_dog_segment -Wl,-rpath=${SRCDIR}/../../core/lib
|
||||
|
||||
#include "collection_c.h"
|
||||
#include "partition_c.h"
|
||||
|
@ -15,11 +15,14 @@ import "C"
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
msgPb "github.com/czs007/suvlim/pkg/master/grpc/message"
|
||||
"github.com/czs007/suvlim/reader/message_client"
|
||||
"sort"
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
|
||||
msgPb "github.com/czs007/suvlim/pkg/master/grpc/message"
|
||||
"github.com/czs007/suvlim/pkg/master/kv"
|
||||
"github.com/czs007/suvlim/reader/message_client"
|
||||
//"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
type InsertData struct {
|
||||
|
@ -54,16 +57,17 @@ type QueryNodeDataBuffer struct {
|
|||
}
|
||||
|
||||
type QueryNode struct {
|
||||
QueryNodeId uint64
|
||||
Collections []*Collection
|
||||
SegmentsMap map[int64]*Segment
|
||||
messageClient *message_client.MessageClient
|
||||
QueryNodeId uint64
|
||||
Collections []*Collection
|
||||
SegmentsMap map[int64]*Segment
|
||||
messageClient *message_client.MessageClient
|
||||
//mc *message_client.MessageClient
|
||||
queryNodeTimeSync *QueryNodeTime
|
||||
buffer QueryNodeDataBuffer
|
||||
deletePreprocessData DeletePreprocessData
|
||||
deleteData DeleteData
|
||||
insertData InsertData
|
||||
kvBase *kv.EtcdKVBase
|
||||
}
|
||||
|
||||
func NewQueryNode(queryNodeId uint64, timeSync uint64) *QueryNode {
|
||||
|
@ -87,12 +91,12 @@ func NewQueryNode(queryNodeId uint64, timeSync uint64) *QueryNode {
|
|||
}
|
||||
|
||||
return &QueryNode{
|
||||
QueryNodeId: queryNodeId,
|
||||
Collections: nil,
|
||||
SegmentsMap: segmentsMap,
|
||||
messageClient: &mc,
|
||||
queryNodeTimeSync: queryNodeTimeSync,
|
||||
buffer: buffer,
|
||||
QueryNodeId: queryNodeId,
|
||||
Collections: nil,
|
||||
SegmentsMap: segmentsMap,
|
||||
messageClient: &mc,
|
||||
queryNodeTimeSync: queryNodeTimeSync,
|
||||
buffer: buffer,
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -119,12 +123,12 @@ func CreateQueryNode(queryNodeId uint64, timeSync uint64, mc *message_client.Mes
|
|||
}
|
||||
|
||||
return &QueryNode{
|
||||
QueryNodeId: queryNodeId,
|
||||
Collections: nil,
|
||||
SegmentsMap: segmentsMap,
|
||||
messageClient: mc,
|
||||
queryNodeTimeSync: queryNodeTimeSync,
|
||||
buffer: buffer,
|
||||
QueryNodeId: queryNodeId,
|
||||
Collections: nil,
|
||||
SegmentsMap: segmentsMap,
|
||||
messageClient: mc,
|
||||
queryNodeTimeSync: queryNodeTimeSync,
|
||||
buffer: buffer,
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -173,7 +177,7 @@ func (node *QueryNode) DeleteCollection(collection *Collection) {
|
|||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
func (node *QueryNode) PrepareBatchMsg() []int {
|
||||
var msgLen= node.messageClient.PrepareBatchMsg()
|
||||
var msgLen = node.messageClient.PrepareBatchMsg()
|
||||
return msgLen
|
||||
}
|
||||
|
||||
|
@ -189,7 +193,7 @@ func (node *QueryNode) InitQueryNodeCollection() {
|
|||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
func (node *QueryNode) RunInsertDelete(wg * sync.WaitGroup) {
|
||||
func (node *QueryNode) RunInsertDelete(wg *sync.WaitGroup) {
|
||||
for {
|
||||
// TODO: get timeRange from message client
|
||||
var msgLen = node.PrepareBatchMsg()
|
||||
|
@ -271,7 +275,7 @@ func (node *QueryNode) MessagesPreprocess(insertDeleteMessages []*msgPb.InsertOr
|
|||
}
|
||||
|
||||
// 2. Remove invalid messages from buffer.
|
||||
tmpInsertOrDeleteBuffer := make([]*msgPb.InsertOrDeleteMsg ,0)
|
||||
tmpInsertOrDeleteBuffer := make([]*msgPb.InsertOrDeleteMsg, 0)
|
||||
for i, isValid := range node.buffer.validInsertDeleteBuffer {
|
||||
if isValid {
|
||||
tmpInsertOrDeleteBuffer = append(tmpInsertOrDeleteBuffer, node.buffer.InsertDeleteBuffer[i])
|
||||
|
@ -359,6 +363,9 @@ func (node *QueryNode) PreInsertAndDelete() msgPb.Status {
|
|||
|
||||
// 3. Do PreDelete
|
||||
for segmentID := range node.deleteData.deleteIDs {
|
||||
if segmentID < 0 {
|
||||
continue
|
||||
}
|
||||
var targetSegment, err = node.GetSegmentBySegmentID(segmentID)
|
||||
if err != nil {
|
||||
fmt.Println(err.Error())
|
||||
|
@ -383,6 +390,9 @@ func (node *QueryNode) DoInsertAndDelete() msgPb.Status {
|
|||
|
||||
// Do delete
|
||||
for segmentID, deleteIDs := range node.deleteData.deleteIDs {
|
||||
if segmentID < 0 {
|
||||
continue
|
||||
}
|
||||
wg.Add(1)
|
||||
var deleteTimestamps = node.deleteData.deleteTimestamps[segmentID]
|
||||
fmt.Println("Doing delete......")
|
|
@ -1,9 +1,11 @@
|
|||
package reader
|
||||
|
||||
import (
|
||||
"github.com/czs007/suvlim/reader/message_client"
|
||||
"context"
|
||||
"log"
|
||||
"sync"
|
||||
|
||||
"github.com/czs007/suvlim/reader/message_client"
|
||||
)
|
||||
|
||||
func StartQueryNode(pulsarURL string, numOfQueryNode int, messageClientID int) {
|
||||
|
@ -32,3 +34,16 @@ func StartQueryNode(pulsarURL string, numOfQueryNode int, messageClientID int) {
|
|||
wg.Wait()
|
||||
qn.Close()
|
||||
}
|
||||
|
||||
func StartQueryNode2() {
|
||||
ctx := context.Background()
|
||||
qn := CreateQueryNode(0, 0, nil)
|
||||
//qn.InitQueryNodeCollection()
|
||||
wg := sync.WaitGroup{}
|
||||
wg.Add(1)
|
||||
//go qn.RunInsertDelete(&wg)
|
||||
//go qn.RunSearch(&wg)
|
||||
go qn.RunMetaService(ctx, &wg)
|
||||
wg.Wait()
|
||||
qn.Close()
|
||||
}
|
|
@ -2,9 +2,9 @@ package reader
|
|||
|
||||
/*
|
||||
|
||||
#cgo CFLAGS: -I../core/include
|
||||
#cgo CFLAGS: -I${SRCDIR}/../../core/include
|
||||
|
||||
#cgo LDFLAGS: -L../core/lib -lmilvus_dog_segment -Wl,-rpath=../core/lib
|
||||
#cgo LDFLAGS: -L${SRCDIR}/../../core/lib -lmilvus_dog_segment -Wl,-rpath=${SRCDIR}/../../core/lib
|
||||
|
||||
#include "collection_c.h"
|
||||
#include "partition_c.h"
|
||||
|
@ -13,9 +13,10 @@ package reader
|
|||
*/
|
||||
import "C"
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"github.com/czs007/suvlim/errors"
|
||||
schema "github.com/czs007/suvlim/pkg/master/grpc/message"
|
||||
msgPb "github.com/czs007/suvlim/pkg/master/grpc/message"
|
||||
"strconv"
|
||||
"unsafe"
|
||||
)
|
||||
|
@ -74,6 +75,9 @@ func (s *Segment) Close() error {
|
|||
if status != 0 {
|
||||
return errors.New("Close segment failed, error code = " + strconv.Itoa(int(status)))
|
||||
}
|
||||
|
||||
// Build index after closing segment
|
||||
s.buildIndex()
|
||||
return nil
|
||||
}
|
||||
|
||||
|
@ -169,24 +173,41 @@ func (s *Segment) SegmentDelete(offset int64, entityIDs *[]int64, timestamps *[]
|
|||
return nil
|
||||
}
|
||||
|
||||
func (s *Segment) SegmentSearch(queryJson string, timestamp uint64, vectorRecord *schema.VectorRowRecord) (*SearchResult, error) {
|
||||
func (s *Segment) SegmentSearch(queryJson string, timestamp uint64, vectorRecord *msgPb.VectorRowRecord) (*SearchResult, error) {
|
||||
/*C.Search
|
||||
int
|
||||
Search(CSegmentBase c_segment,
|
||||
const char* query_json,
|
||||
unsigned long timestamp,
|
||||
float* query_raw_data,
|
||||
int num_of_query_raw_data,
|
||||
long int* result_ids,
|
||||
float* result_distances);
|
||||
CQueryInfo c_query_info,
|
||||
unsigned long timestamp,
|
||||
float* query_raw_data,
|
||||
int num_of_query_raw_data,
|
||||
long int* result_ids,
|
||||
float* result_distances);
|
||||
*/
|
||||
// TODO: get top-k's k from queryString
|
||||
const TopK = 10
|
||||
type QueryInfo struct {
|
||||
NumQueries int64 `json:"num_queries"`
|
||||
TopK int `json:"topK"`
|
||||
FieldName string `json:"field_name"`
|
||||
}
|
||||
|
||||
resultIds := make([]int64, TopK)
|
||||
resultDistances := make([]float32, TopK)
|
||||
type CQueryInfo C.CQueryInfo
|
||||
|
||||
var query QueryInfo
|
||||
var err = json.Unmarshal([]byte(queryJson), &query)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
fmt.Println(query)
|
||||
|
||||
cQuery := C.CQueryInfo{
|
||||
num_queries: C.long(query.NumQueries),
|
||||
topK: C.int(query.TopK),
|
||||
field_name: C.CString(query.FieldName),
|
||||
}
|
||||
|
||||
resultIds := make([]int64, query.TopK)
|
||||
resultDistances := make([]float32, query.TopK)
|
||||
|
||||
var cQueryJson = C.CString(queryJson)
|
||||
var cTimestamp = C.ulong(timestamp)
|
||||
var cResultIds = (*C.long)(&resultIds[0])
|
||||
var cResultDistances = (*C.float)(&resultDistances[0])
|
||||
|
@ -202,7 +223,7 @@ func (s *Segment) SegmentSearch(queryJson string, timestamp uint64, vectorRecord
|
|||
cQueryRawDataLength = (C.int)(len(vectorRecord.FloatData))
|
||||
}
|
||||
|
||||
var status = C.Search(s.SegmentPtr, cQueryJson, cTimestamp, cQueryRawData, cQueryRawDataLength, cResultIds, cResultDistances)
|
||||
var status = C.Search(s.SegmentPtr, cQuery, cTimestamp, cQueryRawData, cQueryRawDataLength, cResultIds, cResultDistances)
|
||||
|
||||
if status != 0 {
|
||||
return nil, errors.New("Search failed, error code = " + strconv.Itoa(int(status)))
|
|
@ -36,27 +36,31 @@ func (node *QueryNode) SegmentsManagement() {
|
|||
}
|
||||
|
||||
func (node *QueryNode) SegmentManagementService() {
|
||||
sleepMillisecondTime := 200
|
||||
fmt.Println("do segments management in ", strconv.Itoa(sleepMillisecondTime), "ms")
|
||||
for {
|
||||
sleepMillisecondTime := 200
|
||||
time.Sleep(time.Duration(sleepMillisecondTime) * time.Millisecond)
|
||||
node.SegmentsManagement()
|
||||
fmt.Println("do segments management in ", strconv.Itoa(sleepMillisecondTime), "ms")
|
||||
}
|
||||
}
|
||||
|
||||
func (node *QueryNode) SegmentStatistic(sleepMillisecondTime int) {
|
||||
var statisticData = make([]masterPb.SegmentStat, 0)
|
||||
|
||||
for segmentID, segment := range node.SegmentsMap {
|
||||
currentMemSize := segment.GetMemSize()
|
||||
memIncreaseRate := float32(currentMemSize-segment.LastMemSize) / (float32(sleepMillisecondTime) / 1000)
|
||||
stat := masterPb.SegmentStat{
|
||||
// TODO: set master pb's segment id type from uint64 to int64
|
||||
SegmentId: uint64(segmentID),
|
||||
MemorySize: currentMemSize,
|
||||
MemoryRate: memIncreaseRate,
|
||||
for _, collection := range node.Collections {
|
||||
for _, partition := range collection.Partitions {
|
||||
for _, openedSegment := range partition.OpenedSegments {
|
||||
currentMemSize := openedSegment.GetMemSize()
|
||||
memIncreaseRate := float32((int64(currentMemSize))-(int64(openedSegment.LastMemSize))) / (float32(sleepMillisecondTime) / 1000)
|
||||
stat := masterPb.SegmentStat{
|
||||
// TODO: set master pb's segment id type from uint64 to int64
|
||||
SegmentId: uint64(openedSegment.SegmentId),
|
||||
MemorySize: currentMemSize,
|
||||
MemoryRate: memIncreaseRate,
|
||||
}
|
||||
statisticData = append(statisticData, stat)
|
||||
}
|
||||
}
|
||||
statisticData = append(statisticData, stat)
|
||||
}
|
||||
|
||||
var status = node.PublicStatistic(&statisticData)
|
||||
|
@ -66,10 +70,10 @@ func (node *QueryNode) SegmentStatistic(sleepMillisecondTime int) {
|
|||
}
|
||||
|
||||
func (node *QueryNode) SegmentStatisticService() {
|
||||
sleepMillisecondTime := 1000
|
||||
fmt.Println("do segments statistic in ", strconv.Itoa(sleepMillisecondTime), "ms")
|
||||
for {
|
||||
sleepMillisecondTime := 1000
|
||||
time.Sleep(time.Duration(sleepMillisecondTime) * time.Millisecond)
|
||||
node.SegmentStatistic(sleepMillisecondTime)
|
||||
fmt.Println("do segments statistic in ", strconv.Itoa(sleepMillisecondTime), "ms")
|
||||
}
|
||||
}
|
|
@ -3,7 +3,7 @@ package reader
|
|||
import (
|
||||
"encoding/binary"
|
||||
"fmt"
|
||||
schema "github.com/czs007/suvlim/pkg/master/grpc/message"
|
||||
msgPb "github.com/czs007/suvlim/pkg/master/grpc/message"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"math"
|
||||
"testing"
|
||||
|
@ -100,14 +100,14 @@ func TestSegment_SegmentSearch(t *testing.T) {
|
|||
var segment = partition.NewSegment(0)
|
||||
|
||||
// 2. Create ids and timestamps
|
||||
ids := []int64{1, 2, 3}
|
||||
timestamps := []uint64{0, 0, 0}
|
||||
ids := make([]int64, 0)
|
||||
timestamps := make([]uint64, 0)
|
||||
|
||||
// 3. Create records, use schema below:
|
||||
// schema_tmp->AddField("fakeVec", DataType::VECTOR_FLOAT, 16);
|
||||
// schema_tmp->AddField("age", DataType::INT32);
|
||||
const DIM = 16
|
||||
const N = 3
|
||||
const N = 100
|
||||
var vec = [DIM]float32{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}
|
||||
var rawData []byte
|
||||
for _, ele := range vec {
|
||||
|
@ -120,6 +120,8 @@ func TestSegment_SegmentSearch(t *testing.T) {
|
|||
rawData = append(rawData, bs...)
|
||||
var records [][]byte
|
||||
for i := 0; i < N; i++ {
|
||||
ids = append(ids, int64(i))
|
||||
timestamps = append(timestamps, uint64(i + 1))
|
||||
records = append(records, rawData)
|
||||
}
|
||||
|
||||
|
@ -137,10 +139,10 @@ func TestSegment_SegmentSearch(t *testing.T) {
|
|||
for i := 0; i < 16; i ++ {
|
||||
queryRawData = append(queryRawData, float32(i))
|
||||
}
|
||||
var vectorRecord = schema.VectorRowRecord {
|
||||
var vectorRecord = msgPb.VectorRowRecord {
|
||||
FloatData: queryRawData,
|
||||
}
|
||||
var searchRes, searchErr = segment.SegmentSearch(queryJson, timestamps[0], &vectorRecord)
|
||||
var searchRes, searchErr = segment.SegmentSearch(queryJson, timestamps[N/2], &vectorRecord)
|
||||
assert.NoError(t, searchErr)
|
||||
fmt.Println(searchRes)
|
||||
|
|
@ -13,10 +13,16 @@ func (node *QueryNode) GetKey2Segments() (*[]int64, *[]uint64, *[]int64) {
|
|||
|
||||
var key2SegMsg = node.messageClient.Key2SegMsg
|
||||
for _, msg := range key2SegMsg {
|
||||
for _, segmentID := range msg.SegmentId {
|
||||
if msg.SegmentId == nil {
|
||||
segmentIDs = append(segmentIDs, -1)
|
||||
entityIDs = append(entityIDs, msg.Uid)
|
||||
timestamps = append(timestamps, msg.Timestamp)
|
||||
segmentIDs = append(segmentIDs, segmentID)
|
||||
} else {
|
||||
for _, segmentID := range msg.SegmentId {
|
||||
segmentIDs = append(segmentIDs, segmentID)
|
||||
entityIDs = append(entityIDs, msg.Uid)
|
||||
timestamps = append(timestamps, msg.Timestamp)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue