mirror of
https://gitee.com/milvus-io/milvus.git
synced 2025-12-08 18:18:30 +08:00
Fix shard leader misses to fill target ID while delegates query/search (#20973)
Signed-off-by: yah01 <yang.cen@zilliz.com> Signed-off-by: yah01 <yang.cen@zilliz.com>
This commit is contained in:
parent
2791f5526c
commit
47b76e13be
@ -954,8 +954,10 @@ func (sc *ShardCluster) Search(ctx context.Context, req *querypb.SearchRequest,
|
|||||||
|
|
||||||
// dispatch request to followers
|
// dispatch request to followers
|
||||||
for nodeID, segments := range segAllocs {
|
for nodeID, segments := range segAllocs {
|
||||||
|
internalReq := typeutil.Clone(req.GetReq())
|
||||||
|
internalReq.GetBase().TargetID = nodeID
|
||||||
nodeReq := &querypb.SearchRequest{
|
nodeReq := &querypb.SearchRequest{
|
||||||
Req: req.Req,
|
Req: internalReq,
|
||||||
DmlChannels: req.DmlChannels,
|
DmlChannels: req.DmlChannels,
|
||||||
FromShardLeader: true,
|
FromShardLeader: true,
|
||||||
Scope: querypb.DataScope_Historical,
|
Scope: querypb.DataScope_Historical,
|
||||||
@ -1038,8 +1040,10 @@ func (sc *ShardCluster) Query(ctx context.Context, req *querypb.QueryRequest, wi
|
|||||||
|
|
||||||
// dispatch request to followers
|
// dispatch request to followers
|
||||||
for nodeID, segments := range segAllocs {
|
for nodeID, segments := range segAllocs {
|
||||||
|
internalReq := typeutil.Clone(req.GetReq())
|
||||||
|
internalReq.GetBase().TargetID = nodeID
|
||||||
nodeReq := &querypb.QueryRequest{
|
nodeReq := &querypb.QueryRequest{
|
||||||
Req: req.Req,
|
Req: internalReq,
|
||||||
FromShardLeader: true,
|
FromShardLeader: true,
|
||||||
SegmentIDs: segments,
|
SegmentIDs: segments,
|
||||||
Scope: querypb.DataScope_Historical,
|
Scope: querypb.DataScope_Historical,
|
||||||
|
|||||||
@ -1164,6 +1164,9 @@ func TestShardCluster_Search(t *testing.T) {
|
|||||||
require.EqualValues(t, available, sc.state.Load())
|
require.EqualValues(t, available, sc.state.Load())
|
||||||
|
|
||||||
result, err := sc.Search(ctx, &querypb.SearchRequest{
|
result, err := sc.Search(ctx, &querypb.SearchRequest{
|
||||||
|
Req: &internalpb.SearchRequest{
|
||||||
|
Base: &commonpb.MsgBase{},
|
||||||
|
},
|
||||||
DmlChannels: []string{vchannelName},
|
DmlChannels: []string{vchannelName},
|
||||||
}, streamingDoNothing)
|
}, streamingDoNothing)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
@ -1215,6 +1218,9 @@ func TestShardCluster_Search(t *testing.T) {
|
|||||||
require.EqualValues(t, available, sc.state.Load())
|
require.EqualValues(t, available, sc.state.Load())
|
||||||
|
|
||||||
_, err := sc.Search(ctx, &querypb.SearchRequest{
|
_, err := sc.Search(ctx, &querypb.SearchRequest{
|
||||||
|
Req: &internalpb.SearchRequest{
|
||||||
|
Base: &commonpb.MsgBase{},
|
||||||
|
},
|
||||||
DmlChannels: []string{vchannelName},
|
DmlChannels: []string{vchannelName},
|
||||||
}, func(ctx context.Context) error { return errors.New("mocked") })
|
}, func(ctx context.Context) error { return errors.New("mocked") })
|
||||||
assert.Error(t, err)
|
assert.Error(t, err)
|
||||||
@ -1273,6 +1279,9 @@ func TestShardCluster_Search(t *testing.T) {
|
|||||||
require.EqualValues(t, available, sc.state.Load())
|
require.EqualValues(t, available, sc.state.Load())
|
||||||
|
|
||||||
_, err := sc.Search(ctx, &querypb.SearchRequest{
|
_, err := sc.Search(ctx, &querypb.SearchRequest{
|
||||||
|
Req: &internalpb.SearchRequest{
|
||||||
|
Base: &commonpb.MsgBase{},
|
||||||
|
},
|
||||||
DmlChannels: []string{vchannelName},
|
DmlChannels: []string{vchannelName},
|
||||||
}, streamingDoNothing)
|
}, streamingDoNothing)
|
||||||
assert.Error(t, err)
|
assert.Error(t, err)
|
||||||
@ -1325,6 +1334,9 @@ func TestShardCluster_Search(t *testing.T) {
|
|||||||
require.EqualValues(t, available, sc.state.Load())
|
require.EqualValues(t, available, sc.state.Load())
|
||||||
|
|
||||||
_, err := sc.Search(ctx, &querypb.SearchRequest{
|
_, err := sc.Search(ctx, &querypb.SearchRequest{
|
||||||
|
Req: &internalpb.SearchRequest{
|
||||||
|
Base: &commonpb.MsgBase{},
|
||||||
|
},
|
||||||
DmlChannels: []string{vchannelName},
|
DmlChannels: []string{vchannelName},
|
||||||
}, streamingDoNothing)
|
}, streamingDoNothing)
|
||||||
assert.Error(t, err)
|
assert.Error(t, err)
|
||||||
@ -1385,6 +1397,9 @@ func TestShardCluster_Query(t *testing.T) {
|
|||||||
require.EqualValues(t, unavailable, sc.state.Load())
|
require.EqualValues(t, unavailable, sc.state.Load())
|
||||||
|
|
||||||
_, err := sc.Query(ctx, &querypb.QueryRequest{
|
_, err := sc.Query(ctx, &querypb.QueryRequest{
|
||||||
|
Req: &internalpb.RetrieveRequest{
|
||||||
|
Base: &commonpb.MsgBase{},
|
||||||
|
},
|
||||||
DmlChannels: []string{vchannelName},
|
DmlChannels: []string{vchannelName},
|
||||||
}, streamingDoNothing)
|
}, streamingDoNothing)
|
||||||
assert.Error(t, err)
|
assert.Error(t, err)
|
||||||
@ -1398,6 +1413,9 @@ func TestShardCluster_Query(t *testing.T) {
|
|||||||
sc.SetupFirstVersion()
|
sc.SetupFirstVersion()
|
||||||
|
|
||||||
_, err := sc.Query(ctx, &querypb.QueryRequest{
|
_, err := sc.Query(ctx, &querypb.QueryRequest{
|
||||||
|
Req: &internalpb.RetrieveRequest{
|
||||||
|
Base: &commonpb.MsgBase{},
|
||||||
|
},
|
||||||
DmlChannels: []string{vchannelName + "_suffix"},
|
DmlChannels: []string{vchannelName + "_suffix"},
|
||||||
}, streamingDoNothing)
|
}, streamingDoNothing)
|
||||||
assert.Error(t, err)
|
assert.Error(t, err)
|
||||||
@ -1447,6 +1465,9 @@ func TestShardCluster_Query(t *testing.T) {
|
|||||||
require.EqualValues(t, available, sc.state.Load())
|
require.EqualValues(t, available, sc.state.Load())
|
||||||
|
|
||||||
result, err := sc.Query(ctx, &querypb.QueryRequest{
|
result, err := sc.Query(ctx, &querypb.QueryRequest{
|
||||||
|
Req: &internalpb.RetrieveRequest{
|
||||||
|
Base: &commonpb.MsgBase{},
|
||||||
|
},
|
||||||
DmlChannels: []string{vchannelName},
|
DmlChannels: []string{vchannelName},
|
||||||
}, streamingDoNothing)
|
}, streamingDoNothing)
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
@ -1497,6 +1518,9 @@ func TestShardCluster_Query(t *testing.T) {
|
|||||||
require.EqualValues(t, available, sc.state.Load())
|
require.EqualValues(t, available, sc.state.Load())
|
||||||
|
|
||||||
_, err := sc.Query(ctx, &querypb.QueryRequest{
|
_, err := sc.Query(ctx, &querypb.QueryRequest{
|
||||||
|
Req: &internalpb.RetrieveRequest{
|
||||||
|
Base: &commonpb.MsgBase{},
|
||||||
|
},
|
||||||
DmlChannels: []string{vchannelName},
|
DmlChannels: []string{vchannelName},
|
||||||
}, func(ctx context.Context) error { return errors.New("mocked") })
|
}, func(ctx context.Context) error { return errors.New("mocked") })
|
||||||
assert.Error(t, err)
|
assert.Error(t, err)
|
||||||
@ -1555,6 +1579,9 @@ func TestShardCluster_Query(t *testing.T) {
|
|||||||
require.EqualValues(t, available, sc.state.Load())
|
require.EqualValues(t, available, sc.state.Load())
|
||||||
|
|
||||||
_, err := sc.Query(ctx, &querypb.QueryRequest{
|
_, err := sc.Query(ctx, &querypb.QueryRequest{
|
||||||
|
Req: &internalpb.RetrieveRequest{
|
||||||
|
Base: &commonpb.MsgBase{},
|
||||||
|
},
|
||||||
DmlChannels: []string{vchannelName},
|
DmlChannels: []string{vchannelName},
|
||||||
}, streamingDoNothing)
|
}, streamingDoNothing)
|
||||||
assert.Error(t, err)
|
assert.Error(t, err)
|
||||||
@ -1608,6 +1635,9 @@ func TestShardCluster_Query(t *testing.T) {
|
|||||||
require.EqualValues(t, available, sc.state.Load())
|
require.EqualValues(t, available, sc.state.Load())
|
||||||
|
|
||||||
_, err := sc.Query(ctx, &querypb.QueryRequest{
|
_, err := sc.Query(ctx, &querypb.QueryRequest{
|
||||||
|
Req: &internalpb.RetrieveRequest{
|
||||||
|
Base: &commonpb.MsgBase{},
|
||||||
|
},
|
||||||
DmlChannels: []string{vchannelName},
|
DmlChannels: []string{vchannelName},
|
||||||
}, streamingDoNothing)
|
}, streamingDoNothing)
|
||||||
assert.Error(t, err)
|
assert.Error(t, err)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user