nats-io/nats-server · error

unexpected content (account=%s)

Error message

unexpected content (account=%s)

What it means

During account snapshot restore (used by JetStream account migration/clone), the temporary extraction directory contained entries other than the expected account/stores/consumers layout — the logAndReturnError closure in the snapshot processing reports 'unexpected content' with the account name. Means the snapshot archive is malformed or was produced by an incompatible server version.

Source

Thrown at server/stream.go:9341

	if _, err := os.Stat(sd); os.IsNotExist(err) {
		if err := os.MkdirAll(sd, defaultDirPerms); err != nil {
			return nil, fmt.Errorf("could not create snapshots directory - %v", err)
		}
	}
	sdir, err := os.MkdirTemp(sd, "snap-")
	if err != nil {
		return nil, err
	}
	if _, err := os.Stat(sdir); os.IsNotExist(err) {
		if err := os.MkdirAll(sdir, defaultDirPerms); err != nil {
			return nil, fmt.Errorf("could not create snapshots directory - %v", err)
		}
	}
	defer os.RemoveAll(sdir)

	logAndReturnError := func() error {
		a.mu.RLock()
		err := fmt.Errorf("unexpected content (account=%s)", a.Name)
		if a.srv != nil {
			a.srv.Errorf("Stream restore failed due to %v", err)
		}
		a.mu.RUnlock()
		return err
	}
	sdirCheck := filepath.Clean(sdir) + string(os.PathSeparator)

	_, isClustered := jsa.jetStreamAndClustered()
	jsa.usageMu.RLock()
	selected, tier, hasTier := jsa.selectLimits(cfg.Replicas)
	jsa.usageMu.RUnlock()
	reserved := int64(0)
	if hasTier {
		if isClustered {
			js.mu.RLock()
			_, reserved = js.tieredStreamAndReservationCount(a.Name, tier, &cfg)
			js.mu.RUnlock()

View on GitHub (pinned to 3a66a489d2)

Solutions

  1. Regenerate the snapshot from a healthy source server
  2. Ensure source and target nats-server versions match
  3. Verify the snapshot file was not truncated or altered in transfer
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at server/stream.go:9341 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of nats-io/nats-server@3a66a489d2 (2026-09-02). Data as JSON: /api/errors/ee158bc82a89ea62. Report an issue: GitHub.