Skip to content

Commit 009084f

Browse files
committed
crud: make less allocations
In this patch, we try to make less allocations per a request. Part of #271
1 parent 7c99521 commit 009084f

24 files changed

+236
-219
lines changed

crud/common.go

+5-9
Original file line numberDiff line numberDiff line change
@@ -63,30 +63,26 @@ type baseRequest struct {
6363
impl *tarantool.CallRequest
6464
}
6565

66-
func (req *baseRequest) initImpl(methodName string) {
67-
req.impl = tarantool.NewCall17Request(methodName)
66+
func newCall(method string) *tarantool.CallRequest {
67+
return tarantool.NewCall17Request(method)
6868
}
6969

7070
// Code returns IPROTO code for CRUD request.
71-
func (req *baseRequest) Code() int32 {
71+
func (req baseRequest) Code() int32 {
7272
return req.impl.Code()
7373
}
7474

7575
// Ctx returns a context of CRUD request.
76-
func (req *baseRequest) Ctx() context.Context {
76+
func (req baseRequest) Ctx() context.Context {
7777
return req.impl.Ctx()
7878
}
7979

8080
// Async returns is CRUD request expects a response.
81-
func (req *baseRequest) Async() bool {
81+
func (req baseRequest) Async() bool {
8282
return req.impl.Async()
8383
}
8484

8585
type spaceRequest struct {
8686
baseRequest
8787
space string
8888
}
89-
90-
func (req *spaceRequest) setSpace(space string) {
91-
req.space = space
92-
}

crud/count.go

+13-7
Original file line numberDiff line numberDiff line change
@@ -42,17 +42,23 @@ type CountOpts struct {
4242
func (opts CountOpts) EncodeMsgpack(enc *encoder) error {
4343
const optsCnt = 9
4444

45-
options := [optsCnt]option{opts.Timeout, opts.VshardRouter,
46-
opts.Mode, opts.PreferReplica, opts.Balance,
47-
opts.YieldEvery, opts.BucketId, opts.ForceMapCall,
48-
opts.Fullscan}
4945
names := [optsCnt]string{timeoutOptName, vshardRouterOptName,
5046
modeOptName, preferReplicaOptName, balanceOptName,
5147
yieldEveryOptName, bucketIdOptName, forceMapCallOptName,
5248
fullscanOptName}
5349
values := [optsCnt]interface{}{}
50+
exists := [optsCnt]bool{}
51+
values[0], exists[0] = opts.Timeout.Get()
52+
values[1], exists[1] = opts.VshardRouter.Get()
53+
values[2], exists[2] = opts.Mode.Get()
54+
values[3], exists[3] = opts.PreferReplica.Get()
55+
values[4], exists[4] = opts.Balance.Get()
56+
values[5], exists[5] = opts.YieldEvery.Get()
57+
values[6], exists[6] = opts.BucketId.Get()
58+
values[7], exists[7] = opts.ForceMapCall.Get()
59+
values[8], exists[8] = opts.Fullscan.Get()
5460

55-
return encodeOptions(enc, options[:], names[:], values[:])
61+
return encodeOptions(enc, names[:], values[:], exists[:])
5662
}
5763

5864
// CountRequest helps you to create request object to call `crud.count`
@@ -73,8 +79,8 @@ type countArgs struct {
7379
// NewCountRequest returns a new empty CountRequest.
7480
func NewCountRequest(space string) *CountRequest {
7581
req := new(CountRequest)
76-
req.initImpl("crud.count")
77-
req.setSpace(space)
82+
req.impl = newCall("crud.count")
83+
req.space = space
7884
req.conditions = nil
7985
req.opts = CountOpts{}
8086
return req

crud/delete.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ type deleteArgs struct {
2727
// NewDeleteRequest returns a new empty DeleteRequest.
2828
func NewDeleteRequest(space string) *DeleteRequest {
2929
req := new(DeleteRequest)
30-
req.initImpl("crud.delete")
31-
req.setSpace(space)
30+
req.impl = newCall("crud.delete")
31+
req.space = space
3232
req.key = []interface{}{}
3333
req.opts = DeleteOpts{}
3434
return req

crud/get.go

+10-6
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,19 @@ type GetOpts struct {
3333
func (opts GetOpts) EncodeMsgpack(enc *encoder) error {
3434
const optsCnt = 7
3535

36-
options := [optsCnt]option{opts.Timeout, opts.VshardRouter,
37-
opts.Fields, opts.BucketId, opts.Mode,
38-
opts.PreferReplica, opts.Balance}
3936
names := [optsCnt]string{timeoutOptName, vshardRouterOptName,
4037
fieldsOptName, bucketIdOptName, modeOptName,
4138
preferReplicaOptName, balanceOptName}
4239
values := [optsCnt]interface{}{}
40+
exists := [optsCnt]bool{}
41+
values[0], exists[0] = opts.Timeout.Get()
42+
values[1], exists[1] = opts.VshardRouter.Get()
43+
values[1], exists[1] = opts.BucketId.Get()
44+
values[2], exists[2] = opts.Mode.Get()
45+
values[3], exists[3] = opts.PreferReplica.Get()
46+
values[4], exists[4] = opts.Balance.Get()
4347

44-
return encodeOptions(enc, options[:], names[:], values[:])
48+
return encodeOptions(enc, names[:], values[:], exists[:])
4549
}
4650

4751
// GetRequest helps you to create request object to call `crud.get`
@@ -62,8 +66,8 @@ type getArgs struct {
6266
// NewGetRequest returns a new empty GetRequest.
6367
func NewGetRequest(space string) *GetRequest {
6468
req := new(GetRequest)
65-
req.initImpl("crud.get")
66-
req.setSpace(space)
69+
req.impl = newCall("crud.get")
70+
req.space = space
6771
req.key = []interface{}{}
6872
req.opts = GetOpts{}
6973
return req

crud/insert.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ type insertArgs struct {
2727
// NewInsertRequest returns a new empty InsertRequest.
2828
func NewInsertRequest(space string) *InsertRequest {
2929
req := new(InsertRequest)
30-
req.initImpl("crud.insert")
31-
req.setSpace(space)
30+
req.impl = newCall("crud.insert")
31+
req.space = space
3232
req.tuple = []interface{}{}
3333
req.opts = InsertOpts{}
3434
return req
@@ -83,8 +83,8 @@ type insertObjectArgs struct {
8383
// NewInsertObjectRequest returns a new empty InsertObjectRequest.
8484
func NewInsertObjectRequest(space string) *InsertObjectRequest {
8585
req := new(InsertObjectRequest)
86-
req.initImpl("crud.insert_object")
87-
req.setSpace(space)
86+
req.impl = newCall("crud.insert_object")
87+
req.space = space
8888
req.object = MapObject{}
8989
req.opts = InsertObjectOpts{}
9090
return req

crud/insert_many.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ type insertManyArgs struct {
2727
// NewInsertManyRequest returns a new empty InsertManyRequest.
2828
func NewInsertManyRequest(space string) *InsertManyRequest {
2929
req := new(InsertManyRequest)
30-
req.initImpl("crud.insert_many")
31-
req.setSpace(space)
30+
req.impl = newCall("crud.insert_many")
31+
req.space = space
3232
req.tuples = []Tuple{}
3333
req.opts = InsertManyOpts{}
3434
return req
@@ -83,8 +83,8 @@ type insertObjectManyArgs struct {
8383
// NewInsertObjectManyRequest returns a new empty InsertObjectManyRequest.
8484
func NewInsertObjectManyRequest(space string) *InsertObjectManyRequest {
8585
req := new(InsertObjectManyRequest)
86-
req.initImpl("crud.insert_object_many")
87-
req.setSpace(space)
86+
req.impl = newCall("crud.insert_object_many")
87+
req.space = space
8888
req.objects = []Object{}
8989
req.opts = InsertObjectManyOpts{}
9090
return req

crud/len.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ type lenArgs struct {
2828
// NewLenRequest returns a new empty LenRequest.
2929
func NewLenRequest(space string) *LenRequest {
3030
req := new(LenRequest)
31-
req.initImpl("crud.len")
32-
req.setSpace(space)
31+
req.impl = newCall("crud.len")
32+
req.space = space
3333
req.opts = LenOpts{}
3434
return req
3535
}

crud/max.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ type maxArgs struct {
2727
// NewMaxRequest returns a new empty MaxRequest.
2828
func NewMaxRequest(space string) *MaxRequest {
2929
req := new(MaxRequest)
30-
req.initImpl("crud.max")
31-
req.setSpace(space)
30+
req.impl = newCall("crud.max")
31+
req.space = space
3232
req.index = []interface{}{}
3333
req.opts = MaxOpts{}
3434
return req

crud/min.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ type minArgs struct {
2727
// NewMinRequest returns a new empty MinRequest.
2828
func NewMinRequest(space string) *MinRequest {
2929
req := new(MinRequest)
30-
req.initImpl("crud.min")
31-
req.setSpace(space)
30+
req.impl = newCall("crud.min")
31+
req.space = space
3232
req.index = []interface{}{}
3333
req.opts = MinOpts{}
3434
return req

0 commit comments

Comments
 (0)