@@ -150,3 +150,45 @@ func TestLoadEmpty(t *testing.T) {
150150 re .NoError (err )
151151 re .Nil (serviceSafePoint )
152152}
153+
154+ func TestGlobalServiceSafePoint (t * testing.T ) {
155+ // expectMinServiceSafePoint is a very small value,
156+ // we set NativeBRServiceID's service safe point to expectMinServiceSafePoint,
157+ // and check min service safe point V2 is expectMinServiceSafePoint.
158+ expectMinServiceSafePoint := uint64 (50 )
159+
160+ re := require .New (t )
161+ storage := NewStorageWithMemoryBackend ()
162+ currentTime := time .Now ()
163+ expireAt1 := currentTime .Add (1000 * time .Second ).Unix ()
164+ expireAt2 := currentTime .Add (2000 * time .Second ).Unix ()
165+ expireAt3 := currentTime .Add (3000 * time .Second ).Unix ()
166+
167+ testKeyspaceID := uint32 (1 )
168+ serviceSafePoints := []* endpoint.ServiceSafePointV2 {
169+ {KeyspaceID : testKeyspaceID , ServiceID : "0" , ExpiredAt : expireAt1 , SafePoint : 300 },
170+ {KeyspaceID : testKeyspaceID , ServiceID : "1" , ExpiredAt : expireAt2 , SafePoint : 400 },
171+ {KeyspaceID : testKeyspaceID , ServiceID : "2" , ExpiredAt : expireAt3 , SafePoint : 500 },
172+ }
173+
174+ globalServiceIDs := []string {keypath .NativeBRServiceID , "test01" }
175+ minGlobalSafePoints := []uint64 {expectMinServiceSafePoint , expectMinServiceSafePoint + 1 }
176+
177+ for i , globalServiceID := range globalServiceIDs {
178+ ssp := & endpoint.ServiceSafePoint {
179+ ServiceID : globalServiceID ,
180+ ExpiredAt : expireAt3 ,
181+ SafePoint : minGlobalSafePoints [i ],
182+ }
183+ storage .SaveServiceGCSafePoint (ssp )
184+ }
185+
186+ for _ , serviceSafePoint := range serviceSafePoints {
187+ re .NoError (storage .SaveServiceSafePointV2 (serviceSafePoint ))
188+ }
189+ // enabling failpoint to make expired key removal immediately observable
190+ re .NoError (failpoint .Enable ("github.com/tikv/pd/pkg/storage/endpoint/removeExpiredKeys" , "return(true)" ))
191+ minSafePoint , err := storage .LoadMinServiceSafePointV2 (testKeyspaceID , currentTime )
192+ re .NoError (err )
193+ re .Equal (expectMinServiceSafePoint , minSafePoint .SafePoint )
194+ }
0 commit comments