{"record":{"id":"c85cb9acc5ed4a84","repo":"wavetermdev/waveterm","slug":"error-updating-q-meta-w","errorCode":null,"errorMessage":"error updating %q meta: %w","messagePattern":"error updating %q meta: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/service/objectservice/objectservice.go","lineNumber":131,"sourceCode":"}\n\nfunc (svc *ObjectService) UpdateObjectMeta_Meta() tsgenmeta.MethodMeta {\n\treturn tsgenmeta.MethodMeta{\n\t\tArgNames: []string{\"uiContext\", \"oref\", \"meta\"},\n\t}\n}\n\nfunc (svc *ObjectService) UpdateObjectMeta(uiContext waveobj.UIContext, orefStr string, meta waveobj.MetaMapType) (waveobj.UpdatesRtnType, error) {\n\tctx, cancelFn := context.WithTimeout(context.Background(), DefaultTimeout)\n\tdefer cancelFn()\n\tctx = waveobj.ContextWithUpdates(ctx)\n\toref, err := parseORef(orefStr)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"error parsing object reference: %w\", err)\n\t}\n\terr = wstore.UpdateObjectMeta(ctx, *oref, meta, false)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"error updating %q meta: %w\", orefStr, err)\n\t}\n\treturn waveobj.ContextGetUpdatesRtn(ctx), nil\n}\n\nfunc (svc *ObjectService) UpdateObject_Meta() tsgenmeta.MethodMeta {\n\treturn tsgenmeta.MethodMeta{\n\t\tArgNames: []string{\"uiContext\", \"waveObj\", \"returnUpdates\"},\n\t}\n}\n\nfunc (svc *ObjectService) UpdateObject(uiContext waveobj.UIContext, waveObj waveobj.WaveObj, returnUpdates bool) (waveobj.UpdatesRtnType, error) {\n\tctx, cancelFn := context.WithTimeout(context.Background(), DefaultTimeout)\n\tdefer cancelFn()\n\tctx = waveobj.ContextWithUpdates(ctx)\n\tif waveObj == nil {\n\t\treturn nil, fmt.Errorf(\"update wavobj is nil\")\n\t}\n\toref := waveobj.ORefFromWaveObj(waveObj)","sourceCodeStart":113,"sourceCodeEnd":149,"githubUrl":"https://github.com/wavetermdev/waveterm/blob/a4447c1563b2df285ab89e76c82f91e1a1a49c1e/pkg/service/objectservice/objectservice.go#L113-L149","documentation":"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.","triggerScenarios":"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).","commonSituations":"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.","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)"],"exampleFix":"// before\n_, err := svc.UpdateObjectMeta(uiContext, orefStr, meta)\n// after\nif _, err := svc.UpdateObjectMeta(uiContext, orefStr, meta); err != nil && strings.Contains(err.Error(), \"key not found\") {\n    orefStr = resolveLiveOref(ctx) // object moved/deleted; refresh then retry\n    _, err = svc.UpdateObjectMeta(uiContext, orefStr, meta)\n}","handlingStrategy":"retry","validationCode":"// verify object still exists before meta update\nif _, err := svc.GetObject(ctx, orefStr); err != nil { return fmt.Errorf(\"object gone: %w\", err) }","typeGuard":null,"tryCatchPattern":"err := retry(3, func() error {\n    _, err := svc.UpdateObjectMeta(uiContext, orefStr, meta)\n    if err != nil && strings.Contains(err.Error(), \"key not found\") { return errStop }\n    return err\n})","preventionTips":["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"],"tags":["go","database","meta","wstore"],"backgroundTag":"database-write-failed","analyzedSha":"a4447c1563b2df285ab89e76c82f91e1a1a49c1e","analyzedAt":"2026-09-01T15:26:23.972Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}