@@ -80,14 +80,14 @@ func (c *client) Do(ctx context.Context, cmd valkey.Completed) valkey.ValkeyResu
80
80
span , ctx := c .startSpan (ctx , processCommand (& cmd ))
81
81
resp := c .client .Do (ctx , cmd )
82
82
setClientCacheTags (span , resp )
83
- span . Finish ( tracer . WithError ( resp .Error () ))
83
+ c . finishSpan ( span , resp .Error ())
84
84
return resp
85
85
}
86
86
87
87
func (c * client ) DoMulti (ctx context.Context , multi ... valkey.Completed ) []valkey.ValkeyResult {
88
88
span , ctx := c .startSpan (ctx , processCommandMulti (multi ))
89
89
resp := c .client .DoMulti (ctx , multi ... )
90
- c .finishSpan (span , firstError (resp ))
90
+ c .finishSpan (span , c . firstError (resp ))
91
91
return resp
92
92
}
93
93
@@ -109,7 +109,7 @@ func (c *client) DoCache(ctx context.Context, cmd valkey.Cacheable, ttl time.Dur
109
109
func (c * client ) DoMultiCache (ctx context.Context , multi ... valkey.CacheableTTL ) []valkey.ValkeyResult {
110
110
span , ctx := c .startSpan (ctx , processCommandMultiCache (multi ))
111
111
resp := c .client .DoMultiCache (ctx , multi ... )
112
- c .finishSpan (span , firstError (resp ))
112
+ c .finishSpan (span , c . firstError (resp ))
113
113
return resp
114
114
}
115
115
@@ -207,12 +207,27 @@ func (c *client) startSpan(ctx context.Context, cmd command) (tracer.Span, conte
207
207
208
208
func (c * client ) finishSpan (span tracer.Span , err error ) {
209
209
var opts []tracer.FinishOption
210
- if err != nil && ! valkey . IsValkeyNil (err ) {
210
+ if c . isTracedError (err ) {
211
211
opts = append (opts , tracer .WithError (err ))
212
212
}
213
213
span .Finish (opts ... )
214
214
}
215
215
216
+ func (c * client ) firstError (s []valkey.ValkeyResult ) error {
217
+ for _ , result := range s {
218
+ if err := result .Error (); c .isTracedError (err ) {
219
+ return err
220
+ }
221
+ }
222
+ return nil
223
+ }
224
+
225
+ func (c * client ) isTracedError (err error ) bool {
226
+ return err != nil &&
227
+ ! valkey .IsValkeyNil (err ) &&
228
+ (c .cfg .errCheck == nil || c .cfg .errCheck (err ))
229
+ }
230
+
216
231
type commander interface {
217
232
Commands () []string
218
233
}
@@ -267,15 +282,6 @@ func multiCommand(cmds []command) command {
267
282
}
268
283
}
269
284
270
- func firstError (s []valkey.ValkeyResult ) error {
271
- for _ , result := range s {
272
- if err := result .Error (); err != nil && ! valkey .IsValkeyNil (err ) {
273
- return err
274
- }
275
- }
276
- return nil
277
- }
278
-
279
285
func setClientCacheTags (s tracer.Span , result valkey.ValkeyResult ) {
280
286
s .SetTag (ext .ValkeyClientCacheHit , result .IsCacheHit ())
281
287
s .SetTag (ext .ValkeyClientCacheTTL , result .CacheTTL ())
0 commit comments