nats-io/nats-server · error

error setting up delete request handling: %v

Error message

error setting up delete request handling: %v

What it means

Returned by DirAccResolver setup when the subscription handling account-delete requests (accDeleteReqSubj) cannot be created. The handler decodes the raw claim and removes the account from the directory store; without it delete propagation in the cluster breaks, so setup fails fast.

Source

Thrown at server/accounts.go:4620

			s.Debugf("DirResolver - Pack request hash %x - finished responding with hash %x", theirHash, ourHash)
			s.sendInternalMsgLocked(reply, _EMPTY_, nil, []byte{})
		}
	}); err != nil {
		return fmt.Errorf("error setting up pack request handling: %v", err)
	}
	// respond to list requests with one message containing all account ids
	if _, err := s.sysSubscribe(accListReqSubj, func(_ *subscription, _ *client, _ *Account, _, reply string, _ []byte) {
		handleListRequest(dr.DirJWTStore, s, reply)
	}); err != nil {
		return fmt.Errorf("error setting up list request handling: %v", err)
	}
	if _, err := s.sysSubscribe(accDeleteReqSubj, func(_ *subscription, c *client, _ *Account, _, reply string, msg []byte) {
		// As this is a raw message, we need to extract payload and only decode claims from it,
		// 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() {

View on GitHub (pinned to 3a66a489d2)

Solutions

  1. Configure the system account correctly so internal subscriptions work.
  2. Check the wrapped error for the precise subscription failure reason.
  3. Avoid starting/stopping the server and resolver concurrently.
  4. Validate that the resolver's directory is writable and options are sane before Start().
Defensive patterns

Strategy: validation

Validate before calling

if !systemAccountConfigured(srv) {
    return fmt.Errorf("delete request handling requires eventing/system account")
}

Try / catch

if err := dr.Start(); err != nil {
    if strings.Contains(err.Error(), "error setting up delete request handling") {
        log.Errorf("resolver delete subscription failed: %v", err)
    }
}

Prevention

When it happens

Trigger: sysSubscribe(accDeleteReqSubj, ...) returning an error during resolver startup — eventing/system client not ready or invalid system setup.

Common situations: Starting a server with a dir resolver before the system account exists; shutting down the server concurrently with resolver setup.

Related errors


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