Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FIXED JENKINS-37031] tcpSlaveAgentListener should publish supported agent protocols to speed up connection setup #93

Merged
merged 2 commits into from
Aug 6, 2016
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions src/main/java/hudson/remoting/Engine.java
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,9 @@
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.logging.Level;
import javax.annotation.CheckForNull;
import javax.annotation.concurrent.NotThreadSafe;
Expand Down Expand Up @@ -214,6 +216,7 @@ public void run() {
Throwable firstError=null;
String host=null;
String port=null;
Set<String> agentProtocolNames = null;
SSLSocketFactory sslSocketFactory = getSSLSocketFactory();

for (URL url : candidateUrls) {
Expand Down Expand Up @@ -247,6 +250,16 @@ public void run() {
}
host = con.getHeaderField("X-Jenkins-JNLP-Host"); // controlled by hudson.TcpSlaveAgentListener.hostName
if (host == null) host=url.getHost();
String names = con.getHeaderField("X-Jenkins-Agent-Protocols");
agentProtocolNames = new HashSet<String>();
if (names != null) {
for (String name: names.split(",")) {
name = name.trim();
if (!name.isEmpty()) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not just StringUtils.isNotBlank()?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Because StringUtils is not on the classpath in remoting.jar (which is supposed to be self-contained)

agentProtocolNames.add(name);
}
}
}
} finally {
con.disconnect();
}
Expand Down Expand Up @@ -277,6 +290,10 @@ public void run() {
events.status("Protocol " + protocol.getName() + " is not enabled, skipping");
continue;
}
if (agentProtocolNames != null && !agentProtocolNames.contains(protocol.getName())) {
Copy link
Member

@oleg-nenashev oleg-nenashev Aug 5, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🐛 agentProtocolNames will be empty if X-Jenkins-Agent-Protocols is missing since you initialize the container before if clause. In such case this code will also skip protocols as non-supported

events.status("Server reports protocol " + protocol.getName() + " not supported, skipping");
continue;
}
triedAtLeastOneProtocol = true;
events.status("Trying protocol: " + protocol.getName());
try {
Expand Down