caddyserver/caddy · error

loading configs from storage: %w

Error message

loading configs from storage: %w

What it means

Error "loading configs from storage: %w" thrown in caddyserver/caddy.

Source

Thrown at modules/caddytls/ech.go:114

	// the rest of provisioning needs an exclusive lock so that instances aren't
	// stepping on each other when setting up ECH configs
	storage := ctx.Storage()
	if err := storage.Lock(ctx, echStorageLockName); err != nil {
		return nil, err
	}
	defer func() {
		if err := storage.Unlock(ctx, echStorageLockName); err != nil {
			logger.Error("unable to unlock ECH provisioning in storage", zap.Error(err))
		}
	}()

	ech.configsMu.Lock()
	defer ech.configsMu.Unlock()

	outerNames, err := ech.setConfigsFromStorage(ctx, logger)
	if err != nil {
		return nil, fmt.Errorf("loading configs from storage: %w", err)
	}

	// see if we need to make any new ones based on the input configuration
	for _, cfg := range ech.Configs {
		publicName := strings.ToLower(strings.TrimSpace(cfg.PublicName))

		if list, ok := ech.configs[publicName]; !ok || len(list) == 0 {
			// no config with this public name was loaded, so create one
			echCfg, err := generateAndStoreECHConfig(ctx, publicName)
			if err != nil {
				return nil, err
			}
			logger.Debug("generated new ECH config",
				zap.String("public_name", echCfg.RawPublicName),
				zap.Uint8("id", echCfg.ConfigID))
			ech.configs[publicName] = append(ech.configs[publicName], echCfg)
			outerNames = append(outerNames, publicName)
		}

View on GitHub (pinned to 50e54ee279)

Solutions

  1. Check the storage backend; ECH configs could not be read. The data may be corrupted or storage unreachable.

When it happens

Trigger: Thrown at modules/caddytls/ech.go:114 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of caddyserver/caddy@50e54ee279 (2026-08-15). Data as JSON: /api/errors/b10527feedf26438. Report an issue: GitHub.