Skip to content

Commit

Permalink
[JENKINS-35190] Do not even consult PingFailureAnalyzer if ping fails…
Browse files Browse the repository at this point in the history
… on the agent side. (#2377)
  • Loading branch information
jglick authored and oleg-nenashev committed May 29, 2016
1 parent 3403a3e commit 0ae6c42
Showing 1 changed file with 15 additions and 5 deletions.
20 changes: 15 additions & 5 deletions core/src/main/java/hudson/slaves/ChannelPinger.java
Expand Up @@ -88,7 +88,7 @@ public void install(Channel channel) {


// set up ping from both directions, so that in case of a router dropping a connection, // set up ping from both directions, so that in case of a router dropping a connection,
// both sides can notice it and take compensation actions. // both sides can notice it and take compensation actions.
setUpPingForChannel(channel, pingInterval); setUpPingForChannel(channel, pingInterval, true);
} }


private static class SetUpRemotePing extends MasterToSlaveCallable<Void, IOException> { private static class SetUpRemotePing extends MasterToSlaveCallable<Void, IOException> {
Expand All @@ -99,18 +99,20 @@ public SetUpRemotePing(int pingInterval) {
} }


public Void call() throws IOException { public Void call() throws IOException {
setUpPingForChannel(Channel.current(), pingInterval); setUpPingForChannel(Channel.current(), pingInterval, false);
return null; return null;
} }
} }


private static void setUpPingForChannel(final Channel channel, int interval) { private static void setUpPingForChannel(final Channel channel, int interval, final boolean analysis) {
LOGGER.log(FINE, "setting up ping on {0} at interval {1}m", new Object[] {channel.getName(), interval});
final AtomicBoolean isInClosed = new AtomicBoolean(false); final AtomicBoolean isInClosed = new AtomicBoolean(false);
final PingThread t = new PingThread(channel, interval * 60 * 1000) { final PingThread t = new PingThread(channel, interval * 60 * 1000) {
@Override
protected void onDead(Throwable cause) { protected void onDead(Throwable cause) {
try { try {
for (PingFailureAnalyzer pfa : PingFailureAnalyzer.all()) { if (analysis) {
pfa.onPingFailure(channel,cause); analyze(cause);
} }
if (isInClosed.get()) { if (isInClosed.get()) {
LOGGER.log(FINE,"Ping failed after the channel "+channel.getName()+" is already partially closed.",cause); LOGGER.log(FINE,"Ping failed after the channel "+channel.getName()+" is already partially closed.",cause);
Expand All @@ -122,6 +124,14 @@ protected void onDead(Throwable cause) {
LOGGER.log(SEVERE,"Failed to terminate the channel "+channel.getName(),e); LOGGER.log(SEVERE,"Failed to terminate the channel "+channel.getName(),e);
} }
} }
/** Keep in a separate method so we do not even try to do class loading on {@link PingFailureAnalyzer} from an agent JVM. */
private void analyze(Throwable cause) throws IOException {
for (PingFailureAnalyzer pfa : PingFailureAnalyzer.all()) {
pfa.onPingFailure(channel,cause);
}
}
@Deprecated
@Override
protected void onDead() { protected void onDead() {
onDead(null); onDead(null);
} }
Expand Down

0 comments on commit 0ae6c42

Please sign in to comment.