From e2f40fc2a8d63dc59a682409cd138171a1af6cfc Mon Sep 17 00:00:00 2001 From: congqixia Date: Thu, 25 Jul 2024 10:17:45 +0800 Subject: [PATCH] fix: Check legacy guarantee ts when skipping alloc ts (#34981) See also #34980 Signed-off-by: Congqi Xia --- internal/proxy/task_query.go | 4 ++++ internal/proxy/task_query_test.go | 23 +++++++++++++++++++++++ internal/proxy/task_search.go | 4 ++++ internal/proxy/task_search_test.go | 23 +++++++++++++++++++++++ 4 files changed, 54 insertions(+) diff --git a/internal/proxy/task_query.go b/internal/proxy/task_query.go index 9282c72edb..60f808e523 100644 --- a/internal/proxy/task_query.go +++ b/internal/proxy/task_query.go @@ -252,6 +252,10 @@ func (t *queryTask) CanSkipAllocTimestamp() bool { var consistencyLevel commonpb.ConsistencyLevel useDefaultConsistency := t.request.GetUseDefaultConsistency() if !useDefaultConsistency { + // legacy SDK & resultful behavior + if t.request.GetConsistencyLevel() == commonpb.ConsistencyLevel_Strong && t.request.GetGuaranteeTimestamp() > 0 { + return true + } consistencyLevel = t.request.GetConsistencyLevel() } else { collID, err := globalMetaCache.GetCollectionID(context.Background(), t.request.GetDbName(), t.request.GetCollectionName()) diff --git a/internal/proxy/task_query_test.go b/internal/proxy/task_query_test.go index 9b62b9ece5..07631390d7 100644 --- a/internal/proxy/task_query_test.go +++ b/internal/proxy/task_query_test.go @@ -1045,6 +1045,29 @@ func TestQueryTask_CanSkipAllocTimestamp(t *testing.T) { assert.False(t, skip) }) + t.Run("legacy_guarantee_ts", func(t *testing.T) { + qt := &queryTask{ + request: &milvuspb.QueryRequest{ + Base: nil, + DbName: dbName, + CollectionName: collName, + UseDefaultConsistency: false, + ConsistencyLevel: commonpb.ConsistencyLevel_Strong, + }, + } + + skip := qt.CanSkipAllocTimestamp() + assert.False(t, skip) + + qt.request.GuaranteeTimestamp = 1 // eventually + skip = qt.CanSkipAllocTimestamp() + assert.True(t, skip) + + qt.request.GuaranteeTimestamp = 2 // bounded + skip = qt.CanSkipAllocTimestamp() + assert.True(t, skip) + }) + t.Run("failed", func(t *testing.T) { mockMetaCache.ExpectedCalls = nil mockMetaCache.EXPECT().GetCollectionID(mock.Anything, mock.Anything, mock.Anything).Return(collID, nil) diff --git a/internal/proxy/task_search.go b/internal/proxy/task_search.go index 59d58f83be..66f591064d 100644 --- a/internal/proxy/task_search.go +++ b/internal/proxy/task_search.go @@ -83,6 +83,10 @@ func (t *searchTask) CanSkipAllocTimestamp() bool { var consistencyLevel commonpb.ConsistencyLevel useDefaultConsistency := t.request.GetUseDefaultConsistency() if !useDefaultConsistency { + // legacy SDK & resultful behavior + if t.request.GetConsistencyLevel() == commonpb.ConsistencyLevel_Strong && t.request.GetGuaranteeTimestamp() > 0 { + return true + } consistencyLevel = t.request.GetConsistencyLevel() } else { collID, err := globalMetaCache.GetCollectionID(context.Background(), t.request.GetDbName(), t.request.GetCollectionName()) diff --git a/internal/proxy/task_search_test.go b/internal/proxy/task_search_test.go index 14b1b54da2..4e3b9c5287 100644 --- a/internal/proxy/task_search_test.go +++ b/internal/proxy/task_search_test.go @@ -2553,6 +2553,29 @@ func TestSearchTask_CanSkipAllocTimestamp(t *testing.T) { assert.False(t, skip) }) + t.Run("legacy_guarantee_ts", func(t *testing.T) { + st := &searchTask{ + request: &milvuspb.SearchRequest{ + Base: nil, + DbName: dbName, + CollectionName: collName, + UseDefaultConsistency: false, + ConsistencyLevel: commonpb.ConsistencyLevel_Strong, + }, + } + + skip := st.CanSkipAllocTimestamp() + assert.False(t, skip) + + st.request.GuaranteeTimestamp = 1 // eventually + skip = st.CanSkipAllocTimestamp() + assert.True(t, skip) + + st.request.GuaranteeTimestamp = 2 // bounded + skip = st.CanSkipAllocTimestamp() + assert.True(t, skip) + }) + t.Run("failed", func(t *testing.T) { mockMetaCache.ExpectedCalls = nil mockMetaCache.EXPECT().GetCollectionID(mock.Anything, mock.Anything, mock.Anything).Return(collID, nil)