{"record":{"id":"987e7fe3d026dcf0","repo":"ipfs/kubo","slug":"probe-fetch-w","errorCode":null,"errorMessage":"probe fetch: %w","messagePattern":"probe fetch: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"core/commands/diag.go","lineNumber":70,"sourceCode":"`,\n\t},\n\tRun: func(req *cmds.Request, res cmds.ResponseEmitter, env cmds.Environment) error {\n\t\tif t := shutdown.StartedAt(); !t.IsZero() {\n\t\t\treturn fmt.Errorf(\"daemon is shutting down (started %s ago)\", time.Since(t).Round(time.Second))\n\t\t}\n\t\tapi, err := cmdenv.GetApi(env, req)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tprobeCID, err := cid.Decode(diagHealthyProbeCIDStr)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"invalid probe CID: %w\", err)\n\t\t}\n\t\tif _, _, err := api.ResolvePath(req.Context, path.FromCid(probeCID)); err != nil {\n\t\t\treturn fmt.Errorf(\"probe resolve: %w\", err)\n\t\t}\n\t\tif _, err := api.Dag().Get(req.Context, probeCID); err != nil {\n\t\t\treturn fmt.Errorf(\"probe fetch: %w\", err)\n\t\t}\n\t\treturn cmds.EmitOnce(res, \"ok\")\n\t},\n}\n\nvar diagDatastoreCmd = &cmds.Command{\n\tStatus: cmds.Experimental,\n\tHelptext: cmds.HelpText{\n\t\tTagline: \"Low-level datastore inspection for debugging and testing.\",\n\t\tShortDescription: `\n'ipfs diag datastore' provides low-level access to the datastore for debugging\nand testing purposes.\n\nWARNING: FOR DEBUGGING/TESTING ONLY\n\nThese commands expose internal datastore details and should not be used\nin production workflows. The datastore format may change between versions.\n","sourceCodeStart":52,"sourceCodeEnd":88,"githubUrl":"https://github.com/ipfs/kubo/blob/329838acdfafae224582930457efe80aa217afc0/core/commands/diag.go#L52-L88","documentation":"After resolving the probe path, `ipfs diag healthy` fetches the probe block via api.Dag().Get(); failure is wrapped as 'probe fetch'. This means the DAG pipeline cannot retrieve the probe block — the healthcheck's core signal that the node can still store and retrieve data.","triggerScenarios":"api.Dag().Get(req.Context, probeCID) returns an error: block missing locally and fetch failing (routing down, network offline, blockstore IO error).","commonSituations":"Healthcheck failures on nodes with broken bitswap/routing, full or corrupted blockstores, or nodes intentionally offline.","solutions":["Inspect daemon logs for the wrapped fetch error","Confirm network connectivity and routing (ipfs swarm peers, ipfs routing findprovs)","Repair/verify the blockstore; restart the daemon"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"err := diagHealthy(ctx)\nif err != nil && strings.Contains(err.Error(), \"probe fetch\") { verifySwarm(ctx); retryWithBackoff(ctx) }","preventionTips":["Keep the probe block pinned locally so fetch never needs the network","Monitor network connectivity and blockstore errors"],"tags":["diag","healthcheck","dag","fetch"],"backgroundTag":"dag-fetch-failed","analyzedSha":"329838acdfafae224582930457efe80aa217afc0","analyzedAt":"2026-09-03T18:30:52.135Z","contentChangedAt":"2026-09-03T18:30:52.135Z","schemaVersion":2},"datasetVersion":"2026-09-11T00:17:11.886Z"}