Skip to content

Commit e1903ef

Browse files
improve error handling and mention cache size default in the docs
1 parent a3bfd51 commit e1903ef

3 files changed

Lines changed: 32 additions & 25 deletions

File tree

server/adkrest/handler.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
package adkrest
1616

1717
import (
18+
"fmt"
1819
"net/http"
1920
"time"
2021

@@ -34,9 +35,12 @@ import (
3435

3536
// NewServer creates a new ADK REST API server which implements [http.Handler] interface.
3637
func NewServer(cfg ServerConfig) (*Server, error) {
37-
debugTelemetry := services.NewDebugTelemetry(&services.DebugTelemetryConfig{
38+
debugTelemetry, err := services.NewDebugTelemetryWithConfig(&services.DebugTelemetryConfig{
3839
TraceCapacity: cfg.DebugConfig.TraceCapacity,
3940
})
41+
if err != nil {
42+
return nil, fmt.Errorf("failed to create debug telemetry service: %w", err)
43+
}
4044

4145
router := mux.NewRouter().StrictSlash(true)
4246
// TODO: Allow taking a prefix to allow customizing the path
@@ -69,7 +73,7 @@ type ServerConfig struct {
6973
// DebugTelemetryConfig contains parameters for the debug telemetry.
7074
type DebugTelemetryConfig struct {
7175
// Maximum number of traces to keep in memory.
72-
// If <= 0, the default capacity is used.
76+
// If <= 0, the default capacity 10_000 is used.
7377
TraceCapacity int
7478
}
7579

server/adkrest/internal/services/debugtelemetry.go

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ package services
1717
import (
1818
"cmp"
1919
"context"
20+
"fmt"
2021
"slices"
2122
"sync"
2223
"time"
@@ -44,19 +45,23 @@ type DebugTelemetry struct {
4445

4546
type DebugTelemetryConfig struct {
4647
// Maximum number of traces to keep in memory.
47-
// If 0, default capacity (10k) is used.
48+
// If <= 0, default capacity (10_000) is used.
4849
TraceCapacity int
4950
}
5051

51-
// NewDebugTelemetry returns a new DebugTelemetry instance with default capacity (10k).
52-
func NewDebugTelemetry(cfg *DebugTelemetryConfig) *DebugTelemetry {
52+
// NewDebugTelemetryWithConfig returns a new DebugTelemetry instance with custom capacity.
53+
func NewDebugTelemetryWithConfig(cfg *DebugTelemetryConfig) (*DebugTelemetry, error) {
5354
capacity := defaultTraceCapacity
5455
if cfg != nil && cfg.TraceCapacity > 0 {
5556
capacity = cfg.TraceCapacity
5657
}
57-
return &DebugTelemetry{
58-
store: newSpanStore(capacity),
58+
store, err := newSpanStore(capacity)
59+
if err != nil {
60+
return nil, fmt.Errorf("failed to create span store: %w", err)
5961
}
62+
return &DebugTelemetry{
63+
store: store,
64+
}, nil
6065
}
6166

6267
func (d *DebugTelemetry) SpanProcessor() sdktrace.SpanProcessor {
@@ -132,17 +137,18 @@ type spanStore struct {
132137
recordsByEventID map[string][]*spanRecord
133138
}
134139

135-
func newSpanStore(capacity int) *spanStore {
140+
func newSpanStore(capacity int) (*spanStore, error) {
136141
store := &spanStore{
137142
recordsBySpanID: make(map[string]*spanRecord),
138143
traceIDsBySessionID: make(map[string]map[string]struct{}),
139144
recordsByEventID: make(map[string][]*spanRecord),
140145
}
141-
cache, err := lru.NewWithEvict(capacity, store.evict)
142-
if err == nil {
143-
store.recordsByTraceID = cache
146+
var err error
147+
store.recordsByTraceID, err = lru.NewWithEvict(capacity, store.evict)
148+
if err != nil {
149+
return nil, fmt.Errorf("failed to create LRU cache: %w", err)
144150
}
145-
return store
151+
return store, nil
146152
}
147153

148154
func (s *spanStore) getSpansByEventID(id string) []DebugSpan {

server/adkrest/internal/services/debugtelemetry_test.go

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ func TestDebugTelemetryGetSpansBySessionID(t *testing.T) {
212212

213213
for _, tt := range tests {
214214
t.Run(tt.name, func(t *testing.T) {
215-
debugTelemetry, tp, lp := setup()
215+
debugTelemetry, tp, lp := setup(t)
216216

217217
if tt.testSetup != nil {
218218
tt.testSetup(ctx, tp.Tracer("test-tracer"), lp.Logger("test-logger"))
@@ -349,7 +349,7 @@ func TestDebugTelemetryGetSpansByEventID(t *testing.T) {
349349

350350
for _, tt := range tests {
351351
t.Run(tt.name, func(t *testing.T) {
352-
debugTelemetry, tp, lp := setup()
352+
debugTelemetry, tp, lp := setup(t)
353353

354354
if tt.testSetup != nil {
355355
tt.testSetup(ctx, tp.Tracer("test-tracer"), lp.Logger("test-logger"))
@@ -380,7 +380,7 @@ func TestDebugTelemetryGetSpansByEventID(t *testing.T) {
380380
func TestDebugTelemetryLRU(t *testing.T) {
381381
ctx := t.Context()
382382

383-
debugTelemetry, tp, lp := setupWithConfig(&DebugTelemetryConfig{TraceCapacity: 2})
383+
debugTelemetry, tp, lp := setupWithConfig(t, &DebugTelemetryConfig{TraceCapacity: 2})
384384
tracer := tp.Tracer("test-tracer")
385385

386386
// 1. Add Trace 1.
@@ -456,8 +456,11 @@ func TestDebugTelemetryLRU(t *testing.T) {
456456
}
457457
}
458458

459-
func setupWithConfig(cfg *DebugTelemetryConfig) (*DebugTelemetry, *sdktrace.TracerProvider, *sdklog.LoggerProvider) {
460-
debugTelemetry := NewDebugTelemetry(cfg)
459+
func setupWithConfig(t *testing.T, cfg *DebugTelemetryConfig) (*DebugTelemetry, *sdktrace.TracerProvider, *sdklog.LoggerProvider) {
460+
debugTelemetry, err := NewDebugTelemetryWithConfig(cfg)
461+
if err != nil {
462+
t.Fatalf("Failed to create debug telemetry: %v", err)
463+
}
461464
tp := sdktrace.NewTracerProvider(
462465
sdktrace.WithSpanProcessor(debugTelemetry.SpanProcessor()),
463466
)
@@ -466,12 +469,6 @@ func setupWithConfig(cfg *DebugTelemetryConfig) (*DebugTelemetry, *sdktrace.Trac
466469
return debugTelemetry, tp, lp
467470
}
468471

469-
func setup() (*DebugTelemetry, *sdktrace.TracerProvider, *sdklog.LoggerProvider) {
470-
debugTelemetry := NewDebugTelemetry(nil)
471-
tp := sdktrace.NewTracerProvider(
472-
sdktrace.WithSpanProcessor(debugTelemetry.SpanProcessor()),
473-
)
474-
lp := sdklog.NewLoggerProvider(sdklog.WithProcessor(debugTelemetry.LogProcessor()))
475-
476-
return debugTelemetry, tp, lp
472+
func setup(t *testing.T) (*DebugTelemetry, *sdktrace.TracerProvider, *sdklog.LoggerProvider) {
473+
return setupWithConfig(t, nil)
477474
}

0 commit comments

Comments
 (0)