Skip to content

Commit f4c2492

Browse files
committed
Added internal package stack
1 parent 4e3cf07 commit f4c2492

File tree

7 files changed

+89
-43
lines changed

7 files changed

+89
-43
lines changed

internal/stack/record.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package stack
2+
3+
import (
4+
"runtime"
5+
"strconv"
6+
"strings"
7+
)
8+
9+
func Record(depth int) string {
10+
function, file, line, _ := runtime.Caller(depth + 1)
11+
name := runtime.FuncForPC(function).Name()
12+
return name + "(" + fileName(file) + ":" + strconv.Itoa(line) + ")"
13+
}
14+
15+
func fileName(original string) string {
16+
i := strings.LastIndex(original, "/")
17+
if i == -1 {
18+
return original
19+
}
20+
return original[i+1:]
21+
}

internal/stack/record_test.go

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package stack
2+
3+
import (
4+
"testing"
5+
6+
"github.com/stretchr/testify/require"
7+
)
8+
9+
func TestRecord(t *testing.T) {
10+
for _, tt := range []struct {
11+
act string
12+
exp string
13+
}{
14+
{
15+
act: Record(0),
16+
exp: "github.com/ydb-platform/ydb-go-sdk/v3/internal/stack.TestRecord(record_test.go:15)",
17+
},
18+
{
19+
act: func() string {
20+
return Record(1)
21+
}(),
22+
exp: "github.com/ydb-platform/ydb-go-sdk/v3/internal/stack.TestRecord(record_test.go:21)",
23+
},
24+
{
25+
act: func() string {
26+
return func() string {
27+
return Record(2)
28+
}()
29+
}(),
30+
exp: "github.com/ydb-platform/ydb-go-sdk/v3/internal/stack.TestRecord(record_test.go:29)",
31+
},
32+
} {
33+
t.Run("", func(t *testing.T) {
34+
require.Equal(t, tt.exp, tt.act)
35+
})
36+
}
37+
}

internal/xcontext/context_error.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package xcontext
22

3-
import "github.com/ydb-platform/ydb-go-sdk/v3/internal/xerrors"
3+
import (
4+
"github.com/ydb-platform/ydb-go-sdk/v3/internal/stack"
5+
)
46

57
var _ error = (*ctxErr)(nil)
68

@@ -12,7 +14,7 @@ const (
1214
func errAt(err error, skipDepth int) error {
1315
return &ctxErr{
1416
err: err,
15-
stackRecord: xerrors.StackRecord(skipDepth + 1),
17+
stackRecord: stack.Record(skipDepth + 1),
1618
linkWord: atWord,
1719
}
1820
}

internal/xcontext/context_with_timeout.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@ import (
55
"sync"
66
"time"
77

8-
"github.com/ydb-platform/ydb-go-sdk/v3/internal/xerrors"
8+
"github.com/ydb-platform/ydb-go-sdk/v3/internal/stack"
99
)
1010

1111
func WithTimeout(ctx context.Context, t time.Duration) (context.Context, context.CancelFunc) {
1212
childCtx := &timeoutCtx{
1313
parentCtx: ctx,
14-
from: xerrors.StackRecord(1),
14+
from: stack.Record(1),
1515
}
1616
childCtx.ctx, childCtx.ctxCancel = context.WithTimeout(ctx, t)
1717
return childCtx, childCtx.cancel

internal/xerrors/stacktrace.go

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
package xerrors
22

33
import (
4-
"runtime"
5-
"strconv"
6-
"strings"
7-
84
grpcStatus "google.golang.org/grpc/status"
5+
6+
"github.com/ydb-platform/ydb-go-sdk/v3/internal/stack"
97
)
108

119
type withStackTraceOptions struct {
@@ -34,32 +32,18 @@ func WithStackTrace(err error, opts ...withStackTraceOption) error {
3432
if s, has := grpcStatus.FromError(err); has {
3533
return &stackTransportError{
3634
stackError: stackError{
37-
stackRecord: StackRecord(options.skipDepth + 1),
35+
stackRecord: stack.Record(options.skipDepth + 1),
3836
err: err,
3937
},
4038
status: s,
4139
}
4240
}
4341
return &stackError{
44-
stackRecord: StackRecord(options.skipDepth + 1),
42+
stackRecord: stack.Record(options.skipDepth + 1),
4543
err: err,
4644
}
4745
}
4846

49-
func StackRecord(depth int) string {
50-
function, file, line, _ := runtime.Caller(depth + 1)
51-
name := runtime.FuncForPC(function).Name()
52-
return name + "(" + fileName(file) + ":" + strconv.Itoa(line) + ")"
53-
}
54-
55-
func fileName(original string) string {
56-
i := strings.LastIndex(original, "/")
57-
if i == -1 {
58-
return original
59-
}
60-
return original[i+1:]
61-
}
62-
6347
type stackError struct {
6448
stackRecord string
6549
err error

internal/xerrors/transport.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
grpcStatus "google.golang.org/grpc/status"
1010

1111
"github.com/ydb-platform/ydb-go-sdk/v3/internal/backoff"
12+
"github.com/ydb-platform/ydb-go-sdk/v3/internal/stack"
1213
)
1314

1415
type transportError struct {
@@ -133,7 +134,7 @@ func Transport(err error, opts ...teOpt) error {
133134
}
134135
} else {
135136
te = &transportError{
136-
status: grpcStatus.New(grpcCodes.Unknown, StackRecord(1)),
137+
status: grpcStatus.New(grpcCodes.Unknown, stack.Record(1)),
137138
err: err,
138139
}
139140
}

retry/sql_test.go

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"time"
1212

1313
"github.com/ydb-platform/ydb-go-sdk/v3/internal/backoff"
14+
"github.com/ydb-platform/ydb-go-sdk/v3/internal/stack"
1415
"github.com/ydb-platform/ydb-go-sdk/v3/internal/xerrors"
1516
"github.com/ydb-platform/ydb-go-sdk/v3/internal/xsql/badconn"
1617
"github.com/ydb-platform/ydb-go-sdk/v3/trace"
@@ -26,12 +27,12 @@ type mockConnector struct {
2627
var _ driver.Connector = &mockConnector{}
2728

2829
func (m *mockConnector) Open(name string) (driver.Conn, error) {
29-
m.t.Log(xerrors.StackRecord(0))
30+
m.t.Log(stack.Record(0))
3031
return nil, driver.ErrSkip
3132
}
3233

3334
func (m *mockConnector) Connect(ctx context.Context) (driver.Conn, error) {
34-
m.t.Log(xerrors.StackRecord(0))
35+
m.t.Log(stack.Record(0))
3536
m.conns++
3637
return &mockConn{
3738
t: m.t,
@@ -41,7 +42,7 @@ func (m *mockConnector) Connect(ctx context.Context) (driver.Conn, error) {
4142
}
4243

4344
func (m *mockConnector) Driver() driver.Driver {
44-
m.t.Log(xerrors.StackRecord(0))
45+
m.t.Log(stack.Record(0))
4546
return m
4647
}
4748

@@ -61,12 +62,12 @@ var (
6162
)
6263

6364
func (m *mockConn) Prepare(query string) (driver.Stmt, error) {
64-
m.t.Log(xerrors.StackRecord(0))
65+
m.t.Log(stack.Record(0))
6566
return nil, driver.ErrSkip
6667
}
6768

6869
func (m *mockConn) PrepareContext(ctx context.Context, query string) (driver.Stmt, error) {
69-
m.t.Log(xerrors.StackRecord(0))
70+
m.t.Log(stack.Record(0))
7071
if m.closed {
7172
return nil, driver.ErrBadConn
7273
}
@@ -78,47 +79,47 @@ func (m *mockConn) PrepareContext(ctx context.Context, query string) (driver.Stm
7879
}
7980

8081
func (m *mockConn) Close() error {
81-
m.t.Log(xerrors.StackRecord(0))
82+
m.t.Log(stack.Record(0))
8283
m.closed = true
8384
return nil
8485
}
8586

8687
func (m *mockConn) Begin() (driver.Tx, error) {
87-
m.t.Log(xerrors.StackRecord(0))
88+
m.t.Log(stack.Record(0))
8889
return nil, driver.ErrSkip
8990
}
9091

9192
func (m *mockConn) BeginTx(ctx context.Context, opts driver.TxOptions) (driver.Tx, error) {
92-
m.t.Log(xerrors.StackRecord(0))
93+
m.t.Log(stack.Record(0))
9394
if m.closed {
9495
return nil, driver.ErrBadConn
9596
}
9697
return m, nil
9798
}
9899

99100
func (m *mockConn) QueryContext(ctx context.Context, query string, args []driver.NamedValue) (driver.Rows, error) {
100-
m.t.Log(xerrors.StackRecord(0))
101+
m.t.Log(stack.Record(0))
101102
if xerrors.MustDeleteSession(m.execErr) {
102103
m.closed = true
103104
}
104105
return nil, m.queryErr
105106
}
106107

107108
func (m *mockConn) ExecContext(ctx context.Context, query string, args []driver.NamedValue) (driver.Result, error) {
108-
m.t.Log(xerrors.StackRecord(0))
109+
m.t.Log(stack.Record(0))
109110
if xerrors.MustDeleteSession(m.execErr) {
110111
m.closed = true
111112
}
112113
return nil, m.execErr
113114
}
114115

115116
func (m *mockConn) Commit() error {
116-
m.t.Log(xerrors.StackRecord(0))
117+
m.t.Log(stack.Record(0))
117118
return nil
118119
}
119120

120121
func (m *mockConn) Rollback() error {
121-
m.t.Log(xerrors.StackRecord(0))
122+
m.t.Log(stack.Record(0))
122123
return nil
123124
}
124125

@@ -135,32 +136,32 @@ var (
135136
)
136137

137138
func (m *mockStmt) Close() error {
138-
m.t.Log(xerrors.StackRecord(0))
139+
m.t.Log(stack.Record(0))
139140
return nil
140141
}
141142

142143
func (m *mockStmt) NumInput() int {
143-
m.t.Log(xerrors.StackRecord(0))
144+
m.t.Log(stack.Record(0))
144145
return -1
145146
}
146147

147148
func (m *mockStmt) Exec(args []driver.Value) (driver.Result, error) {
148-
m.t.Log(xerrors.StackRecord(0))
149+
m.t.Log(stack.Record(0))
149150
return nil, driver.ErrSkip
150151
}
151152

152153
func (m *mockStmt) ExecContext(ctx context.Context, args []driver.NamedValue) (driver.Result, error) {
153-
m.t.Log(xerrors.StackRecord(0))
154+
m.t.Log(stack.Record(0))
154155
return m.conn.ExecContext(ctx, m.query, args)
155156
}
156157

157158
func (m *mockStmt) Query(args []driver.Value) (driver.Rows, error) {
158-
m.t.Log(xerrors.StackRecord(0))
159+
m.t.Log(stack.Record(0))
159160
return nil, driver.ErrSkip
160161
}
161162

162163
func (m *mockStmt) QueryContext(ctx context.Context, args []driver.NamedValue) (driver.Rows, error) {
163-
m.t.Log(xerrors.StackRecord(0))
164+
m.t.Log(stack.Record(0))
164165
return m.conn.QueryContext(ctx, m.query, args)
165166
}
166167

0 commit comments

Comments
 (0)