{"record":{"id":"c82b9146a1ded86d","repo":"tonhowtf/omniget","slug":"probe-timed-out","errorCode":null,"errorMessage":"probe timed out","messagePattern":"probe timed out","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"src-tauri/omniget-core/src/core/http_fetcher.rs","lineNumber":720,"sourceCode":"                accept_ranges,\n                content_type: h\n                    .get(reqwest::header::CONTENT_TYPE)\n                    .and_then(|v| v.to_str().ok())\n                    .map(|s| s.to_string()),\n                filename: header_filename(h),\n                method: \"HEAD\",\n            });\n        }\n    }\n\n    let mut req = client.get(url).header(reqwest::header::RANGE, \"bytes=0-0\");\n    if let Some(h) = headers {\n        req = req.headers(headers_without_range(h));\n    }\n    let resp = match tokio::time::timeout(timeout, req.send()).await {\n        Ok(Ok(r)) => r,\n        Ok(Err(e)) => return Err(anyhow!(\"probe failed: {}\", e)),\n        Err(_) => return Err(anyhow!(\"probe timed out\")),\n    };\n    let status = resp.status();\n    if !status.is_success() {\n        return Err(anyhow!(\"probe returned HTTP {}\", status));\n    }\n    let h = resp.headers().clone();\n    let content_type = h\n        .get(reqwest::header::CONTENT_TYPE)\n        .and_then(|v| v.to_str().ok())\n        .map(|s| s.to_string());\n    let filename = header_filename(&h);\n    let probe = if status == reqwest::StatusCode::PARTIAL_CONTENT {\n        RemoteProbe {\n            content_length: content_range_total(&h),\n            accept_ranges: true,\n            content_type,\n            filename,\n            method: \"GET range\",","sourceCodeStart":702,"sourceCodeEnd":738,"githubUrl":"https://github.com/tonhowtf/omniget/blob/8600b91f4246848bac346874daa9e61c1fc5677a/src-tauri/omniget-core/src/core/http_fetcher.rs#L702-L738","documentation":"The 1-byte ranged GET in probe_remote is bounded by tokio::time::timeout. If req.send() does not produce a response within the configured duration, the Err(_) arm returns this static message. It means the server connected (or HEAD succeeded) but never delivered the GET response in time.","triggerScenarios":"Calling probe/probe_url against a server that accepts the connection but stalls before answering the bytes=0-0 GET, exceeding the probe timeout.","commonSituations":"Extremely slow origin servers, rate-limited or tarpitting hosts, mobile/satellite links with long RTTs, or a timeout value configured too tightly for the environment.","solutions":["Increase the timeout parameter passed to probe_remote.","Re-run the probe to rule out a one-off stall.","Check server-side load or rate limiting (headers like Retry-After, 429s on other endpoints).","Reduce probe frequency or add backoff if probing many URLs against the same host."],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"match probe(url, headers, timeout).await {\n    Err(e) if e.to_string() == \"probe timed out\" => {\n        // retry with 2x timeout, then mark host slow/unavailable\n    }\n    other => { other?; }\n}","preventionTips":["Set probe timeouts from measured RTTs, not fixed guesses.","Throttle probe frequency against rate-limiting or tarpitting servers.","Circuit-break hosts that time out repeatedly instead of re-probing every request."],"tags":["network","timeout","probe","http"],"backgroundTag":"request-timeout","analyzedSha":"8600b91f4246848bac346874daa9e61c1fc5677a","analyzedAt":"2026-09-12T14:29:19.317Z","contentChangedAt":"2026-09-12T14:29:19.317Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}