@@ -17,11 +17,12 @@ import (
17
17
18
18
const spanName = "multipleSql"
19
19
20
- var DBTypeAttributeKey = attribute .Key ("multipleSql.leader" )
21
- var followerDBSqlAttributeKey = attribute .Key ("multipleSql.follower_db" )
22
20
var (
23
- leaderTypeAttributeKey = DBTypeAttributeKey .String ("leader" )
24
- followerTypeAttributeKey = DBTypeAttributeKey .String ("follower" )
21
+ DBTypeAttributeKey = attribute .Key ("multiple_sql.type" )
22
+ followerDBSqlAttributeKey = attribute .Key ("multiple_sql.follower_db" )
23
+ leaderTypeAttributeKey = DBTypeAttributeKey .String ("leader" )
24
+ followerTypeAttributeKey = DBTypeAttributeKey .String ("follower" )
25
+ sqlDriverAttributeKey = attribute .Key ("sql.driver" )
25
26
)
26
27
27
28
var _ sqlx.SqlConn = (* multipleSqlConn )(nil )
44
45
followers []sqlx.SqlConn
45
46
conf DBConf
46
47
accept func (error ) bool
48
+ driveName string
47
49
}
48
50
)
49
51
@@ -60,6 +62,7 @@ func NewMultipleSqlConn(driverName string, conf DBConf, opts ...SqlOption) sqlx.
60
62
enableFollower : len (followers ) != 0 ,
61
63
followers : followers ,
62
64
conf : conf ,
65
+ driveName : driverName ,
63
66
}
64
67
65
68
for _ , opt := range opts {
@@ -85,7 +88,7 @@ func (m *multipleSqlConn) Exec(query string, args ...any) (sql.Result, error) {
85
88
}
86
89
87
90
func (m * multipleSqlConn ) ExecCtx (ctx context.Context , query string , args ... any ) (sql.Result , error ) {
88
- ctx , span := startSpanWithLeader (ctx )
91
+ ctx , span := m . startSpanWithLeader (ctx )
89
92
defer span .End ()
90
93
return m .leader .ExecCtx (ctx , query , args ... )
91
94
}
@@ -95,7 +98,7 @@ func (m *multipleSqlConn) Prepare(query string) (sqlx.StmtSession, error) {
95
98
}
96
99
97
100
func (m * multipleSqlConn ) PrepareCtx (ctx context.Context , query string ) (sqlx.StmtSession , error ) {
98
- ctx , span := startSpanWithLeader (ctx )
101
+ ctx , span := m . startSpanWithLeader (ctx )
99
102
defer span .End ()
100
103
return m .leader .PrepareCtx (ctx , query )
101
104
}
@@ -108,9 +111,9 @@ func (m *multipleSqlConn) QueryRowCtx(ctx context.Context, v any, query string,
108
111
db := m .getQueryDB (query )
109
112
var span oteltrace.Span
110
113
if db .leader {
111
- ctx , span = startSpanWithLeader (ctx )
114
+ ctx , span = m . startSpanWithLeader (ctx )
112
115
} else {
113
- ctx , span = startSpanWithFollower (ctx , db .followerDB )
116
+ ctx , span = m . startSpanWithFollower (ctx , db .followerDB )
114
117
}
115
118
defer span .End ()
116
119
@@ -127,9 +130,9 @@ func (m *multipleSqlConn) QueryRowPartialCtx(ctx context.Context, v any, query s
127
130
db := m .getQueryDB (query )
128
131
var span oteltrace.Span
129
132
if db .leader {
130
- ctx , span = startSpanWithLeader (ctx )
133
+ ctx , span = m . startSpanWithLeader (ctx )
131
134
} else {
132
- ctx , span = startSpanWithFollower (ctx , db .followerDB )
135
+ ctx , span = m . startSpanWithFollower (ctx , db .followerDB )
133
136
}
134
137
defer span .End ()
135
138
@@ -146,9 +149,9 @@ func (m *multipleSqlConn) QueryRowsCtx(ctx context.Context, v any, query string,
146
149
db := m .getQueryDB (query )
147
150
var span oteltrace.Span
148
151
if db .leader {
149
- ctx , span = startSpanWithLeader (ctx )
152
+ ctx , span = m . startSpanWithLeader (ctx )
150
153
} else {
151
- ctx , span = startSpanWithFollower (ctx , db .followerDB )
154
+ ctx , span = m . startSpanWithFollower (ctx , db .followerDB )
152
155
}
153
156
defer span .End ()
154
157
@@ -165,9 +168,9 @@ func (m *multipleSqlConn) QueryRowsPartialCtx(ctx context.Context, v any, query
165
168
db := m .getQueryDB (query )
166
169
var span oteltrace.Span
167
170
if db .leader {
168
- ctx , span = startSpanWithLeader (ctx )
171
+ ctx , span = m . startSpanWithLeader (ctx )
169
172
} else {
170
- ctx , span = startSpanWithFollower (ctx , db .followerDB )
173
+ ctx , span = m . startSpanWithFollower (ctx , db .followerDB )
171
174
}
172
175
defer span .End ()
173
176
@@ -187,7 +190,7 @@ func (m *multipleSqlConn) Transact(fn func(sqlx.Session) error) error {
187
190
}
188
191
189
192
func (m * multipleSqlConn ) TransactCtx (ctx context.Context , fn func (context.Context , sqlx.Session ) error ) error {
190
- ctx , span := startSpanWithLeader (ctx )
193
+ ctx , span := m . startSpanWithLeader (ctx )
191
194
defer span .End ()
192
195
return m .leader .TransactCtx (ctx , fn )
193
196
}
@@ -254,20 +257,21 @@ func (m *multipleSqlConn) startFollowerHeartbeat(ctx context.Context) {
254
257
}
255
258
}
256
259
257
- func startSpan (ctx context.Context ) (context.Context , oteltrace.Span ) {
260
+ func ( m * multipleSqlConn ) startSpan (ctx context.Context ) (context.Context , oteltrace.Span ) {
258
261
tracer := trace .TracerFromContext (ctx )
259
262
ctx , span := tracer .Start (ctx , spanName , oteltrace .WithSpanKind (oteltrace .SpanKindClient ))
263
+ span .SetAttributes (sqlDriverAttributeKey .String (m .driveName ))
260
264
return ctx , span
261
265
}
262
266
263
- func startSpanWithLeader (ctx context.Context ) (context.Context , oteltrace.Span ) {
264
- ctx , span := startSpan (ctx )
267
+ func ( m * multipleSqlConn ) startSpanWithLeader (ctx context.Context ) (context.Context , oteltrace.Span ) {
268
+ ctx , span := m . startSpan (ctx )
265
269
span .SetAttributes (leaderTypeAttributeKey )
266
270
return ctx , span
267
271
}
268
272
269
- func startSpanWithFollower (ctx context.Context , db int ) (context.Context , oteltrace.Span ) {
270
- ctx , span := startSpan (ctx )
273
+ func ( m * multipleSqlConn ) startSpanWithFollower (ctx context.Context , db int ) (context.Context , oteltrace.Span ) {
274
+ ctx , span := m . startSpan (ctx )
271
275
span .SetAttributes (followerTypeAttributeKey )
272
276
span .SetAttributes (followerDBSqlAttributeKey .Int (db ))
273
277
return ctx , span
0 commit comments