You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@solr.apache.org by ja...@apache.org on 2026/07/28 13:52:21 UTC
(solr) 06/07: SOLR-18027 Increase socket timeout in addition to request timeout (#3975)
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 <ja...@apache.org>
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);
}