Skip to content

Commit ec65efa

Browse files
authored
Merge pull request #72 from datastax/use-cluster-cql-version
Return server-side cql version for supported options
2 parents 6ca66c8 + 8ba6553 commit ec65efa

File tree

5 files changed

+44
-9
lines changed

5 files changed

+44
-9
lines changed

proxy/proxy.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ type Proxy struct {
7878
systemLocalValues map[string]message.Column
7979
}
8080

81-
func (p *Proxy) OnEvent(event interface{}) {
81+
func (p *Proxy) OnEvent(event proxycore.Event) {
8282
switch evt := event.(type) {
8383
case *proxycore.SchemaChangeEvent:
8484
frm := frame.NewFrame(p.cluster.NegotiatedVersion, -1, evt.Message)
@@ -356,7 +356,10 @@ func (c *client) Receive(reader io.Reader) error {
356356

357357
switch msg := body.Message.(type) {
358358
case *message.Options:
359-
c.send(raw.Header, &message.Supported{Options: map[string][]string{"CQL_VERSION": {"3.0.0"}, "COMPRESSION": {}}})
359+
c.send(raw.Header, &message.Supported{Options: map[string][]string{
360+
"CQL_VERSION": {c.proxy.cluster.Info.CQLVersion},
361+
"COMPRESSION": {},
362+
}})
360363
case *message.Startup:
361364
c.send(raw.Header, &message.Ready{})
362365
case *message.Register:

proxycore/cluster.go

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,33 +33,65 @@ const (
3333
DefaultRefreshTimeout = 5 * time.Second
3434
)
3535

36+
type Event interface {
37+
isEvent() // Marker method for the event interface
38+
}
39+
3640
type AddEvent struct {
3741
Host *Host
3842
}
3943

44+
func (a AddEvent) isEvent() {
45+
panic("do not call")
46+
}
47+
4048
type RemoveEvent struct {
4149
Host *Host
4250
}
4351

52+
func (r RemoveEvent) isEvent() {
53+
panic("do not call")
54+
}
55+
56+
type UpEvent struct {
57+
Host *Host
58+
}
59+
60+
func (a UpEvent) isEvent() {
61+
panic("do not call")
62+
}
63+
4464
type BootstrapEvent struct {
4565
Hosts []*Host
4666
}
4767

68+
func (b BootstrapEvent) isEvent() {
69+
panic("do not call")
70+
}
71+
4872
type SchemaChangeEvent struct {
4973
Message *message.SchemaChangeEvent
5074
}
5175

76+
func (s SchemaChangeEvent) isEvent() {
77+
panic("do not call")
78+
}
79+
5280
type ReconnectEvent struct {
5381
Endpoint
5482
}
5583

84+
func (r ReconnectEvent) isEvent() {
85+
panic("do not call")
86+
}
87+
5688
type ClusterListener interface {
57-
OnEvent(event interface{})
89+
OnEvent(event Event)
5890
}
5991

60-
type ClusterListenerFunc func(event interface{})
92+
type ClusterListenerFunc func(event Event)
6193

62-
func (f ClusterListenerFunc) OnEvent(event interface{}) {
94+
func (f ClusterListenerFunc) OnEvent(event Event) {
6395
f(event)
6496
}
6597

@@ -236,7 +268,7 @@ func (c *Cluster) mergeHosts(hosts []*Host) error {
236268
return nil
237269
}
238270

239-
func (c *Cluster) sendEvent(event interface{}) {
271+
func (c *Cluster) sendEvent(event Event) {
240272
for _, listener := range c.listeners {
241273
listener.OnEvent(event)
242274
}

proxycore/cluster_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ func TestConnectCluster(t *testing.T) {
5656

5757
events := make(chan interface{})
5858

59-
err = cluster.Listen(ClusterListenerFunc(func(event interface{}) {
59+
err = cluster.Listen(ClusterListenerFunc(func(event Event) {
6060
events <- event
6161
}))
6262
require.NoError(t, err)

proxycore/lb.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ type roundRobinLoadBalancer struct {
4242
mu *sync.Mutex
4343
}
4444

45-
func (l *roundRobinLoadBalancer) OnEvent(event interface{}) {
45+
func (l *roundRobinLoadBalancer) OnEvent(event Event) {
4646
l.mu.Lock()
4747
defer l.mu.Unlock()
4848

proxycore/session.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ func (s *Session) leastBusyConn(host *Host) *ClientConn {
106106
return nil
107107
}
108108

109-
func (s *Session) OnEvent(event interface{}) {
109+
func (s *Session) OnEvent(event Event) {
110110
switch evt := event.(type) {
111111
case *BootstrapEvent:
112112
go func() {

0 commit comments

Comments
 (0)