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

  1. Read the wrapped updateClass error; address the underlying bolt Put failure (disk space, permissions, closed DB).
  2. Retry Save; BoltDB transactions are atomic so a failed save leaves the prior schema intact.
  3. 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

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


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