mirror of https://github.com/milvus-io/milvus.git
Fix an issue with bulk load with multiple DataNodes (#17324)
issue: #17300 Signed-off-by: Yuchen Gao <yuchen.gao@zilliz.com>pull/17341/head
parent
4e83f37899
commit
f5e63177d2
|
@ -0,0 +1,187 @@
|
||||||
|
version: '3.5'
|
||||||
|
|
||||||
|
services:
|
||||||
|
etcd:
|
||||||
|
container_name: milvus-etcd
|
||||||
|
image: quay.io/coreos/etcd:v3.5.0
|
||||||
|
environment:
|
||||||
|
- ETCD_AUTO_COMPACTION_MODE=revision
|
||||||
|
- ETCD_AUTO_COMPACTION_RETENTION=1000
|
||||||
|
- ETCD_QUOTA_BACKEND_BYTES=4294967296
|
||||||
|
volumes:
|
||||||
|
- ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/etcd:/etcd
|
||||||
|
command: etcd -advertise-client-urls=http://127.0.0.1:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd
|
||||||
|
|
||||||
|
pulsar:
|
||||||
|
container_name: milvus-pulsar
|
||||||
|
image: milvusdb/pulsar:v2.8.2-m1
|
||||||
|
volumes:
|
||||||
|
- ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/pulsar:/pulsar/data
|
||||||
|
environment:
|
||||||
|
# bin/apply-config-from-env.py script will modify the configuration file based on the environment variables
|
||||||
|
# nettyMaxFrameSizeBytes must be calculated from maxMessageSize + 10240 (padding)
|
||||||
|
- nettyMaxFrameSizeBytes=104867840 # this is 104857600 + 10240 (padding)
|
||||||
|
- defaultRetentionTimeInMinutes=10080
|
||||||
|
- defaultRetentionSizeInMB=8192
|
||||||
|
# maxMessageSize is missing from standalone.conf, must use PULSAR_PREFIX_ to get it configured
|
||||||
|
- PULSAR_PREFIX_maxMessageSize=104857600
|
||||||
|
- PULSAR_GC=-XX:+UseG1GC
|
||||||
|
|
||||||
|
minio:
|
||||||
|
container_name: milvus-minio
|
||||||
|
image: minio/minio:RELEASE.2022-03-17T06-34-49Z
|
||||||
|
ports:
|
||||||
|
- "9000:9000"
|
||||||
|
- "9001:9001"
|
||||||
|
environment:
|
||||||
|
MINIO_ACCESS_KEY: minioadmin
|
||||||
|
MINIO_SECRET_KEY: minioadmin
|
||||||
|
volumes:
|
||||||
|
- ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/minio:/minio_data
|
||||||
|
command: minio server /minio_data --console-address ":9001"
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
|
||||||
|
interval: 30s
|
||||||
|
timeout: 20s
|
||||||
|
retries: 3
|
||||||
|
|
||||||
|
rootcoord:
|
||||||
|
container_name: milvus-rootcoord
|
||||||
|
image: milvusdb/milvus:v2.0.2
|
||||||
|
command: ["milvus", "run", "rootcoord"]
|
||||||
|
environment:
|
||||||
|
ETCD_ENDPOINTS: etcd:2379
|
||||||
|
MINIO_ADDRESS: minio:9000
|
||||||
|
PULSAR_ADDRESS: pulsar://pulsar:6650
|
||||||
|
ROOT_COORD_ADDRESS: rootcoord:53100
|
||||||
|
depends_on:
|
||||||
|
- "etcd"
|
||||||
|
- "pulsar"
|
||||||
|
- "minio"
|
||||||
|
|
||||||
|
proxy:
|
||||||
|
container_name: milvus-proxy
|
||||||
|
image: milvusdb/milvus:v2.0.2
|
||||||
|
command: ["milvus", "run", "proxy"]
|
||||||
|
environment:
|
||||||
|
ETCD_ENDPOINTS: etcd:2379
|
||||||
|
MINIO_ADDRESS: minio:9000
|
||||||
|
PULSAR_ADDRESS: pulsar://pulsar:6650
|
||||||
|
ports:
|
||||||
|
- "19530:19530"
|
||||||
|
|
||||||
|
querycoord:
|
||||||
|
container_name: milvus-querycoord
|
||||||
|
image: milvusdb/milvus:v2.0.2
|
||||||
|
command: ["milvus", "run", "querycoord"]
|
||||||
|
environment:
|
||||||
|
ETCD_ENDPOINTS: etcd:2379
|
||||||
|
MINIO_ADDRESS: minio:9000
|
||||||
|
PULSAR_ADDRESS: pulsar://pulsar:6650
|
||||||
|
QUERY_COORD_ADDRESS: querycoord:19531
|
||||||
|
depends_on:
|
||||||
|
- "etcd"
|
||||||
|
- "pulsar"
|
||||||
|
- "minio"
|
||||||
|
|
||||||
|
querynode:
|
||||||
|
container_name: milvus-querynode
|
||||||
|
image: milvusdb/milvus:v2.0.2
|
||||||
|
command: ["milvus", "run", "querynode"]
|
||||||
|
environment:
|
||||||
|
ETCD_ENDPOINTS: etcd:2379
|
||||||
|
MINIO_ADDRESS: minio:9000
|
||||||
|
PULSAR_ADDRESS: pulsar://pulsar:6650
|
||||||
|
depends_on:
|
||||||
|
- "querycoord"
|
||||||
|
|
||||||
|
indexcoord:
|
||||||
|
container_name: milvus-indexcoord
|
||||||
|
image: milvusdb/milvus:v2.0.2
|
||||||
|
command: ["milvus", "run", "indexcoord"]
|
||||||
|
environment:
|
||||||
|
ETCD_ENDPOINTS: etcd:2379
|
||||||
|
MINIO_ADDRESS: minio:9000
|
||||||
|
PULSAR_ADDRESS: pulsar://pulsar:6650
|
||||||
|
INDEX_COORD_ADDRESS: indexcoord:31000
|
||||||
|
depends_on:
|
||||||
|
- "etcd"
|
||||||
|
- "pulsar"
|
||||||
|
- "minio"
|
||||||
|
|
||||||
|
indexnode:
|
||||||
|
container_name: milvus-indexnode
|
||||||
|
image: milvusdb/milvus:v2.0.2
|
||||||
|
command: ["milvus", "run", "indexnode"]
|
||||||
|
environment:
|
||||||
|
ETCD_ENDPOINTS: etcd:2379
|
||||||
|
MINIO_ADDRESS: minio:9000
|
||||||
|
PULSAR_ADDRESS: pulsar://pulsar:6650
|
||||||
|
INDEX_COORD_ADDRESS: indexcoord:31000
|
||||||
|
depends_on:
|
||||||
|
- "indexcoord"
|
||||||
|
|
||||||
|
datacoord:
|
||||||
|
container_name: milvus-datacoord
|
||||||
|
image: milvusdb/milvus:v2.0.2
|
||||||
|
command: ["milvus", "run", "datacoord"]
|
||||||
|
environment:
|
||||||
|
ETCD_ENDPOINTS: etcd:2379
|
||||||
|
MINIO_ADDRESS: minio:9000
|
||||||
|
PULSAR_ADDRESS: pulsar://pulsar:6650
|
||||||
|
DATA_COORD_ADDRESS: datacoord:13333
|
||||||
|
depends_on:
|
||||||
|
- "etcd"
|
||||||
|
- "pulsar"
|
||||||
|
- "minio"
|
||||||
|
|
||||||
|
datanode:
|
||||||
|
container_name: milvus-datanode
|
||||||
|
image: milvusdb/milvus:v2.0.2
|
||||||
|
command: ["milvus", "run", "datanode"]
|
||||||
|
environment:
|
||||||
|
ETCD_ENDPOINTS: etcd:2379
|
||||||
|
MINIO_ADDRESS: minio:9000
|
||||||
|
PULSAR_ADDRESS: pulsar://pulsar:6650
|
||||||
|
depends_on:
|
||||||
|
- "datacoord"
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------------------------
|
||||||
|
# If you need multiple instances of a service, say DataNode, use the following script:
|
||||||
|
# ----------------------------------------------------------------------------------------
|
||||||
|
# datanode-1:
|
||||||
|
# container_name: milvus-datanode-1
|
||||||
|
# image: milvusdb/milvus:v2.0.2
|
||||||
|
# command: ["milvus", "run", "datanode"]
|
||||||
|
# environment:
|
||||||
|
# ETCD_ENDPOINTS: etcd:2379
|
||||||
|
# MINIO_ADDRESS: minio:9000
|
||||||
|
# PULSAR_ADDRESS: pulsar://pulsar:6650
|
||||||
|
# depends_on:
|
||||||
|
# - "datacoord"
|
||||||
|
#
|
||||||
|
# datanode-2:
|
||||||
|
# container_name: milvus-datanode-2
|
||||||
|
# image: milvusdb/milvus:v2.0.2
|
||||||
|
# command: ["milvus", "run", "datanode"]
|
||||||
|
# environment:
|
||||||
|
# ETCD_ENDPOINTS: etcd:2379
|
||||||
|
# MINIO_ADDRESS: minio:9000
|
||||||
|
# PULSAR_ADDRESS: pulsar://pulsar:6650
|
||||||
|
# depends_on:
|
||||||
|
# - "datacoord"
|
||||||
|
#
|
||||||
|
# datanode-3:
|
||||||
|
# container_name: milvus-datanode-3
|
||||||
|
# image: milvusdb/milvus:v2.0.2
|
||||||
|
# command: ["milvus", "run", "datanode"]
|
||||||
|
# environment:
|
||||||
|
# ETCD_ENDPOINTS: etcd:2379
|
||||||
|
# MINIO_ADDRESS: minio:9000
|
||||||
|
# PULSAR_ADDRESS: pulsar://pulsar:6650
|
||||||
|
# depends_on:
|
||||||
|
# - "datacoord"
|
||||||
|
|
||||||
|
networks:
|
||||||
|
default:
|
||||||
|
name: milvus
|
|
@ -37,9 +37,12 @@ services:
|
||||||
environment:
|
environment:
|
||||||
MINIO_ACCESS_KEY: minioadmin
|
MINIO_ACCESS_KEY: minioadmin
|
||||||
MINIO_SECRET_KEY: minioadmin
|
MINIO_SECRET_KEY: minioadmin
|
||||||
|
ports:
|
||||||
|
- "9000:9000"
|
||||||
|
- "9001:9001"
|
||||||
volumes:
|
volumes:
|
||||||
- ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/minio:/minio_data
|
- ${DOCKER_VOLUME_DIRECTORY:-.}/volumes/minio:/minio_data
|
||||||
command: minio server /minio_data
|
command: minio server /minio_data --console-address ":9001"
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
|
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
|
||||||
interval: 30s
|
interval: 30s
|
||||||
|
@ -147,6 +150,43 @@ services:
|
||||||
depends_on:
|
depends_on:
|
||||||
- "datacoord"
|
- "datacoord"
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------------------------
|
||||||
|
# If you need multiple instances of a service, say DataNode, use the following script:
|
||||||
|
# ----------------------------------------------------------------------------------------
|
||||||
|
# datanode-1:
|
||||||
|
# container_name: milvus-datanode-1
|
||||||
|
# image: milvusdb/milvus:v2.0.2
|
||||||
|
# command: ["milvus", "run", "datanode"]
|
||||||
|
# environment:
|
||||||
|
# ETCD_ENDPOINTS: etcd:2379
|
||||||
|
# MINIO_ADDRESS: minio:9000
|
||||||
|
# PULSAR_ADDRESS: pulsar://pulsar:6650
|
||||||
|
# depends_on:
|
||||||
|
# - "datacoord"
|
||||||
|
#
|
||||||
|
# datanode-2:
|
||||||
|
# container_name: milvus-datanode-2
|
||||||
|
# image: milvusdb/milvus:v2.0.2
|
||||||
|
# command: ["milvus", "run", "datanode"]
|
||||||
|
# environment:
|
||||||
|
# ETCD_ENDPOINTS: etcd:2379
|
||||||
|
# MINIO_ADDRESS: minio:9000
|
||||||
|
# PULSAR_ADDRESS: pulsar://pulsar:6650
|
||||||
|
# depends_on:
|
||||||
|
# - "datacoord"
|
||||||
|
#
|
||||||
|
# datanode-3:
|
||||||
|
# container_name: milvus-datanode-3
|
||||||
|
# image: milvusdb/milvus:v2.0.2
|
||||||
|
# command: ["milvus", "run", "datanode"]
|
||||||
|
# environment:
|
||||||
|
# ETCD_ENDPOINTS: etcd:2379
|
||||||
|
# MINIO_ADDRESS: minio:9000
|
||||||
|
# PULSAR_ADDRESS: pulsar://pulsar:6650
|
||||||
|
# depends_on:
|
||||||
|
# - "datacoord"
|
||||||
|
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
default:
|
default:
|
||||||
name: milvus
|
name: milvus
|
||||||
|
|
|
@ -803,6 +803,17 @@ func (c *ChannelManager) getChannelByNodeAndName(nodeID UniqueID, channelName st
|
||||||
return ret
|
return ret
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *ChannelManager) getNodeIDByChannelName(chName string) (bool, UniqueID) {
|
||||||
|
for _, nodeChannel := range c.GetChannels() {
|
||||||
|
for _, ch := range nodeChannel.Channels {
|
||||||
|
if ch.Name == chName {
|
||||||
|
return true, nodeChannel.NodeID
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false, 0
|
||||||
|
}
|
||||||
|
|
||||||
func (c *ChannelManager) isMarkedDrop(channelName string) bool {
|
func (c *ChannelManager) isMarkedDrop(channelName string) bool {
|
||||||
return c.h.CheckShouldDropChannel(channelName)
|
return c.h.CheckShouldDropChannel(channelName)
|
||||||
}
|
}
|
||||||
|
|
|
@ -149,6 +149,11 @@ func (c *Cluster) ReCollectSegmentStats(ctx context.Context, nodeID int64) {
|
||||||
c.sessionManager.ReCollectSegmentStats(ctx, nodeID)
|
c.sessionManager.ReCollectSegmentStats(ctx, nodeID)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// AddSegment triggers a AddSegment call from session manager.
|
||||||
|
func (c *Cluster) AddSegment(ctx context.Context, nodeID int64, req *datapb.AddSegmentRequest) {
|
||||||
|
c.sessionManager.AddSegment(ctx, nodeID, req)
|
||||||
|
}
|
||||||
|
|
||||||
// GetSessions returns all sessions
|
// GetSessions returns all sessions
|
||||||
func (c *Cluster) GetSessions() []*Session {
|
func (c *Cluster) GetSessions() []*Session {
|
||||||
return c.sessionManager.GetSessions()
|
return c.sessionManager.GetSessions()
|
||||||
|
|
|
@ -25,6 +25,7 @@ import (
|
||||||
"github.com/golang/protobuf/proto"
|
"github.com/golang/protobuf/proto"
|
||||||
"github.com/milvus-io/milvus/internal/kv"
|
"github.com/milvus-io/milvus/internal/kv"
|
||||||
etcdkv "github.com/milvus-io/milvus/internal/kv/etcd"
|
etcdkv "github.com/milvus-io/milvus/internal/kv/etcd"
|
||||||
|
"github.com/milvus-io/milvus/internal/proto/commonpb"
|
||||||
"github.com/milvus-io/milvus/internal/proto/datapb"
|
"github.com/milvus-io/milvus/internal/proto/datapb"
|
||||||
"github.com/milvus-io/milvus/internal/types"
|
"github.com/milvus-io/milvus/internal/types"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
|
@ -640,3 +641,74 @@ func TestCluster_ReCollectSegmentStats(t *testing.T) {
|
||||||
time.Sleep(500 * time.Millisecond)
|
time.Sleep(500 * time.Millisecond)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestCluster_AddSegment(t *testing.T) {
|
||||||
|
kv := getMetaKv(t)
|
||||||
|
defer func() {
|
||||||
|
kv.RemoveWithPrefix("")
|
||||||
|
kv.Close()
|
||||||
|
}()
|
||||||
|
|
||||||
|
t.Run("add segment succeed", func(t *testing.T) {
|
||||||
|
ctx, cancel := context.WithCancel(context.TODO())
|
||||||
|
defer cancel()
|
||||||
|
var mockSessionCreator = func(ctx context.Context, addr string) (types.DataNode, error) {
|
||||||
|
return newMockDataNodeClient(1, nil)
|
||||||
|
}
|
||||||
|
sessionManager := NewSessionManager(withSessionCreator(mockSessionCreator))
|
||||||
|
channelManager, err := NewChannelManager(kv, newMockHandler())
|
||||||
|
assert.Nil(t, err)
|
||||||
|
cluster := NewCluster(sessionManager, channelManager)
|
||||||
|
defer cluster.Close()
|
||||||
|
addr := "localhost:8080"
|
||||||
|
info := &NodeInfo{
|
||||||
|
Address: addr,
|
||||||
|
NodeID: 1,
|
||||||
|
}
|
||||||
|
nodes := []*NodeInfo{info}
|
||||||
|
err = cluster.Startup(ctx, nodes)
|
||||||
|
assert.Nil(t, err)
|
||||||
|
|
||||||
|
err = cluster.Watch("chan-1", 1)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
assert.NotPanics(t, func() {
|
||||||
|
cluster.AddSegment(ctx, 1, &datapb.AddSegmentRequest{
|
||||||
|
Base: &commonpb.MsgBase{
|
||||||
|
SourceID: 0,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
})
|
||||||
|
time.Sleep(500 * time.Millisecond)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("add segment failed", func(t *testing.T) {
|
||||||
|
ctx, cancel := context.WithCancel(context.TODO())
|
||||||
|
defer cancel()
|
||||||
|
sessionManager := NewSessionManager()
|
||||||
|
channelManager, err := NewChannelManager(kv, newMockHandler())
|
||||||
|
assert.Nil(t, err)
|
||||||
|
cluster := NewCluster(sessionManager, channelManager)
|
||||||
|
defer cluster.Close()
|
||||||
|
addr := "localhost:8080"
|
||||||
|
info := &NodeInfo{
|
||||||
|
Address: addr,
|
||||||
|
NodeID: 1,
|
||||||
|
}
|
||||||
|
nodes := []*NodeInfo{info}
|
||||||
|
err = cluster.Startup(ctx, nodes)
|
||||||
|
assert.Nil(t, err)
|
||||||
|
|
||||||
|
err = cluster.Watch("chan-1", 1)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
assert.NotPanics(t, func() {
|
||||||
|
cluster.AddSegment(ctx, 1, &datapb.AddSegmentRequest{
|
||||||
|
Base: &commonpb.MsgBase{
|
||||||
|
SourceID: 0,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
})
|
||||||
|
time.Sleep(500 * time.Millisecond)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
|
@ -209,6 +209,10 @@ func (c *mockDataNodeClient) Import(ctx context.Context, in *datapb.ImportTaskRe
|
||||||
return &commonpb.Status{ErrorCode: commonpb.ErrorCode_Success}, nil
|
return &commonpb.Status{ErrorCode: commonpb.ErrorCode_Success}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *mockDataNodeClient) AddSegment(ctx context.Context, req *datapb.AddSegmentRequest) (*commonpb.Status, error) {
|
||||||
|
return &commonpb.Status{ErrorCode: commonpb.ErrorCode_Success}, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (c *mockDataNodeClient) Stop() error {
|
func (c *mockDataNodeClient) Stop() error {
|
||||||
c.state = internalpb.StateCode_Abnormal
|
c.state = internalpb.StateCode_Abnormal
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -2520,7 +2520,7 @@ func TestDataCoordServer_SetSegmentState(t *testing.T) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestImport(t *testing.T) {
|
func TestDataCoord_Import(t *testing.T) {
|
||||||
t.Run("normal case", func(t *testing.T) {
|
t.Run("normal case", func(t *testing.T) {
|
||||||
svr := newTestServer(t, nil)
|
svr := newTestServer(t, nil)
|
||||||
defer closeTestServer(t, svr)
|
defer closeTestServer(t, svr)
|
||||||
|
@ -2645,6 +2645,57 @@ func TestImport(t *testing.T) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestDataCoord_AddSegment(t *testing.T) {
|
||||||
|
t.Run("test add segment", func(t *testing.T) {
|
||||||
|
svr := newTestServer(t, nil)
|
||||||
|
defer closeTestServer(t, svr)
|
||||||
|
|
||||||
|
err := svr.channelManager.AddNode(110)
|
||||||
|
assert.Nil(t, err)
|
||||||
|
err = svr.channelManager.Watch(&channel{"ch1", 100})
|
||||||
|
assert.Nil(t, err)
|
||||||
|
|
||||||
|
status, err := svr.AddSegment(context.TODO(), &datapb.AddSegmentRequest{
|
||||||
|
SegmentId: 100,
|
||||||
|
ChannelName: "ch1",
|
||||||
|
CollectionId: 100,
|
||||||
|
PartitionId: 100,
|
||||||
|
RowNum: int64(1),
|
||||||
|
})
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, commonpb.ErrorCode_Success, status.GetErrorCode())
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("test add segment w/ bad channel name", func(t *testing.T) {
|
||||||
|
svr := newTestServer(t, nil)
|
||||||
|
defer closeTestServer(t, svr)
|
||||||
|
|
||||||
|
err := svr.channelManager.AddNode(110)
|
||||||
|
assert.Nil(t, err)
|
||||||
|
err = svr.channelManager.Watch(&channel{"ch1", 100})
|
||||||
|
assert.Nil(t, err)
|
||||||
|
|
||||||
|
status, err := svr.AddSegment(context.TODO(), &datapb.AddSegmentRequest{
|
||||||
|
SegmentId: 100,
|
||||||
|
ChannelName: "non-channel",
|
||||||
|
CollectionId: 100,
|
||||||
|
PartitionId: 100,
|
||||||
|
RowNum: int64(1),
|
||||||
|
})
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, commonpb.ErrorCode_UnexpectedError, status.GetErrorCode())
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("test add segment w/ closed server", func(t *testing.T) {
|
||||||
|
svr := newTestServer(t, nil)
|
||||||
|
closeTestServer(t, svr)
|
||||||
|
|
||||||
|
status, err := svr.AddSegment(context.TODO(), &datapb.AddSegmentRequest{})
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, commonpb.ErrorCode_UnexpectedError, status.GetErrorCode())
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// https://github.com/milvus-io/milvus/issues/15659
|
// https://github.com/milvus-io/milvus/issues/15659
|
||||||
func TestIssue15659(t *testing.T) {
|
func TestIssue15659(t *testing.T) {
|
||||||
ctx, cancel := context.WithCancel(context.Background())
|
ctx, cancel := context.WithCancel(context.Background())
|
||||||
|
|
|
@ -331,12 +331,15 @@ func (s *Server) SaveBinlogPaths(ctx context.Context, req *datapb.SaveBinlogPath
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
channel := segment.GetInsertChannel()
|
// No need to check import channel--node matching in data import case.
|
||||||
if !s.channelManager.Match(nodeID, channel) {
|
if !req.GetImporting() {
|
||||||
FailResponse(resp, fmt.Sprintf("channel %s is not watched on node %d", channel, nodeID))
|
channel := segment.GetInsertChannel()
|
||||||
resp.ErrorCode = commonpb.ErrorCode_MetaFailed
|
if !s.channelManager.Match(nodeID, channel) {
|
||||||
log.Warn("node is not matched with channel", zap.String("channel", channel), zap.Int64("nodeID", nodeID))
|
FailResponse(resp, fmt.Sprintf("channel %s is not watched on node %d", channel, nodeID))
|
||||||
return resp, nil
|
resp.ErrorCode = commonpb.ErrorCode_MetaFailed
|
||||||
|
log.Warn("node is not matched with channel", zap.String("channel", channel), zap.Int64("nodeID", nodeID))
|
||||||
|
return resp, nil
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if req.GetDropped() {
|
if req.GetDropped() {
|
||||||
|
@ -1004,7 +1007,7 @@ func (s *Server) GetFlushState(ctx context.Context, req *milvuspb.GetFlushStateR
|
||||||
// Import distributes the import tasks to dataNodes.
|
// Import distributes the import tasks to dataNodes.
|
||||||
// It returns a failed status if no dataNode is available or if any error occurs.
|
// It returns a failed status if no dataNode is available or if any error occurs.
|
||||||
func (s *Server) Import(ctx context.Context, itr *datapb.ImportTaskRequest) (*datapb.ImportTaskResponse, error) {
|
func (s *Server) Import(ctx context.Context, itr *datapb.ImportTaskRequest) (*datapb.ImportTaskResponse, error) {
|
||||||
log.Info("DataCoord receive import request", zap.Any("import task request", itr))
|
log.Info("DataCoord receives import request", zap.Any("import task request", itr))
|
||||||
resp := &datapb.ImportTaskResponse{
|
resp := &datapb.ImportTaskResponse{
|
||||||
Status: &commonpb.Status{
|
Status: &commonpb.Status{
|
||||||
ErrorCode: commonpb.ErrorCode_UnexpectedError,
|
ErrorCode: commonpb.ErrorCode_UnexpectedError,
|
||||||
|
@ -1012,14 +1015,14 @@ func (s *Server) Import(ctx context.Context, itr *datapb.ImportTaskRequest) (*da
|
||||||
}
|
}
|
||||||
|
|
||||||
if s.isClosed() {
|
if s.isClosed() {
|
||||||
log.Error("failed to import for closed dataCoord service")
|
log.Error("failed to import for closed DataCoord service")
|
||||||
resp.Status.Reason = msgDataCoordIsUnhealthy(Params.DataCoordCfg.GetNodeID())
|
resp.Status.Reason = msgDataCoordIsUnhealthy(Params.DataCoordCfg.GetNodeID())
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
nodes := s.channelManager.store.GetNodes()
|
nodes := s.channelManager.store.GetNodes()
|
||||||
if len(nodes) == 0 {
|
if len(nodes) == 0 {
|
||||||
log.Error("import failed as all dataNodes are offline")
|
log.Error("import failed as all DataNodes are offline")
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1033,7 +1036,7 @@ func (s *Server) Import(ctx context.Context, itr *datapb.ImportTaskRequest) (*da
|
||||||
s.cluster.Import(s.ctx, resp.GetDatanodeId(), itr)
|
s.cluster.Import(s.ctx, resp.GetDatanodeId(), itr)
|
||||||
} else {
|
} else {
|
||||||
// No dataNode is available, reject the import request.
|
// No dataNode is available, reject the import request.
|
||||||
msg := "all dataNodes are busy working on data import, the task has been rejected and wait for idle datanode"
|
msg := "all DataNodes are busy working on data import, the task has been rejected and wait for idle datanode"
|
||||||
log.Info(msg, zap.Int64("task ID", itr.GetImportTask().GetTaskId()))
|
log.Info(msg, zap.Int64("task ID", itr.GetImportTask().GetTaskId()))
|
||||||
resp.Status.Reason = msg
|
resp.Status.Reason = msg
|
||||||
return resp, nil
|
return resp, nil
|
||||||
|
@ -1137,3 +1140,31 @@ func (s *Server) ReleaseSegmentLock(ctx context.Context, req *datapb.ReleaseSegm
|
||||||
resp.ErrorCode = commonpb.ErrorCode_Success
|
resp.ErrorCode = commonpb.ErrorCode_Success
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *Server) AddSegment(ctx context.Context, req *datapb.AddSegmentRequest) (*commonpb.Status, error) {
|
||||||
|
log.Info("DataCoord putting segment to the right DataNode",
|
||||||
|
zap.Int64("segment ID", req.GetSegmentId()),
|
||||||
|
zap.Int64("collection ID", req.GetCollectionId()),
|
||||||
|
zap.Int64("partition ID", req.GetPartitionId()),
|
||||||
|
zap.String("channel name", req.GetChannelName()),
|
||||||
|
zap.Int64("# of rows", req.GetRowNum()))
|
||||||
|
errResp := &commonpb.Status{
|
||||||
|
ErrorCode: commonpb.ErrorCode_UnexpectedError,
|
||||||
|
Reason: "",
|
||||||
|
}
|
||||||
|
if s.isClosed() {
|
||||||
|
log.Warn("failed to add segment for closed server")
|
||||||
|
errResp.Reason = msgDataCoordIsUnhealthy(Params.DataCoordCfg.GetNodeID())
|
||||||
|
return errResp, nil
|
||||||
|
}
|
||||||
|
ok, nodeID := s.channelManager.getNodeIDByChannelName(req.GetChannelName())
|
||||||
|
if !ok {
|
||||||
|
log.Error("no DataNode found for channel", zap.String("channel name", req.GetChannelName()))
|
||||||
|
errResp.Reason = fmt.Sprint("no DataNode found for channel ", req.GetChannelName())
|
||||||
|
return errResp, nil
|
||||||
|
}
|
||||||
|
s.cluster.AddSegment(s.ctx, nodeID, req)
|
||||||
|
return &commonpb.Status{
|
||||||
|
ErrorCode: commonpb.ErrorCode_Success,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
|
@ -33,8 +33,9 @@ import (
|
||||||
const (
|
const (
|
||||||
flushTimeout = 5 * time.Second
|
flushTimeout = 5 * time.Second
|
||||||
// TODO: evaluate and update import timeout.
|
// TODO: evaluate and update import timeout.
|
||||||
importTimeout = 3 * time.Hour
|
importTimeout = 3 * time.Hour
|
||||||
reCollectTimeout = 5 * time.Second
|
reCollectTimeout = 5 * time.Second
|
||||||
|
addSegmentTimeout = 30 * time.Second
|
||||||
)
|
)
|
||||||
|
|
||||||
// SessionManager provides the grpc interfaces of cluster
|
// SessionManager provides the grpc interfaces of cluster
|
||||||
|
@ -203,6 +204,29 @@ func (c *SessionManager) execReCollectSegmentStats(ctx context.Context, nodeID i
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// AddSegment calls DataNode with ID == `nodeID` to put the segment into this node.
|
||||||
|
func (c *SessionManager) AddSegment(ctx context.Context, nodeID int64, req *datapb.AddSegmentRequest) {
|
||||||
|
go c.execAddSegment(ctx, nodeID, req)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *SessionManager) execAddSegment(ctx context.Context, nodeID int64, req *datapb.AddSegmentRequest) {
|
||||||
|
cli, err := c.getClient(ctx, nodeID)
|
||||||
|
if err != nil {
|
||||||
|
log.Warn("failed to get client for AddSegment", zap.Int64("DataNode ID", nodeID), zap.Error(err))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
ctx, cancel := context.WithTimeout(ctx, addSegmentTimeout)
|
||||||
|
defer cancel()
|
||||||
|
req.Base.SourceID = Params.DataCoordCfg.GetNodeID()
|
||||||
|
resp, err := cli.AddSegment(ctx, req)
|
||||||
|
if err := VerifyResponse(resp, err); err != nil {
|
||||||
|
log.Warn("failed to add segment", zap.Int64("DataNode ID", nodeID), zap.Error(err))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Info("success to add segment", zap.Int64("DataNode ID", nodeID), zap.Any("add segment req", req))
|
||||||
|
}
|
||||||
|
|
||||||
func (c *SessionManager) getClient(ctx context.Context, nodeID int64) (types.DataNode, error) {
|
func (c *SessionManager) getClient(ctx context.Context, nodeID int64) (types.DataNode, error) {
|
||||||
c.sessions.RLock()
|
c.sessions.RLock()
|
||||||
session, ok := c.sessions.data[nodeID]
|
session, ok := c.sessions.data[nodeID]
|
||||||
|
|
|
@ -102,7 +102,6 @@ var Params paramtable.ComponentParam
|
||||||
type DataNode struct {
|
type DataNode struct {
|
||||||
ctx context.Context
|
ctx context.Context
|
||||||
cancel context.CancelFunc
|
cancel context.CancelFunc
|
||||||
NodeID UniqueID
|
|
||||||
Role string
|
Role string
|
||||||
State atomic.Value // internalpb.StateCode_Initializing
|
State atomic.Value // internalpb.StateCode_Initializing
|
||||||
|
|
||||||
|
@ -633,7 +632,7 @@ func (node *DataNode) FlushSegments(ctx context.Context, req *datapb.FlushSegmen
|
||||||
// It returns a list of segments to be sent.
|
// It returns a list of segments to be sent.
|
||||||
func (node *DataNode) ResendSegmentStats(ctx context.Context, req *datapb.ResendSegmentStatsRequest) (*datapb.ResendSegmentStatsResponse, error) {
|
func (node *DataNode) ResendSegmentStats(ctx context.Context, req *datapb.ResendSegmentStatsRequest) (*datapb.ResendSegmentStatsResponse, error) {
|
||||||
log.Info("start resending segment stats, if any",
|
log.Info("start resending segment stats, if any",
|
||||||
zap.Int64("DataNode ID", node.NodeID))
|
zap.Int64("DataNode ID", Params.DataNodeCfg.GetNodeID()))
|
||||||
segResent := node.flowgraphManager.resendTT()
|
segResent := node.flowgraphManager.resendTT()
|
||||||
log.Info("found segment(s) with stats to resend",
|
log.Info("found segment(s) with stats to resend",
|
||||||
zap.Int64s("segment IDs", segResent))
|
zap.Int64s("segment IDs", segResent))
|
||||||
|
@ -811,7 +810,7 @@ func (node *DataNode) Import(ctx context.Context, req *datapb.ImportTaskRequest)
|
||||||
ErrorCode: commonpb.ErrorCode_Success,
|
ErrorCode: commonpb.ErrorCode_Success,
|
||||||
},
|
},
|
||||||
TaskId: req.GetImportTask().TaskId,
|
TaskId: req.GetImportTask().TaskId,
|
||||||
DatanodeId: node.NodeID,
|
DatanodeId: Params.DataNodeCfg.GetNodeID(),
|
||||||
State: commonpb.ImportState_ImportStarted,
|
State: commonpb.ImportState_ImportStarted,
|
||||||
Segments: make([]int64, 0),
|
Segments: make([]int64, 0),
|
||||||
AutoIds: make([]int64, 0),
|
AutoIds: make([]int64, 0),
|
||||||
|
@ -843,7 +842,7 @@ func (node *DataNode) Import(ctx context.Context, req *datapb.ImportTaskRequest)
|
||||||
MsgType: commonpb.MsgType_RequestTSO,
|
MsgType: commonpb.MsgType_RequestTSO,
|
||||||
MsgID: 0,
|
MsgID: 0,
|
||||||
Timestamp: 0,
|
Timestamp: 0,
|
||||||
SourceID: node.NodeID,
|
SourceID: Params.DataNodeCfg.GetNodeID(),
|
||||||
},
|
},
|
||||||
Count: 1,
|
Count: 1,
|
||||||
})
|
})
|
||||||
|
@ -865,7 +864,7 @@ func (node *DataNode) Import(ctx context.Context, req *datapb.ImportTaskRequest)
|
||||||
ts := rep.GetTimestamp()
|
ts := rep.GetTimestamp()
|
||||||
|
|
||||||
metaService := newMetaService(node.rootCoord, req.GetImportTask().GetCollectionId())
|
metaService := newMetaService(node.rootCoord, req.GetImportTask().GetCollectionId())
|
||||||
schema, err := metaService.getCollectionSchema(ctx, req.GetImportTask().GetCollectionId(), 0)
|
colInfo, err := metaService.getCollectionInfo(ctx, req.GetImportTask().GetCollectionId(), 0)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
importResult.State = commonpb.ImportState_ImportFailed
|
importResult.State = commonpb.ImportState_ImportFailed
|
||||||
importResult.Infos = append(importResult.Infos, &commonpb.KeyValuePair{Key: "failed_reason", Value: err.Error()})
|
importResult.Infos = append(importResult.Infos, &commonpb.KeyValuePair{Key: "failed_reason", Value: err.Error()})
|
||||||
|
@ -882,8 +881,8 @@ func (node *DataNode) Import(ctx context.Context, req *datapb.ImportTaskRequest)
|
||||||
defer idAllocator.Close()
|
defer idAllocator.Close()
|
||||||
|
|
||||||
segmentSize := int64(Params.DataCoordCfg.SegmentMaxSize) * 1024 * 1024
|
segmentSize := int64(Params.DataCoordCfg.SegmentMaxSize) * 1024 * 1024
|
||||||
importWrapper := importutil.NewImportWrapper(ctx, schema, 2, segmentSize, idAllocator, node.chunkManager,
|
importWrapper := importutil.NewImportWrapper(ctx, colInfo.GetSchema(), colInfo.GetShardsNum(), segmentSize, idAllocator, node.chunkManager,
|
||||||
importFlushReqFunc(node, req, importResult, schema, ts), importResult, reportFunc)
|
importFlushReqFunc(node, req, importResult, colInfo.GetSchema(), ts), importResult, reportFunc)
|
||||||
err = importWrapper.Import(req.GetImportTask().GetFiles(), req.GetImportTask().GetRowBased(), false)
|
err = importWrapper.Import(req.GetImportTask().GetFiles(), req.GetImportTask().GetRowBased(), false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
importResult.State = commonpb.ImportState_ImportFailed
|
importResult.State = commonpb.ImportState_ImportFailed
|
||||||
|
@ -901,6 +900,54 @@ func (node *DataNode) Import(ctx context.Context, req *datapb.ImportTaskRequest)
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// AddSegment adds the segment to the current DataNode.
|
||||||
|
func (node *DataNode) AddSegment(ctx context.Context, req *datapb.AddSegmentRequest) (*commonpb.Status, error) {
|
||||||
|
log.Info("adding segment to DataNode flow graph",
|
||||||
|
zap.Int64("segment ID", req.GetSegmentId()),
|
||||||
|
zap.Int64("collection ID", req.GetCollectionId()),
|
||||||
|
zap.Int64("partition ID", req.GetPartitionId()),
|
||||||
|
zap.String("channel name", req.GetChannelName()),
|
||||||
|
zap.Int64("# of rows", req.GetRowNum()))
|
||||||
|
// Fetch the flow graph on the given v-channel.
|
||||||
|
ds, ok := node.flowgraphManager.getFlowgraphService(req.GetChannelName())
|
||||||
|
if !ok {
|
||||||
|
log.Error("channel not found in current DataNode",
|
||||||
|
zap.String("channel name", req.GetChannelName()),
|
||||||
|
zap.Int64("node ID", Params.DataNodeCfg.GetNodeID()))
|
||||||
|
return &commonpb.Status{
|
||||||
|
// TODO: Add specific error code.
|
||||||
|
ErrorCode: commonpb.ErrorCode_UnexpectedError,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
// Add the new segment to the replica.
|
||||||
|
if !ds.replica.hasSegment(req.GetSegmentId(), true) {
|
||||||
|
log.Info("add a new segment to replica")
|
||||||
|
err := ds.replica.addNewSegment(req.GetSegmentId(),
|
||||||
|
req.GetCollectionId(),
|
||||||
|
req.GetPartitionId(),
|
||||||
|
req.GetChannelName(),
|
||||||
|
&internalpb.MsgPosition{
|
||||||
|
ChannelName: req.GetChannelName(),
|
||||||
|
},
|
||||||
|
&internalpb.MsgPosition{
|
||||||
|
ChannelName: req.GetChannelName(),
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
log.Error("failed to add segment to flow graph",
|
||||||
|
zap.Error(err))
|
||||||
|
return &commonpb.Status{
|
||||||
|
// TODO: Add specific error code.
|
||||||
|
ErrorCode: commonpb.ErrorCode_UnexpectedError,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Update # of rows of the given segment.
|
||||||
|
ds.replica.updateStatistics(req.GetSegmentId(), req.GetRowNum())
|
||||||
|
return &commonpb.Status{
|
||||||
|
ErrorCode: commonpb.ErrorCode_Success,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
func importFlushReqFunc(node *DataNode, req *datapb.ImportTaskRequest, res *rootcoordpb.ImportResult, schema *schemapb.CollectionSchema, ts Timestamp) importutil.ImportFlushFunc {
|
func importFlushReqFunc(node *DataNode, req *datapb.ImportTaskRequest, res *rootcoordpb.ImportResult, schema *schemapb.CollectionSchema, ts Timestamp) importutil.ImportFlushFunc {
|
||||||
return func(fields map[storage.FieldID]storage.FieldData, shardNum int) error {
|
return func(fields map[storage.FieldID]storage.FieldData, shardNum int) error {
|
||||||
if shardNum >= len(req.GetImportTask().GetChannelNames()) {
|
if shardNum >= len(req.GetImportTask().GetChannelNames()) {
|
||||||
|
@ -1053,39 +1100,20 @@ func importFlushReqFunc(node *DataNode, req *datapb.ImportTaskRequest, res *root
|
||||||
fieldStats = append(fieldStats, &datapb.FieldBinlog{FieldID: k, Binlogs: []*datapb.Binlog{v}})
|
fieldStats = append(fieldStats, &datapb.FieldBinlog{FieldID: k, Binlogs: []*datapb.Binlog{v}})
|
||||||
}
|
}
|
||||||
|
|
||||||
ds, ok := node.flowgraphManager.getFlowgraphService(segReqs[0].GetChannelName())
|
log.Info("now adding segment to the correct DataNode flow graph")
|
||||||
if !ok {
|
// Ask DataCoord to add segment to the corresponding DataNode flow graph.
|
||||||
log.Warn("channel not found in current dataNode",
|
node.dataCoord.AddSegment(context.Background(), &datapb.AddSegmentRequest{
|
||||||
zap.String("channel name", segReqs[0].GetChannelName()),
|
Base: &commonpb.MsgBase{
|
||||||
zap.Int64("node ID", node.NodeID))
|
SourceID: Params.DataNodeCfg.GetNodeID(),
|
||||||
return errors.New("channel " + segReqs[0].GetChannelName() + " not found in current dataNode")
|
},
|
||||||
}
|
SegmentId: segmentID,
|
||||||
|
ChannelName: segReqs[0].GetChannelName(),
|
||||||
|
CollectionId: req.GetImportTask().GetCollectionId(),
|
||||||
|
PartitionId: req.GetImportTask().GetPartitionId(),
|
||||||
|
RowNum: int64(rowNum),
|
||||||
|
})
|
||||||
|
|
||||||
// Update flow graph replica segment info.
|
binlogReq := &datapb.SaveBinlogPathsRequest{
|
||||||
// TODO: Duplicate code. Add wrapper function.
|
|
||||||
if !ds.replica.hasSegment(segmentID, true) {
|
|
||||||
err = ds.replica.addNewSegment(segmentID,
|
|
||||||
req.GetImportTask().GetCollectionId(),
|
|
||||||
req.GetImportTask().GetPartitionId(),
|
|
||||||
segReqs[0].GetChannelName(),
|
|
||||||
&internalpb.MsgPosition{
|
|
||||||
ChannelName: segReqs[0].GetChannelName(),
|
|
||||||
},
|
|
||||||
&internalpb.MsgPosition{
|
|
||||||
ChannelName: segReqs[0].GetChannelName(),
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
log.Error("failed to add segment",
|
|
||||||
zap.Int64("segment ID", segmentID),
|
|
||||||
zap.Int64("collection ID", req.GetImportTask().GetCollectionId()),
|
|
||||||
zap.Int64("partition ID", req.GetImportTask().GetPartitionId()),
|
|
||||||
zap.String("channel mame", segReqs[0].GetChannelName()),
|
|
||||||
zap.Error(err))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ds.replica.updateStatistics(segmentID, int64(rowNum))
|
|
||||||
|
|
||||||
req := &datapb.SaveBinlogPathsRequest{
|
|
||||||
Base: &commonpb.MsgBase{
|
Base: &commonpb.MsgBase{
|
||||||
MsgType: 0, //TODO msg type
|
MsgType: 0, //TODO msg type
|
||||||
MsgID: 0, //TODO msg id
|
MsgID: 0, //TODO msg id
|
||||||
|
@ -1093,14 +1121,14 @@ func importFlushReqFunc(node *DataNode, req *datapb.ImportTaskRequest, res *root
|
||||||
SourceID: Params.DataNodeCfg.GetNodeID(),
|
SourceID: Params.DataNodeCfg.GetNodeID(),
|
||||||
},
|
},
|
||||||
SegmentID: segmentID,
|
SegmentID: segmentID,
|
||||||
CollectionID: req.ImportTask.GetCollectionId(),
|
CollectionID: req.GetImportTask().GetCollectionId(),
|
||||||
Field2BinlogPaths: fieldInsert,
|
Field2BinlogPaths: fieldInsert,
|
||||||
Field2StatslogPaths: fieldStats,
|
Field2StatslogPaths: fieldStats,
|
||||||
Importing: true,
|
Importing: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
err = retry.Do(context.Background(), func() error {
|
err = retry.Do(context.Background(), func() error {
|
||||||
rsp, err := node.dataCoord.SaveBinlogPaths(context.Background(), req)
|
rsp, err := node.dataCoord.SaveBinlogPaths(context.Background(), binlogReq)
|
||||||
// should be network issue, return error and retry
|
// should be network issue, return error and retry
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf(err.Error())
|
return fmt.Errorf(err.Error())
|
||||||
|
|
|
@ -495,6 +495,75 @@ func TestDataNode(t *testing.T) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestDataNode_AddSegment(t *testing.T) {
|
||||||
|
ctx, cancel := context.WithCancel(context.Background())
|
||||||
|
defer cancel()
|
||||||
|
|
||||||
|
node := newIDLEDataNodeMock(ctx, schemapb.DataType_Int64)
|
||||||
|
etcdCli, err := etcd.GetEtcdClient(&Params.EtcdCfg)
|
||||||
|
assert.Nil(t, err)
|
||||||
|
defer etcdCli.Close()
|
||||||
|
node.SetEtcdClient(etcdCli)
|
||||||
|
err = node.Init()
|
||||||
|
assert.Nil(t, err)
|
||||||
|
err = node.Start()
|
||||||
|
assert.Nil(t, err)
|
||||||
|
defer node.Stop()
|
||||||
|
|
||||||
|
node.chunkManager = storage.NewLocalChunkManager(storage.RootPath("/tmp/lib/milvus"))
|
||||||
|
Params.DataNodeCfg.SetNodeID(1)
|
||||||
|
|
||||||
|
t.Run("test AddSegment", func(t *testing.T) {
|
||||||
|
node.rootCoord = &RootCoordFactory{
|
||||||
|
collectionID: 100,
|
||||||
|
pkType: schemapb.DataType_Int64,
|
||||||
|
}
|
||||||
|
|
||||||
|
chName1 := "fake-by-dev-rootcoord-dml-testaddsegment-1"
|
||||||
|
chName2 := "fake-by-dev-rootcoord-dml-testaddsegment-2"
|
||||||
|
err := node.flowgraphManager.addAndStart(node, &datapb.VchannelInfo{
|
||||||
|
CollectionID: 100,
|
||||||
|
ChannelName: chName1,
|
||||||
|
UnflushedSegments: []*datapb.SegmentInfo{},
|
||||||
|
FlushedSegments: []*datapb.SegmentInfo{},
|
||||||
|
})
|
||||||
|
require.Nil(t, err)
|
||||||
|
err = node.flowgraphManager.addAndStart(node, &datapb.VchannelInfo{
|
||||||
|
CollectionID: 100,
|
||||||
|
ChannelName: chName2,
|
||||||
|
UnflushedSegments: []*datapb.SegmentInfo{},
|
||||||
|
FlushedSegments: []*datapb.SegmentInfo{},
|
||||||
|
})
|
||||||
|
require.Nil(t, err)
|
||||||
|
|
||||||
|
_, ok := node.flowgraphManager.getFlowgraphService(chName1)
|
||||||
|
assert.True(t, ok)
|
||||||
|
_, ok = node.flowgraphManager.getFlowgraphService(chName2)
|
||||||
|
assert.True(t, ok)
|
||||||
|
|
||||||
|
stat, err := node.AddSegment(context.WithValue(ctx, ctxKey{}, ""), &datapb.AddSegmentRequest{
|
||||||
|
SegmentId: 100,
|
||||||
|
CollectionId: 100,
|
||||||
|
PartitionId: 100,
|
||||||
|
ChannelName: chName1,
|
||||||
|
RowNum: 500,
|
||||||
|
})
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, commonpb.ErrorCode_Success, stat.GetErrorCode())
|
||||||
|
assert.Equal(t, "", stat.GetReason())
|
||||||
|
|
||||||
|
stat, err = node.AddSegment(context.WithValue(ctx, ctxKey{}, ""), &datapb.AddSegmentRequest{
|
||||||
|
SegmentId: 100,
|
||||||
|
CollectionId: 100,
|
||||||
|
PartitionId: 100,
|
||||||
|
ChannelName: "bad-ch-name",
|
||||||
|
RowNum: 500,
|
||||||
|
})
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, commonpb.ErrorCode_UnexpectedError, stat.GetErrorCode())
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
func TestWatchChannel(t *testing.T) {
|
func TestWatchChannel(t *testing.T) {
|
||||||
ctx, cancel := context.WithCancel(context.Background())
|
ctx, cancel := context.WithCancel(context.Background())
|
||||||
node := newIDLEDataNodeMock(ctx, schemapb.DataType_Int64)
|
node := newIDLEDataNodeMock(ctx, schemapb.DataType_Int64)
|
||||||
|
|
|
@ -46,6 +46,7 @@ func newMetaService(rc types.RootCoord, collectionID UniqueID) *metaService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Replace with getCollectionInfo below.
|
||||||
// getCollectionSchema get collection schema with provided collection id at specified timestamp.
|
// getCollectionSchema get collection schema with provided collection id at specified timestamp.
|
||||||
func (mService *metaService) getCollectionSchema(ctx context.Context, collID UniqueID, timestamp Timestamp) (*schemapb.CollectionSchema, error) {
|
func (mService *metaService) getCollectionSchema(ctx context.Context, collID UniqueID, timestamp Timestamp) (*schemapb.CollectionSchema, error) {
|
||||||
req := &milvuspb.DescribeCollectionRequest{
|
req := &milvuspb.DescribeCollectionRequest{
|
||||||
|
@ -72,6 +73,32 @@ func (mService *metaService) getCollectionSchema(ctx context.Context, collID Uni
|
||||||
return response.GetSchema(), nil
|
return response.GetSchema(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// getCollectionInfo get collection info with provided collection id at specified timestamp.
|
||||||
|
func (mService *metaService) getCollectionInfo(ctx context.Context, collID UniqueID, timestamp Timestamp) (*milvuspb.DescribeCollectionResponse, error) {
|
||||||
|
req := &milvuspb.DescribeCollectionRequest{
|
||||||
|
Base: &commonpb.MsgBase{
|
||||||
|
MsgType: commonpb.MsgType_DescribeCollection,
|
||||||
|
MsgID: 0, //GOOSE TODO
|
||||||
|
Timestamp: 0, // GOOSE TODO
|
||||||
|
SourceID: Params.DataNodeCfg.GetNodeID(),
|
||||||
|
},
|
||||||
|
DbName: "default", // GOOSE TODO
|
||||||
|
CollectionID: collID,
|
||||||
|
TimeStamp: timestamp,
|
||||||
|
}
|
||||||
|
|
||||||
|
response, err := mService.rootCoord.DescribeCollection(ctx, req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("grpc error when describe collection %v from rootcoord: %s", collID, err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
if response.GetStatus().GetErrorCode() != commonpb.ErrorCode_Success {
|
||||||
|
return nil, fmt.Errorf("describe collection %v from rootcoord wrong: %s", collID, response.GetStatus().GetReason())
|
||||||
|
}
|
||||||
|
|
||||||
|
return response, nil
|
||||||
|
}
|
||||||
|
|
||||||
// printCollectionStruct util function to print schema data, used in tests only.
|
// printCollectionStruct util function to print schema data, used in tests only.
|
||||||
func printCollectionStruct(obj *etcdpb.CollectionMeta) {
|
func printCollectionStruct(obj *etcdpb.CollectionMeta) {
|
||||||
v := reflect.ValueOf(obj)
|
v := reflect.ValueOf(obj)
|
||||||
|
|
|
@ -222,6 +222,12 @@ func (ds *DataCoordFactory) UpdateSegmentStatistics(ctx context.Context, req *da
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (ds *DataCoordFactory) AddSegment(ctx context.Context, req *datapb.AddSegmentRequest) (*commonpb.Status, error) {
|
||||||
|
return &commonpb.Status{
|
||||||
|
ErrorCode: commonpb.ErrorCode_Success,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (mf *MetaFactory) GetCollectionMeta(collectionID UniqueID, collectionName string, pkDataType schemapb.DataType) *etcdpb.CollectionMeta {
|
func (mf *MetaFactory) GetCollectionMeta(collectionID UniqueID, collectionName string, pkDataType schemapb.DataType) *etcdpb.CollectionMeta {
|
||||||
sch := schemapb.CollectionSchema{
|
sch := schemapb.CollectionSchema{
|
||||||
Name: collectionName,
|
Name: collectionName,
|
||||||
|
@ -918,6 +924,7 @@ func (m *RootCoordFactory) DescribeCollection(ctx context.Context, in *milvuspb.
|
||||||
|
|
||||||
resp.CollectionID = m.collectionID
|
resp.CollectionID = m.collectionID
|
||||||
resp.Schema = meta.Schema
|
resp.Schema = meta.Schema
|
||||||
|
resp.ShardsNum = 2
|
||||||
resp.Status.ErrorCode = commonpb.ErrorCode_Success
|
resp.Status.ErrorCode = commonpb.ErrorCode_Success
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -227,7 +227,7 @@ func (replica *SegmentReplica) normal2FlushedSegment(segID UniqueID) {
|
||||||
replica.flushedSegments[segID] = &seg
|
replica.flushedSegments[segID] = &seg
|
||||||
|
|
||||||
delete(replica.normalSegments, segID)
|
delete(replica.normalSegments, segID)
|
||||||
metrics.DataNodeNumUnflushedSegments.WithLabelValues(fmt.Sprint(Params.DataNodeCfg.NodeID)).Dec()
|
metrics.DataNodeNumUnflushedSegments.WithLabelValues(fmt.Sprint(Params.DataNodeCfg.GetNodeID())).Dec()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (replica *SegmentReplica) getCollectionAndPartitionID(segID UniqueID) (collID, partitionID UniqueID, err error) {
|
func (replica *SegmentReplica) getCollectionAndPartitionID(segID UniqueID) (collID, partitionID UniqueID, err error) {
|
||||||
|
|
|
@ -559,3 +559,17 @@ func (c *Client) ReleaseSegmentLock(ctx context.Context, req *datapb.ReleaseSegm
|
||||||
}
|
}
|
||||||
return ret.(*commonpb.Status), err
|
return ret.(*commonpb.Status), err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// AddSegment is the DataCoord client side code for AddSegment call.
|
||||||
|
func (c *Client) AddSegment(ctx context.Context, req *datapb.AddSegmentRequest) (*commonpb.Status, error) {
|
||||||
|
ret, err := c.grpcClient.ReCall(ctx, func(client interface{}) (interface{}, error) {
|
||||||
|
if !funcutil.CheckCtxValid(ctx) {
|
||||||
|
return nil, ctx.Err()
|
||||||
|
}
|
||||||
|
return client.(datapb.DataCoordClient).AddSegment(ctx, req)
|
||||||
|
})
|
||||||
|
if err != nil || ret == nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return ret.(*commonpb.Status), err
|
||||||
|
}
|
||||||
|
|
|
@ -135,6 +135,9 @@ func Test_NewClient(t *testing.T) {
|
||||||
|
|
||||||
r26, err := client.ReleaseSegmentLock(ctx, nil)
|
r26, err := client.ReleaseSegmentLock(ctx, nil)
|
||||||
retCheck(retNotNil, r26, err)
|
retCheck(retNotNil, r26, err)
|
||||||
|
|
||||||
|
r27, err := client.AddSegment(ctx, nil)
|
||||||
|
retCheck(retNotNil, r27, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
client.grpcClient = &mock.GRPCClientBase{
|
client.grpcClient = &mock.GRPCClientBase{
|
||||||
|
|
|
@ -350,3 +350,7 @@ func (s *Server) AcquireSegmentLock(ctx context.Context, req *datapb.AcquireSegm
|
||||||
func (s *Server) ReleaseSegmentLock(ctx context.Context, req *datapb.ReleaseSegmentLockRequest) (*commonpb.Status, error) {
|
func (s *Server) ReleaseSegmentLock(ctx context.Context, req *datapb.ReleaseSegmentLockRequest) (*commonpb.Status, error) {
|
||||||
return s.dataCoord.ReleaseSegmentLock(ctx, req)
|
return s.dataCoord.ReleaseSegmentLock(ctx, req)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *Server) AddSegment(ctx context.Context, request *datapb.AddSegmentRequest) (*commonpb.Status, error) {
|
||||||
|
return s.dataCoord.AddSegment(ctx, request)
|
||||||
|
}
|
||||||
|
|
|
@ -60,6 +60,7 @@ type MockDataCoord struct {
|
||||||
updateSegStatResp *commonpb.Status
|
updateSegStatResp *commonpb.Status
|
||||||
acquireSegLockResp *commonpb.Status
|
acquireSegLockResp *commonpb.Status
|
||||||
releaseSegLockResp *commonpb.Status
|
releaseSegLockResp *commonpb.Status
|
||||||
|
addSegmentResp *commonpb.Status
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *MockDataCoord) Init() error {
|
func (m *MockDataCoord) Init() error {
|
||||||
|
@ -189,6 +190,10 @@ func (m *MockDataCoord) ReleaseSegmentLock(ctx context.Context, req *datapb.Rele
|
||||||
return m.releaseSegLockResp, m.err
|
return m.releaseSegLockResp, m.err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m *MockDataCoord) AddSegment(ctx context.Context, req *datapb.AddSegmentRequest) (*commonpb.Status, error) {
|
||||||
|
return m.addSegmentResp, m.err
|
||||||
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
func Test_NewServer(t *testing.T) {
|
func Test_NewServer(t *testing.T) {
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
|
@ -452,6 +457,17 @@ func Test_NewServer(t *testing.T) {
|
||||||
assert.NotNil(t, resp)
|
assert.NotNil(t, resp)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
t.Run("add segment", func(t *testing.T) {
|
||||||
|
server.dataCoord = &MockDataCoord{
|
||||||
|
addSegmentResp: &commonpb.Status{
|
||||||
|
ErrorCode: commonpb.ErrorCode_Success,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
resp, err := server.AddSegment(ctx, nil)
|
||||||
|
assert.Nil(t, err)
|
||||||
|
assert.NotNil(t, resp)
|
||||||
|
})
|
||||||
|
|
||||||
err := server.Stop()
|
err := server.Stop()
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -211,3 +211,17 @@ func (c *Client) ResendSegmentStats(ctx context.Context, req *datapb.ResendSegme
|
||||||
}
|
}
|
||||||
return ret.(*datapb.ResendSegmentStatsResponse), err
|
return ret.(*datapb.ResendSegmentStatsResponse), err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// AddSegment is the DataNode client side code for AddSegment call.
|
||||||
|
func (c *Client) AddSegment(ctx context.Context, req *datapb.AddSegmentRequest) (*commonpb.Status, error) {
|
||||||
|
ret, err := c.grpcClient.ReCall(ctx, func(client interface{}) (interface{}, error) {
|
||||||
|
if !funcutil.CheckCtxValid(ctx) {
|
||||||
|
return nil, ctx.Err()
|
||||||
|
}
|
||||||
|
return client.(datapb.DataNodeClient).AddSegment(ctx, req)
|
||||||
|
})
|
||||||
|
if err != nil || ret == nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return ret.(*commonpb.Status), err
|
||||||
|
}
|
||||||
|
|
|
@ -82,6 +82,9 @@ func Test_NewClient(t *testing.T) {
|
||||||
|
|
||||||
r8, err := client.ResendSegmentStats(ctx, nil)
|
r8, err := client.ResendSegmentStats(ctx, nil)
|
||||||
retCheck(retNotNil, r8, err)
|
retCheck(retNotNil, r8, err)
|
||||||
|
|
||||||
|
r9, err := client.AddSegment(ctx, nil)
|
||||||
|
retCheck(retNotNil, r9, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
client.grpcClient = &mock.GRPCClientBase{
|
client.grpcClient = &mock.GRPCClientBase{
|
||||||
|
|
|
@ -361,3 +361,7 @@ func (s *Server) Import(ctx context.Context, request *datapb.ImportTaskRequest)
|
||||||
func (s *Server) ResendSegmentStats(ctx context.Context, request *datapb.ResendSegmentStatsRequest) (*datapb.ResendSegmentStatsResponse, error) {
|
func (s *Server) ResendSegmentStats(ctx context.Context, request *datapb.ResendSegmentStatsRequest) (*datapb.ResendSegmentStatsResponse, error) {
|
||||||
return s.datanode.ResendSegmentStats(ctx, request)
|
return s.datanode.ResendSegmentStats(ctx, request)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *Server) AddSegment(ctx context.Context, request *datapb.AddSegmentRequest) (*commonpb.Status, error) {
|
||||||
|
return s.datanode.AddSegment(ctx, request)
|
||||||
|
}
|
||||||
|
|
|
@ -117,7 +117,11 @@ func (m *MockDataNode) Import(ctx context.Context, req *datapb.ImportTaskRequest
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *MockDataNode) ResendSegmentStats(ctx context.Context, req *datapb.ResendSegmentStatsRequest) (*datapb.ResendSegmentStatsResponse, error) {
|
func (m *MockDataNode) ResendSegmentStats(ctx context.Context, req *datapb.ResendSegmentStatsRequest) (*datapb.ResendSegmentStatsResponse, error) {
|
||||||
return m.resendResp, nil
|
return m.resendResp, m.err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MockDataNode) AddSegment(ctx context.Context, req *datapb.AddSegmentRequest) (*commonpb.Status, error) {
|
||||||
|
return m.status, m.err
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -273,6 +277,15 @@ func Test_NewServer(t *testing.T) {
|
||||||
assert.NotNil(t, resp)
|
assert.NotNil(t, resp)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
t.Run("add segment", func(t *testing.T) {
|
||||||
|
server.datanode = &MockDataNode{
|
||||||
|
status: &commonpb.Status{},
|
||||||
|
}
|
||||||
|
resp, err := server.AddSegment(ctx, nil)
|
||||||
|
assert.Nil(t, err)
|
||||||
|
assert.NotNil(t, resp)
|
||||||
|
})
|
||||||
|
|
||||||
err = server.Stop()
|
err = server.Stop()
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -438,6 +438,10 @@ func (m *MockDataCoord) Flush(ctx context.Context, req *datapb.FlushRequest) (*d
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m *MockDataCoord) AddSegment(ctx context.Context, req *datapb.AddSegmentRequest) (*commonpb.Status, error) {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (m *MockDataCoord) AssignSegmentID(ctx context.Context, req *datapb.AssignSegmentIDRequest) (*datapb.AssignSegmentIDResponse, error) {
|
func (m *MockDataCoord) AssignSegmentID(ctx context.Context, req *datapb.AssignSegmentIDRequest) (*datapb.AssignSegmentIDResponse, error) {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,6 +52,8 @@ service DataCoord {
|
||||||
|
|
||||||
rpc AcquireSegmentLock(AcquireSegmentLockRequest) returns (common.Status) {}
|
rpc AcquireSegmentLock(AcquireSegmentLockRequest) returns (common.Status) {}
|
||||||
rpc ReleaseSegmentLock(ReleaseSegmentLockRequest) returns (common.Status) {}
|
rpc ReleaseSegmentLock(ReleaseSegmentLockRequest) returns (common.Status) {}
|
||||||
|
|
||||||
|
rpc AddSegment(AddSegmentRequest) returns(common.Status) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
service DataNode {
|
service DataNode {
|
||||||
|
@ -69,6 +71,8 @@ service DataNode {
|
||||||
rpc Import(ImportTaskRequest) returns(common.Status) {}
|
rpc Import(ImportTaskRequest) returns(common.Status) {}
|
||||||
|
|
||||||
rpc ResendSegmentStats(ResendSegmentStatsRequest) returns(ResendSegmentStatsResponse) {}
|
rpc ResendSegmentStats(ResendSegmentStatsRequest) returns(ResendSegmentStatsResponse) {}
|
||||||
|
|
||||||
|
rpc AddSegment(AddSegmentRequest) returns(common.Status) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
message FlushRequest {
|
message FlushRequest {
|
||||||
|
@ -512,3 +516,12 @@ message ResendSegmentStatsResponse {
|
||||||
common.Status status = 1;
|
common.Status status = 1;
|
||||||
repeated int64 seg_resent = 2;
|
repeated int64 seg_resent = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
message AddSegmentRequest {
|
||||||
|
common.MsgBase base = 1;
|
||||||
|
int64 segment_id = 2;
|
||||||
|
string channel_name = 3;
|
||||||
|
int64 collection_id = 4;
|
||||||
|
int64 partition_id = 5;
|
||||||
|
int64 row_num = 6;
|
||||||
|
}
|
||||||
|
|
|
@ -3917,6 +3917,85 @@ func (m *ResendSegmentStatsResponse) GetSegResent() []int64 {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type AddSegmentRequest struct {
|
||||||
|
Base *commonpb.MsgBase `protobuf:"bytes,1,opt,name=base,proto3" json:"base,omitempty"`
|
||||||
|
SegmentId int64 `protobuf:"varint,2,opt,name=segment_id,json=segmentId,proto3" json:"segment_id,omitempty"`
|
||||||
|
ChannelName string `protobuf:"bytes,3,opt,name=channel_name,json=channelName,proto3" json:"channel_name,omitempty"`
|
||||||
|
CollectionId int64 `protobuf:"varint,4,opt,name=collection_id,json=collectionId,proto3" json:"collection_id,omitempty"`
|
||||||
|
PartitionId int64 `protobuf:"varint,5,opt,name=partition_id,json=partitionId,proto3" json:"partition_id,omitempty"`
|
||||||
|
RowNum int64 `protobuf:"varint,6,opt,name=row_num,json=rowNum,proto3" json:"row_num,omitempty"`
|
||||||
|
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||||
|
XXX_unrecognized []byte `json:"-"`
|
||||||
|
XXX_sizecache int32 `json:"-"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *AddSegmentRequest) Reset() { *m = AddSegmentRequest{} }
|
||||||
|
func (m *AddSegmentRequest) String() string { return proto.CompactTextString(m) }
|
||||||
|
func (*AddSegmentRequest) ProtoMessage() {}
|
||||||
|
func (*AddSegmentRequest) Descriptor() ([]byte, []int) {
|
||||||
|
return fileDescriptor_82cd95f524594f49, []int{63}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *AddSegmentRequest) XXX_Unmarshal(b []byte) error {
|
||||||
|
return xxx_messageInfo_AddSegmentRequest.Unmarshal(m, b)
|
||||||
|
}
|
||||||
|
func (m *AddSegmentRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||||
|
return xxx_messageInfo_AddSegmentRequest.Marshal(b, m, deterministic)
|
||||||
|
}
|
||||||
|
func (m *AddSegmentRequest) XXX_Merge(src proto.Message) {
|
||||||
|
xxx_messageInfo_AddSegmentRequest.Merge(m, src)
|
||||||
|
}
|
||||||
|
func (m *AddSegmentRequest) XXX_Size() int {
|
||||||
|
return xxx_messageInfo_AddSegmentRequest.Size(m)
|
||||||
|
}
|
||||||
|
func (m *AddSegmentRequest) XXX_DiscardUnknown() {
|
||||||
|
xxx_messageInfo_AddSegmentRequest.DiscardUnknown(m)
|
||||||
|
}
|
||||||
|
|
||||||
|
var xxx_messageInfo_AddSegmentRequest proto.InternalMessageInfo
|
||||||
|
|
||||||
|
func (m *AddSegmentRequest) GetBase() *commonpb.MsgBase {
|
||||||
|
if m != nil {
|
||||||
|
return m.Base
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *AddSegmentRequest) GetSegmentId() int64 {
|
||||||
|
if m != nil {
|
||||||
|
return m.SegmentId
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *AddSegmentRequest) GetChannelName() string {
|
||||||
|
if m != nil {
|
||||||
|
return m.ChannelName
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *AddSegmentRequest) GetCollectionId() int64 {
|
||||||
|
if m != nil {
|
||||||
|
return m.CollectionId
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *AddSegmentRequest) GetPartitionId() int64 {
|
||||||
|
if m != nil {
|
||||||
|
return m.PartitionId
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *AddSegmentRequest) GetRowNum() int64 {
|
||||||
|
if m != nil {
|
||||||
|
return m.RowNum
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
proto.RegisterEnum("milvus.proto.data.ChannelWatchState", ChannelWatchState_name, ChannelWatchState_value)
|
proto.RegisterEnum("milvus.proto.data.ChannelWatchState", ChannelWatchState_name, ChannelWatchState_value)
|
||||||
proto.RegisterEnum("milvus.proto.data.CompactionType", CompactionType_name, CompactionType_value)
|
proto.RegisterEnum("milvus.proto.data.CompactionType", CompactionType_name, CompactionType_value)
|
||||||
|
@ -3983,236 +4062,240 @@ func init() {
|
||||||
proto.RegisterType((*UpdateSegmentStatisticsRequest)(nil), "milvus.proto.data.UpdateSegmentStatisticsRequest")
|
proto.RegisterType((*UpdateSegmentStatisticsRequest)(nil), "milvus.proto.data.UpdateSegmentStatisticsRequest")
|
||||||
proto.RegisterType((*ResendSegmentStatsRequest)(nil), "milvus.proto.data.ResendSegmentStatsRequest")
|
proto.RegisterType((*ResendSegmentStatsRequest)(nil), "milvus.proto.data.ResendSegmentStatsRequest")
|
||||||
proto.RegisterType((*ResendSegmentStatsResponse)(nil), "milvus.proto.data.ResendSegmentStatsResponse")
|
proto.RegisterType((*ResendSegmentStatsResponse)(nil), "milvus.proto.data.ResendSegmentStatsResponse")
|
||||||
|
proto.RegisterType((*AddSegmentRequest)(nil), "milvus.proto.data.AddSegmentRequest")
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() { proto.RegisterFile("data_coord.proto", fileDescriptor_82cd95f524594f49) }
|
func init() { proto.RegisterFile("data_coord.proto", fileDescriptor_82cd95f524594f49) }
|
||||||
|
|
||||||
var fileDescriptor_82cd95f524594f49 = []byte{
|
var fileDescriptor_82cd95f524594f49 = []byte{
|
||||||
// 3579 bytes of a gzipped FileDescriptorProto
|
// 3628 bytes of a gzipped FileDescriptorProto
|
||||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x3b, 0x4b, 0x6f, 0x1b, 0xd7,
|
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x3b, 0x4b, 0x6f, 0x1b, 0xd7,
|
||||||
0xd5, 0x1e, 0xbe, 0x44, 0x1e, 0x3e, 0x44, 0x5f, 0x3b, 0x32, 0x4d, 0xdb, 0xb2, 0x3c, 0x8e, 0x1d,
|
0xd5, 0x1e, 0xbe, 0x44, 0x1e, 0x3e, 0x44, 0x5d, 0x3b, 0x32, 0x4d, 0xdb, 0xb2, 0x3c, 0x8e, 0x1d,
|
||||||
0xc5, 0x71, 0xec, 0x44, 0x4e, 0x10, 0xe3, 0xcb, 0x0b, 0xb1, 0x65, 0x2b, 0xc4, 0x27, 0xb9, 0xca,
|
0xc5, 0x71, 0xec, 0x44, 0x4e, 0x10, 0xe3, 0xcb, 0x0b, 0xb6, 0x65, 0x2b, 0xc4, 0x27, 0xf9, 0x93,
|
||||||
0x48, 0x89, 0x8b, 0xa6, 0xe8, 0x60, 0xc4, 0xb9, 0xa2, 0x26, 0xe2, 0xcc, 0xd0, 0x33, 0x43, 0xcb,
|
0x47, 0x4a, 0xfc, 0xa1, 0x29, 0x4a, 0x8c, 0x38, 0x57, 0xd4, 0x44, 0x9c, 0x19, 0x7a, 0x66, 0x68,
|
||||||
0xca, 0x26, 0x46, 0x83, 0x16, 0x4d, 0x51, 0xf4, 0x81, 0x6e, 0xda, 0xa2, 0x8b, 0xa2, 0xab, 0x3e,
|
0x59, 0xd9, 0xc4, 0x68, 0xd0, 0x02, 0x29, 0x8a, 0x3e, 0xd0, 0x4d, 0x0b, 0x74, 0x51, 0x74, 0xd5,
|
||||||
0x36, 0x05, 0x82, 0x2e, 0xda, 0xa2, 0xfb, 0xa0, 0x5d, 0xf4, 0x27, 0x74, 0xd9, 0x5d, 0x7f, 0x43,
|
0xc7, 0xa6, 0x40, 0xd0, 0x45, 0x5b, 0x74, 0x1f, 0xb4, 0x8b, 0xfe, 0x80, 0x2e, 0xba, 0x6c, 0x37,
|
||||||
0x71, 0x1f, 0x73, 0xe7, 0xc1, 0x19, 0x72, 0x44, 0xda, 0xf1, 0x4e, 0xf7, 0xcc, 0x39, 0xe7, 0x9e,
|
0xed, 0x6f, 0x28, 0xee, 0x63, 0xee, 0xbc, 0xc9, 0x91, 0x68, 0xc7, 0x3b, 0xde, 0x7b, 0xcf, 0x39,
|
||||||
0x7b, 0xee, 0x79, 0xf3, 0x0a, 0x9a, 0xba, 0xe6, 0x69, 0x6a, 0xd7, 0xb6, 0x1d, 0xfd, 0xda, 0xc0,
|
0xf7, 0xdc, 0x73, 0xcf, 0x7b, 0x2e, 0xa1, 0xa9, 0xa9, 0xae, 0xda, 0xed, 0x59, 0x96, 0xad, 0x5d,
|
||||||
0xb1, 0x3d, 0x1b, 0x1d, 0x37, 0x8d, 0xfe, 0xc3, 0xa1, 0xcb, 0x56, 0xd7, 0xc8, 0xe7, 0x76, 0xad,
|
0x1d, 0xda, 0x96, 0x6b, 0xa1, 0x39, 0x43, 0x1f, 0x3c, 0x1a, 0x39, 0x6c, 0x74, 0x95, 0x2c, 0xb7,
|
||||||
0x6b, 0x9b, 0xa6, 0x6d, 0x31, 0x50, 0xbb, 0x61, 0x58, 0x1e, 0x76, 0x2c, 0xad, 0xcf, 0xd7, 0xb5,
|
0x6b, 0x3d, 0xcb, 0x30, 0x2c, 0x93, 0x4d, 0xb5, 0x1b, 0xba, 0xe9, 0x62, 0xdb, 0x54, 0x07, 0x7c,
|
||||||
0x30, 0x41, 0xbb, 0xe6, 0x76, 0xf7, 0xb0, 0xa9, 0xb1, 0x95, 0x3c, 0x07, 0xc5, 0x3b, 0xe6, 0xc0,
|
0x5c, 0x0b, 0x22, 0xb4, 0x6b, 0x4e, 0x6f, 0x17, 0x1b, 0x2a, 0x1b, 0xc9, 0x33, 0x50, 0xbc, 0x63,
|
||||||
0x3b, 0x94, 0x7f, 0x21, 0x41, 0xed, 0x6e, 0x7f, 0xe8, 0xee, 0x29, 0xf8, 0xc1, 0x10, 0xbb, 0x1e,
|
0x0c, 0xdd, 0x03, 0xf9, 0xa7, 0x12, 0xd4, 0xee, 0x0e, 0x46, 0xce, 0xae, 0x82, 0x1f, 0x8e, 0xb0,
|
||||||
0x7a, 0x05, 0x0a, 0x3b, 0x9a, 0x8b, 0x5b, 0xd2, 0x92, 0xb4, 0x5c, 0x5d, 0x39, 0x7b, 0x2d, 0xb2,
|
0xe3, 0xa2, 0xd7, 0xa0, 0xb0, 0xad, 0x3a, 0xb8, 0x25, 0x2d, 0x4a, 0x4b, 0xd5, 0xe5, 0x33, 0x57,
|
||||||
0x2b, 0xdf, 0x6f, 0xc3, 0xed, 0xdd, 0xd2, 0x5c, 0xac, 0x50, 0x4c, 0x84, 0xa0, 0xa0, 0xef, 0x74,
|
0x43, 0xbb, 0xf2, 0xfd, 0xd6, 0x9d, 0xfe, 0x2d, 0xd5, 0xc1, 0x0a, 0x85, 0x44, 0x08, 0x0a, 0xda,
|
||||||
0x56, 0x5b, 0xb9, 0x25, 0x69, 0x39, 0xaf, 0xd0, 0xbf, 0xd1, 0x22, 0x80, 0x8b, 0x7b, 0x26, 0xb6,
|
0x76, 0x67, 0xa5, 0x95, 0x5b, 0x94, 0x96, 0xf2, 0x0a, 0xfd, 0x8d, 0x16, 0x00, 0x1c, 0xdc, 0x37,
|
||||||
0xbc, 0xce, 0xaa, 0xdb, 0xca, 0x2f, 0xe5, 0x97, 0xf3, 0x4a, 0x08, 0x82, 0x64, 0xa8, 0x75, 0xed,
|
0xb0, 0xe9, 0x76, 0x56, 0x9c, 0x56, 0x7e, 0x31, 0xbf, 0x94, 0x57, 0x02, 0x33, 0x48, 0x86, 0x5a,
|
||||||
0x7e, 0x1f, 0x77, 0x3d, 0xc3, 0xb6, 0x3a, 0xab, 0xad, 0x02, 0xa5, 0x8d, 0xc0, 0xe4, 0x5f, 0x4b,
|
0xcf, 0x1a, 0x0c, 0x70, 0xcf, 0xd5, 0x2d, 0xb3, 0xb3, 0xd2, 0x2a, 0x50, 0xdc, 0xd0, 0x9c, 0xfc,
|
||||||
0x50, 0xe7, 0xa2, 0xb9, 0x03, 0xdb, 0x72, 0x31, 0xba, 0x01, 0x25, 0xd7, 0xd3, 0xbc, 0xa1, 0xcb,
|
0x73, 0x09, 0xea, 0x9c, 0x35, 0x67, 0x68, 0x99, 0x0e, 0x46, 0xd7, 0xa1, 0xe4, 0xb8, 0xaa, 0x3b,
|
||||||
0xa5, 0x3b, 0x93, 0x28, 0xdd, 0x16, 0x45, 0x51, 0x38, 0x6a, 0xa2, 0x78, 0xf1, 0xed, 0xf3, 0xa3,
|
0x72, 0x38, 0x77, 0xa7, 0x13, 0xb9, 0xdb, 0xa4, 0x20, 0x0a, 0x07, 0x4d, 0x64, 0x2f, 0xba, 0x7d,
|
||||||
0xdb, 0xc7, 0x8e, 0x50, 0x88, 0x1f, 0x41, 0xfe, 0x99, 0x04, 0xcd, 0x2d, 0x7f, 0xe9, 0x6b, 0xef,
|
0x3e, 0xbe, 0x7d, 0xe4, 0x08, 0x85, 0xe8, 0x11, 0xe4, 0x1f, 0x4b, 0xd0, 0xdc, 0xf4, 0x86, 0x9e,
|
||||||
0x24, 0x14, 0xbb, 0xf6, 0xd0, 0xf2, 0xa8, 0x80, 0x75, 0x85, 0x2d, 0xd0, 0x05, 0xa8, 0x75, 0xf7,
|
0xf4, 0x4e, 0x40, 0xb1, 0x67, 0x8d, 0x4c, 0x97, 0x32, 0x58, 0x57, 0xd8, 0x00, 0x9d, 0x87, 0x5a,
|
||||||
0x34, 0xcb, 0xc2, 0x7d, 0xd5, 0xd2, 0x4c, 0x4c, 0x45, 0xa9, 0x28, 0x55, 0x0e, 0xbb, 0xa7, 0x99,
|
0x6f, 0x57, 0x35, 0x4d, 0x3c, 0xe8, 0x9a, 0xaa, 0x81, 0x29, 0x2b, 0x15, 0xa5, 0xca, 0xe7, 0xee,
|
||||||
0x38, 0x93, 0x44, 0x4b, 0x50, 0x1d, 0x68, 0x8e, 0x67, 0x44, 0x74, 0x16, 0x06, 0xc9, 0xbf, 0x91,
|
0xa9, 0x06, 0xce, 0xc4, 0xd1, 0x22, 0x54, 0x87, 0xaa, 0xed, 0xea, 0x21, 0x99, 0x05, 0xa7, 0xe4,
|
||||||
0x60, 0xe1, 0x3d, 0xd7, 0x35, 0x7a, 0xd6, 0x88, 0x64, 0x0b, 0x50, 0xb2, 0x6c, 0x1d, 0x77, 0x56,
|
0x5f, 0x48, 0x30, 0x7f, 0xd3, 0x71, 0xf4, 0xbe, 0x19, 0xe3, 0x6c, 0x1e, 0x4a, 0xa6, 0xa5, 0xe1,
|
||||||
0xa9, 0x68, 0x79, 0x85, 0xaf, 0xd0, 0x19, 0xa8, 0x0c, 0x30, 0x76, 0x54, 0xc7, 0xee, 0xfb, 0x82,
|
0xce, 0x0a, 0x65, 0x2d, 0xaf, 0xf0, 0x11, 0x3a, 0x0d, 0x95, 0x21, 0xc6, 0x76, 0xd7, 0xb6, 0x06,
|
||||||
0x95, 0x09, 0x40, 0xb1, 0xfb, 0x18, 0x7d, 0x00, 0xc7, 0xdd, 0x18, 0x23, 0x76, 0x9b, 0xd5, 0x95,
|
0x1e, 0x63, 0x65, 0x32, 0xa1, 0x58, 0x03, 0x8c, 0xee, 0xc3, 0x9c, 0x13, 0x21, 0xc4, 0x6e, 0xb3,
|
||||||
0x8b, 0xd7, 0x46, 0xec, 0xf1, 0x5a, 0x7c, 0x53, 0x65, 0x94, 0x5a, 0x7e, 0x9c, 0x83, 0x13, 0x02,
|
0xba, 0x7c, 0xe1, 0x6a, 0x4c, 0x1f, 0xaf, 0x46, 0x37, 0x55, 0xe2, 0xd8, 0xf2, 0x93, 0x1c, 0x1c,
|
||||||
0x8f, 0xc9, 0x4a, 0xfe, 0x26, 0x9a, 0x73, 0x71, 0x4f, 0x88, 0xc7, 0x16, 0x59, 0x34, 0x27, 0x54,
|
0x17, 0x70, 0x8c, 0x57, 0xf2, 0x9b, 0x48, 0xce, 0xc1, 0x7d, 0xc1, 0x1e, 0x1b, 0x64, 0x91, 0x9c,
|
||||||
0x9e, 0x0f, 0xab, 0x3c, 0x83, 0x81, 0xc5, 0xf5, 0x59, 0x1c, 0xd1, 0x27, 0x3a, 0x0f, 0x55, 0xfc,
|
0x10, 0x79, 0x3e, 0x28, 0xf2, 0x0c, 0x0a, 0x16, 0x95, 0x67, 0x31, 0x26, 0x4f, 0x74, 0x0e, 0xaa,
|
||||||
0x68, 0x60, 0x38, 0x58, 0xf5, 0x0c, 0x13, 0xb7, 0x4a, 0x4b, 0xd2, 0x72, 0x41, 0x01, 0x06, 0xda,
|
0xf8, 0xf1, 0x50, 0xb7, 0x71, 0xd7, 0xd5, 0x0d, 0xdc, 0x2a, 0x2d, 0x4a, 0x4b, 0x05, 0x05, 0xd8,
|
||||||
0x36, 0xcc, 0xb0, 0x45, 0xce, 0x65, 0xb6, 0x48, 0xf9, 0xb7, 0x12, 0x9c, 0x1a, 0xb9, 0x25, 0x6e,
|
0xd4, 0x96, 0x6e, 0x04, 0x35, 0x72, 0x26, 0xb3, 0x46, 0xca, 0xbf, 0x94, 0xe0, 0x64, 0xec, 0x96,
|
||||||
0xe2, 0x0a, 0x34, 0xe9, 0xc9, 0x03, 0xcd, 0x10, 0x63, 0x27, 0x0a, 0xbf, 0x3c, 0x4e, 0xe1, 0x01,
|
0xb8, 0x8a, 0x2b, 0xd0, 0xa4, 0x27, 0xf7, 0x25, 0x43, 0x94, 0x9d, 0x08, 0xfc, 0xd2, 0x38, 0x81,
|
||||||
0xba, 0x32, 0x42, 0x1f, 0x12, 0x32, 0x97, 0x5d, 0xc8, 0x7d, 0x38, 0xb5, 0x86, 0x3d, 0xbe, 0x01,
|
0xfb, 0xe0, 0x4a, 0x0c, 0x3f, 0xc0, 0x64, 0x2e, 0x3b, 0x93, 0x7b, 0x70, 0x72, 0x15, 0xbb, 0x7c,
|
||||||
0xf9, 0x86, 0xdd, 0xe9, 0x43, 0x44, 0xd4, 0x97, 0x72, 0x23, 0xbe, 0xf4, 0xa7, 0x9c, 0xf0, 0x25,
|
0x03, 0xb2, 0x86, 0x9d, 0xa3, 0xbb, 0x88, 0xb0, 0x2d, 0xe5, 0x62, 0xb6, 0xf4, 0xbb, 0x9c, 0xb0,
|
||||||
0xba, 0x55, 0xc7, 0xda, 0xb5, 0xd1, 0x59, 0xa8, 0x08, 0x14, 0x6e, 0x15, 0x01, 0x00, 0xbd, 0x01,
|
0x25, 0xba, 0x55, 0xc7, 0xdc, 0xb1, 0xd0, 0x19, 0xa8, 0x08, 0x10, 0xae, 0x15, 0xfe, 0x04, 0x7a,
|
||||||
0x45, 0x22, 0x29, 0x33, 0x89, 0xc6, 0xca, 0x85, 0xe4, 0x33, 0x85, 0x78, 0x2a, 0x0c, 0x1f, 0x75,
|
0x0b, 0x8a, 0x84, 0x53, 0xa6, 0x12, 0x8d, 0xe5, 0xf3, 0xc9, 0x67, 0x0a, 0xd0, 0x54, 0x18, 0x3c,
|
||||||
0xa0, 0xe1, 0x7a, 0x9a, 0xe3, 0xa9, 0x03, 0xdb, 0xa5, 0xf7, 0x4c, 0x0d, 0xa7, 0xba, 0x22, 0x47,
|
0xea, 0x40, 0xc3, 0x71, 0x55, 0xdb, 0xed, 0x0e, 0x2d, 0x87, 0xde, 0x33, 0x55, 0x9c, 0xea, 0xb2,
|
||||||
0x39, 0x88, 0x60, 0xba, 0xe1, 0xf6, 0x36, 0x39, 0xa6, 0x52, 0xa7, 0x94, 0xfe, 0x12, 0xdd, 0x81,
|
0x1c, 0xa6, 0x20, 0x9c, 0xe9, 0xba, 0xd3, 0xdf, 0xe0, 0x90, 0x4a, 0x9d, 0x62, 0x7a, 0x43, 0x74,
|
||||||
0x1a, 0xb6, 0xf4, 0x80, 0x51, 0x21, 0x33, 0xa3, 0x2a, 0xb6, 0x74, 0xc1, 0x26, 0xb8, 0x9f, 0x62,
|
0x07, 0x6a, 0xd8, 0xd4, 0x7c, 0x42, 0x85, 0xcc, 0x84, 0xaa, 0xd8, 0xd4, 0x04, 0x19, 0xff, 0x7e,
|
||||||
0xf6, 0xfb, 0xf9, 0x91, 0x04, 0xad, 0xd1, 0x0b, 0x9a, 0x25, 0x50, 0xbe, 0xc9, 0x88, 0x30, 0xbb,
|
0x8a, 0xd9, 0xef, 0xe7, 0xfb, 0x12, 0xb4, 0xe2, 0x17, 0x34, 0x8d, 0xa3, 0x7c, 0x9b, 0x21, 0x61,
|
||||||
0xa0, 0xb1, 0x1e, 0x2e, 0x2e, 0x49, 0xe1, 0x24, 0xb2, 0x01, 0xcf, 0x05, 0xd2, 0xd0, 0x2f, 0x4f,
|
0x76, 0x41, 0x63, 0x2d, 0x5c, 0x5c, 0x92, 0xc2, 0x51, 0x64, 0x1d, 0x5e, 0xf0, 0xb9, 0xa1, 0x2b,
|
||||||
0xcd, 0x58, 0x3e, 0x97, 0x60, 0x21, 0xbe, 0xd7, 0x2c, 0xe7, 0x7e, 0x0d, 0x8a, 0x86, 0xb5, 0x6b,
|
0xcf, 0x4c, 0x59, 0x3e, 0x97, 0x60, 0x3e, 0xba, 0xd7, 0x34, 0xe7, 0x7e, 0x03, 0x8a, 0xba, 0xb9,
|
||||||
0xfb, 0xc7, 0x5e, 0x1c, 0xe3, 0x67, 0x64, 0x2f, 0x86, 0x2c, 0x9b, 0x70, 0x66, 0x0d, 0x7b, 0x1d,
|
0x63, 0x79, 0xc7, 0x5e, 0x18, 0x63, 0x67, 0x64, 0x2f, 0x06, 0x2c, 0x1b, 0x70, 0x7a, 0x15, 0xbb,
|
||||||
0xcb, 0xc5, 0x8e, 0x77, 0xcb, 0xb0, 0xfa, 0x76, 0x6f, 0x53, 0xf3, 0xf6, 0x66, 0xf0, 0x91, 0x88,
|
0x1d, 0xd3, 0xc1, 0xb6, 0x7b, 0x4b, 0x37, 0x07, 0x56, 0x7f, 0x43, 0x75, 0x77, 0xa7, 0xb0, 0x91,
|
||||||
0xb9, 0xe7, 0x62, 0xe6, 0x2e, 0xff, 0x4e, 0x82, 0xb3, 0xc9, 0xfb, 0xf1, 0xa3, 0xb7, 0xa1, 0xbc,
|
0x90, 0xba, 0xe7, 0x22, 0xea, 0x2e, 0xff, 0x4a, 0x82, 0x33, 0xc9, 0xfb, 0xf1, 0xa3, 0xb7, 0xa1,
|
||||||
0x6b, 0xe0, 0xbe, 0x4e, 0x74, 0x26, 0x51, 0x9d, 0x89, 0x35, 0xf1, 0x95, 0x01, 0x41, 0xe6, 0x27,
|
0xbc, 0xa3, 0xe3, 0x81, 0x46, 0x64, 0x26, 0x51, 0x99, 0x89, 0x31, 0xb1, 0x95, 0x21, 0x01, 0xe6,
|
||||||
0xbc, 0x90, 0x62, 0xa0, 0x5b, 0x9e, 0x63, 0x58, 0xbd, 0x75, 0xc3, 0xf5, 0x14, 0x86, 0x1f, 0xd2,
|
0x27, 0x3c, 0x9f, 0xa2, 0xa0, 0x9b, 0xae, 0xad, 0x9b, 0xfd, 0x35, 0xdd, 0x71, 0x15, 0x06, 0x1f,
|
||||||
0x67, 0x3e, 0xbb, 0x65, 0xfe, 0x50, 0x82, 0xc5, 0x35, 0xec, 0xdd, 0x16, 0xa1, 0x96, 0x7c, 0x37,
|
0x90, 0x67, 0x3e, 0xbb, 0x66, 0x7e, 0x4f, 0x82, 0x85, 0x55, 0xec, 0xde, 0x16, 0xae, 0x96, 0xac,
|
||||||
0x5c, 0xcf, 0xe8, 0xba, 0x4f, 0xb6, 0xc8, 0xc8, 0x90, 0x33, 0xe5, 0x9f, 0x48, 0x70, 0x3e, 0x55,
|
0xeb, 0x8e, 0xab, 0xf7, 0x9c, 0xa7, 0x9b, 0x64, 0x64, 0x88, 0x99, 0xf2, 0x0f, 0x25, 0x38, 0x97,
|
||||||
0x18, 0xae, 0x3a, 0x1e, 0x4a, 0xfc, 0x40, 0x9b, 0x1c, 0x4a, 0xfe, 0x1f, 0x1f, 0x7e, 0xa4, 0xf5,
|
0xca, 0x0c, 0x17, 0x1d, 0x77, 0x25, 0x9e, 0xa3, 0x4d, 0x76, 0x25, 0xff, 0x8b, 0x0f, 0x3e, 0x52,
|
||||||
0x87, 0x78, 0x53, 0x33, 0x1c, 0x16, 0x4a, 0xa6, 0x0c, 0xac, 0x7f, 0x94, 0xe0, 0xdc, 0x1a, 0xf6,
|
0x07, 0x23, 0xbc, 0xa1, 0xea, 0x36, 0x73, 0x25, 0x47, 0x74, 0xac, 0xbf, 0x95, 0xe0, 0xec, 0x2a,
|
||||||
0x36, 0xfd, 0x34, 0xf3, 0x0c, 0xb5, 0x93, 0xa1, 0xa2, 0xf8, 0x31, 0xbb, 0xcc, 0x44, 0x69, 0x9f,
|
0x76, 0x37, 0xbc, 0x30, 0xf3, 0x1c, 0xa5, 0x93, 0x21, 0xa3, 0xf8, 0x01, 0xbb, 0xcc, 0x44, 0x6e,
|
||||||
0x89, 0xfa, 0x16, 0xa9, 0x1f, 0x84, 0x1c, 0xf2, 0x36, 0xab, 0x05, 0xb8, 0xf2, 0xe4, 0xef, 0x49,
|
0x9f, 0x8b, 0xf8, 0x16, 0xa8, 0x1d, 0x04, 0x0c, 0xf2, 0x36, 0xcb, 0x05, 0xb8, 0xf0, 0xe4, 0xef,
|
||||||
0x70, 0xfa, 0xbd, 0xee, 0x83, 0xa1, 0xe1, 0x60, 0x8e, 0xb4, 0x6e, 0x77, 0xf7, 0xa7, 0x57, 0x6d,
|
0x48, 0x70, 0xea, 0x66, 0xef, 0xe1, 0x48, 0xb7, 0x31, 0x07, 0x5a, 0xb3, 0x7a, 0x7b, 0x47, 0x17,
|
||||||
0x50, 0x37, 0xe5, 0x22, 0x75, 0xd3, 0x84, 0x0a, 0x97, 0xca, 0xa1, 0xe0, 0x3e, 0xd6, 0xdc, 0x67,
|
0xad, 0x9f, 0x37, 0xe5, 0x42, 0x79, 0xd3, 0x84, 0x0c, 0x97, 0xf2, 0xa1, 0xe0, 0x01, 0x56, 0x9d,
|
||||||
0x2b, 0xc7, 0xe3, 0x3c, 0xd4, 0x3e, 0xe2, 0xf5, 0x12, 0x4d, 0xab, 0x71, 0xbb, 0x90, 0x92, 0xed,
|
0xe7, 0xcb, 0xc7, 0x93, 0x3c, 0xd4, 0x3e, 0xe2, 0xf9, 0x12, 0x0d, 0xab, 0x51, 0xbd, 0x90, 0x92,
|
||||||
0x22, 0x54, 0x62, 0x25, 0x55, 0x5d, 0x6b, 0x50, 0x77, 0x31, 0xde, 0x9f, 0x26, 0x89, 0xd6, 0x08,
|
0xf5, 0x22, 0x90, 0x62, 0x25, 0x65, 0x5d, 0xab, 0x50, 0x77, 0x30, 0xde, 0x3b, 0x4a, 0x10, 0xad,
|
||||||
0xa1, 0x48, 0x7e, 0xeb, 0x70, 0x7c, 0x68, 0xed, 0x92, 0x32, 0x1f, 0xeb, 0x5c, 0x51, 0xac, 0xda,
|
0x11, 0x44, 0x11, 0xfc, 0xd6, 0x60, 0x6e, 0x64, 0xee, 0x90, 0x34, 0x1f, 0x6b, 0x5c, 0x50, 0x2c,
|
||||||
0x9e, 0x1c, 0x89, 0x47, 0x09, 0xd1, 0xfb, 0x30, 0x1f, 0xe7, 0x55, 0xcc, 0xc4, 0x2b, 0x4e, 0x86,
|
0xdb, 0x9e, 0xec, 0x89, 0xe3, 0x88, 0xe8, 0x03, 0x98, 0x8d, 0xd2, 0x2a, 0x66, 0xa2, 0x15, 0x45,
|
||||||
0x3a, 0xd0, 0xd4, 0x1d, 0x7b, 0x30, 0xc0, 0xba, 0xea, 0xfa, 0xac, 0x4a, 0xd9, 0x58, 0x71, 0x3a,
|
0x43, 0x1d, 0x68, 0x6a, 0xb6, 0x35, 0x1c, 0x62, 0xad, 0xeb, 0x78, 0xa4, 0x4a, 0xd9, 0x48, 0x71,
|
||||||
0x9f, 0x95, 0xfc, 0x85, 0x04, 0x0b, 0xf7, 0x35, 0xaf, 0xbb, 0xb7, 0x6a, 0x72, 0x63, 0x9d, 0xc1,
|
0x3c, 0x8f, 0x94, 0xfc, 0x85, 0x04, 0xf3, 0x0f, 0x54, 0xb7, 0xb7, 0xbb, 0x62, 0x70, 0x65, 0x9d,
|
||||||
0xd5, 0xdf, 0x86, 0xca, 0x43, 0x7e, 0x11, 0x7e, 0x3c, 0x3f, 0x9f, 0x20, 0x50, 0xf8, 0xca, 0x95,
|
0xc2, 0xd4, 0xdf, 0x85, 0xca, 0x23, 0x7e, 0x11, 0x9e, 0x3f, 0x3f, 0x97, 0xc0, 0x50, 0xf0, 0xca,
|
||||||
0x80, 0x42, 0xfe, 0x4a, 0x82, 0x93, 0xb4, 0xa9, 0xf2, 0xa5, 0xfb, 0xfa, 0x83, 0xce, 0x84, 0xc6,
|
0x15, 0x1f, 0x43, 0xfe, 0x4a, 0x82, 0x13, 0xb4, 0xa8, 0xf2, 0xb8, 0xfb, 0xfa, 0x9d, 0xce, 0x84,
|
||||||
0x0a, 0x5d, 0x86, 0x86, 0xa9, 0x39, 0xfb, 0x5b, 0x01, 0x4e, 0x91, 0xe2, 0xc4, 0xa0, 0xf2, 0x23,
|
0xc2, 0x0a, 0x5d, 0x82, 0x86, 0xa1, 0xda, 0x7b, 0x9b, 0x3e, 0x4c, 0x91, 0xc2, 0x44, 0x66, 0xe5,
|
||||||
0x00, 0xbe, 0xda, 0x70, 0x7b, 0x53, 0xc8, 0x7f, 0x13, 0xe6, 0xf8, 0xae, 0x3c, 0xfe, 0x4c, 0xba,
|
0xc7, 0x00, 0x7c, 0xb4, 0xee, 0xf4, 0x8f, 0xc0, 0xff, 0x0d, 0x98, 0xe1, 0xbb, 0x72, 0xff, 0x33,
|
||||||
0x58, 0x1f, 0x5d, 0xfe, 0x87, 0x04, 0x8d, 0x20, 0xa3, 0x50, 0xaf, 0x6a, 0x40, 0x4e, 0xf8, 0x52,
|
0xe9, 0x62, 0x3d, 0x70, 0xf9, 0x2f, 0x12, 0x34, 0xfc, 0x88, 0x42, 0xad, 0xaa, 0x01, 0x39, 0x61,
|
||||||
0xae, 0xb3, 0x8a, 0xde, 0x86, 0x12, 0x6b, 0xb8, 0x39, 0xef, 0x4b, 0x51, 0xde, 0xbc, 0x19, 0x0f,
|
0x4b, 0xb9, 0xce, 0x0a, 0x7a, 0x17, 0x4a, 0xac, 0xe0, 0xe6, 0xb4, 0x2f, 0x86, 0x69, 0xf3, 0x62,
|
||||||
0xa5, 0x25, 0x0a, 0x50, 0x38, 0x11, 0xd1, 0x91, 0x88, 0xc2, 0xc2, 0xab, 0x03, 0x08, 0xea, 0xc0,
|
0x3c, 0x10, 0x96, 0xe8, 0x84, 0xc2, 0x91, 0x88, 0x8c, 0x84, 0x17, 0x16, 0x56, 0xed, 0xcf, 0xa0,
|
||||||
0x7c, 0xb4, 0x88, 0xf5, 0x7d, 0x66, 0x29, 0x2d, 0xfa, 0xae, 0x6a, 0x9e, 0x46, 0x83, 0x6f, 0x23,
|
0x0e, 0xcc, 0x86, 0x93, 0x58, 0xcf, 0x66, 0x16, 0xd3, 0xbc, 0xef, 0x8a, 0xea, 0xaa, 0xd4, 0xf9,
|
||||||
0x52, 0xc3, 0xba, 0xf2, 0x7f, 0x8b, 0x50, 0x0d, 0x9d, 0x72, 0xe4, 0x24, 0xf1, 0x2b, 0xcd, 0x4d,
|
0x36, 0x42, 0x39, 0xac, 0x23, 0xff, 0xa7, 0x08, 0xd5, 0xc0, 0x29, 0x63, 0x27, 0x89, 0x5e, 0x69,
|
||||||
0xce, 0x23, 0xf9, 0xd1, 0x4e, 0xea, 0x12, 0x34, 0x0c, 0x5a, 0xbb, 0xa8, 0xdc, 0x14, 0x69, 0xb2,
|
0x6e, 0x72, 0x1c, 0xc9, 0xc7, 0x2b, 0xa9, 0x8b, 0xd0, 0xd0, 0x69, 0xee, 0xd2, 0xe5, 0xaa, 0x48,
|
||||||
0xa9, 0x28, 0x75, 0x06, 0xe5, 0x7e, 0x81, 0x16, 0xa1, 0x6a, 0x0d, 0x4d, 0xd5, 0xde, 0x55, 0x1d,
|
0x83, 0x4d, 0x45, 0xa9, 0xb3, 0x59, 0x6e, 0x17, 0x68, 0x01, 0xaa, 0xe6, 0xc8, 0xe8, 0x5a, 0x3b,
|
||||||
0xfb, 0xc0, 0xe5, 0x2d, 0x59, 0xc5, 0x1a, 0x9a, 0xdf, 0xd8, 0x55, 0xec, 0x03, 0x37, 0xa8, 0xfa,
|
0x5d, 0xdb, 0xda, 0x77, 0x78, 0x49, 0x56, 0x31, 0x47, 0xc6, 0xff, 0xed, 0x28, 0xd6, 0xbe, 0xe3,
|
||||||
0x4b, 0x47, 0xac, 0xfa, 0x17, 0xa1, 0x6a, 0x6a, 0x8f, 0x08, 0x57, 0xd5, 0x1a, 0x9a, 0xb4, 0x5b,
|
0x67, 0xfd, 0xa5, 0x43, 0x66, 0xfd, 0x0b, 0x50, 0x35, 0xd4, 0xc7, 0x84, 0x6a, 0xd7, 0x1c, 0x19,
|
||||||
0xcb, 0x2b, 0x15, 0x53, 0x7b, 0xa4, 0xd8, 0x07, 0xf7, 0x86, 0x26, 0x5a, 0x86, 0x66, 0x5f, 0x73,
|
0xb4, 0x5a, 0xcb, 0x2b, 0x15, 0x43, 0x7d, 0xac, 0x58, 0xfb, 0xf7, 0x46, 0x06, 0x5a, 0x82, 0xe6,
|
||||||
0x3d, 0x35, 0xdc, 0xee, 0x95, 0x69, 0xbb, 0xd7, 0x20, 0xf0, 0x3b, 0x41, 0xcb, 0x37, 0xda, 0x3f,
|
0x40, 0x75, 0xdc, 0x6e, 0xb0, 0xdc, 0x2b, 0xd3, 0x72, 0xaf, 0x41, 0xe6, 0xef, 0xf8, 0x25, 0x5f,
|
||||||
0x54, 0x66, 0xe8, 0x1f, 0x74, 0xb3, 0x1f, 0x30, 0x82, 0xec, 0xfd, 0x83, 0x6e, 0xf6, 0x05, 0x9b,
|
0xbc, 0x7e, 0xa8, 0x4c, 0x51, 0x3f, 0x68, 0xc6, 0xc0, 0x27, 0x04, 0xd9, 0xeb, 0x07, 0xcd, 0x18,
|
||||||
0x9b, 0x30, 0xb7, 0x43, 0x2b, 0x42, 0xb7, 0x55, 0x4d, 0x8d, 0x50, 0x77, 0x49, 0x31, 0xc8, 0x0a,
|
0x08, 0x32, 0x37, 0x60, 0x66, 0x9b, 0x66, 0x84, 0x4e, 0xab, 0x9a, 0xea, 0xa1, 0xee, 0x92, 0x64,
|
||||||
0x47, 0xc5, 0x47, 0x47, 0x6f, 0x41, 0x85, 0xa6, 0x62, 0x4a, 0x5b, 0xcb, 0x44, 0x1b, 0x10, 0x10,
|
0x90, 0x25, 0x8e, 0x8a, 0x07, 0x8e, 0xde, 0x81, 0x0a, 0x0d, 0xc5, 0x14, 0xb7, 0x96, 0x09, 0xd7,
|
||||||
0x6a, 0x1d, 0xf7, 0x3d, 0x8d, 0x52, 0xd7, 0xb3, 0x51, 0x0b, 0x02, 0xf4, 0x0a, 0x9c, 0xe8, 0x3a,
|
0x47, 0x20, 0xd8, 0x1a, 0x1e, 0xb8, 0x2a, 0xc5, 0xae, 0x67, 0xc3, 0x16, 0x08, 0xe8, 0x35, 0x38,
|
||||||
0x58, 0xf3, 0xb0, 0x7e, 0xeb, 0xf0, 0xb6, 0x6d, 0x0e, 0x34, 0x6a, 0x4c, 0xad, 0xc6, 0x92, 0xb4,
|
0xde, 0xb3, 0xb1, 0xea, 0x62, 0xed, 0xd6, 0xc1, 0x6d, 0xcb, 0x18, 0xaa, 0x54, 0x99, 0x5a, 0x8d,
|
||||||
0x5c, 0x56, 0x92, 0x3e, 0x91, 0xc0, 0xd0, 0x15, 0xab, 0xbb, 0x8e, 0x6d, 0xb6, 0xe6, 0x59, 0x60,
|
0x45, 0x69, 0xa9, 0xac, 0x24, 0x2d, 0x11, 0xc7, 0xd0, 0x13, 0xa3, 0xbb, 0xb6, 0x65, 0xb4, 0x66,
|
||||||
0x88, 0x42, 0xd1, 0x39, 0x00, 0x3f, 0x74, 0x6b, 0x5e, 0xab, 0x49, 0x6f, 0xb1, 0xc2, 0x21, 0xef,
|
0x99, 0x63, 0x08, 0xcf, 0xa2, 0xb3, 0x00, 0x9e, 0xeb, 0x56, 0xdd, 0x56, 0x93, 0xde, 0x62, 0x85,
|
||||||
0x79, 0xf2, 0x67, 0x70, 0x32, 0xb0, 0x90, 0xd0, 0x6d, 0x8c, 0x5e, 0xac, 0x34, 0xed, 0xc5, 0x8e,
|
0xcf, 0xdc, 0x74, 0xe5, 0xcf, 0xe0, 0x84, 0xaf, 0x21, 0x81, 0xdb, 0x88, 0x5f, 0xac, 0x74, 0xd4,
|
||||||
0xaf, 0xe5, 0xff, 0x55, 0x80, 0x85, 0x2d, 0xed, 0x21, 0x7e, 0xfa, 0x6d, 0x43, 0xa6, 0x78, 0xbc,
|
0x8b, 0x1d, 0x9f, 0xcb, 0xff, 0xad, 0x00, 0xf3, 0x9b, 0xea, 0x23, 0xfc, 0xec, 0xcb, 0x86, 0x4c,
|
||||||
0x0e, 0xc7, 0x69, 0xa7, 0xb0, 0x12, 0x92, 0x67, 0x4c, 0x06, 0x0e, 0x5f, 0xe7, 0x28, 0x21, 0x7a,
|
0xfe, 0x78, 0x0d, 0xe6, 0x68, 0xa5, 0xb0, 0x1c, 0xe0, 0x67, 0x4c, 0x04, 0x0e, 0x5e, 0x67, 0x1c,
|
||||||
0x97, 0x94, 0x0e, 0xb8, 0xbb, 0xbf, 0x69, 0x1b, 0x41, 0xf6, 0x3d, 0x97, 0xc0, 0xe7, 0xb6, 0xc0,
|
0x11, 0xbd, 0x4f, 0x52, 0x07, 0xdc, 0xdb, 0xdb, 0xb0, 0x74, 0x3f, 0xfa, 0x9e, 0x4d, 0xa0, 0x73,
|
||||||
0x52, 0xc2, 0x14, 0x68, 0x73, 0x34, 0xb4, 0xb1, 0xbc, 0xfb, 0xc2, 0xd8, 0x7e, 0x34, 0xd0, 0x7e,
|
0x5b, 0x40, 0x29, 0x41, 0x0c, 0xb4, 0x11, 0x77, 0x6d, 0x2c, 0xee, 0xbe, 0x34, 0xb6, 0x1e, 0xf5,
|
||||||
0x3c, 0xc2, 0xa1, 0x16, 0xcc, 0xf1, 0xec, 0x4e, 0xfd, 0xbe, 0xac, 0xf8, 0x4b, 0xb4, 0x09, 0x27,
|
0xa5, 0x1f, 0xf5, 0x70, 0xa8, 0x05, 0x33, 0x3c, 0xba, 0x53, 0xbb, 0x2f, 0x2b, 0xde, 0x10, 0x6d,
|
||||||
0xd8, 0x09, 0xb6, 0xb8, 0x51, 0xb3, 0xc3, 0x97, 0x33, 0x1d, 0x3e, 0x89, 0x34, 0xea, 0x13, 0x95,
|
0xc0, 0x71, 0x76, 0x82, 0x4d, 0xae, 0xd4, 0xec, 0xf0, 0xe5, 0x4c, 0x87, 0x4f, 0x42, 0x0d, 0xdb,
|
||||||
0xa3, 0xfa, 0x44, 0x0b, 0xe6, 0xb8, 0x9d, 0xd2, 0x58, 0x50, 0x56, 0xfc, 0x25, 0xb9, 0x66, 0xc3,
|
0x44, 0xe5, 0xb0, 0x36, 0xd1, 0x82, 0x19, 0xae, 0xa7, 0xd4, 0x17, 0x94, 0x15, 0x6f, 0x48, 0xae,
|
||||||
0x1c, 0xd8, 0x8e, 0x67, 0x58, 0xbd, 0x56, 0x95, 0x7e, 0x0b, 0x00, 0xa4, 0xe5, 0x82, 0x40, 0x9f,
|
0x59, 0x37, 0x86, 0x96, 0xed, 0xea, 0x66, 0xbf, 0x55, 0xa5, 0x6b, 0xfe, 0x04, 0x29, 0xb9, 0xc0,
|
||||||
0x13, 0x26, 0x27, 0xef, 0x40, 0x59, 0x58, 0x78, 0x2e, 0xb3, 0x85, 0x0b, 0x9a, 0x78, 0x8c, 0xce,
|
0x97, 0xe7, 0x84, 0xce, 0xc9, 0x7b, 0x50, 0x16, 0x1a, 0x9e, 0xcb, 0xac, 0xe1, 0x02, 0x27, 0xea,
|
||||||
0xc7, 0x62, 0xb4, 0xfc, 0x4f, 0x09, 0x6a, 0xab, 0xe4, 0x48, 0xeb, 0x76, 0x8f, 0x66, 0x94, 0x4b,
|
0xa3, 0xf3, 0x11, 0x1f, 0x2d, 0xff, 0x55, 0x82, 0xda, 0x0a, 0x39, 0xd2, 0x9a, 0xd5, 0xa7, 0x11,
|
||||||
0xd0, 0x70, 0x70, 0xd7, 0x76, 0x74, 0x15, 0x5b, 0x9e, 0x63, 0x60, 0xd6, 0x9d, 0x17, 0x94, 0x3a,
|
0xe5, 0x22, 0x34, 0x6c, 0xdc, 0xb3, 0x6c, 0xad, 0x8b, 0x4d, 0xd7, 0xd6, 0x31, 0xab, 0xce, 0x0b,
|
||||||
0x83, 0xde, 0x61, 0x40, 0x82, 0x46, 0xc2, 0xae, 0xeb, 0x69, 0xe6, 0x40, 0xdd, 0x25, 0xee, 0x9d,
|
0x4a, 0x9d, 0xcd, 0xde, 0x61, 0x93, 0x04, 0x8c, 0xb8, 0x5d, 0xc7, 0x55, 0x8d, 0x61, 0x77, 0x87,
|
||||||
0x63, 0x68, 0x02, 0x4a, 0xbd, 0xfb, 0x02, 0xd4, 0x02, 0x34, 0xcf, 0xa6, 0xfb, 0x17, 0x94, 0xaa,
|
0x98, 0x77, 0x8e, 0x81, 0x89, 0x59, 0x6a, 0xdd, 0xe7, 0xa1, 0xe6, 0x83, 0xb9, 0x16, 0xdd, 0xbf,
|
||||||
0x80, 0x6d, 0xdb, 0xe8, 0x79, 0x68, 0x50, 0x9d, 0xaa, 0x7d, 0xbb, 0xa7, 0x92, 0x4e, 0x96, 0x27,
|
0xa0, 0x54, 0xc5, 0xdc, 0x96, 0x85, 0x5e, 0x84, 0x06, 0x95, 0x69, 0x77, 0x60, 0xf5, 0xbb, 0xa4,
|
||||||
0x9b, 0x9a, 0xce, 0xc5, 0x22, 0x77, 0x15, 0xc5, 0x72, 0x8d, 0x4f, 0x31, 0x4f, 0x37, 0x02, 0x6b,
|
0x92, 0xe5, 0xc1, 0xa6, 0xa6, 0x71, 0xb6, 0xc8, 0x5d, 0x85, 0xa1, 0x1c, 0xfd, 0x53, 0xcc, 0xc3,
|
||||||
0xcb, 0xf8, 0x14, 0x93, 0x5c, 0x5f, 0x27, 0xb9, 0xf3, 0x9e, 0xad, 0xe3, 0xed, 0x29, 0x2b, 0x8d,
|
0x8d, 0x80, 0xda, 0xd4, 0x3f, 0xc5, 0x24, 0xd6, 0xd7, 0x49, 0xec, 0xbc, 0x67, 0x69, 0x78, 0xeb,
|
||||||
0x0c, 0x53, 0xcc, 0xb3, 0x50, 0x11, 0x27, 0xe0, 0x47, 0x0a, 0x00, 0xe8, 0x2e, 0x34, 0xfc, 0x22,
|
0x88, 0x99, 0x46, 0x86, 0x2e, 0xe6, 0x19, 0xa8, 0x88, 0x13, 0xf0, 0x23, 0xf9, 0x13, 0xe8, 0x2e,
|
||||||
0x54, 0x65, 0xbd, 0x56, 0x21, 0xb5, 0xf2, 0x0b, 0x65, 0x3f, 0x57, 0xa9, 0xfb, 0x64, 0x74, 0x29,
|
0x34, 0xbc, 0x24, 0xb4, 0xcb, 0x6a, 0xad, 0x42, 0x6a, 0xe6, 0x17, 0x88, 0x7e, 0x8e, 0x52, 0xf7,
|
||||||
0xdf, 0x85, 0x5a, 0xf8, 0x33, 0xd9, 0x75, 0x2b, 0x6e, 0x28, 0x02, 0x40, 0xac, 0xf1, 0xde, 0xd0,
|
0xd0, 0xe8, 0x50, 0xbe, 0x0b, 0xb5, 0xe0, 0x32, 0xd9, 0x75, 0x33, 0xaa, 0x28, 0x62, 0x82, 0x68,
|
||||||
0x24, 0x77, 0xca, 0x03, 0x8b, 0xbf, 0x94, 0x3f, 0x97, 0xa0, 0xce, 0x53, 0xf6, 0x96, 0x98, 0xb2,
|
0xe3, 0xbd, 0x91, 0x41, 0xee, 0x94, 0x3b, 0x16, 0x6f, 0x28, 0x7f, 0x2e, 0x41, 0x9d, 0x87, 0xec,
|
||||||
0xd3, 0xa3, 0x49, 0xf4, 0x68, 0xf4, 0x6f, 0xf4, 0x7f, 0xd1, 0x11, 0xdd, 0xf3, 0x89, 0x41, 0x80,
|
0x4d, 0xd1, 0x65, 0xa7, 0x47, 0x93, 0xe8, 0xd1, 0xe8, 0x6f, 0xf4, 0x3f, 0xe1, 0x16, 0xdd, 0x8b,
|
||||||
0x32, 0xa1, 0xd5, 0x71, 0x24, 0x5f, 0x67, 0xe9, 0xed, 0x1f, 0x13, 0x43, 0xe3, 0x57, 0x43, 0x0d,
|
0x89, 0x4e, 0x80, 0x12, 0xa1, 0xd9, 0x71, 0x28, 0x5e, 0x67, 0xa9, 0xed, 0x9f, 0x10, 0x45, 0xe3,
|
||||||
0xad, 0x05, 0x73, 0x9a, 0xae, 0x3b, 0xd8, 0x75, 0xb9, 0x1c, 0xfe, 0x92, 0x7c, 0x79, 0x88, 0x1d,
|
0x57, 0x43, 0x15, 0xad, 0x05, 0x33, 0xaa, 0xa6, 0xd9, 0xd8, 0x71, 0x38, 0x1f, 0xde, 0x90, 0xac,
|
||||||
0xd7, 0x37, 0xf9, 0xbc, 0xe2, 0x2f, 0xd1, 0x5b, 0x50, 0x16, 0xe5, 0x74, 0x3e, 0xa9, 0x84, 0x0a,
|
0x3c, 0xc2, 0xb6, 0xe3, 0xa9, 0x7c, 0x5e, 0xf1, 0x86, 0xe8, 0x1d, 0x28, 0x8b, 0x74, 0x3a, 0x9f,
|
||||||
0xcb, 0xc9, 0x7b, 0x51, 0x41, 0x21, 0xff, 0x39, 0x07, 0x0d, 0xae, 0xb0, 0x5b, 0x3c, 0xa7, 0x8e,
|
0x94, 0x42, 0x05, 0xf9, 0xe4, 0xb5, 0xa8, 0xc0, 0x90, 0x7f, 0x9f, 0x83, 0x06, 0x17, 0xd8, 0x2d,
|
||||||
0x77, 0xbe, 0x5b, 0x50, 0xdb, 0x0d, 0x7c, 0x7f, 0xdc, 0xcc, 0x29, 0x1c, 0x22, 0x22, 0x34, 0x93,
|
0x1e, 0x53, 0xc7, 0x1b, 0xdf, 0x2d, 0xa8, 0xed, 0xf8, 0xb6, 0x3f, 0xae, 0xe7, 0x14, 0x74, 0x11,
|
||||||
0x1c, 0x30, 0x9a, 0xd5, 0x0b, 0x33, 0x65, 0xf5, 0xe2, 0x51, 0x23, 0xd8, 0x68, 0x9d, 0x57, 0x4a,
|
0x21, 0x9c, 0x49, 0x06, 0x18, 0x8e, 0xea, 0x85, 0xa9, 0xa2, 0x7a, 0xf1, 0xb0, 0x1e, 0x2c, 0x9e,
|
||||||
0xa8, 0xf3, 0xe4, 0x6f, 0x43, 0x35, 0xc4, 0x80, 0x46, 0x68, 0x36, 0xac, 0xe2, 0x1a, 0xf3, 0x97,
|
0xe7, 0x95, 0x12, 0xf2, 0x3c, 0xf9, 0x9b, 0x50, 0x0d, 0x10, 0xa0, 0x1e, 0x9a, 0x35, 0xab, 0xb8,
|
||||||
0xe8, 0x46, 0x50, 0xdb, 0x30, 0x55, 0x9d, 0x4e, 0x90, 0x25, 0x56, 0xd6, 0xc8, 0xbf, 0x97, 0xa0,
|
0xc4, 0xbc, 0x21, 0xba, 0xee, 0xe7, 0x36, 0x4c, 0x54, 0xa7, 0x12, 0x78, 0x89, 0xa4, 0x35, 0xf2,
|
||||||
0xc4, 0x39, 0x9f, 0x87, 0x2a, 0x0f, 0x3a, 0xb4, 0xee, 0x63, 0xdc, 0x81, 0x83, 0x48, 0xe1, 0xf7,
|
0xaf, 0x25, 0x28, 0x71, 0xca, 0xe7, 0xa0, 0xca, 0x9d, 0x0e, 0xcd, 0xfb, 0x18, 0x75, 0xe0, 0x53,
|
||||||
0xe4, 0xa2, 0xce, 0x69, 0x28, 0xc7, 0xe2, 0xcd, 0x1c, 0x4f, 0x0b, 0xfe, 0xa7, 0x50, 0x90, 0x21,
|
0x24, 0xf1, 0x7b, 0x7a, 0x5e, 0xe7, 0x14, 0x94, 0x23, 0xfe, 0x66, 0x86, 0x87, 0x05, 0x6f, 0x29,
|
||||||
0x9f, 0x68, 0x7c, 0xf9, 0x4a, 0xa2, 0x83, 0x76, 0x05, 0x77, 0xed, 0x87, 0xd8, 0x39, 0x9c, 0x7d,
|
0xe0, 0x64, 0xc8, 0x12, 0xf5, 0x2f, 0x5f, 0x49, 0xb4, 0xd1, 0xae, 0xe0, 0x9e, 0xf5, 0x08, 0xdb,
|
||||||
0x9c, 0xf9, 0x66, 0xc8, 0xa0, 0x33, 0xf6, 0x87, 0x82, 0x00, 0xbd, 0x19, 0xa8, 0x3b, 0x9f, 0x34,
|
0x07, 0xd3, 0xb7, 0x33, 0xdf, 0x0e, 0x28, 0x74, 0xc6, 0xfa, 0x50, 0x20, 0xa0, 0xb7, 0x7d, 0x71,
|
||||||
0xcd, 0x09, 0x47, 0x18, 0x6e, 0x8e, 0x81, 0xda, 0x7f, 0xca, 0x06, 0xb3, 0xd1, 0xa3, 0x4c, 0x5b,
|
0xe7, 0x93, 0xba, 0x39, 0x41, 0x0f, 0xc3, 0xd5, 0xd1, 0x17, 0xfb, 0x8f, 0x58, 0x63, 0x36, 0x7c,
|
||||||
0xd7, 0x3c, 0x91, 0xb6, 0x43, 0xfe, 0xb9, 0x04, 0xa7, 0xd7, 0xb0, 0x77, 0x37, 0xda, 0xdc, 0x3f,
|
0x94, 0xa3, 0xe6, 0x35, 0x4f, 0xa5, 0xec, 0x90, 0x7f, 0x22, 0xc1, 0xa9, 0x55, 0xec, 0xde, 0x0d,
|
||||||
0x6b, 0xa9, 0x4c, 0x68, 0x27, 0x09, 0x35, 0xcb, 0xad, 0xb7, 0xa1, 0x2c, 0xc6, 0x14, 0x6c, 0x64,
|
0x17, 0xf7, 0xcf, 0x9b, 0x2b, 0x03, 0xda, 0x49, 0x4c, 0x4d, 0x73, 0xeb, 0x6d, 0x28, 0x8b, 0x36,
|
||||||
0x2e, 0xd6, 0xf2, 0xf7, 0x25, 0x68, 0xf1, 0x5d, 0xe8, 0x9e, 0xa4, 0xa4, 0xee, 0x63, 0x0f, 0xeb,
|
0x05, 0x6b, 0x99, 0x8b, 0xb1, 0xfc, 0x5d, 0x09, 0x5a, 0x7c, 0x17, 0xba, 0x27, 0x49, 0xa9, 0x07,
|
||||||
0x5f, 0x77, 0xdf, 0xfc, 0x77, 0x09, 0x9a, 0xe1, 0x88, 0x4f, 0x83, 0xf6, 0xeb, 0x50, 0xa4, 0xe3,
|
0xd8, 0xc5, 0xda, 0xd7, 0x5d, 0x37, 0xff, 0x59, 0x82, 0x66, 0xd0, 0xe3, 0x53, 0xa7, 0xfd, 0x26,
|
||||||
0x09, 0x2e, 0xc1, 0x44, 0x63, 0x65, 0xd8, 0x24, 0x64, 0xd0, 0x32, 0x6f, 0x5b, 0x24, 0x27, 0xbe,
|
0x14, 0x69, 0x7b, 0x82, 0x73, 0x30, 0x51, 0x59, 0x19, 0x34, 0x71, 0x19, 0x34, 0xcd, 0xdb, 0x12,
|
||||||
0x0c, 0xd2, 0x4e, 0xfe, 0xe8, 0x69, 0x87, 0xa7, 0x61, 0x7b, 0x48, 0xf8, 0xb2, 0x71, 0x68, 0x00,
|
0xc1, 0x89, 0x0f, 0xfd, 0xb0, 0x93, 0x3f, 0x7c, 0xd8, 0xe1, 0x61, 0xd8, 0x1a, 0x11, 0xba, 0xac,
|
||||||
0x90, 0xbf, 0xcc, 0x41, 0x2b, 0xe8, 0x47, 0xbe, 0xf6, 0xb8, 0x9f, 0x52, 0xad, 0xe6, 0x9f, 0x50,
|
0x1d, 0xea, 0x4f, 0xc8, 0x5f, 0xe6, 0xa0, 0xe5, 0xd7, 0x23, 0x5f, 0xbb, 0xdf, 0x4f, 0xc9, 0x56,
|
||||||
0xb5, 0x5a, 0x98, 0x3d, 0xd6, 0x17, 0x93, 0x62, 0xfd, 0xdf, 0x72, 0xd0, 0x08, 0xb4, 0xb6, 0xd9,
|
0xf3, 0x4f, 0x29, 0x5b, 0x2d, 0x4c, 0xef, 0xeb, 0x8b, 0x49, 0xbe, 0xfe, 0x4f, 0x39, 0x68, 0xf8,
|
||||||
0xd7, 0x2c, 0xb4, 0x00, 0xa5, 0x41, 0x5f, 0x0b, 0xa6, 0x8f, 0x7c, 0x85, 0xb6, 0x44, 0x9d, 0x13,
|
0x52, 0xdb, 0x18, 0xa8, 0x26, 0x9a, 0x87, 0xd2, 0x70, 0xa0, 0xfa, 0xdd, 0x47, 0x3e, 0x42, 0x9b,
|
||||||
0xd5, 0xd3, 0x4b, 0x49, 0x77, 0x98, 0x72, 0x11, 0x4a, 0x8c, 0x05, 0x69, 0x07, 0x59, 0x43, 0x41,
|
0x22, 0xcf, 0x09, 0xcb, 0xe9, 0x95, 0xa4, 0x3b, 0x4c, 0xb9, 0x08, 0x25, 0x42, 0x82, 0x94, 0x83,
|
||||||
0x9b, 0x7a, 0x5e, 0x5b, 0x31, 0x63, 0x21, 0xfd, 0xfc, 0x55, 0x40, 0xfc, 0x86, 0x55, 0xc3, 0x52,
|
0xac, 0xa0, 0xa0, 0x45, 0x3d, 0xcf, 0xad, 0x98, 0xb2, 0x90, 0x7a, 0xfe, 0x0a, 0x20, 0x7e, 0xc3,
|
||||||
0x5d, 0xdc, 0xb5, 0x2d, 0x9d, 0xdd, 0x7d, 0x51, 0x69, 0xf2, 0x2f, 0x1d, 0x6b, 0x8b, 0xc1, 0xd1,
|
0x5d, 0xdd, 0xec, 0x3a, 0xb8, 0x67, 0x99, 0x1a, 0xbb, 0xfb, 0xa2, 0xd2, 0xe4, 0x2b, 0x1d, 0x73,
|
||||||
0xeb, 0x50, 0xf0, 0x0e, 0x07, 0x2c, 0x8a, 0x37, 0x12, 0xa3, 0x63, 0x20, 0xd7, 0xf6, 0xe1, 0x00,
|
0x93, 0xcd, 0xa3, 0x37, 0xa1, 0xe0, 0x1e, 0x0c, 0x99, 0x17, 0x6f, 0x24, 0x7a, 0x47, 0x9f, 0xaf,
|
||||||
0x2b, 0x14, 0x1d, 0x2d, 0x02, 0x10, 0x56, 0x9e, 0xa3, 0x3d, 0xe4, 0x29, 0xb1, 0xa0, 0x84, 0x20,
|
0xad, 0x83, 0x21, 0x56, 0x28, 0x38, 0x5a, 0x00, 0x20, 0xa4, 0x5c, 0x5b, 0x7d, 0xc4, 0x43, 0x62,
|
||||||
0xc4, 0x9a, 0x7d, 0x1d, 0xce, 0xb1, 0xd4, 0xc1, 0x97, 0xf2, 0x5f, 0x72, 0xd0, 0x0c, 0x58, 0x2a,
|
0x41, 0x09, 0xcc, 0x10, 0x6d, 0xf6, 0x64, 0x38, 0xc3, 0x42, 0x07, 0x1f, 0xca, 0x7f, 0xc8, 0x41,
|
||||||
0xd8, 0x1d, 0xf6, 0xbd, 0x54, 0xfd, 0x8d, 0x6f, 0x06, 0x27, 0xd5, 0x0d, 0xef, 0x42, 0x95, 0xdf,
|
0xd3, 0x27, 0xa9, 0x60, 0x67, 0x34, 0x70, 0x53, 0xe5, 0x37, 0xbe, 0x18, 0x9c, 0x94, 0x37, 0xbc,
|
||||||
0xe7, 0x11, 0xec, 0x01, 0x18, 0xc9, 0xfa, 0x18, 0x03, 0x2d, 0x3e, 0x21, 0x03, 0x2d, 0x1d, 0xd1,
|
0x0f, 0x55, 0x7e, 0x9f, 0x87, 0xd0, 0x07, 0x60, 0x28, 0x6b, 0x63, 0x14, 0xb4, 0xf8, 0x94, 0x14,
|
||||||
0x40, 0xe5, 0x2d, 0x58, 0xf0, 0xe3, 0x5e, 0x80, 0xb0, 0x81, 0x3d, 0x6d, 0x4c, 0xc1, 0x71, 0x1e,
|
0xb4, 0x74, 0x48, 0x05, 0x95, 0x37, 0x61, 0xde, 0xf3, 0x7b, 0x3e, 0xc0, 0x3a, 0x76, 0xd5, 0x31,
|
||||||
0xaa, 0x2c, 0x9f, 0xb1, 0x44, 0xce, 0x4a, 0x75, 0xd8, 0x11, 0x1d, 0xae, 0xfc, 0x1d, 0x38, 0x49,
|
0x09, 0xc7, 0x39, 0xa8, 0xb2, 0x78, 0xc6, 0x02, 0x39, 0x4b, 0xd5, 0x61, 0x5b, 0x54, 0xb8, 0xf2,
|
||||||
0xe3, 0x46, 0x7c, 0x94, 0x9b, 0x65, 0xae, 0x2e, 0x8b, 0x46, 0x80, 0x14, 0xfd, 0xcc, 0xba, 0x2b,
|
0xb7, 0xe0, 0x04, 0xf5, 0x1b, 0xd1, 0x56, 0x6e, 0x96, 0xbe, 0xba, 0x2c, 0x0a, 0x01, 0x92, 0xf4,
|
||||||
0x4a, 0x04, 0x26, 0xaf, 0xc3, 0x73, 0x31, 0xfe, 0x33, 0xe4, 0x05, 0x52, 0x0a, 0x2d, 0x6c, 0x45,
|
0x33, 0xed, 0xae, 0x28, 0xa1, 0x39, 0x79, 0x0d, 0x5e, 0x88, 0xd0, 0x9f, 0x22, 0x2e, 0x90, 0x54,
|
||||||
0x7f, 0x26, 0x9e, 0x3e, 0xfb, 0x9d, 0x13, 0x93, 0x5b, 0xd5, 0xd0, 0xe3, 0xf6, 0xa5, 0xa3, 0x77,
|
0x68, 0x7e, 0x33, 0xfc, 0x99, 0xf8, 0xe8, 0xd1, 0xef, 0xac, 0xe8, 0xdc, 0x76, 0x75, 0x2d, 0xaa,
|
||||||
0xa0, 0x62, 0xe1, 0x03, 0x35, 0x1c, 0x7c, 0x33, 0x0c, 0xe8, 0xca, 0x16, 0x3e, 0xa0, 0x7f, 0xc9,
|
0x5f, 0x1a, 0x7a, 0x0f, 0x2a, 0x26, 0xde, 0xef, 0x06, 0x9d, 0x6f, 0x86, 0x06, 0x5d, 0xd9, 0xc4,
|
||||||
0xf7, 0xe0, 0xd4, 0x88, 0xa8, 0xb3, 0x9c, 0xfd, 0xaf, 0x12, 0x9c, 0x5e, 0x75, 0xec, 0xc1, 0x47,
|
0xfb, 0xf4, 0x97, 0x7c, 0x0f, 0x4e, 0xc6, 0x58, 0x9d, 0xe6, 0xec, 0x7f, 0x94, 0xe0, 0xd4, 0x8a,
|
||||||
0x86, 0xe3, 0x0d, 0xb5, 0x7e, 0xf4, 0x87, 0xa2, 0xa7, 0xd3, 0xc6, 0xbd, 0x1f, 0x4a, 0xc3, 0x2c,
|
0x6d, 0x0d, 0x3f, 0xd2, 0x6d, 0x77, 0xa4, 0x0e, 0xc2, 0x1f, 0x8a, 0x9e, 0x4d, 0x19, 0xf7, 0x41,
|
||||||
0x2e, 0x5f, 0x4d, 0x30, 0xd7, 0x51, 0xa1, 0xf8, 0xa1, 0x43, 0x49, 0xfb, 0x3f, 0xf9, 0x24, 0xe1,
|
0x20, 0x0c, 0x33, 0xbf, 0x7c, 0x25, 0x41, 0x5d, 0xe3, 0x4c, 0xf1, 0x43, 0x07, 0x82, 0xf6, 0x3f,
|
||||||
0x39, 0xde, 0x84, 0x64, 0x93, 0xa5, 0x4a, 0x49, 0x9c, 0xfa, 0xe4, 0xa7, 0x9d, 0xfa, 0xa4, 0x78,
|
0xf3, 0x49, 0xcc, 0x73, 0xb8, 0x09, 0xc1, 0x26, 0x4b, 0x96, 0x92, 0xd8, 0xf5, 0xc9, 0x1f, 0xb5,
|
||||||
0x7e, 0xe1, 0x09, 0x79, 0xfe, 0x91, 0xdb, 0x90, 0xf7, 0x21, 0x3a, 0x91, 0xa3, 0x21, 0x77, 0xaa,
|
0xeb, 0x93, 0x62, 0xf9, 0x85, 0xa7, 0x64, 0xf9, 0x87, 0x2e, 0x43, 0x3e, 0x80, 0x70, 0x47, 0x8e,
|
||||||
0x51, 0xde, 0x2d, 0x80, 0x60, 0x3a, 0xc5, 0x5f, 0xf9, 0x64, 0x61, 0x13, 0xa2, 0x22, 0xb7, 0x25,
|
0xba, 0xdc, 0x23, 0xb5, 0xf2, 0x6e, 0x01, 0xf8, 0xdd, 0x29, 0xfe, 0xca, 0x27, 0x0b, 0x99, 0x00,
|
||||||
0xa2, 0x2c, 0x9d, 0x2a, 0x47, 0xe6, 0x25, 0x1f, 0x40, 0x3b, 0xc9, 0x4a, 0x67, 0xb1, 0xfc, 0x2f,
|
0x16, 0xb9, 0x2d, 0xe1, 0x65, 0x69, 0x57, 0x39, 0xd4, 0x2f, 0xb9, 0x0f, 0xed, 0x24, 0x2d, 0x9d,
|
||||||
0x73, 0x00, 0x1d, 0x3a, 0x1d, 0xda, 0xd6, 0xdc, 0xfd, 0xe9, 0x2a, 0xca, 0x8b, 0x50, 0x0f, 0x0c,
|
0x46, 0xf3, 0xbf, 0xcc, 0x01, 0x74, 0x68, 0x77, 0x68, 0x4b, 0x75, 0xf6, 0x8e, 0x96, 0x51, 0x5e,
|
||||||
0x26, 0xf0, 0xf7, 0xb0, 0x15, 0xe9, 0xc4, 0x25, 0x44, 0x61, 0x4b, 0x70, 0x46, 0x8a, 0x5d, 0x9d,
|
0x80, 0xba, 0xaf, 0x30, 0xbe, 0xbd, 0x07, 0xb5, 0x48, 0x23, 0x26, 0x21, 0x12, 0x5b, 0x02, 0x13,
|
||||||
0xf2, 0x09, 0x79, 0x0d, 0x33, 0x8a, 0x58, 0xd0, 0x43, 0x67, 0xa0, 0xe2, 0xd8, 0x07, 0x2a, 0x71,
|
0x4b, 0x76, 0x35, 0x4a, 0x27, 0x60, 0x35, 0x4c, 0x29, 0x22, 0x4e, 0x0f, 0x9d, 0x86, 0x8a, 0x6d,
|
||||||
0x33, 0x9d, 0xe6, 0xd6, 0xb2, 0x52, 0x76, 0xec, 0x03, 0xe2, 0x7c, 0x3a, 0x3a, 0x05, 0x73, 0x9e,
|
0xed, 0x77, 0x89, 0x99, 0x69, 0x34, 0xb6, 0x96, 0x95, 0xb2, 0x6d, 0xed, 0x13, 0xe3, 0xd3, 0xd0,
|
||||||
0xe6, 0xee, 0x13, 0xfe, 0x25, 0x96, 0xee, 0xc8, 0xb2, 0xa3, 0xa3, 0x93, 0x50, 0xdc, 0x35, 0xfa,
|
0x49, 0x98, 0x71, 0x55, 0x67, 0x8f, 0xd0, 0x2f, 0xb1, 0x70, 0x47, 0x86, 0x1d, 0x0d, 0x9d, 0x80,
|
||||||
0xd8, 0x6d, 0xcd, 0x51, 0x96, 0x6c, 0x81, 0xde, 0xf0, 0xdf, 0x73, 0x94, 0x33, 0xff, 0x1e, 0xcd,
|
0xe2, 0x8e, 0x3e, 0xc0, 0x4e, 0x6b, 0x86, 0x92, 0x64, 0x03, 0xf4, 0x96, 0xf7, 0x9e, 0xa3, 0x9c,
|
||||||
0x9e, 0x74, 0x7c, 0x25, 0xc1, 0x7c, 0xa0, 0x35, 0x1a, 0x80, 0x48, 0x4c, 0xa3, 0xf1, 0xec, 0xb6,
|
0xf9, 0x7b, 0x34, 0x7b, 0xd2, 0xf1, 0x95, 0x04, 0xb3, 0xbe, 0xd4, 0xa8, 0x03, 0x22, 0x3e, 0x8d,
|
||||||
0xad, 0xb3, 0x50, 0xd1, 0x48, 0xf9, 0x89, 0x85, 0x11, 0xb2, 0xa8, 0x15, 0x90, 0x8c, 0xab, 0xcb,
|
0xfa, 0xb3, 0xdb, 0x96, 0xc6, 0x5c, 0x45, 0x23, 0xe5, 0x13, 0x0b, 0x43, 0x64, 0x5e, 0xcb, 0x47,
|
||||||
0xc9, 0xb9, 0xc8, 0xa1, 0x0d, 0xdd, 0xff, 0x85, 0xa7, 0xe4, 0xd8, 0x07, 0x1d, 0x5d, 0x68, 0x83,
|
0x19, 0x97, 0x97, 0x93, 0x73, 0x91, 0x43, 0xeb, 0x9a, 0xf7, 0x85, 0xa7, 0x64, 0x5b, 0xfb, 0x1d,
|
||||||
0x3d, 0x6b, 0x63, 0x55, 0x28, 0xd1, 0xc6, 0x6d, 0xfa, 0xb2, 0xed, 0x22, 0xd4, 0xb1, 0xe3, 0xd8,
|
0x4d, 0x48, 0x83, 0x3d, 0x6b, 0x63, 0x59, 0x28, 0x91, 0xc6, 0x6d, 0xfa, 0xb2, 0xed, 0x02, 0xd4,
|
||||||
0x8e, 0x6a, 0x62, 0xd7, 0xd5, 0x7a, 0x98, 0x17, 0x5d, 0x35, 0x0a, 0xdc, 0x60, 0x30, 0xf9, 0xdf,
|
0xb1, 0x6d, 0x5b, 0x76, 0xd7, 0xc0, 0x8e, 0xa3, 0xf6, 0x31, 0x4f, 0xba, 0x6a, 0x74, 0x72, 0x9d,
|
||||||
0x79, 0x68, 0x04, 0x47, 0xf1, 0x7f, 0xd7, 0x31, 0x74, 0xff, 0x77, 0x1d, 0x43, 0x27, 0xc1, 0xdc,
|
0xcd, 0xc9, 0xff, 0xc8, 0x43, 0xc3, 0x3f, 0x8a, 0xf7, 0x5d, 0x47, 0xd7, 0xbc, 0xef, 0x3a, 0xba,
|
||||||
0x61, 0xa1, 0x30, 0x14, 0xcc, 0x39, 0xa4, 0xa3, 0x93, 0x3c, 0x48, 0x1c, 0xcc, 0xb2, 0x75, 0x1c,
|
0x46, 0x9c, 0xb9, 0xcd, 0x5c, 0x61, 0xc0, 0x99, 0xf3, 0x99, 0x8e, 0x46, 0xe2, 0x20, 0x31, 0x30,
|
||||||
0x5c, 0x2c, 0xf8, 0x20, 0x7e, 0xaf, 0x11, 0xfb, 0x28, 0x64, 0xb0, 0x8f, 0x62, 0x06, 0xfb, 0x28,
|
0xd3, 0xd2, 0xb0, 0x7f, 0xb1, 0xe0, 0x4d, 0xf1, 0x7b, 0x0d, 0xe9, 0x47, 0x21, 0x83, 0x7e, 0x14,
|
||||||
0x25, 0xd8, 0xc7, 0x02, 0x94, 0x76, 0x86, 0xdd, 0x7d, 0xec, 0xf1, 0xf2, 0x88, 0xaf, 0xa2, 0x76,
|
0x33, 0xe8, 0x47, 0x29, 0x41, 0x3f, 0xe6, 0xa1, 0xb4, 0x3d, 0xea, 0xed, 0x61, 0x97, 0xa7, 0x47,
|
||||||
0x53, 0x8e, 0xd9, 0x8d, 0x30, 0x8f, 0x4a, 0xd8, 0x3c, 0xce, 0x40, 0x85, 0xfd, 0xb8, 0xa0, 0x7a,
|
0x7c, 0x14, 0xd6, 0x9b, 0x72, 0x44, 0x6f, 0x84, 0x7a, 0x54, 0x82, 0xea, 0x71, 0x1a, 0x2a, 0xec,
|
||||||
0x2e, 0x9d, 0xb2, 0xe6, 0x95, 0x32, 0x03, 0x6c, 0xbb, 0xe8, 0xa6, 0xdf, 0x3b, 0x54, 0x93, 0x1c,
|
0xe3, 0x42, 0xd7, 0x75, 0x68, 0x97, 0x35, 0xaf, 0x94, 0xd9, 0xc4, 0x96, 0x83, 0x6e, 0x78, 0xb5,
|
||||||
0x9d, 0x46, 0x9c, 0x98, 0x85, 0xf8, 0x9d, 0xc3, 0x4d, 0x68, 0xed, 0xe1, 0xa1, 0x43, 0xdf, 0x46,
|
0x43, 0x35, 0xc9, 0xd0, 0xa9, 0xc7, 0x89, 0x68, 0x88, 0x57, 0x39, 0xdc, 0x80, 0xd6, 0x2e, 0x1e,
|
||||||
0xa8, 0xf4, 0xf1, 0xee, 0x83, 0x21, 0x76, 0x0e, 0xb5, 0x9d, 0x3e, 0x6e, 0xd5, 0xa8, 0x60, 0x0b,
|
0xd9, 0xf4, 0x6d, 0x44, 0x97, 0x3e, 0xde, 0x7d, 0x38, 0xc2, 0xf6, 0x81, 0xba, 0x3d, 0xc0, 0xad,
|
||||||
0xe2, 0xfb, 0xaa, 0xe6, 0x69, 0x1f, 0xf8, 0x5f, 0xd1, 0x6b, 0xb0, 0x10, 0xa3, 0x34, 0x2c, 0x1d,
|
0x1a, 0x65, 0x6c, 0x5e, 0xac, 0xaf, 0xa8, 0xae, 0x7a, 0xdf, 0x5b, 0x45, 0x6f, 0xc0, 0x7c, 0x04,
|
||||||
0x3f, 0xc2, 0x7a, 0xab, 0x4e, 0xe9, 0x4e, 0x46, 0xe8, 0x3a, 0xec, 0x9b, 0xfc, 0x09, 0xa0, 0x40,
|
0x53, 0x37, 0x35, 0xfc, 0x18, 0x6b, 0xad, 0x3a, 0xc5, 0x3b, 0x11, 0xc2, 0xeb, 0xb0, 0x35, 0xf9,
|
||||||
0x92, 0xd9, 0x7a, 0xc7, 0xd8, 0x55, 0xe7, 0xe2, 0x57, 0x2d, 0xff, 0x41, 0x82, 0xe3, 0xe1, 0xcd,
|
0x13, 0x40, 0x3e, 0x27, 0xd3, 0xd5, 0x8e, 0x91, 0xab, 0xce, 0x45, 0xaf, 0x5a, 0xfe, 0x8d, 0x04,
|
||||||
0xa6, 0x4d, 0xa0, 0xef, 0x40, 0x95, 0xcd, 0xac, 0x55, 0xe2, 0xc0, 0xbc, 0x7b, 0x3c, 0x37, 0x56,
|
0x73, 0xc1, 0xcd, 0x8e, 0x1a, 0x40, 0xdf, 0x83, 0x2a, 0xeb, 0x59, 0x77, 0x89, 0x01, 0xf3, 0xea,
|
||||||
0xc7, 0x0a, 0x18, 0x41, 0x1c, 0xbb, 0x08, 0xf5, 0x03, 0xdb, 0xd9, 0x37, 0xac, 0x9e, 0x4a, 0x24,
|
0xf1, 0xec, 0x58, 0x19, 0x2b, 0xa0, 0xfb, 0x7e, 0xec, 0x02, 0xd4, 0xf7, 0x2d, 0x7b, 0x4f, 0x37,
|
||||||
0xf3, 0xdd, 0xa6, 0xc6, 0x81, 0xf7, 0x08, 0x4c, 0xfe, 0x42, 0x82, 0xc5, 0x0f, 0x07, 0xba, 0xe6,
|
0xfb, 0x5d, 0xc2, 0x99, 0x67, 0x36, 0x35, 0x3e, 0x79, 0x8f, 0xcc, 0xc9, 0x5f, 0x48, 0xb0, 0xf0,
|
||||||
0xe1, 0x50, 0x25, 0x31, 0xeb, 0x03, 0x9b, 0xd7, 0xfd, 0x37, 0x2e, 0xb9, 0x6c, 0x73, 0x57, 0x86,
|
0xe1, 0x50, 0x53, 0x5d, 0x1c, 0xc8, 0x24, 0xa6, 0x7d, 0x60, 0xf3, 0xa6, 0xf7, 0xc6, 0x25, 0x97,
|
||||||
0x2d, 0x6f, 0xc0, 0x69, 0x05, 0xbb, 0xd8, 0xd2, 0x23, 0x1f, 0xa7, 0x95, 0x42, 0x1e, 0x40, 0x3b,
|
0xad, 0xef, 0xca, 0xa0, 0xe5, 0x75, 0x38, 0xa5, 0x60, 0x07, 0x9b, 0x5a, 0x68, 0xf1, 0xa8, 0x5c,
|
||||||
0x89, 0xdd, 0x2c, 0x77, 0xcf, 0x4a, 0x3a, 0xd5, 0x21, 0x6c, 0x3d, 0x1e, 0xa1, 0x48, 0x25, 0x41,
|
0xc8, 0x43, 0x68, 0x27, 0x91, 0x9b, 0xe6, 0xee, 0x59, 0x4a, 0xd7, 0xb5, 0x09, 0x59, 0x97, 0x7b,
|
||||||
0xf7, 0xf1, 0xae, 0xfc, 0x52, 0x82, 0xe3, 0x23, 0xcd, 0x32, 0x6a, 0x00, 0x7c, 0x68, 0x75, 0xf9,
|
0x28, 0x92, 0x49, 0xd0, 0x7d, 0x5c, 0xf9, 0x5f, 0x12, 0xcc, 0xdd, 0xd4, 0xbc, 0xfd, 0x9e, 0x59,
|
||||||
0x14, 0xa1, 0x79, 0x0c, 0xd5, 0xa0, 0xec, 0xcf, 0x14, 0x9a, 0x12, 0xaa, 0xc2, 0xdc, 0xb6, 0x4d,
|
0xe6, 0x18, 0xcd, 0xac, 0xf2, 0xf1, 0xcc, 0xea, 0x69, 0xb9, 0x1b, 0xee, 0x74, 0xcd, 0x91, 0xe1,
|
||||||
0xb1, 0x9b, 0x39, 0xd4, 0x84, 0x1a, 0x23, 0x1c, 0x76, 0xbb, 0xd8, 0x75, 0x9b, 0x79, 0x01, 0xb9,
|
0x05, 0x13, 0x9b, 0x7e, 0x01, 0xbe, 0xfc, 0x33, 0x09, 0xe6, 0x62, 0x7d, 0x01, 0xd4, 0x00, 0xf8,
|
||||||
0xab, 0x19, 0xfd, 0xa1, 0x83, 0x9b, 0x05, 0x54, 0x87, 0xca, 0xb6, 0xcd, 0xdf, 0xca, 0x34, 0x8b,
|
0xd0, 0xec, 0xf1, 0x86, 0x49, 0xf3, 0x18, 0xaa, 0x41, 0xd9, 0x6b, 0x9f, 0x34, 0x25, 0x54, 0x85,
|
||||||
0x08, 0x41, 0xc3, 0x7f, 0x38, 0xc3, 0x89, 0x4a, 0x21, 0x98, 0x4f, 0x36, 0x77, 0x65, 0x37, 0xdc,
|
0x99, 0x2d, 0x8b, 0x42, 0x37, 0x73, 0xa8, 0x09, 0x35, 0x86, 0x38, 0xea, 0xf5, 0xb0, 0xe3, 0x34,
|
||||||
0x56, 0x92, 0x5e, 0x0b, 0x9d, 0x82, 0x13, 0x1f, 0x5a, 0x3a, 0xde, 0x35, 0x2c, 0xac, 0x07, 0x9f,
|
0xf3, 0x62, 0xe6, 0xae, 0xaa, 0x0f, 0x46, 0x36, 0x6e, 0x16, 0x50, 0x1d, 0x2a, 0x5b, 0x16, 0x7f,
|
||||||
0x9a, 0xc7, 0xd0, 0x09, 0x98, 0xef, 0x58, 0x16, 0x76, 0x42, 0x40, 0x89, 0x00, 0x37, 0xb0, 0xd3,
|
0x16, 0xd4, 0x2c, 0x22, 0x04, 0x0d, 0xef, 0x8d, 0x10, 0x47, 0x2a, 0x05, 0xe6, 0x3c, 0xb4, 0x99,
|
||||||
0xc3, 0x21, 0x60, 0x0e, 0x1d, 0x87, 0xfa, 0x86, 0xf1, 0x28, 0x04, 0xca, 0xaf, 0xfc, 0xe0, 0x14,
|
0xcb, 0x3b, 0xc1, 0x0a, 0x9a, 0x94, 0x95, 0xe8, 0x24, 0x1c, 0xff, 0xd0, 0xd4, 0xf0, 0x8e, 0x6e,
|
||||||
0x54, 0x88, 0xe7, 0xdd, 0xb6, 0x6d, 0x47, 0x47, 0x03, 0x40, 0xf4, 0x3d, 0x99, 0x39, 0xb0, 0x2d,
|
0x62, 0xcd, 0x5f, 0x6a, 0x1e, 0x43, 0xc7, 0x61, 0xb6, 0x63, 0x9a, 0xd8, 0x0e, 0x4c, 0x4a, 0x64,
|
||||||
0xf1, 0xf0, 0x12, 0xbd, 0x92, 0x52, 0x11, 0x8c, 0xa2, 0xf2, 0xdb, 0x6f, 0x5f, 0x4e, 0xa1, 0x88,
|
0x72, 0x1d, 0xdb, 0x7d, 0x1c, 0x98, 0xcc, 0xa1, 0x39, 0xa8, 0xaf, 0xeb, 0x8f, 0x03, 0x53, 0xf9,
|
||||||
0xa1, 0xcb, 0xc7, 0x90, 0x49, 0x77, 0x24, 0xbd, 0xea, 0xb6, 0xd1, 0xdd, 0xf7, 0x7f, 0x29, 0x1f,
|
0xe5, 0xbf, 0x9f, 0x84, 0x0a, 0x71, 0x32, 0xb7, 0x2d, 0xcb, 0xd6, 0xd0, 0x10, 0x10, 0x7d, 0x3a,
|
||||||
0xb3, 0x63, 0x0c, 0xd5, 0xdf, 0x31, 0xf6, 0x9e, 0x93, 0x2f, 0xd8, 0xa3, 0x3f, 0xdf, 0x88, 0xe4,
|
0x67, 0x0c, 0x2d, 0x53, 0xbc, 0x31, 0x45, 0xaf, 0xa5, 0x24, 0x3f, 0x71, 0x50, 0xae, 0x2e, 0xed,
|
||||||
0x63, 0xe8, 0x01, 0x9c, 0x5c, 0xc3, 0x21, 0xa7, 0xf1, 0x37, 0x5c, 0x49, 0xdf, 0x70, 0x04, 0xf9,
|
0x4b, 0x29, 0x18, 0x11, 0x70, 0xf9, 0x18, 0x32, 0xe8, 0x8e, 0xa4, 0x2c, 0xdf, 0xd2, 0x7b, 0x7b,
|
||||||
0x88, 0x5b, 0xae, 0x43, 0x91, 0x0e, 0xa6, 0x50, 0x92, 0x5f, 0x85, 0xff, 0x3b, 0xa1, 0xbd, 0x94,
|
0xde, 0xa3, 0x80, 0x31, 0x3b, 0x46, 0x40, 0xbd, 0x1d, 0x23, 0x4f, 0x57, 0xf9, 0x80, 0xbd, 0x6f,
|
||||||
0x8e, 0x20, 0xb8, 0x7d, 0x02, 0xf3, 0xb1, 0xd7, 0xd5, 0xe8, 0xc5, 0x04, 0xb2, 0xe4, 0x77, 0xf2,
|
0xf4, 0xec, 0x45, 0x3e, 0x86, 0x1e, 0xc2, 0x89, 0x55, 0x1c, 0xf0, 0x0f, 0xde, 0x86, 0xcb, 0xe9,
|
||||||
0xed, 0x2b, 0x59, 0x50, 0xc5, 0x5e, 0x3d, 0x68, 0x44, 0x5f, 0xa3, 0xa1, 0xe5, 0x04, 0xfa, 0xc4,
|
0x1b, 0xc6, 0x80, 0x0f, 0xb9, 0xe5, 0x1a, 0x14, 0x69, 0x0f, 0x0e, 0x25, 0xb9, 0x90, 0xe0, 0x1f,
|
||||||
0x97, 0xb1, 0xed, 0x17, 0x33, 0x60, 0x8a, 0x8d, 0x4c, 0x68, 0xc6, 0x5f, 0xfb, 0xa2, 0x2b, 0x63,
|
0x31, 0xda, 0x8b, 0xe9, 0x00, 0x82, 0xda, 0x27, 0x30, 0x1b, 0x79, 0x48, 0x8e, 0x5e, 0x4e, 0x40,
|
||||||
0x19, 0x44, 0xcd, 0xed, 0xa5, 0x4c, 0xb8, 0x62, 0xbb, 0x43, 0x6a, 0x04, 0x23, 0xaf, 0x4d, 0xd1,
|
0x4b, 0xfe, 0x4b, 0x40, 0xfb, 0x72, 0x16, 0x50, 0xb1, 0x57, 0x1f, 0x1a, 0xe1, 0x87, 0x77, 0x68,
|
||||||
0xb5, 0x64, 0x36, 0x69, 0xcf, 0x60, 0xdb, 0xd7, 0x33, 0xe3, 0x8b, 0xad, 0xbf, 0xcb, 0x06, 0xe2,
|
0x29, 0x01, 0x3f, 0xf1, 0x11, 0x70, 0xfb, 0xe5, 0x0c, 0x90, 0x62, 0x23, 0x03, 0x9a, 0xd1, 0x87,
|
||||||
0x49, 0x2f, 0x36, 0xd1, 0xab, 0xc9, 0xec, 0xc6, 0x3c, 0x35, 0x6d, 0xaf, 0x1c, 0x85, 0x44, 0x08,
|
0xcd, 0xe8, 0xf2, 0x58, 0x02, 0x61, 0x75, 0x7b, 0x25, 0x13, 0xac, 0xd8, 0xee, 0x80, 0x2a, 0x41,
|
||||||
0xf1, 0x19, 0x9d, 0x64, 0x27, 0xbc, 0x7a, 0x8c, 0xfb, 0x9d, 0xcf, 0x2f, 0xfd, 0x39, 0x67, 0xfb,
|
0xec, 0x61, 0x2d, 0xba, 0x9a, 0x4c, 0x26, 0xed, 0xc5, 0x6f, 0xfb, 0x5a, 0x66, 0x78, 0xb1, 0xf5,
|
||||||
0xd5, 0x23, 0x50, 0x08, 0x01, 0xec, 0xf8, 0x7b, 0x6a, 0xdf, 0x0d, 0xaf, 0x4f, 0xb4, 0x9a, 0xe9,
|
0xb7, 0x59, 0xef, 0x3f, 0xe9, 0x71, 0x2a, 0x7a, 0x3d, 0x99, 0xdc, 0x98, 0x57, 0xb5, 0xed, 0xe5,
|
||||||
0x7c, 0xf0, 0x63, 0x98, 0x8f, 0xbd, 0x49, 0x48, 0xf4, 0x9a, 0xe4, 0x77, 0x0b, 0xed, 0x71, 0xb9,
|
0xc3, 0xa0, 0x08, 0x26, 0x3e, 0xa3, 0x4d, 0xfb, 0x84, 0x07, 0x9e, 0x51, 0xbb, 0xf3, 0xe8, 0xa5,
|
||||||
0x86, 0xb9, 0x64, 0xec, 0x87, 0x01, 0x94, 0x62, 0xfd, 0x09, 0x3f, 0x1e, 0xb4, 0xaf, 0x64, 0x41,
|
0xbf, 0x5c, 0x6d, 0xbf, 0x7e, 0x08, 0x0c, 0xc1, 0x80, 0x15, 0x7d, 0x3a, 0xee, 0x99, 0xe1, 0xb5,
|
||||||
0x15, 0x07, 0x71, 0x69, 0xb8, 0x8c, 0x0d, 0xd7, 0xd1, 0xd5, 0x64, 0x1e, 0xc9, 0x3f, 0x0c, 0xb4,
|
0x89, 0x5a, 0x73, 0x34, 0x1b, 0xfc, 0x18, 0x66, 0x23, 0xcf, 0x2f, 0x12, 0xad, 0x26, 0xf9, 0x89,
|
||||||
0x5f, 0xce, 0x88, 0x2d, 0x36, 0x55, 0x01, 0xd6, 0xb0, 0xb7, 0x81, 0x3d, 0x87, 0xd8, 0xc8, 0xe5,
|
0x46, 0x7b, 0x5c, 0x58, 0x65, 0x26, 0x19, 0xf9, 0x06, 0x82, 0x52, 0xb4, 0x3f, 0xe1, 0x3b, 0x49,
|
||||||
0x44, 0x95, 0x07, 0x08, 0xfe, 0x36, 0x2f, 0x4c, 0xc4, 0x13, 0x1b, 0x7c, 0x13, 0x90, 0x9f, 0x62,
|
0xfb, 0x72, 0x16, 0x50, 0x71, 0x10, 0x87, 0xba, 0xcb, 0xc8, 0x77, 0x04, 0x74, 0x25, 0x99, 0x46,
|
||||||
0x43, 0x2f, 0x62, 0x2e, 0x8e, 0x9d, 0x3f, 0xb2, 0x61, 0xe1, 0xa4, 0xbb, 0x79, 0x00, 0xcd, 0x0d,
|
0xf2, 0x37, 0x90, 0xf6, 0xab, 0x19, 0xa1, 0xc5, 0xa6, 0x5d, 0x80, 0x55, 0xec, 0xae, 0x63, 0xd7,
|
||||||
0xcd, 0x22, 0x9d, 0x67, 0xc0, 0xf7, 0x6a, 0xa2, 0x60, 0x71, 0xb4, 0x14, 0x6d, 0xa5, 0x62, 0x8b,
|
0x26, 0x3a, 0x72, 0x29, 0x51, 0xe4, 0x3e, 0x80, 0xb7, 0xcd, 0x4b, 0x13, 0xe1, 0xc4, 0x06, 0xff,
|
||||||
0xc3, 0x1c, 0x88, 0x1c, 0xaa, 0x09, 0x17, 0xc4, 0xf1, 0xd8, 0x12, 0x68, 0x23, 0x86, 0x98, 0x12,
|
0x0f, 0xc8, 0x0b, 0xb1, 0x81, 0xc7, 0x3f, 0x17, 0xc6, 0xb6, 0x5a, 0x59, 0x5f, 0x74, 0xd2, 0xdd,
|
||||||
0x5b, 0xc6, 0xe0, 0x8b, 0x8d, 0x1f, 0x4b, 0xf4, 0xd5, 0x7e, 0x0c, 0xe1, 0xbe, 0xe1, 0xed, 0x6d,
|
0x3c, 0x84, 0xe6, 0xba, 0x6a, 0x92, 0x22, 0xdb, 0xa7, 0x7b, 0x25, 0x91, 0xb1, 0x28, 0x58, 0x8a,
|
||||||
0xf6, 0x35, 0xcb, 0xcd, 0x22, 0x02, 0x45, 0x3c, 0x82, 0x08, 0x1c, 0x5f, 0x88, 0xa0, 0x43, 0x3d,
|
0xb4, 0x52, 0xa1, 0xc5, 0x61, 0xf6, 0x45, 0x0c, 0x55, 0x85, 0x09, 0xe2, 0xa8, 0x6f, 0xf1, 0xa5,
|
||||||
0x32, 0xde, 0x43, 0x49, 0xcf, 0x5a, 0x92, 0x06, 0x8c, 0xed, 0xe5, 0xc9, 0x88, 0x62, 0x97, 0x3d,
|
0x11, 0x01, 0x4c, 0xf1, 0x2d, 0x63, 0xe0, 0xc5, 0xc6, 0x4f, 0x24, 0xfa, 0x07, 0x85, 0x08, 0xc0,
|
||||||
0xa8, 0xfb, 0xf6, 0xca, 0x94, 0xfb, 0x62, 0x9a, 0xa4, 0x01, 0x4e, 0x8a, 0xbb, 0x25, 0xa3, 0x86,
|
0x03, 0xdd, 0xdd, 0xdd, 0x18, 0xa8, 0xa6, 0x93, 0x85, 0x05, 0x0a, 0x78, 0x08, 0x16, 0x38, 0xbc,
|
||||||
0xdd, 0x6d, 0x74, 0x7a, 0x81, 0xb2, 0x4d, 0xbd, 0xc6, 0xb9, 0x5b, 0xfa, 0x48, 0x84, 0xc5, 0x93,
|
0x60, 0x41, 0x83, 0x7a, 0xa8, 0x93, 0x89, 0x92, 0x5e, 0xf0, 0x24, 0xf5, 0x52, 0xdb, 0x4b, 0x93,
|
||||||
0xd8, 0xa4, 0x30, 0x39, 0x58, 0x25, 0x0e, 0x3e, 0x13, 0xe3, 0x49, 0xca, 0xe0, 0x51, 0x3e, 0x86,
|
0x01, 0xc5, 0x2e, 0xbb, 0x50, 0xf7, 0xf4, 0x95, 0x09, 0xf7, 0xe5, 0x34, 0x4e, 0x7d, 0x98, 0x14,
|
||||||
0xee, 0x43, 0x89, 0xb5, 0x23, 0xe8, 0xf9, 0xf1, 0x9d, 0x0a, 0xe7, 0x7e, 0x69, 0x02, 0x96, 0x60,
|
0x73, 0x4b, 0x06, 0x0d, 0x9a, 0x5b, 0xbc, 0x51, 0x83, 0xb2, 0x35, 0xf8, 0xc6, 0x99, 0x5b, 0x7a,
|
||||||
0xbc, 0x0f, 0xa7, 0x52, 0xfa, 0x94, 0xc4, 0x3c, 0x37, 0xbe, 0xa7, 0x99, 0xe4, 0xe5, 0x1a, 0xa0,
|
0xf7, 0x87, 0xf9, 0x93, 0x48, 0x53, 0x34, 0xd9, 0x59, 0x25, 0xf6, 0x78, 0x13, 0xfd, 0x49, 0x4a,
|
||||||
0xd1, 0x57, 0xf1, 0x89, 0xd7, 0x94, 0xfa, 0x78, 0x3e, 0xc3, 0x16, 0xa3, 0x0f, 0xde, 0x13, 0xb7,
|
0x8f, 0x55, 0x3e, 0x86, 0x1e, 0x40, 0x89, 0x55, 0x5e, 0xe8, 0xc5, 0xf1, 0x45, 0x19, 0xa7, 0x7e,
|
||||||
0x48, 0x7d, 0x17, 0x3f, 0x61, 0x8b, 0x95, 0x5f, 0x95, 0xa0, 0xec, 0xbf, 0xf8, 0x78, 0x06, 0x95,
|
0x71, 0x02, 0x94, 0x20, 0xbc, 0x07, 0x27, 0x53, 0x4a, 0xb2, 0xc4, 0x38, 0x37, 0xbe, 0x7c, 0x9b,
|
||||||
0xf8, 0x33, 0x28, 0x8d, 0x3f, 0x86, 0xf9, 0xd8, 0xd3, 0xf1, 0x44, 0x4b, 0x4f, 0x7e, 0x5e, 0x3e,
|
0x64, 0xe5, 0x2a, 0xa0, 0xf8, 0x1f, 0x00, 0x12, 0xaf, 0x29, 0xf5, 0x7f, 0x02, 0x19, 0xb6, 0x88,
|
||||||
0xe9, 0xc6, 0xee, 0xf3, 0x7f, 0xb0, 0x15, 0x59, 0xf2, 0x85, 0xb4, 0xf2, 0x3a, 0x9e, 0x20, 0x27,
|
0xbf, 0xed, 0x4f, 0xdc, 0x22, 0xf5, 0x2f, 0x00, 0x93, 0xb6, 0xb8, 0x0f, 0xe0, 0x17, 0x5e, 0x89,
|
||||||
0x30, 0x7e, 0xea, 0xe9, 0xf0, 0x1e, 0x40, 0x28, 0x5d, 0x8d, 0xff, 0x19, 0x8e, 0x44, 0xe0, 0x49,
|
0xf7, 0x11, 0xab, 0xcb, 0x26, 0x90, 0x5c, 0xfe, 0x77, 0x09, 0xca, 0xde, 0x7b, 0x99, 0xe7, 0x90,
|
||||||
0x02, 0x6f, 0x1c, 0xd1, 0xc9, 0x27, 0xb0, 0x73, 0x89, 0x2b, 0xc4, 0x1b, 0xf5, 0x14, 0x57, 0x48,
|
0xdc, 0x3f, 0x87, 0x6c, 0xfb, 0x63, 0x98, 0x8d, 0x3c, 0xbc, 0x4f, 0x34, 0x9e, 0xe4, 0xc7, 0xf9,
|
||||||
0x19, 0x0f, 0x24, 0x06, 0xc5, 0xf4, 0xee, 0x5f, 0x3e, 0x76, 0xeb, 0xc6, 0xb7, 0x5e, 0xed, 0x19,
|
0x93, 0x6e, 0xe8, 0x01, 0xff, 0x7b, 0xb2, 0x08, 0xbc, 0x2f, 0xa5, 0x65, 0xec, 0xd1, 0x98, 0x3b,
|
||||||
0xde, 0xde, 0x70, 0x87, 0x88, 0x73, 0x9d, 0x11, 0xbf, 0x6c, 0xd8, 0xfc, 0xaf, 0xeb, 0xbe, 0x55,
|
0x81, 0xf0, 0x33, 0x8f, 0xb0, 0xf7, 0x00, 0x02, 0x11, 0x70, 0xfc, 0x47, 0x4c, 0xe2, 0xd4, 0x27,
|
||||||
0x5e, 0xa7, 0xfc, 0xae, 0x13, 0x7e, 0x83, 0x9d, 0x9d, 0x12, 0x5d, 0xdd, 0xf8, 0x5f, 0x00, 0x00,
|
0x31, 0xbc, 0x7e, 0x48, 0xbf, 0x31, 0x81, 0x9c, 0x43, 0xac, 0x2b, 0xda, 0xe6, 0x48, 0xb1, 0xae,
|
||||||
0x00, 0xff, 0xff, 0x6e, 0xe3, 0xdf, 0x9f, 0x70, 0x3e, 0x00, 0x00,
|
0x94, 0xe6, 0x4a, 0xa2, 0x9f, 0x4d, 0xef, 0x9d, 0x3c, 0x13, 0x7b, 0xbb, 0x75, 0xfd, 0x1b, 0xaf,
|
||||||
|
0xf7, 0x75, 0x77, 0x77, 0xb4, 0x4d, 0x56, 0xae, 0x31, 0xd0, 0x57, 0x75, 0x8b, 0xff, 0xba, 0xe6,
|
||||||
|
0x29, 0xfa, 0x35, 0x8a, 0x7d, 0x8d, 0xec, 0x31, 0xdc, 0xde, 0x2e, 0xd1, 0xd1, 0xf5, 0xff, 0x06,
|
||||||
|
0x00, 0x00, 0xff, 0xff, 0xe7, 0xa4, 0x10, 0xe3, 0x01, 0x40, 0x00, 0x00,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reference imports to suppress errors if they are not otherwise used.
|
// Reference imports to suppress errors if they are not otherwise used.
|
||||||
|
@ -4256,6 +4339,7 @@ type DataCoordClient interface {
|
||||||
UpdateSegmentStatistics(ctx context.Context, in *UpdateSegmentStatisticsRequest, opts ...grpc.CallOption) (*commonpb.Status, error)
|
UpdateSegmentStatistics(ctx context.Context, in *UpdateSegmentStatisticsRequest, opts ...grpc.CallOption) (*commonpb.Status, error)
|
||||||
AcquireSegmentLock(ctx context.Context, in *AcquireSegmentLockRequest, opts ...grpc.CallOption) (*commonpb.Status, error)
|
AcquireSegmentLock(ctx context.Context, in *AcquireSegmentLockRequest, opts ...grpc.CallOption) (*commonpb.Status, error)
|
||||||
ReleaseSegmentLock(ctx context.Context, in *ReleaseSegmentLockRequest, opts ...grpc.CallOption) (*commonpb.Status, error)
|
ReleaseSegmentLock(ctx context.Context, in *ReleaseSegmentLockRequest, opts ...grpc.CallOption) (*commonpb.Status, error)
|
||||||
|
AddSegment(ctx context.Context, in *AddSegmentRequest, opts ...grpc.CallOption) (*commonpb.Status, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type dataCoordClient struct {
|
type dataCoordClient struct {
|
||||||
|
@ -4509,6 +4593,15 @@ func (c *dataCoordClient) ReleaseSegmentLock(ctx context.Context, in *ReleaseSeg
|
||||||
return out, nil
|
return out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *dataCoordClient) AddSegment(ctx context.Context, in *AddSegmentRequest, opts ...grpc.CallOption) (*commonpb.Status, error) {
|
||||||
|
out := new(commonpb.Status)
|
||||||
|
err := c.cc.Invoke(ctx, "/milvus.proto.data.DataCoord/AddSegment", in, out, opts...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return out, nil
|
||||||
|
}
|
||||||
|
|
||||||
// DataCoordServer is the server API for DataCoord service.
|
// DataCoordServer is the server API for DataCoord service.
|
||||||
type DataCoordServer interface {
|
type DataCoordServer interface {
|
||||||
GetComponentStates(context.Context, *internalpb.GetComponentStatesRequest) (*internalpb.ComponentStates, error)
|
GetComponentStates(context.Context, *internalpb.GetComponentStatesRequest) (*internalpb.ComponentStates, error)
|
||||||
|
@ -4540,6 +4633,7 @@ type DataCoordServer interface {
|
||||||
UpdateSegmentStatistics(context.Context, *UpdateSegmentStatisticsRequest) (*commonpb.Status, error)
|
UpdateSegmentStatistics(context.Context, *UpdateSegmentStatisticsRequest) (*commonpb.Status, error)
|
||||||
AcquireSegmentLock(context.Context, *AcquireSegmentLockRequest) (*commonpb.Status, error)
|
AcquireSegmentLock(context.Context, *AcquireSegmentLockRequest) (*commonpb.Status, error)
|
||||||
ReleaseSegmentLock(context.Context, *ReleaseSegmentLockRequest) (*commonpb.Status, error)
|
ReleaseSegmentLock(context.Context, *ReleaseSegmentLockRequest) (*commonpb.Status, error)
|
||||||
|
AddSegment(context.Context, *AddSegmentRequest) (*commonpb.Status, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
// UnimplementedDataCoordServer can be embedded to have forward compatible implementations.
|
// UnimplementedDataCoordServer can be embedded to have forward compatible implementations.
|
||||||
|
@ -4627,6 +4721,9 @@ func (*UnimplementedDataCoordServer) AcquireSegmentLock(ctx context.Context, req
|
||||||
func (*UnimplementedDataCoordServer) ReleaseSegmentLock(ctx context.Context, req *ReleaseSegmentLockRequest) (*commonpb.Status, error) {
|
func (*UnimplementedDataCoordServer) ReleaseSegmentLock(ctx context.Context, req *ReleaseSegmentLockRequest) (*commonpb.Status, error) {
|
||||||
return nil, status.Errorf(codes.Unimplemented, "method ReleaseSegmentLock not implemented")
|
return nil, status.Errorf(codes.Unimplemented, "method ReleaseSegmentLock not implemented")
|
||||||
}
|
}
|
||||||
|
func (*UnimplementedDataCoordServer) AddSegment(ctx context.Context, req *AddSegmentRequest) (*commonpb.Status, error) {
|
||||||
|
return nil, status.Errorf(codes.Unimplemented, "method AddSegment not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
func RegisterDataCoordServer(s *grpc.Server, srv DataCoordServer) {
|
func RegisterDataCoordServer(s *grpc.Server, srv DataCoordServer) {
|
||||||
s.RegisterService(&_DataCoord_serviceDesc, srv)
|
s.RegisterService(&_DataCoord_serviceDesc, srv)
|
||||||
|
@ -5118,6 +5215,24 @@ func _DataCoord_ReleaseSegmentLock_Handler(srv interface{}, ctx context.Context,
|
||||||
return interceptor(ctx, in, info, handler)
|
return interceptor(ctx, in, info, handler)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func _DataCoord_AddSegment_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||||
|
in := new(AddSegmentRequest)
|
||||||
|
if err := dec(in); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if interceptor == nil {
|
||||||
|
return srv.(DataCoordServer).AddSegment(ctx, in)
|
||||||
|
}
|
||||||
|
info := &grpc.UnaryServerInfo{
|
||||||
|
Server: srv,
|
||||||
|
FullMethod: "/milvus.proto.data.DataCoord/AddSegment",
|
||||||
|
}
|
||||||
|
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
|
return srv.(DataCoordServer).AddSegment(ctx, req.(*AddSegmentRequest))
|
||||||
|
}
|
||||||
|
return interceptor(ctx, in, info, handler)
|
||||||
|
}
|
||||||
|
|
||||||
var _DataCoord_serviceDesc = grpc.ServiceDesc{
|
var _DataCoord_serviceDesc = grpc.ServiceDesc{
|
||||||
ServiceName: "milvus.proto.data.DataCoord",
|
ServiceName: "milvus.proto.data.DataCoord",
|
||||||
HandlerType: (*DataCoordServer)(nil),
|
HandlerType: (*DataCoordServer)(nil),
|
||||||
|
@ -5230,6 +5345,10 @@ var _DataCoord_serviceDesc = grpc.ServiceDesc{
|
||||||
MethodName: "ReleaseSegmentLock",
|
MethodName: "ReleaseSegmentLock",
|
||||||
Handler: _DataCoord_ReleaseSegmentLock_Handler,
|
Handler: _DataCoord_ReleaseSegmentLock_Handler,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
MethodName: "AddSegment",
|
||||||
|
Handler: _DataCoord_AddSegment_Handler,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
Streams: []grpc.StreamDesc{},
|
Streams: []grpc.StreamDesc{},
|
||||||
Metadata: "data_coord.proto",
|
Metadata: "data_coord.proto",
|
||||||
|
@ -5249,6 +5368,7 @@ type DataNodeClient interface {
|
||||||
// https://wiki.lfaidata.foundation/display/MIL/MEP+24+--+Support+bulk+load
|
// https://wiki.lfaidata.foundation/display/MIL/MEP+24+--+Support+bulk+load
|
||||||
Import(ctx context.Context, in *ImportTaskRequest, opts ...grpc.CallOption) (*commonpb.Status, error)
|
Import(ctx context.Context, in *ImportTaskRequest, opts ...grpc.CallOption) (*commonpb.Status, error)
|
||||||
ResendSegmentStats(ctx context.Context, in *ResendSegmentStatsRequest, opts ...grpc.CallOption) (*ResendSegmentStatsResponse, error)
|
ResendSegmentStats(ctx context.Context, in *ResendSegmentStatsRequest, opts ...grpc.CallOption) (*ResendSegmentStatsResponse, error)
|
||||||
|
AddSegment(ctx context.Context, in *AddSegmentRequest, opts ...grpc.CallOption) (*commonpb.Status, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type dataNodeClient struct {
|
type dataNodeClient struct {
|
||||||
|
@ -5331,6 +5451,15 @@ func (c *dataNodeClient) ResendSegmentStats(ctx context.Context, in *ResendSegme
|
||||||
return out, nil
|
return out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *dataNodeClient) AddSegment(ctx context.Context, in *AddSegmentRequest, opts ...grpc.CallOption) (*commonpb.Status, error) {
|
||||||
|
out := new(commonpb.Status)
|
||||||
|
err := c.cc.Invoke(ctx, "/milvus.proto.data.DataNode/AddSegment", in, out, opts...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return out, nil
|
||||||
|
}
|
||||||
|
|
||||||
// DataNodeServer is the server API for DataNode service.
|
// DataNodeServer is the server API for DataNode service.
|
||||||
type DataNodeServer interface {
|
type DataNodeServer interface {
|
||||||
GetComponentStates(context.Context, *internalpb.GetComponentStatesRequest) (*internalpb.ComponentStates, error)
|
GetComponentStates(context.Context, *internalpb.GetComponentStatesRequest) (*internalpb.ComponentStates, error)
|
||||||
|
@ -5343,6 +5472,7 @@ type DataNodeServer interface {
|
||||||
// https://wiki.lfaidata.foundation/display/MIL/MEP+24+--+Support+bulk+load
|
// https://wiki.lfaidata.foundation/display/MIL/MEP+24+--+Support+bulk+load
|
||||||
Import(context.Context, *ImportTaskRequest) (*commonpb.Status, error)
|
Import(context.Context, *ImportTaskRequest) (*commonpb.Status, error)
|
||||||
ResendSegmentStats(context.Context, *ResendSegmentStatsRequest) (*ResendSegmentStatsResponse, error)
|
ResendSegmentStats(context.Context, *ResendSegmentStatsRequest) (*ResendSegmentStatsResponse, error)
|
||||||
|
AddSegment(context.Context, *AddSegmentRequest) (*commonpb.Status, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
// UnimplementedDataNodeServer can be embedded to have forward compatible implementations.
|
// UnimplementedDataNodeServer can be embedded to have forward compatible implementations.
|
||||||
|
@ -5373,6 +5503,9 @@ func (*UnimplementedDataNodeServer) Import(ctx context.Context, req *ImportTaskR
|
||||||
func (*UnimplementedDataNodeServer) ResendSegmentStats(ctx context.Context, req *ResendSegmentStatsRequest) (*ResendSegmentStatsResponse, error) {
|
func (*UnimplementedDataNodeServer) ResendSegmentStats(ctx context.Context, req *ResendSegmentStatsRequest) (*ResendSegmentStatsResponse, error) {
|
||||||
return nil, status.Errorf(codes.Unimplemented, "method ResendSegmentStats not implemented")
|
return nil, status.Errorf(codes.Unimplemented, "method ResendSegmentStats not implemented")
|
||||||
}
|
}
|
||||||
|
func (*UnimplementedDataNodeServer) AddSegment(ctx context.Context, req *AddSegmentRequest) (*commonpb.Status, error) {
|
||||||
|
return nil, status.Errorf(codes.Unimplemented, "method AddSegment not implemented")
|
||||||
|
}
|
||||||
|
|
||||||
func RegisterDataNodeServer(s *grpc.Server, srv DataNodeServer) {
|
func RegisterDataNodeServer(s *grpc.Server, srv DataNodeServer) {
|
||||||
s.RegisterService(&_DataNode_serviceDesc, srv)
|
s.RegisterService(&_DataNode_serviceDesc, srv)
|
||||||
|
@ -5522,6 +5655,24 @@ func _DataNode_ResendSegmentStats_Handler(srv interface{}, ctx context.Context,
|
||||||
return interceptor(ctx, in, info, handler)
|
return interceptor(ctx, in, info, handler)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func _DataNode_AddSegment_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||||
|
in := new(AddSegmentRequest)
|
||||||
|
if err := dec(in); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if interceptor == nil {
|
||||||
|
return srv.(DataNodeServer).AddSegment(ctx, in)
|
||||||
|
}
|
||||||
|
info := &grpc.UnaryServerInfo{
|
||||||
|
Server: srv,
|
||||||
|
FullMethod: "/milvus.proto.data.DataNode/AddSegment",
|
||||||
|
}
|
||||||
|
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
|
return srv.(DataNodeServer).AddSegment(ctx, req.(*AddSegmentRequest))
|
||||||
|
}
|
||||||
|
return interceptor(ctx, in, info, handler)
|
||||||
|
}
|
||||||
|
|
||||||
var _DataNode_serviceDesc = grpc.ServiceDesc{
|
var _DataNode_serviceDesc = grpc.ServiceDesc{
|
||||||
ServiceName: "milvus.proto.data.DataNode",
|
ServiceName: "milvus.proto.data.DataNode",
|
||||||
HandlerType: (*DataNodeServer)(nil),
|
HandlerType: (*DataNodeServer)(nil),
|
||||||
|
@ -5558,6 +5709,10 @@ var _DataNode_serviceDesc = grpc.ServiceDesc{
|
||||||
MethodName: "ResendSegmentStats",
|
MethodName: "ResendSegmentStats",
|
||||||
Handler: _DataNode_ResendSegmentStats_Handler,
|
Handler: _DataNode_ResendSegmentStats_Handler,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
MethodName: "AddSegment",
|
||||||
|
Handler: _DataNode_AddSegment_Handler,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
Streams: []grpc.StreamDesc{},
|
Streams: []grpc.StreamDesc{},
|
||||||
Metadata: "data_coord.proto",
|
Metadata: "data_coord.proto",
|
||||||
|
|
|
@ -114,6 +114,10 @@ func (coord *DataCoordMock) Flush(ctx context.Context, req *datapb.FlushRequest)
|
||||||
panic("implement me")
|
panic("implement me")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (coord *DataCoordMock) AddSegment(ctx context.Context, req *datapb.AddSegmentRequest) (*commonpb.Status, error) {
|
||||||
|
panic("implement me")
|
||||||
|
}
|
||||||
|
|
||||||
func (coord *DataCoordMock) AssignSegmentID(ctx context.Context, req *datapb.AssignSegmentIDRequest) (*datapb.AssignSegmentIDResponse, error) {
|
func (coord *DataCoordMock) AssignSegmentID(ctx context.Context, req *datapb.AssignSegmentIDRequest) (*datapb.AssignSegmentIDResponse, error) {
|
||||||
panic("implement me")
|
panic("implement me")
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,9 +23,6 @@ import (
|
||||||
"runtime"
|
"runtime"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
|
||||||
"github.com/stretchr/testify/mock"
|
|
||||||
|
|
||||||
"github.com/milvus-io/milvus/internal/common"
|
"github.com/milvus-io/milvus/internal/common"
|
||||||
"github.com/milvus-io/milvus/internal/mq/msgstream"
|
"github.com/milvus-io/milvus/internal/mq/msgstream"
|
||||||
"github.com/milvus-io/milvus/internal/proto/commonpb"
|
"github.com/milvus-io/milvus/internal/proto/commonpb"
|
||||||
|
@ -34,6 +31,8 @@ import (
|
||||||
"github.com/milvus-io/milvus/internal/proto/schemapb"
|
"github.com/milvus-io/milvus/internal/proto/schemapb"
|
||||||
"github.com/milvus-io/milvus/internal/storage"
|
"github.com/milvus-io/milvus/internal/storage"
|
||||||
"github.com/milvus-io/milvus/internal/util/funcutil"
|
"github.com/milvus-io/milvus/internal/util/funcutil"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"github.com/stretchr/testify/mock"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestSegmentLoader_loadSegment(t *testing.T) {
|
func TestSegmentLoader_loadSegment(t *testing.T) {
|
||||||
|
|
|
@ -81,6 +81,9 @@ type DataNode interface {
|
||||||
// ResendSegmentStats resend un-flushed segment stats back upstream to DataCoord by resending DataNode time tick message.
|
// ResendSegmentStats resend un-flushed segment stats back upstream to DataCoord by resending DataNode time tick message.
|
||||||
// It returns a list of segments to be sent.
|
// It returns a list of segments to be sent.
|
||||||
ResendSegmentStats(ctx context.Context, req *datapb.ResendSegmentStatsRequest) (*datapb.ResendSegmentStatsResponse, error)
|
ResendSegmentStats(ctx context.Context, req *datapb.ResendSegmentStatsRequest) (*datapb.ResendSegmentStatsResponse, error)
|
||||||
|
|
||||||
|
// AddSegment puts the given segment to current DataNode's flow graph.
|
||||||
|
AddSegment(ctx context.Context, req *datapb.AddSegmentRequest) (*commonpb.Status, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
// DataNodeComponent is used by grpc server of DataNode
|
// DataNodeComponent is used by grpc server of DataNode
|
||||||
|
@ -284,6 +287,10 @@ type DataCoord interface {
|
||||||
|
|
||||||
AcquireSegmentLock(ctx context.Context, req *datapb.AcquireSegmentLockRequest) (*commonpb.Status, error)
|
AcquireSegmentLock(ctx context.Context, req *datapb.AcquireSegmentLockRequest) (*commonpb.Status, error)
|
||||||
ReleaseSegmentLock(ctx context.Context, req *datapb.ReleaseSegmentLockRequest) (*commonpb.Status, error)
|
ReleaseSegmentLock(ctx context.Context, req *datapb.ReleaseSegmentLockRequest) (*commonpb.Status, error)
|
||||||
|
|
||||||
|
// AddSegment looks for the right DataNode given channel name, and triggers AddSegment call on that DataNode to
|
||||||
|
// add the segment into this DataNode.
|
||||||
|
AddSegment(ctx context.Context, req *datapb.AddSegmentRequest) (*commonpb.Status, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
// DataCoordComponent defines the interface of DataCoord component.
|
// DataCoordComponent defines the interface of DataCoord component.
|
||||||
|
|
|
@ -140,3 +140,7 @@ func (m *GrpcDataCoordClient) AcquireSegmentLock(ctx context.Context, req *datap
|
||||||
func (m *GrpcDataCoordClient) ReleaseSegmentLock(ctx context.Context, req *datapb.ReleaseSegmentLockRequest, opts ...grpc.CallOption) (*commonpb.Status, error) {
|
func (m *GrpcDataCoordClient) ReleaseSegmentLock(ctx context.Context, req *datapb.ReleaseSegmentLockRequest, opts ...grpc.CallOption) (*commonpb.Status, error) {
|
||||||
return &commonpb.Status{}, m.Err
|
return &commonpb.Status{}, m.Err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m *GrpcDataCoordClient) AddSegment(ctx context.Context, in *datapb.AddSegmentRequest, opts ...grpc.CallOption) (*commonpb.Status, error) {
|
||||||
|
return &commonpb.Status{}, m.Err
|
||||||
|
}
|
||||||
|
|
|
@ -64,3 +64,7 @@ func (m *GrpcDataNodeClient) Import(ctx context.Context, req *datapb.ImportTaskR
|
||||||
func (m *GrpcDataNodeClient) ResendSegmentStats(ctx context.Context, req *datapb.ResendSegmentStatsRequest, opts ...grpc.CallOption) (*datapb.ResendSegmentStatsResponse, error) {
|
func (m *GrpcDataNodeClient) ResendSegmentStats(ctx context.Context, req *datapb.ResendSegmentStatsRequest, opts ...grpc.CallOption) (*datapb.ResendSegmentStatsResponse, error) {
|
||||||
return &datapb.ResendSegmentStatsResponse{}, m.Err
|
return &datapb.ResendSegmentStatsResponse{}, m.Err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m *GrpcDataNodeClient) AddSegment(ctx context.Context, in *datapb.AddSegmentRequest, opts ...grpc.CallOption) (*commonpb.Status, error) {
|
||||||
|
return &commonpb.Status{}, m.Err
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue