{"record":{"id":"1bed0eae9a6230ec","repo":"gofr-dev/gofr","slug":"key-not-found-1bed0e","errorCode":null,"errorMessage":"key not found","messagePattern":"key not found","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"pkg/gofr/datasource/kv-store/nats/nats.go","lineNumber":16,"sourceCode":"package nats\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"time\"\n\n\t\"github.com/nats-io/nats.go\"\n\t\"go.opentelemetry.io/otel/attribute\"\n\t\"go.opentelemetry.io/otel/trace\"\n)\n\nvar (\n\terrStatusDown  = errors.New(\"status down\")\n\terrKeyNotFound = errors.New(\"key not found\")\n)\n\ntype Configs struct {\n\tServer string\n\tBucket string\n}\n\ntype jetStream struct {\n\tnats.JetStreamContext\n}\n\nfunc (j jetStream) AccountInfo() (*nats.AccountInfo, error) {\n\treturn j.JetStreamContext.AccountInfo()\n}\n\ntype Client struct {\n\tconn    *nats.Conn\n\tjs      JetStream","sourceCodeStart":1,"sourceCodeEnd":34,"githubUrl":"https://github.com/gofr-dev/gofr/blob/187eb24962502e91f1fee856230670958b66e89c/pkg/gofr/datasource/kv-store/nats/nats.go#L1-L34","documentation":"In the NATS KV-store client, errKeyNotFound ('key not found') is the sentinel returned by Get and Delete when the key does not exist in the KV bucket. Get wraps it with the key name via %w so errors.Is detection works. It is an expected miss condition, not a client fault.","triggerScenarios":"Client.Get(ctx, key) for a key never Put into the bucket, keys expired via bucket TTL (MaxAge), keys from a different bucket, or Delete on a non-existent key.","commonSituations":"Reading before first write, TTL-expired session data, bucket name mismatch between writer and reader, keys purged by KV history limits.","solutions":["Check errors.Is(err, errKeyNotFound) and implement miss/fallback logic","Confirm both writer and reader use the same Configs.Bucket","Increase bucket MaxAge/TTL if keys expire too early","Put the key first or seed required keys at startup"],"exampleFix":"// before\nv, err := kv.Get(ctx, \"cfg:app\")\nif err != nil { panic(err) }\n// after\nv, err := kv.Get(ctx, \"cfg:app\")\nif errors.Is(err, natskv.ErrKeyNotFound) { v = defaultCfg } else if err != nil { return err }","handlingStrategy":"fallback","validationCode":"// verify bucket consistency before reads\nif readerBucket != writerBucket { return fmt.Errorf(\"bucket mismatch: %q vs %q\", readerBucket, writerBucket) }","typeGuard":"func IsKeyNotFound(err error) bool { return errors.Is(err, natskv.ErrKeyNotFound) }","tryCatchPattern":"v, err := store.Get(ctx, key)\nswitch {\ncase errors.Is(err, natskv.ErrKeyNotFound): v = defaultValue\ncase err != nil: return err\n}","preventionTips":["Branch on errors.Is(err, ErrKeyNotFound) before other errors","Align bucket names via shared config between writer and reader","Account for TTL: size MaxAge to your data lifetime","Seed required keys at startup"],"tags":["nats","jetstream","kv-store","key-not-found"],"backgroundTag":"key-not-found","analyzedSha":"187eb24962502e91f1fee856230670958b66e89c","analyzedAt":"2026-09-01T20:34:54.554Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}