This is an automated email from the ASF dual-hosted git repository. janhoy pushed a commit to branch branch_10x in repository https://gitbox.apache.org/repos/asf/solr.git
commit 3a144f8ff485c1297f55b14d539e99e318f9270e Author: Jan Høydahl <[email protected]> AuthorDate: Tue Dec 23 00:36:50 2025 +0100 SOLR-18027 Increase socket timeout in addition to request timeout (#3975) (cherry picked from commit de9c90f97c9b6663914e53ac8881e0415844105f) --- solr/solr-ref-guide/increase-request-timeout.js | 42 +++++++++---------------- 1 file changed, 15 insertions(+), 27 deletions(-) diff --git a/solr/solr-ref-guide/increase-request-timeout.js b/solr/solr-ref-guide/increase-request-timeout.js index f29bc7bc887..f2ac11abcf6 100644 --- a/solr/solr-ref-guide/increase-request-timeout.js +++ b/solr/solr-ref-guide/increase-request-timeout.js @@ -16,44 +16,32 @@ */ /** - * Preload script to increase HTTP request timeout for Antora UI bundle downloads. + * Preload script to increase HTTP socket timeout for Antora UI bundle downloads. * - * This script intercepts HTTP/HTTPS requests to set longer timeout values, preventing - * timeout errors when downloading the UI bundle from slow or high-latency networks, + * This script intercepts Socket.prototype.setTimeout to enforce a minimum timeout value, + * preventing timeout errors when downloading the UI bundle from slow or high-latency networks, * particularly in CI environments. * - * Issue: Antora's UI bundle downloads (925KB from Apache's nightlies server) can timeout - * on slow networks. The simple-get library used by Antora doesn't set request timeouts - * by default, so we intercept http.request() and https.request() to add them. - * * Usage: This script is preloaded via NODE_OPTIONS in the buildLocalAntoraSite task. */ -// Configuration via environment variable const timeoutMs = parseInt(process.env.HTTP_REQUEST_TIMEOUT_MS || '60000', 10); -// Configure HTTP request timeouts by intercepting request methods try { - const http = require('node:http'); - const https = require('node:https'); + const net = require('node:net'); - // Intercept http.request to add timeout to each request - const originalHttpRequest = http.request; - http.request = function(...args) { - const req = originalHttpRequest.apply(this, args); - req.setTimeout(timeoutMs); - console.log(`[http-timeout] Modified http request to set timeout ${timeoutMs}ms`); - return req; + // Intercept Socket.prototype.setTimeout to ensure minimum timeout + const originalSetTimeout = net.Socket.prototype.setTimeout; + net.Socket.prototype.setTimeout = function(msecs, callback) { + // If the requested timeout is less than our minimum, use our minimum + const actualTimeout = Math.max(msecs || 0, timeoutMs); + if (msecs > 0 && msecs < timeoutMs) { + console.log(`[http-timeout] Increased socket timeout from ${msecs}ms to ${actualTimeout}ms`); + } + return originalSetTimeout.call(this, actualTimeout, callback); }; - // Intercept https.request to add timeout to each request - const originalHttpsRequest = https.request; - https.request = function(...args) { - const req = originalHttpsRequest.apply(this, args); - req.setTimeout(timeoutMs); - console.log(`[http-timeout] Modified https request to set timeout ${timeoutMs}ms`); - return req; - }; + console.log(`[http-timeout] Socket timeout interceptor initialized with minimum timeout ${timeoutMs}ms`); } catch (error) { - console.warn('[http-timeout] Could not configure HTTP request timeouts:', error.message); + console.warn('[http-timeout] Could not configure socket timeouts:', error.message); }
