This is an automated email from the ASF dual-hosted git repository.

sebastian-nagel pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nutch.git


The following commit(s) were added to refs/heads/master by this push:
     new a0814a7b1 NUTCH-3177 Fetcher to report idle threads not as hung threads
a0814a7b1 is described below

commit a0814a7b116dbf5b0053f7b2fa2428f3d868c95f
Author: Sebastian Nagel <[email protected]>
AuthorDate: Wed May 13 22:56:43 2026 +0200

    NUTCH-3177 Fetcher to report idle threads not as hung threads
    
    - reset reprUrl in FetcherThread after fetch is finished
    - report idle threads properly
---
 src/java/org/apache/nutch/fetcher/Fetcher.java       | 13 +++++++++----
 src/java/org/apache/nutch/fetcher/FetcherThread.java |  3 +++
 2 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/src/java/org/apache/nutch/fetcher/Fetcher.java 
b/src/java/org/apache/nutch/fetcher/Fetcher.java
index 029d95ff7..d8f83a96b 100644
--- a/src/java/org/apache/nutch/fetcher/Fetcher.java
+++ b/src/java/org/apache/nutch/fetcher/Fetcher.java
@@ -448,16 +448,21 @@ public class Fetcher extends NutchTool implements Tool {
            * fetcher.threads.timeout.divisor.
            */
           if ((System.currentTimeMillis() - lastRequestStart.get()) > timeout) 
{
-            LOG.warn("Timeout reached with no new requests since {} seconds.",
+            LOG.warn(
+                "Timeout reached with no new requests since {} milliseconds.",
                 timeout);
-            LOG.warn("Aborting with {} hung threads{}.", activeThreads,
+            LOG.warn("Aborting with {} hung or idle threads{}.", activeThreads,
                 feeder.isAlive() ? " (queue feeder still alive)" : "");
             hungThreadsCounter.increment(activeThreads.get());
             for (int i = 0; i < fetcherThreads.size(); i++) {
               FetcherThread thread = fetcherThreads.get(i);
               if (thread.isAlive()) {
-                LOG.warn("Thread #{} hung while processing {}", i,
-                    thread.getReprUrl());
+                if (thread.getReprUrl() != null) {
+                  LOG.warn("Thread #{} hung while processing {}", i,
+                      thread.getReprUrl());
+                } else {
+                  LOG.warn("Thread #{} idle", i);
+                }
                 StackTraceElement[] stack = thread.getStackTrace();
                 StringBuilder sb = new StringBuilder();
                 sb.append("Stack of thread #").append(i).append(":\n");
diff --git a/src/java/org/apache/nutch/fetcher/FetcherThread.java 
b/src/java/org/apache/nutch/fetcher/FetcherThread.java
index e3ee092b4..e894f01f1 100644
--- a/src/java/org/apache/nutch/fetcher/FetcherThread.java
+++ b/src/java/org/apache/nutch/fetcher/FetcherThread.java
@@ -537,6 +537,9 @@ public class FetcherThread extends Thread {
           output(fit.url, fit.datum, null, ProtocolStatus.STATUS_FAILED,
               CrawlDatum.STATUS_FETCH_RETRY);
         }
+
+        // done: unset reprUrl for reporting
+        setReprUrl(null);
       }
 
     } catch (Throwable e) {

Reply via email to