weaviate/weaviate · critical
update bucket %q: %w
Error message
update bucket %q: %w
What it means
After the class bucket is obtained, r.updateClass(b, payload) writes the serialized payload into it. Any failure updating the bucket (BoltDB Put failure, closed DB, nested txn issues) is wrapped as "update bucket %q" with the class name.
Source
Thrown at adapters/repos/schema/store.go:417
}
}
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
}
}
func saveConfig(root *bolt.Bucket, cfg config) error {
data, err := json.Marshal(&cfg)
if err != nil {
return fmt.Errorf("marshal config: %w", err)
}
if err := root.Put(keyConfig, data); err != nil {View on GitHub (pinned to 75aa4b6d11)
Solutions
- Read the wrapped updateClass error; address the underlying bolt Put failure (disk space, permissions, closed DB).
- Retry Save; BoltDB transactions are atomic so a failed save leaves the prior schema intact.
- Ensure the node is not shutting down while schema updates are in flight (check lifecycle/ordering of store Close).
Defensive patterns
Strategy: retry
Try / catch
err := store.Save(ctx, ss)
if err != nil && strings.Contains(err.Error(), "update bucket") {
// bolt txns are atomic; prior schema intact — safe to retry
time.Sleep(time.Second)
err = store.Save(ctx, ss)
} Prevention
- Keep the schema DB open for the node's lifetime; serialize Close after in-flight saves.
- Watch disk utilization and fsync latency on storage.
- Batch very large schema writes and retry with backoff on transient I/O failures.
When it happens
Trigger: updateClass returns an error during Save's class loop — typically bolt Put failing due to I/O error, disk full, or the DB being closed concurrently.
Common situations: Disk pressure during schema updates; racing shutdown closing the schema DB mid-Save; extremely large schema writes exceeding fsync timeouts.
Related errors
- load existing schema state: %w
- create bucket for class %q: %w
- cannot remove unloaded %s index for %s property: %w
- apply add class: %w
- property %q of type map
AI-assisted analysis of weaviate/weaviate@75aa4b6d11 (2026-09-04).
Data as JSON: /api/errors/568d8f2513587a11.
Report an issue: GitHub.