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
- Verify every class in ObjectSchema.Classes has a matching entry in ShardingState; add the missing sharding state.
- Inspect the wrapped createClassPayload error for marshal failures and fix the offending class definition.
- 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
- Keep ObjectSchema.Classes and ShardingState in lockstep through every mutation.
- Test schema round-trips (marshal/unmarshal) after upgrade to catch format drift.
- Log class + sharding presence mismatch at construction time.
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
- drop-vector finalize: copy class %q: %w
- inconsistent schema: missing required fields
- load existing schema state: %w
- create bucket for class %q: %w
- marshal config: %w
AI-assisted analysis of weaviate/weaviate@75aa4b6d11 (2026-09-04).
Data as JSON: /api/errors/8198474952d278b1.
Report an issue: GitHub.