Skip to content

Commit 1a13250

Browse files
ngavinsirRomainMullerrarguelloF
authored
contrib/jackc/pgx.v5: acquire release (#2722)
Co-authored-by: Romain Marcadier <[email protected]> Co-authored-by: Rodrigo Argüello <[email protected]>
1 parent a20143b commit 1a13250

File tree

7 files changed

+66
-11
lines changed

7 files changed

+66
-11
lines changed

.github/workflows/appsec.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,7 @@ jobs:
258258

259259
test-app-smoke-tests:
260260
name: Smoke Tests
261+
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.owner == 'DataDog'
261262
uses: DataDog/appsec-go-test-app/.github/workflows/smoke-tests.yml@main
262263
with:
263264
dd-trace-go-version: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.sha }}

contrib/jackc/pgx.v5/option.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ type config struct {
1414
traceCopyFrom bool
1515
tracePrepare bool
1616
traceConnect bool
17+
traceAcquire bool
1718
}
1819

1920
func defaultConfig() *config {
@@ -24,6 +25,7 @@ func defaultConfig() *config {
2425
traceCopyFrom: true,
2526
tracePrepare: true,
2627
traceConnect: true,
28+
traceAcquire: true,
2729
}
2830
}
2931

@@ -57,6 +59,13 @@ func WithTraceCopyFrom(enabled bool) Option {
5759
}
5860
}
5961

62+
// WithTraceAcquire enables tracing pgxpool connection acquire calls.
63+
func WithTraceAcquire(enabled bool) Option {
64+
return func(c *config) {
65+
c.traceAcquire = enabled
66+
}
67+
}
68+
6069
// WithTracePrepare enables tracing prepared statements.
6170
//
6271
// conn, err := pgx.Connect(ctx, "postgres://user:[email protected]:5432/dbname", pgx.WithTraceConnect())

contrib/jackc/pgx.v5/pgx_tracer.go

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,13 @@ package pgx
77

88
import (
99
"context"
10+
1011
"gopkg.in/DataDog/dd-trace-go.v1/ddtrace"
1112
"gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext"
1213
"gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer"
1314

1415
"github.com/jackc/pgx/v5"
16+
"github.com/jackc/pgx/v5/pgxpool"
1517
)
1618

1719
type operationType string
@@ -30,6 +32,7 @@ const (
3032
operationTypePrepare = "Prepare"
3133
operationTypeBatch = "Batch"
3234
operationTypeCopyFrom = "Copy From"
35+
operationTypeAcquire = "Acquire"
3336
)
3437

3538
type tracedBatchQuery struct {
@@ -47,11 +50,12 @@ type pgxTracer struct {
4750
}
4851

4952
var (
50-
_ pgx.QueryTracer = (*pgxTracer)(nil)
51-
_ pgx.BatchTracer = (*pgxTracer)(nil)
52-
_ pgx.ConnectTracer = (*pgxTracer)(nil)
53-
_ pgx.PrepareTracer = (*pgxTracer)(nil)
54-
_ pgx.CopyFromTracer = (*pgxTracer)(nil)
53+
_ pgx.QueryTracer = (*pgxTracer)(nil)
54+
_ pgx.BatchTracer = (*pgxTracer)(nil)
55+
_ pgx.ConnectTracer = (*pgxTracer)(nil)
56+
_ pgx.PrepareTracer = (*pgxTracer)(nil)
57+
_ pgx.CopyFromTracer = (*pgxTracer)(nil)
58+
_ pgxpool.AcquireTracer = (*pgxTracer)(nil)
5559
)
5660

5761
func newPgxTracer(opts ...Option) *pgxTracer {
@@ -175,6 +179,23 @@ func (t *pgxTracer) TraceConnectEnd(ctx context.Context, data pgx.TraceConnectEn
175179
finishSpan(ctx, data.Err)
176180
}
177181

182+
func (t *pgxTracer) TraceAcquireStart(ctx context.Context, pool *pgxpool.Pool, _ pgxpool.TraceAcquireStartData) context.Context {
183+
if !t.cfg.traceAcquire {
184+
return ctx
185+
}
186+
opts := t.spanOptions(pool.Config().ConnConfig, operationTypeAcquire, "")
187+
_, ctx = tracer.StartSpanFromContext(ctx, "pgx.pool.acquire", opts...)
188+
return ctx
189+
}
190+
191+
func (t *pgxTracer) TraceAcquireEnd(ctx context.Context, _ *pgxpool.Pool, data pgxpool.TraceAcquireEndData) {
192+
if !t.cfg.traceAcquire {
193+
return
194+
}
195+
196+
finishSpan(ctx, data.Err)
197+
}
198+
178199
func (t *pgxTracer) spanOptions(connConfig *pgx.ConnConfig, op operationType, sqlStatement string, extraOpts ...ddtrace.StartSpanOption) []ddtrace.StartSpanOption {
179200
opts := []ddtrace.StartSpanOption{
180201
tracer.ServiceName(t.cfg.serviceName),

contrib/jackc/pgx.v5/pgx_tracer_test.go

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -231,13 +231,37 @@ func TestCopyFrom(t *testing.T) {
231231
assert.Equal(t, ps.SpanID(), s.ParentID())
232232
}
233233

234+
func TestAcquire(t *testing.T) {
235+
mt := mocktracer.Start()
236+
defer mt.Stop()
237+
238+
opts := append(tracingAllDisabled(), WithTraceAcquire(true))
239+
runAllOperations(t, opts...)
240+
241+
spans := mt.FinishedSpans()
242+
require.Len(t, spans, 5)
243+
244+
ps := spans[4]
245+
assert.Equal(t, "parent", ps.OperationName())
246+
assert.Equal(t, "parent", ps.Tag(ext.ResourceName))
247+
248+
s := spans[0]
249+
assertCommonTags(t, s)
250+
assert.Equal(t, "pgx.pool.acquire", s.OperationName())
251+
assert.Equal(t, "Acquire", s.Tag(ext.ResourceName))
252+
assert.Equal(t, "Acquire", s.Tag("db.operation"))
253+
assert.Equal(t, nil, s.Tag(ext.DBStatement))
254+
assert.Equal(t, ps.SpanID(), s.ParentID())
255+
}
256+
234257
func tracingAllDisabled() []Option {
235258
return []Option{
236259
WithTraceConnect(false),
237260
WithTraceQuery(false),
238261
WithTracePrepare(false),
239262
WithTraceBatch(false),
240263
WithTraceCopyFrom(false),
264+
WithTraceAcquire(false),
241265
}
242266
}
243267

@@ -246,9 +270,9 @@ func runAllOperations(t *testing.T, opts ...Option) {
246270
defer parent.Finish()
247271

248272
// Connect
249-
conn, err := Connect(ctx, postgresDSN, opts...)
273+
conn, err := NewPool(ctx, postgresDSN, opts...)
250274
require.NoError(t, err)
251-
defer conn.Close(ctx)
275+
defer conn.Close()
252276

253277
// Query
254278
var x int

contrib/jackc/pgx.v5/pgxpool_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,5 +36,5 @@ func TestPool(t *testing.T) {
3636
assert.Equal(t, 2, x)
3737

3838
assert.Len(t, mt.OpenSpans(), 0)
39-
assert.Len(t, mt.FinishedSpans(), 5)
39+
assert.Len(t, mt.FinishedSpans(), 7)
4040
}

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ require (
6363
github.com/hashicorp/go-secure-stdlib/parseutil v0.1.7
6464
github.com/hashicorp/vault/api v1.9.2
6565
github.com/hashicorp/vault/sdk v0.9.2
66-
github.com/jackc/pgx/v5 v5.5.4
66+
github.com/jackc/pgx/v5 v5.6.0
6767
github.com/jinzhu/gorm v1.9.16
6868
github.com/jmoiron/sqlx v1.3.5
6969
github.com/julienschmidt/httprouter v1.3.0

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1517,8 +1517,8 @@ github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b/go.mod h1:vsD4
15171517
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk=
15181518
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM=
15191519
github.com/jackc/pgx/v5 v5.2.0/go.mod h1:Ptn7zmohNsWEsdxRawMzk3gaKma2obW+NWTnKa0S4nk=
1520-
github.com/jackc/pgx/v5 v5.5.4 h1:Xp2aQS8uXButQdnCMWNmvx6UysWQQC+u1EoizjguY+8=
1521-
github.com/jackc/pgx/v5 v5.5.4/go.mod h1:ez9gk+OAat140fv9ErkZDYFWmXLfV+++K0uAOiwgm1A=
1520+
github.com/jackc/pgx/v5 v5.6.0 h1:SWJzexBzPL5jb0GEsrPMLIsi/3jOo7RHlzTjcAeDrPY=
1521+
github.com/jackc/pgx/v5 v5.6.0/go.mod h1:DNZ/vlrUnhWCoFGxHAG8U2ljioxukquj7utPDgtQdTw=
15221522
github.com/jackc/puddle/v2 v2.1.2/go.mod h1:2lpufsF5mRHO6SuZkm0fNYxM6SWHfvyFj62KwNzgels=
15231523
github.com/jackc/puddle/v2 v2.2.1 h1:RhxXJtFG022u4ibrCSMSiu5aOq1i77R3OHKNJj77OAk=
15241524
github.com/jackc/puddle/v2 v2.2.1/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4=

0 commit comments

Comments
 (0)