weaviate/weaviate · error

verify leader before export: %w

Error message

verify leader before export: %w

What it means

Before a full-roster user export, the store issues a RAFT Barrier to prove leadership and full log application; if the Barrier fails or times out (ConsistencyWaitTimeout), the export is refused rather than returning a possibly stale roster.

Source

Thrown at cluster/store_query.go:126

			return &cmd.QueryResponse{}, fmt.Errorf("could not get dynamic user: %w", err)
		}
	case cmd.QueryRequest_TYPE_USER_IDENTIFIER_EXISTS:
		payload, err = st.dynUserManager.CheckUserIdentifierExists(req)
		if err != nil {
			return &cmd.QueryResponse{}, fmt.Errorf("could not check user identifier: %w", err)
		}
	case cmd.QueryRequest_TYPE_EXPORT_USERS:
		// Barrier proves this node is still leader and has applied every committed
		// entry, so a fresh leader cannot return a short roster. Per-id reads skip
		// it; the apply re-checks them. raft is nil only in unit-test stores.
		if st.raft != nil {
			var sub cmd.QueryExportUsersRequest
			if err := json.Unmarshal(req.SubCommand, &sub); err != nil {
				return &cmd.QueryResponse{}, fmt.Errorf("could not export dynamic users: %w", err)
			}
			if len(sub.UserIds) == 0 {
				if err := st.raft.Barrier(st.cfg.ConsistencyWaitTimeout).Error(); err != nil {
					return &cmd.QueryResponse{}, fmt.Errorf("verify leader before export: %w", err)
				}
			}
		}
		payload, err = st.dynUserManager.ExportUsers(req)
		if err != nil {
			return &cmd.QueryResponse{}, fmt.Errorf("could not export dynamic users: %w", err)
		}
	case cmd.QueryRequest_TYPE_GET_NAMESPACES:
		payload, err = st.namespaceManager.Get(req)
		if err != nil {
			return &cmd.QueryResponse{}, fmt.Errorf("could not get namespaces: %w", err)
		}
	case cmd.QueryRequest_TYPE_GET_REPLICATION_DETAILS:
		payload, err = st.replicationManager.GetReplicationDetailsByReplicationId(req)
		if err != nil {
			return &cmd.QueryResponse{}, fmt.Errorf("could not get replication operation details: %w", err)
		}
	case cmd.QueryRequest_TYPE_GET_REPLICATION_DETAILS_BY_COLLECTION:

View on GitHub (pinned to 75aa4b6d11)

Solutions

  1. Retry the full-roster export — a fresh barrier usually succeeds once leadership settles
  2. Check raft leadership status; query the current leader instead of a deposed node
  3. Increase ConsistencyWaitTimeout if barriers routinely time out on large clusters
Defensive patterns

Strategy: retry

When it happens

Trigger: Thrown at cluster/store_query.go:126 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of weaviate/weaviate@75aa4b6d11 (2026-09-04). Data as JSON: /api/errors/b6b458658535f712. Report an issue: GitHub.