wavetermdev/waveterm · error
error updating %q meta: %w
Error message
error updating %q meta: %w
What it means
UpdateObjectMeta wraps failures from wstore.UpdateObjectMeta with 'error updating %q meta: %w'. The oref parsed but applying the meta map to the stored object failed — e.g. the target object does not exist, the object rejects the meta keys, or the DB write failed. The failing oref string is embedded in the message.
Source
Thrown at pkg/service/objectservice/objectservice.go:131
}
func (svc *ObjectService) UpdateObjectMeta_Meta() tsgenmeta.MethodMeta {
return tsgenmeta.MethodMeta{
ArgNames: []string{"uiContext", "oref", "meta"},
}
}
func (svc *ObjectService) UpdateObjectMeta(uiContext waveobj.UIContext, orefStr string, meta waveobj.MetaMapType) (waveobj.UpdatesRtnType, error) {
ctx, cancelFn := context.WithTimeout(context.Background(), DefaultTimeout)
defer cancelFn()
ctx = waveobj.ContextWithUpdates(ctx)
oref, err := parseORef(orefStr)
if err != nil {
return nil, fmt.Errorf("error parsing object reference: %w", err)
}
err = wstore.UpdateObjectMeta(ctx, *oref, meta, false)
if err != nil {
return nil, fmt.Errorf("error updating %q meta: %w", orefStr, err)
}
return waveobj.ContextGetUpdatesRtn(ctx), nil
}
func (svc *ObjectService) UpdateObject_Meta() tsgenmeta.MethodMeta {
return tsgenmeta.MethodMeta{
ArgNames: []string{"uiContext", "waveObj", "returnUpdates"},
}
}
func (svc *ObjectService) UpdateObject(uiContext waveobj.UIContext, waveObj waveobj.WaveObj, returnUpdates bool) (waveobj.UpdatesRtnType, error) {
ctx, cancelFn := context.WithTimeout(context.Background(), DefaultTimeout)
defer cancelFn()
ctx = waveobj.ContextWithUpdates(ctx)
if waveObj == nil {
return nil, fmt.Errorf("update wavobj is nil")
}
oref := waveobj.ORefFromWaveObj(waveObj)View on GitHub (pinned to a4447c1563)
Solutions
- Check the wrapped error: 'key not found' means the object is gone — re-resolve the oref from live state
- Verify meta keys/values are accepted by the current schema (check for renames after upgrades)
- Retry after resolving DB write conditions (disk, permissions, locks)
Example fix
// before
_, err := svc.UpdateObjectMeta(uiContext, orefStr, meta)
// after
if _, err := svc.UpdateObjectMeta(uiContext, orefStr, meta); err != nil && strings.Contains(err.Error(), "key not found") {
orefStr = resolveLiveOref(ctx) // object moved/deleted; refresh then retry
_, err = svc.UpdateObjectMeta(uiContext, orefStr, meta)
} Defensive patterns
Strategy: retry
Validate before calling
// verify object still exists before meta update
if _, err := svc.GetObject(ctx, orefStr); err != nil { return fmt.Errorf("object gone: %w", err) } Try / catch
err := retry(3, func() error {
_, err := svc.UpdateObjectMeta(uiContext, orefStr, meta)
if err != nil && strings.Contains(err.Error(), "key not found") { return errStop }
return err
}) Prevention
- Re-resolve orefs after any block/tab lifecycle event
- Confirm meta keys against the current schema after upgrades
- Keep the data dir writable with adequate disk space
When it happens
Trigger: Calling UpdateObjectMeta with a valid-format oref for a deleted object, with invalid/unknown meta keys, or when the wstore write fails (permissions/disk/lock).
Common situations: Updating meta on a block that was closed concurrently; schema changes where a meta key is no longer accepted; read-only data dir or full disk.
Related errors
- error getting tab: %w
- error getting client data: %w
- error getting object: %w
- error getting client: %v
- failed to get job: %w
AI-assisted analysis of wavetermdev/waveterm@a4447c1563 (2026-09-01).
Data as JSON: /api/errors/c85cb9acc5ed4a84.
Report an issue: GitHub.