nats-io/nats-server · error

error setting up pack response handling: %v

Error message

error setting up pack response handling: %v

What it means

Returned by DirAccResolver setup when the subscription that receives pack responses (packRespIb inbox) cannot be created. This handler merges JWT packs from other servers into the local DirJWTStore; failing to subscribe means cluster-wide JWT sync cannot complete, so setup aborts.

Source

Thrown at server/accounts.go:4634

		// in case request is sent with headers.
		_, msg = c.msgParts(msg)
		handleDeleteRequest(dr.DirJWTStore, s, msg, reply)
	}); err != nil {
		return fmt.Errorf("error setting up delete request handling: %v", err)
	}
	// embed pack responses into store
	if _, err := s.sysSubscribe(packRespIb, func(_ *subscription, _ *client, _ *Account, _, _ string, msg []byte) {
		hash := dr.DirJWTStore.Hash()
		if len(msg) == 0 { // end of response stream
			s.Debugf("DirResolver - Merging finished and resulting in: %x", dr.DirJWTStore.Hash())
			return
		} else if err := dr.DirJWTStore.Merge(string(msg)); err != nil {
			s.Errorf("DirResolver - Merging resulted in error: %v", err)
		} else {
			s.Debugf("DirResolver - Merging succeeded and changed %x to %x", hash, dr.DirJWTStore.Hash())
		}
	}); err != nil {
		return fmt.Errorf("error setting up pack response handling: %v", err)
	}
	// periodically send out pack message
	quit := s.quitCh
	s.startGoRoutine(func() {
		defer s.grWG.Done()
		ticker := time.NewTicker(dr.syncInterval)
		for {
			select {
			case <-quit:
				ticker.Stop()
				return
			case <-ticker.C:
			}
			ourHash := dr.DirJWTStore.Hash()
			s.Debugf("DirResolver - Checking store state: %x", ourHash)
			s.sendInternalMsgLocked(accPackReqSubj, packRespIb, nil, ourHash[:])
		}
	})

View on GitHub (pinned to 3a66a489d2)

Solutions

  1. Ensure system account/eventing is healthy on the node.
  2. Read the wrapped inner error for the underlying cause.
  3. Restart the server to re-initialize internal subscriptions.
  4. Check for version mismatches between cluster nodes that could affect internal subjects.
Defensive patterns

Strategy: validation

Validate before calling

if s.sys == nil || s.sys.replies == nil {
    return fmt.Errorf("eventing unavailable; cannot start pack response handling")
}

Try / catch

if err := dr.Start(); err != nil {
    if strings.Contains(err.Error(), "error setting up pack response handling") {
        return fmt.Errorf("cluster JWT sync disabled: %w", err)
    }
    return err
}

Prevention

When it happens

Trigger: sysSubscribe on the pack response inbox fails during resolver startup — eventing down, system account misconfigured, or invalid inbox subject.

Common situations: Servers in a cluster where one node lacks the system account; race between resolver Start() and eventing teardown.

Related errors


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