Skip to content

Commit 32cdc4c

Browse files
committed
Big chunk of fixes
1 parent a4c84d3 commit 32cdc4c

19 files changed

+505
-484
lines changed

box_error_test.go

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -304,9 +304,7 @@ func TestErrorTypeEval(t *testing.T) {
304304

305305
for name, testcase := range tupleCases {
306306
t.Run(name, func(t *testing.T) {
307-
resp, err := conn.Eval("return ...", []interface{}{&testcase.tuple.val})
308-
require.Nil(t, err)
309-
data, err := resp.Decode()
307+
data, err := conn.Eval("return ...", []interface{}{&testcase.tuple.val})
310308
require.Nil(t, err)
311309
require.NotNil(t, data)
312310
require.Equal(t, len(data), 1)
@@ -438,14 +436,11 @@ func TestErrorTypeSelect(t *testing.T) {
438436
_, err := conn.Eval(insertEval, []interface{}{})
439437
require.Nilf(t, err, "Tuple has been successfully inserted")
440438

441-
var resp Response
442439
var offset uint32 = 0
443440
var limit uint32 = 1
444-
resp, err = conn.Select(space, index, offset, limit, IterEq,
441+
data, err := conn.Select(space, index, offset, limit, IterEq,
445442
[]interface{}{testcase.tuple.pk})
446443
require.Nil(t, err)
447-
data, err := resp.Decode()
448-
require.Nil(t, err)
449444
require.NotNil(t, data)
450445
require.Equalf(t, len(data), 1, "Exactly one tuple had been found")
451446
tpl, ok := data[0].([]interface{})

connection.go

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -97,9 +97,9 @@ func (d defaultLogger) Report(event ConnLogKind, conn *Connection, v ...interfac
9797
log.Printf("tarantool: last reconnect to %s failed: %s, giving it up",
9898
conn.Addr(), err)
9999
case LogUnexpectedResultId:
100-
respHeader := v[0].(Header)
100+
header := v[0].(Header)
101101
log.Printf("tarantool: connection %s got unexpected resultId (%d) in response",
102-
conn.Addr(), respHeader.RequestId)
102+
conn.Addr(), header.RequestId)
103103
case LogWatchEventReadFailed:
104104
err := v[0].(error)
105105
log.Printf("tarantool: unable to parse watch event: %s", err)
@@ -808,7 +808,7 @@ func (conn *Connection) reader(r io.Reader, c Conn) {
808808
return
809809
}
810810
buf := smallBuf{b: respBytes}
811-
respHeader, err := decodeHeader(conn.dec, &buf)
811+
header, err := decodeHeader(conn.dec, &buf)
812812
if err != nil {
813813
err = ClientError{
814814
ErrProtocolError,
@@ -818,10 +818,9 @@ func (conn *Connection) reader(r io.Reader, c Conn) {
818818
return
819819
}
820820

821-
baseResp := &BaseResponse{header: respHeader, buf: buf}
822821
var fut *Future = nil
823-
if iproto.Type(respHeader.Code) == iproto.IPROTO_EVENT {
824-
if event, err := readWatchEvent(&baseResp.buf); err == nil {
822+
if iproto.Type(header.Code) == iproto.IPROTO_EVENT {
823+
if event, err := readWatchEvent(&buf); err == nil {
825824
events <- event
826825
} else {
827826
err = ClientError{
@@ -831,23 +830,23 @@ func (conn *Connection) reader(r io.Reader, c Conn) {
831830
conn.opts.Logger.Report(LogWatchEventReadFailed, conn, err)
832831
}
833832
continue
834-
} else if respHeader.Code == PushCode {
835-
if fut = conn.peekFuture(respHeader.RequestId); fut != nil {
836-
resp := fut.req.CreateResponse(respHeader)
833+
} else if header.Code == PushCode {
834+
if fut = conn.peekFuture(header.RequestId); fut != nil {
835+
resp := &PushResponse{BaseResponse{header: header}}
837836
resp.SetBuf(buf)
838837
fut.AppendPush(resp)
839838
}
840839
} else {
841-
if fut = conn.fetchFuture(respHeader.RequestId); fut != nil {
842-
resp := fut.req.CreateResponse(respHeader)
840+
if fut = conn.fetchFuture(header.RequestId); fut != nil {
841+
resp := fut.req.CreateResponse(header)
843842
resp.SetBuf(buf)
844843
fut.SetResponse(resp)
845844
conn.markDone(fut)
846845
}
847846
}
848847

849848
if fut == nil {
850-
conn.opts.Logger.Report(LogUnexpectedResultId, conn, respHeader)
849+
conn.opts.Logger.Report(LogUnexpectedResultId, conn, header)
851850
}
852851
}
853852
}
@@ -1059,7 +1058,10 @@ func (conn *Connection) putFuture(fut *Future, req Request, streamId uint64) {
10591058

10601059
if req.Async() {
10611060
if fut = conn.fetchFuture(reqid); fut != nil {
1062-
resp := req.CreateResponse(Header{})
1061+
resp := req.CreateResponse(Header{
1062+
RequestId: reqid,
1063+
Code: OkCode,
1064+
})
10631065
fut.SetResponse(resp)
10641066
conn.markDone(fut)
10651067
}

connector.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,41 +13,41 @@ type Connector interface {
1313

1414
// Deprecated: the method will be removed in the next major version,
1515
// use a PingRequest object + Do() instead.
16-
Ping() (Response, error)
16+
Ping() ([]interface{}, error)
1717
// Deprecated: the method will be removed in the next major version,
1818
// use a SelectRequest object + Do() instead.
1919
Select(space, index interface{}, offset, limit uint32, iterator Iter,
20-
key interface{}) (Response, error)
20+
key interface{}) ([]interface{}, error)
2121
// Deprecated: the method will be removed in the next major version,
2222
// use an InsertRequest object + Do() instead.
23-
Insert(space interface{}, tuple interface{}) (Response, error)
23+
Insert(space interface{}, tuple interface{}) ([]interface{}, error)
2424
// Deprecated: the method will be removed in the next major version,
2525
// use a ReplicaRequest object + Do() instead.
26-
Replace(space interface{}, tuple interface{}) (Response, error)
26+
Replace(space interface{}, tuple interface{}) ([]interface{}, error)
2727
// Deprecated: the method will be removed in the next major version,
2828
// use a DeleteRequest object + Do() instead.
29-
Delete(space, index interface{}, key interface{}) (Response, error)
29+
Delete(space, index interface{}, key interface{}) ([]interface{}, error)
3030
// Deprecated: the method will be removed in the next major version,
3131
// use a UpdateRequest object + Do() instead.
32-
Update(space, index interface{}, key interface{}, ops *Operations) (Response, error)
32+
Update(space, index interface{}, key interface{}, ops *Operations) ([]interface{}, error)
3333
// Deprecated: the method will be removed in the next major version,
3434
// use a UpsertRequest object + Do() instead.
35-
Upsert(space interface{}, tuple interface{}, ops *Operations) (Response, error)
35+
Upsert(space interface{}, tuple interface{}, ops *Operations) ([]interface{}, error)
3636
// Deprecated: the method will be removed in the next major version,
3737
// use a CallRequest object + Do() instead.
38-
Call(functionName string, args interface{}) (Response, error)
38+
Call(functionName string, args interface{}) ([]interface{}, error)
3939
// Deprecated: the method will be removed in the next major version,
4040
// use a Call16Request object + Do() instead.
41-
Call16(functionName string, args interface{}) (Response, error)
41+
Call16(functionName string, args interface{}) ([]interface{}, error)
4242
// Deprecated: the method will be removed in the next major version,
4343
// use a Call17Request object + Do() instead.
44-
Call17(functionName string, args interface{}) (Response, error)
44+
Call17(functionName string, args interface{}) ([]interface{}, error)
4545
// Deprecated: the method will be removed in the next major version,
4646
// use an EvalRequest object + Do() instead.
47-
Eval(expr string, args interface{}) (Response, error)
47+
Eval(expr string, args interface{}) ([]interface{}, error)
4848
// Deprecated: the method will be removed in the next major version,
4949
// use an ExecuteRequest object + Do() instead.
50-
Execute(expr string, args interface{}) (Response, error)
50+
Execute(expr string, args interface{}) ([]interface{}, error)
5151

5252
// Deprecated: the method will be removed in the next major version,
5353
// use a SelectRequest object + Do() instead.

crud/common.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -86,9 +86,7 @@ func (req baseRequest) Async() bool {
8686

8787
// CreateResponse creates a response for the baseRequest.
8888
func (req baseRequest) CreateResponse(header tarantool.Header) tarantool.Response {
89-
resp := tarantool.BaseResponse{}
90-
resp.SetHeader(header)
91-
return &resp
89+
return req.impl.CreateResponse(header)
9290
}
9391

9492
type spaceRequest struct {

crud/select.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,5 @@ func (req SelectRequest) Context(ctx context.Context) SelectRequest {
136136

137137
// CreateResponse creates a response for the SelectRequest.
138138
func (req SelectRequest) CreateResponse(header tarantool.Header) tarantool.Response {
139-
resp := tarantool.SelectResponse{}
140-
resp.SetHeader(header)
141-
return &resp
139+
return req.impl.CreateResponse(header)
142140
}

dial.go

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,8 @@ import (
1212
"strings"
1313
"time"
1414

15-
"github.com/vmihailenco/msgpack/v5"
16-
1715
"github.com/tarantool/go-iproto"
16+
"github.com/vmihailenco/msgpack/v5"
1817
)
1918

2019
const bufSize = 128 * 1024
@@ -401,19 +400,15 @@ func identify(w writeFlusher, r io.Reader) (ProtocolInfo, error) {
401400

402401
resp, err := readResponse(r)
403402
if err != nil {
403+
if iproto.Error(resp.Header().Code) == iproto.ER_UNKNOWN_REQUEST_TYPE {
404+
// IPROTO_ID requests are not supported by server.
405+
return info, nil
406+
}
404407
return info, err
405408
}
406409
data, err := resp.Decode()
407410
if err != nil {
408-
switch err := err.(type) {
409-
case Error:
410-
if err.Code == iproto.ER_UNKNOWN_REQUEST_TYPE {
411-
return info, nil
412-
}
413-
return info, err
414-
default:
415-
return info, fmt.Errorf("decode response body error: %w", err)
416-
}
411+
return info, err
417412
}
418413

419414
if len(data) == 0 {
@@ -515,8 +510,8 @@ func readResponse(r io.Reader) (Response, error) {
515510
}
516511

517512
buf := smallBuf{b: respBytes}
518-
respHeader, err := decodeHeader(msgpack.NewDecoder(&smallBuf{}), &buf)
519-
resp := &BaseResponse{header: respHeader, buf: buf}
513+
header, err := decodeHeader(msgpack.NewDecoder(&smallBuf{}), &buf)
514+
resp := &BaseResponse{header: header, buf: buf}
520515
if err != nil {
521516
return resp, fmt.Errorf("decode response header error: %w", err)
522517
}

dial_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -303,8 +303,9 @@ func TestConn_ReadWrite(t *testing.T) {
303303
0x80, // Empty map.
304304
}, dialer.conn.writebuf.Bytes())
305305

306-
_, err := fut.Get()
306+
resp, err := fut.GetResponse()
307307
assert.Nil(t, err)
308+
assert.NotNil(t, resp)
308309
}
309310

310311
func TestConn_ContextCancel(t *testing.T) {

example_test.go

Lines changed: 42 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -575,8 +575,12 @@ func ExampleExecuteRequest() {
575575
fmt.Printf("wrong response type")
576576
return
577577
}
578-
fmt.Println("MetaData", exResp.MetaData())
579-
fmt.Println("SQL Info", exResp.SQLInfo())
578+
metaData, err := exResp.MetaData()
579+
fmt.Println("MetaData", metaData)
580+
fmt.Println("Error", err)
581+
sqlInfo, err := exResp.SQLInfo()
582+
fmt.Println("SQL Info", sqlInfo)
583+
fmt.Println("Error", err)
580584

581585
// There are 4 options to pass named parameters to an SQL query:
582586
// 1) The simple map;
@@ -618,8 +622,12 @@ func ExampleExecuteRequest() {
618622
fmt.Printf("wrong response type")
619623
return
620624
}
621-
fmt.Println("MetaData", exResp.MetaData())
622-
fmt.Println("SQL Info", exResp.SQLInfo())
625+
metaData, err = exResp.MetaData()
626+
fmt.Println("MetaData", metaData)
627+
fmt.Println("Error", err)
628+
sqlInfo, err = exResp.SQLInfo()
629+
fmt.Println("SQL Info", sqlInfo)
630+
fmt.Println("Error", err)
623631

624632
// 2)
625633
req = req.Args(sqlBind2)
@@ -634,8 +642,12 @@ func ExampleExecuteRequest() {
634642
fmt.Printf("wrong response type")
635643
return
636644
}
637-
fmt.Println("MetaData", exResp.MetaData())
638-
fmt.Println("SQL Info", exResp.SQLInfo())
645+
metaData, err = exResp.MetaData()
646+
fmt.Println("MetaData", metaData)
647+
fmt.Println("Error", err)
648+
sqlInfo, err = exResp.SQLInfo()
649+
fmt.Println("SQL Info", sqlInfo)
650+
fmt.Println("Error", err)
639651

640652
// 3)
641653
req = req.Args(sqlBind3)
@@ -650,8 +662,12 @@ func ExampleExecuteRequest() {
650662
fmt.Printf("wrong response type")
651663
return
652664
}
653-
fmt.Println("MetaData", exResp.MetaData())
654-
fmt.Println("SQL Info", exResp.SQLInfo())
665+
metaData, err = exResp.MetaData()
666+
fmt.Println("MetaData", metaData)
667+
fmt.Println("Error", err)
668+
sqlInfo, err = exResp.SQLInfo()
669+
fmt.Println("SQL Info", sqlInfo)
670+
fmt.Println("Error", err)
655671

656672
// 4)
657673
req = req.Args(sqlBind4)
@@ -666,8 +682,12 @@ func ExampleExecuteRequest() {
666682
fmt.Printf("wrong response type")
667683
return
668684
}
669-
fmt.Println("MetaData", exResp.MetaData())
670-
fmt.Println("SQL Info", exResp.SQLInfo())
685+
metaData, err = exResp.MetaData()
686+
fmt.Println("MetaData", metaData)
687+
fmt.Println("Error", err)
688+
sqlInfo, err = exResp.SQLInfo()
689+
fmt.Println("SQL Info", sqlInfo)
690+
fmt.Println("Error", err)
671691

672692
// The way to pass positional arguments to an SQL query.
673693
req = tarantool.NewExecuteRequest(
@@ -684,8 +704,12 @@ func ExampleExecuteRequest() {
684704
fmt.Printf("wrong response type")
685705
return
686706
}
687-
fmt.Println("MetaData", exResp.MetaData())
688-
fmt.Println("SQL Info", exResp.SQLInfo())
707+
metaData, err = exResp.MetaData()
708+
fmt.Println("MetaData", metaData)
709+
fmt.Println("Error", err)
710+
sqlInfo, err = exResp.SQLInfo()
711+
fmt.Println("SQL Info", sqlInfo)
712+
fmt.Println("Error", err)
689713

690714
// The way to pass SQL expression with using custom packing/unpacking for
691715
// a type.
@@ -715,8 +739,12 @@ func ExampleExecuteRequest() {
715739
fmt.Printf("wrong response type")
716740
return
717741
}
718-
fmt.Println("MetaData", exResp.MetaData())
719-
fmt.Println("SQL Info", exResp.SQLInfo())
742+
metaData, err = exResp.MetaData()
743+
fmt.Println("MetaData", metaData)
744+
fmt.Println("Error", err)
745+
sqlInfo, err = exResp.SQLInfo()
746+
fmt.Println("SQL Info", sqlInfo)
747+
fmt.Println("Error", err)
720748
}
721749

722750
func getTestTxnDialer() tarantool.Dialer {

future.go

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -192,11 +192,7 @@ func (fut *Future) SetError(err error) {
192192
// or ClientError, if something bad happens in a client process.
193193
func (fut *Future) GetResponse() (Response, error) {
194194
fut.wait()
195-
if fut.err != nil {
196-
return fut.resp, fut.err
197-
}
198-
_, err := fut.resp.Decode()
199-
return fut.resp, err
195+
return fut.resp, fut.err
200196
}
201197

202198
// Get waits for Future to be filled and returns the data of the Response and error.

0 commit comments

Comments
 (0)