Fix issue with skipping events from high-availability ForwarderTask class keeps caller thread object to identify the source of the event. All events generated by `HTTP POST /plugins/high-availability/index/change/...` thread are skipped. The issue is that all threads in HTTP thread pool are named `HTTP-*` when HTTP call is made thread is renamed to `HTTP POST /plugins/high-availability/index/change/...`. During the processing new thread to send the message is created and current HTTP thread is returned to the pool and it's name is set back to `HTTP-*`. This means that if the code is not fast enough to check HTTP thread name before thread is returned to the pool it will get `HTTP-*` instead of `HTTP POST /plugins/high-availability/index/change/...` and the event will be forwarded. To avoid this situation keep the caller thread name instead of thread object. Bug: Issue 15416 Change-Id: I76f5921793cf844ad638f920127e8f2848a2615e
diff --git a/src/main/java/com/googlesource/gerrit/plugins/multisite/forwarder/ForwarderTask.java b/src/main/java/com/googlesource/gerrit/plugins/multisite/forwarder/ForwarderTask.java index 329b5cb..c5706a5 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/multisite/forwarder/ForwarderTask.java +++ b/src/main/java/com/googlesource/gerrit/plugins/multisite/forwarder/ForwarderTask.java
@@ -15,9 +15,9 @@ package com.googlesource.gerrit.plugins.multisite.forwarder; public abstract class ForwarderTask implements Runnable { - private final Thread callerThread = Thread.currentThread(); + private final String callerThreadName = Thread.currentThread().getName(); - public Thread getCallerThread() { - return callerThread; + public String getCallerThreadName() { + return callerThreadName; } }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/multisite/forwarder/broker/BrokerForwarder.java b/src/main/java/com/googlesource/gerrit/plugins/multisite/forwarder/broker/BrokerForwarder.java index 49e6e1e..56167db 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/multisite/forwarder/broker/BrokerForwarder.java +++ b/src/main/java/com/googlesource/gerrit/plugins/multisite/forwarder/broker/BrokerForwarder.java
@@ -32,7 +32,7 @@ } protected boolean currentThreadBelongsToHighAvailabilityPlugin(ForwarderTask task) { - String currentThreadName = task.getCallerThread().getName(); + String currentThreadName = task.getCallerThreadName(); return currentThreadName.contains(HIGH_AVAILABILITY_PLUGIN) || currentThreadName.contains(HIGH_AVAILABILITY_FORWARDER)