From 72b1b1f1d63a083e843fd098b68e8947375653f5 Mon Sep 17 00:00:00 2001 From: Richard Zowalla Date: Wed, 1 Apr 2026 19:33:14 +0200 Subject: [PATCH] Fix thread-safety and minor issues in OkHttp protocol - Replace HashMap with ConcurrentHashMap for DNS timing map to prevent data races between event listener callbacks and fetch threads - Remove unnecessary (int) cast on long value to prevent potential truncation in content buffering loop - Use isEmpty() instead of size() > 0 --- .../apache/stormcrawler/protocol/okhttp/HttpProtocol.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/org/apache/stormcrawler/protocol/okhttp/HttpProtocol.java b/core/src/main/java/org/apache/stormcrawler/protocol/okhttp/HttpProtocol.java index 8defb8f0c..1a939c9c0 100644 --- a/core/src/main/java/org/apache/stormcrawler/protocol/okhttp/HttpProtocol.java +++ b/core/src/main/java/org/apache/stormcrawler/protocol/okhttp/HttpProtocol.java @@ -25,13 +25,13 @@ import java.security.cert.CertificateException; import java.util.ArrayList; import java.util.Base64; -import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Objects; import java.util.Optional; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.SSLContext; @@ -98,7 +98,7 @@ public class HttpProtocol extends AbstractHttpProtocol { private final List customRequestHeaders = new LinkedList<>(); // track the time spent for each URL in DNS resolution - private final Map DNStimes = new HashMap<>(); + private final Map DNStimes = new ConcurrentHashMap<>(); private OkHttpClient.Builder builder; @@ -186,7 +186,7 @@ public void configure(Config conf) { break; } } - if (protocols.size() > 0) { + if (!protocols.isEmpty()) { LOG.info("Using protocol versions: {}", protocols); builder.protocols(protocols); } @@ -512,7 +512,7 @@ private byte[] toByteArray( // okhttp may fetch more content than requested, quickly "increment" // bytes - bytesRequested = (int) source.getBuffer().size(); + bytesRequested = source.getBuffer().size(); } int bytesToCopy = (int) source.getBuffer().size(); // bytesBuffered if (maxContent != -1 && bytesToCopy > maxContent) {