Skip to content

Commit 26f9653

Browse files
authored
Merge pull request #182 from ydb-platform/local-dc
replace cluster.Update to cluster.Remove + cluster.Insert
2 parents 9040b9c + 7fa8238 commit 26f9653

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+584
-598
lines changed

CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
* Refactored `cluster.Cluster` and `balancer.Balancer` interfaces (removed `Update` method)
2+
* Replaced `cluster.Update` with `cluster.Remove` and `cluster.Insert` calls
3+
* Removed `trace.Driver.OnClusterUpdate` event
4+
* Fixed bug with unexpected changing of local datacenter flag in endpoint
5+
* Refactored errors wrapping (stackedError are not ydb error now, checking `errors.IsYdb(err)` with `errors.As` now)
6+
* Wrapped retry operation errors with `errors.WithStackTrace(err)`
7+
* Changed `trace.RetryLoopStartInfo.Context` type from `context.Context` to `*context.Context`
8+
19
## v3.16.9
210
* Refactored internal operation and transport errors
311

balancers/config_test.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import (
55

66
"github.com/ydb-platform/ydb-go-sdk/v3/internal/balancer"
77
"github.com/ydb-platform/ydb-go-sdk/v3/internal/conn"
8-
"github.com/ydb-platform/ydb-go-sdk/v3/internal/endpoint/info"
98
)
109

1110
type testBalancer struct{}
@@ -22,7 +21,7 @@ func (t testBalancer) Insert(conn conn.Conn) balancer.Element {
2221
panic("unexpected call")
2322
}
2423

25-
func (t testBalancer) Update(element balancer.Element, info info.Info) {
24+
func (t testBalancer) Update(element balancer.Element) {
2625
panic("unexpected call")
2726
}
2827

internal/balancer/balancer.go

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package balancer
22

33
import (
44
"github.com/ydb-platform/ydb-go-sdk/v3/internal/conn"
5-
"github.com/ydb-platform/ydb-go-sdk/v3/internal/endpoint/info"
65
)
76

87
// Element is an empty interface that holds some Balancer specific data.
@@ -21,9 +20,6 @@ type Balancer interface {
2120
// Insert inserts new connection.
2221
Insert(conn.Conn) Element
2322

24-
// Update updates previously inserted connection.
25-
Update(Element, info.Info)
26-
2723
// Remove removes previously inserted connection.
2824
Remove(Element) bool
2925

internal/balancer/list/list.go

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,11 @@ package list
22

33
import (
44
"github.com/ydb-platform/ydb-go-sdk/v3/internal/conn"
5-
"github.com/ydb-platform/ydb-go-sdk/v3/internal/endpoint/info"
65
)
76

87
type Element struct {
98
Index int
109
Conn conn.Conn
11-
Info info.Info
1210
}
1311

1412
type List []*Element
@@ -17,12 +15,6 @@ func (cs *List) Insert(cc conn.Conn) *Element {
1715
e := &Element{
1816
Index: len(*cs),
1917
Conn: cc,
20-
Info: info.Info{
21-
Address: cc.Endpoint().Address(),
22-
ID: cc.Endpoint().NodeID(),
23-
LoadFactor: cc.Endpoint().LoadFactor(),
24-
Local: cc.Endpoint().LocalDC(),
25-
},
2618
}
2719
*cs = append(*cs, e)
2820
return e

internal/balancer/multi/multi.go

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package multi
33
import (
44
"github.com/ydb-platform/ydb-go-sdk/v3/internal/balancer"
55
"github.com/ydb-platform/ydb-go-sdk/v3/internal/conn"
6-
"github.com/ydb-platform/ydb-go-sdk/v3/internal/endpoint/info"
76
)
87

98
func Balancer(opts ...Option) balancer.Balancer {
@@ -82,14 +81,6 @@ func (m *multi) Insert(conn conn.Conn) balancer.Element {
8281
return nil
8382
}
8483

85-
func (m *multi) Update(x balancer.Element, info info.Info) {
86-
for i, h := range x.(multiHandle).elements {
87-
if h != nil {
88-
m.balancer[i].Update(h, info)
89-
}
90-
}
91-
}
92-
9384
func (m *multi) Remove(x balancer.Element) (removed bool) {
9485
for i, h := range x.(multiHandle).elements {
9586
if h != nil {

internal/balancer/rr/rr.go

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import (
99
"github.com/ydb-platform/ydb-go-sdk/v3/internal/balancer"
1010
"github.com/ydb-platform/ydb-go-sdk/v3/internal/balancer/list"
1111
"github.com/ydb-platform/ydb-go-sdk/v3/internal/conn"
12-
"github.com/ydb-platform/ydb-go-sdk/v3/internal/endpoint/info"
1312
"github.com/ydb-platform/ydb-go-sdk/v3/internal/rand"
1413
)
1514

@@ -80,17 +79,10 @@ func (r *roundRobin) Insert(conn conn.Conn) balancer.Element {
8079
return e
8180
}
8281

83-
func (r *roundRobin) Update(el balancer.Element, info info.Info) {
84-
e := el.(*list.Element)
85-
e.Info = info
86-
r.updateMinMax(e.Conn)
87-
r.belt = r.distribute()
88-
}
89-
9082
func (r *roundRobin) Remove(x balancer.Element) bool {
9183
el := x.(*list.Element)
9284
r.conns.Remove(el)
93-
r.inspectMinMax(el.Info)
85+
r.inspectMinMax(el.Conn.Endpoint().LoadFactor())
9486
r.belt = r.distribute()
9587
return true
9688
}
@@ -120,13 +112,13 @@ func (r *roundRobin) updateMinMax(cc conn.Conn) {
120112
}
121113
}
122114

123-
func (r *roundRobin) inspectMinMax(info info.Info) {
124-
if r.min != info.LoadFactor && r.max != info.LoadFactor {
115+
func (r *roundRobin) inspectMinMax(loadFactor float32) {
116+
if r.min != loadFactor && r.max != loadFactor {
125117
return
126118
}
127119
var def bool
128120
for _, x := range r.conns {
129-
load := x.Info.LoadFactor
121+
load := x.Conn.Endpoint().LoadFactor()
130122
if !def {
131123
r.min = load
132124
r.max = load
@@ -156,7 +148,7 @@ func (r *roundRobin) spread(f func(float32) int32) []int {
156148
fill := func(state conn.State) (filled bool) {
157149
for _, x := range r.conns {
158150
if x.Conn.GetState() == state {
159-
d := f(x.Info.LoadFactor)
151+
d := f(x.Conn.Endpoint().LoadFactor())
160152
dist = append(dist, d)
161153
index = append(index, x.Index)
162154
filled = true

internal/balancer/single/single.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package single
33
import (
44
"github.com/ydb-platform/ydb-go-sdk/v3/internal/balancer"
55
"github.com/ydb-platform/ydb-go-sdk/v3/internal/conn"
6-
"github.com/ydb-platform/ydb-go-sdk/v3/internal/endpoint/info"
76
)
87

98
func Balancer() balancer.Balancer {
@@ -22,6 +21,10 @@ func (b *single) Next() conn.Conn {
2221
return b.conn
2322
}
2423

24+
func (b *single) Conn() conn.Conn {
25+
return b.conn
26+
}
27+
2528
func (b *single) Insert(conn conn.Conn) balancer.Element {
2629
if b.conn != nil {
2730
panic("ydb: single Conn Balancer: double Insert()")
@@ -38,8 +41,6 @@ func (b *single) Remove(x balancer.Element) bool {
3841
return true
3942
}
4043

41-
func (b *single) Update(balancer.Element, info.Info) {}
42-
4344
func (b *single) Contains(x balancer.Element) bool {
4445
if x == nil {
4546
return false

internal/balancer/stub/stub.go

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,11 @@ import (
66
"github.com/ydb-platform/ydb-go-sdk/v3/internal/balancer"
77
"github.com/ydb-platform/ydb-go-sdk/v3/internal/balancer/list"
88
"github.com/ydb-platform/ydb-go-sdk/v3/internal/conn"
9-
"github.com/ydb-platform/ydb-go-sdk/v3/internal/endpoint/info"
109
)
1110

1211
type stubBalancer struct {
1312
OnNext func() conn.Conn
1413
OnInsert func(conn.Conn) balancer.Element
15-
OnUpdate func(balancer.Element, info.Info)
1614
OnRemove func(balancer.Element) bool
1715
OnPessimize func(context.Context, balancer.Element) error
1816
OnContains func(balancer.Element) bool
@@ -40,10 +38,6 @@ func Balancer() (*list.List, balancer.Balancer) {
4038
cs.Remove(e)
4139
return true
4240
},
43-
OnUpdate: func(x balancer.Element, info info.Info) {
44-
e := x.(*list.Element)
45-
e.Info = info
46-
},
4741
OnPessimize: func(ctx context.Context, x balancer.Element) error {
4842
e := x.(*list.Element)
4943
e.Conn.SetState(conn.Banned)
@@ -77,12 +71,6 @@ func (s stubBalancer) Insert(c conn.Conn) balancer.Element {
7771
return nil
7872
}
7973

80-
func (s stubBalancer) Update(el balancer.Element, i info.Info) {
81-
if f := s.OnUpdate; f != nil {
82-
f(el, i)
83-
}
84-
}
85-
8674
func (s stubBalancer) Remove(el balancer.Element) bool {
8775
if f := s.OnRemove; f != nil {
8876
return f(el)

internal/balancer/test/balancer_test.go

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import (
1313
"github.com/ydb-platform/ydb-go-sdk/v3/internal/balancer/stub"
1414
"github.com/ydb-platform/ydb-go-sdk/v3/internal/conn"
1515
"github.com/ydb-platform/ydb-go-sdk/v3/internal/endpoint"
16-
"github.com/ydb-platform/ydb-go-sdk/v3/internal/endpoint/info"
1716
)
1817

1918
func isEvenConn(c conn.Conn) bool {
@@ -39,10 +38,10 @@ func TestMulti(t *testing.T) {
3938
it(cs1)
4039
it(cs2)
4140
}
42-
forEachConn := func(it func(conn.Conn, info.Info)) {
41+
forEachConn := func(it func(conn.Conn)) {
4342
forEachList(func(cs *list.List) {
4443
for _, e := range *cs {
45-
it(e.Conn, e.Info)
44+
it(e.Conn)
4645
}
4746
})
4847
}
@@ -52,6 +51,7 @@ func TestMulti(t *testing.T) {
5251
)
5352
const n = 100
5453
var (
54+
cc = make([]conn.Conn, n)
5555
es = make([]balancer.Element, n)
5656
el = make(map[conn.Conn]balancer.Element, n)
5757
)
@@ -60,6 +60,7 @@ func TestMulti(t *testing.T) {
6060
e := m.Insert(c)
6161
es[i] = e
6262
el[c] = e
63+
cc[i] = c
6364
}
6465
forEachList(func(cs *list.List) {
6566
if act, exp := len(*cs), n/2; act != exp {
@@ -70,12 +71,10 @@ func TestMulti(t *testing.T) {
7071
}
7172
})
7273
for i := 0; i < n; i++ {
73-
m.Update(es[i], info.Info{
74-
LoadFactor: 1,
75-
})
74+
cc[i].Endpoint().Touch(endpoint.WithLoadFactor(1))
7675
}
77-
forEachConn(func(conn conn.Conn, info info.Info) {
78-
if act, exp := info.LoadFactor, float32(1); act != exp {
76+
forEachConn(func(conn conn.Conn) {
77+
if act, exp := conn.Endpoint().LoadFactor(), float32(1); act != exp {
7978
t.Errorf(
8079
"unexpected load factor: %f; want %f",
8180
act, exp,

0 commit comments

Comments
 (0)