weaviate/weaviate · error

create payload for class %q: %w

Error message

create payload for class %q: %w

What it means

Inside Save's class loop, createClassPayload(cls, sharding) serializes the class definition (and its sharding state) into the per-class payload to be written to BoltDB. An error here means marshaling failed or the sharding state for the class is incompatible/missing in the shape expected by createClassPayload.

Source

Thrown at adapters/repos/schema/store.go:410

	return func(tx *bolt.Tx) error {
		rootCursor := root.Cursor()
		for cls, _ := rootCursor.First(); cls != nil; {
			if cls[0] == eTypeClass {
				err := root.DeleteBucket(cls)
				if err != nil && !errors.Is(err, bolterrors.ErrBucketNotFound) {
					return err
				}
			}
			cls, _ = rootCursor.Next()
		}
		for _, cls := range ss.ObjectSchema.Classes {
			if err := ctx.Err(); err != nil {
				return fmt.Errorf("context for class %q: %w", cls.Class, err)
			}
			sharding := ss.ShardingState[cls.Class]
			payload, err := createClassPayload(cls, sharding)
			if err != nil {
				return fmt.Errorf("create payload for class %q: %w", cls.Class, err)
			}
			b, err := root.CreateBucket(encodeClassName(cls.Class))
			if err != nil {
				return fmt.Errorf("create bucket for class %q: %w", cls.Class, err)
			}
			if err := r.updateClass(b, payload); err != nil {
				return fmt.Errorf("update bucket %q: %w", cls.Class, err)
			}
			r.log.WithField("action", "update_schema_store").
				Debugf("Class updated: %s", cls.Class)
		}

		r.log.WithField("action", "update_schema_store").
			Debug("All classes updated")

		return nil
	}
}

View on GitHub (pinned to 75aa4b6d11)

Solutions

  1. Verify every class in ObjectSchema.Classes has a matching entry in ShardingState; add the missing sharding state.
  2. Inspect the wrapped createClassPayload error for marshal failures and fix the offending class definition.
  3. If caused by version skew, complete the rolling upgrade so all nodes agree on the sharding state format.

Example fix

// before
ss.ObjectSchema.Classes = classes // some classes lack sharding entries
ss.ShardingState = partialSharding
// after
for _, cls := range classes {
	if _, ok := ss.ShardingState[cls.Class]; !ok {
		ss.ShardingState[cls.Class] = defaultShardingFor(cls)
	}
}
Defensive patterns

Strategy: validation

Validate before calling

// ensure every class has a sharding state before Save
for _, cls := range ss.ObjectSchema.Classes {
	if _, ok := ss.ShardingState[cls.Class]; !ok {
		return fmt.Errorf("class %q missing sharding state", cls.Class)
	}
}

Try / catch

err := store.Save(ctx, ss)
if err != nil {
	var clsName string
	if strings.Contains(err.Error(), "create payload for class") {
		fmt.Sscanf(err.Error(), "create payload for class %q", &clsName)
		// inspect/repair sharding state for clsName
	}
	return err
}

Prevention

When it happens

Trigger: createClassPayload returns an error during Save — e.g. JSON marshaling of a malformed class, or sharding == nil for a class present in ObjectSchema but absent from ss.ShardingState.

Common situations: Schema states assembled programmatically (tools/tests) where ShardingState wasn't populated for every class; version-skew during rolling upgrades where sharding state format changed.

Related errors


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