1- package state
1+ package cluster
22
33import (
44 "context"
@@ -11,20 +11,19 @@ import (
1111
1212 "github.com/ydb-platform/ydb-go-sdk/v3/internal/endpoint"
1313 "github.com/ydb-platform/ydb-go-sdk/v3/internal/mock"
14- "github.com/ydb-platform/ydb-go-sdk/v3/internal/xslices"
1514 "github.com/ydb-platform/ydb-go-sdk/v3/internal/xtest"
1615)
1716
18- func TestState (t * testing.T ) {
17+ func TestCluster (t * testing.T ) {
1918 ctx := xtest .Context (t )
2019
2120 t .Run ("Nil" , func (t * testing.T ) {
22- var s * state
21+ var s * Cluster
2322
2423 require .Empty (t , s .All ())
2524
2625 e , err := s .Next (ctx )
27- require .ErrorIs (t , err , ErrNilState )
26+ require .ErrorIs (t , err , ErrNilPtr )
2827 require .Nil (t , e )
2928 })
3029
@@ -69,7 +68,7 @@ func TestState(t *testing.T) {
6968 require .Nil (t , e )
7069 })
7170
72- t .Run ("Exclude " , func (t * testing.T ) {
71+ t .Run ("Without " , func (t * testing.T ) {
7372 s := New ([]endpoint.Endpoint {
7473 & mock.Endpoint {
7574 AddrField : "1" ,
@@ -93,35 +92,72 @@ func TestState(t *testing.T) {
9392 },
9493 })
9594
96- var endpoints []endpoint.Endpoint
95+ { // initial state
96+ require .Len (t , s .All (), 5 )
97+ require .Len (t , s .index , 5 )
98+ require .Len (t , s .prefer , 5 )
99+ }
97100
98- for i := 0 ; i < 5 ; i ++ {
101+ { // without first endpoint
99102 e , err := s .Next (ctx )
100103 require .NoError (t , err )
101104 require .NotNil (t , e )
102- endpoints = append (endpoints , e )
103- s = s .Exclude (e )
104- require .Len (t , s .All (), 4 - i )
105+ s = Without (s , e )
106+ require .Len (t , s .All (), 5 )
107+ require .Len (t , s .index , 5 )
108+ require .Len (t , s .prefer , 4 )
109+ require .Len (t , s .fallback , 1 )
105110 }
106111
107- e , err := s .Next (ctx )
108- require .ErrorIs (t , err , ErrNoEndpoints )
109- require .Nil (t , e )
110- require .Empty (t , s .All ())
112+ { // without second endpoint
113+ e , err := s .Next (ctx )
114+ require .NoError (t , err )
115+ require .NotNil (t , e )
116+ s = Without (s , e )
117+ require .Len (t , s .All (), 5 )
118+ require .Len (t , s .index , 5 )
119+ require .Len (t , s .prefer , 3 )
120+ require .Len (t , s .fallback , 2 )
121+ }
111122
112- require .Equal (t ,
113- []uint32 {1 , 2 , 3 , 4 , 5 },
114- xslices .SortCopy (
115- xslices .Transform (
116- endpoints ,
117- func (e endpoint.Endpoint ) uint32 {
118- return e .NodeID ()
119- },
120- ), func (lhs , rhs uint32 ) int {
121- return int (lhs ) - int (rhs )
122- },
123- ),
124- )
123+ { // without third endpoint
124+ e , err := s .Next (ctx )
125+ require .NoError (t , err )
126+ require .NotNil (t , e )
127+ s = Without (s , e )
128+ require .Len (t , s .All (), 5 )
129+ require .Len (t , s .index , 5 )
130+ require .Len (t , s .prefer , 2 )
131+ require .Len (t , s .fallback , 3 )
132+ }
133+
134+ { // without fourth endpoint
135+ e , err := s .Next (ctx )
136+ require .NoError (t , err )
137+ require .NotNil (t , e )
138+ s = Without (s , e )
139+ require .Len (t , s .All (), 5 )
140+ require .Len (t , s .index , 5 )
141+ require .Len (t , s .prefer , 1 )
142+ require .Len (t , s .fallback , 4 )
143+ }
144+
145+ { // without fifth endpoint
146+ e , err := s .Next (ctx )
147+ require .NoError (t , err )
148+ require .NotNil (t , e )
149+ s = Without (s , e )
150+ require .Len (t , s .All (), 5 )
151+ require .Len (t , s .index , 5 )
152+ require .Empty (t , s .prefer )
153+ require .Len (t , s .fallback , 5 )
154+ }
155+
156+ { // next from fallback is ok
157+ e , err := s .Next (ctx )
158+ require .NoError (t , err )
159+ require .NotNil (t , e )
160+ }
125161 })
126162
127163 t .Run ("WithFilter" , func (t * testing.T ) {
@@ -173,7 +209,7 @@ func TestState(t *testing.T) {
173209 },
174210 }, WithFilter (func (e endpoint.Info ) bool {
175211 return e .NodeID ()% 2 == 0
176- }), WithFallback ())
212+ }), WithFallback (true ))
177213
178214 require .Len (t , s .index , 4 )
179215 require .Len (t , s .All (), 4 )
@@ -189,7 +225,7 @@ func TestState(t *testing.T) {
189225 },
190226 }, WithFilter (func (e endpoint.Info ) bool {
191227 return false
192- }), WithFallback ())
228+ }), WithFallback (true ))
193229
194230 require .Len (t , s .index , 1 )
195231 require .Len (t , s .All (), 1 )
@@ -236,7 +272,7 @@ func TestState(t *testing.T) {
236272 const (
237273 buckets = 10
238274 total = 1000000
239- epsilon = int (float64 (total ) / float64 (buckets ) * 0.01 )
275+ epsilon = int (float64 (total ) / float64 (buckets ) * 0.015 )
240276 )
241277 endpoints := make ([]endpoint.Endpoint , buckets )
242278
@@ -321,7 +357,7 @@ func benchmarkNextParallel(b *testing.B, parallelism int) {
321357 },
322358 }, WithFilter (func (e endpoint.Info ) bool {
323359 return e .NodeID ()% 2 == 0
324- }), WithFallback ())
360+ }), WithFallback (true ))
325361
326362 b .ReportAllocs ()
327363
0 commit comments