jaegertracing/jaeger · warning
archive span storage was not configured
Error message
archive span storage was not configured
What it means
errNoArchiveSpanStorage is returned by QueryService.ArchiveTrace when the query service was constructed without an archive trace reader/writer. Archiving is an optional feature requiring a dedicated archive span storage to be configured; without one there is nowhere to write the trace, so ArchiveTrace fails with this error. It is unexported and treated as a caller/configuration problem rather than a server fault.
Source
Thrown at cmd/jaeger/internal/extension/jaegerquery/querysvc/service.go:26
"errors"
"fmt"
"iter"
"time"
"go.opentelemetry.io/collector/pdata/pcommon"
"go.opentelemetry.io/collector/pdata/ptrace"
"github.com/jaegertracing/jaeger-idl/model/v1"
expression "github.com/jaegertracing/jaeger-idl/query/expression/v1"
"github.com/jaegertracing/jaeger/cmd/jaeger/internal/extension/jaegerquery/internal/adjuster"
"github.com/jaegertracing/jaeger/components/extension/jaegerquery/queryinterceptor"
"github.com/jaegertracing/jaeger/internal/jptrace"
"github.com/jaegertracing/jaeger/internal/storage/v1/api/spanstore"
"github.com/jaegertracing/jaeger/internal/storage/v2/api/depstore"
"github.com/jaegertracing/jaeger/internal/storage/v2/api/tracestore"
)
var errNoArchiveSpanStorage = errors.New("archive span storage was not configured")
// ErrServiceNameRequired is returned for a search that omits the service name against a
// backend whose reader does not accept one (RFC 0013 §3.3). It names the backend's
// limitation rather than the missing field, because the same query is valid elsewhere.
// The API layers map it to InvalidArgument / HTTP 400.
var ErrServiceNameRequired = errors.New(
"this storage backend requires a service name to search; searching all services is not supported",
)
// QueryServiceOptions holds the configuration options for the query service.
type QueryServiceOptions struct {
// ArchiveTraceReader is used to read archived traces from the storage.
ArchiveTraceReader tracestore.Reader
// ArchiveTraceWriter is used to write traces to the archive storage.
ArchiveTraceWriter tracestore.Writer
// MaxClockSkewAdjust is the maximum duration by which to adjust a span.
MaxClockSkewAdjust time.Duration
// MaxTraceSize is the maximum number of spans allowed per trace. A value of 0 (default) means unlimited.View on GitHub (pinned to 806f444784)
Solutions
- Configure archive span storage on the query service (e.g. --span-archive.type=... plus archive-specific flags/config) and restart.
- If archiving should not be available, hide/disable the archive action in clients (the UI hides it when the capability is absent) instead of calling it.
- Catch this error in client code and surface a clear message that archiving is not enabled on this deployment.
Example fix
// before: starting query without archive storage jaeger-query --span-storage.type=cassandra // after: enable archive storage jaeger-query --span-storage.type=cassandra \ --span-archive.type=cassandra \ --cassandra.archive.keyspace=jaeger_archive_v2
Defensive patterns
Strategy: type-guard
Type guard
func isNoArchiveStorage(err error) bool {
return err != nil && strings.Contains(err.Error(), "archive span storage was not configured")
} Try / catch
err := svc.ArchiveTrace(ctx, traceID)
if err != nil {
if isNoArchiveStorage(err) {
return fmt.Errorf("archiving unavailable: %w", err) // surface as 404/409-ish, not retryable
}
return err
} Prevention
- Only expose archive UI actions when the deployment reports archive capability.
- Set --span-archive.* flags wherever archive behavior is part of the runbook.
- Add a startup log line stating whether archive storage is configured, so operators notice.
When it happens
Trigger: Calling the ArchiveTrace API (HTTP POST /api/trace/{id} archive action or the gRPC equivalent) against a jaegerquery server started without --span-archive / archive storage configuration.
Common situations: Users clicking 'Archive trace' in the Jaeger UI on a deployment where archiving was never set up; automation that archives traces unconditionally regardless of deployment options; environments where archive storage was removed to save cost but clients still archive.
Related errors
- server with TLS enabled can not use same host ports for gRPC
- the structured query filter is disabled
- invalid version
- query exists in template without ";"
- only one of TagIndexBlacklist and TagIndexWhitelist can be s
AI-assisted analysis of jaegertracing/jaeger@806f444784 (2026-09-01).
Data as JSON: /api/errors/66a2d438a087a914.
Report an issue: GitHub.