Skip to content

Commit

Permalink
[FIXED JENKINS-46659] Avoid Jetty timeouts by sending a ping-like pac…
Browse files Browse the repository at this point in the history
…ket every 10s while a CLI command is running.
  • Loading branch information
jglick committed Sep 9, 2017
1 parent 68f5585 commit dc06c3f
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 10 deletions.
16 changes: 16 additions & 0 deletions cli/src/main/java/hudson/cli/CLI.java
Expand Up @@ -704,6 +704,22 @@ public void run() {
}
}
}.start();
new Thread("ping") { // JENKINS-46659
@Override
public void run() {
try {
Thread.sleep(10_000);
while (!connection.complete) {
LOGGER.fine("sending ping");
connection.sendEncoding(Charset.defaultCharset().name()); // no-op at this point
Thread.sleep(10_000);
}
} catch (IOException | InterruptedException x) {
LOGGER.log(Level.WARNING, null, x);
}
}

}.start();
synchronized (connection) {
while (!connection.complete) {
connection.wait();
Expand Down
8 changes: 0 additions & 8 deletions cli/src/main/java/hudson/cli/PlainCLIProtocol.java
Expand Up @@ -34,7 +34,6 @@
import java.io.OutputStream;
import java.nio.channels.ClosedChannelException;
import java.nio.channels.ReadPendingException;
import java.util.concurrent.TimeoutException;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.commons.io.IOUtils;
Expand Down Expand Up @@ -112,13 +111,6 @@ public void run() {
} catch (EOFException x) {
handleClose();
break; // TODO verify that we hit EOF immediately, not partway into framelen
} catch (IOException x) {
if (x.getCause() instanceof TimeoutException) { // TODO on Tomcat this seems to be SocketTimeoutException
LOGGER.log(Level.FINE, "ignoring idle timeout, perhaps from Jetty", x);
continue;
} else {
throw x;
}
}
if (framelen < 0) {
throw new IOException("corrupt stream: negative frame length");
Expand Down
2 changes: 0 additions & 2 deletions test/src/test/java/hudson/cli/CLIActionTest.java
Expand Up @@ -40,7 +40,6 @@
import org.codehaus.groovy.runtime.Security218;
import static org.hamcrest.Matchers.containsString;
import static org.junit.Assert.*;
import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
Expand Down Expand Up @@ -256,7 +255,6 @@ public void encodingAndLocale() throws Exception {
// -ssh mode does not pass client locale or encoding
}

@Ignore("TODO JENKINS-46659 seems to be broken")
@Issue("JENKINS-41745")
@Test
public void interleavedStdio() throws Exception {
Expand Down

0 comments on commit dc06c3f

Please sign in to comment.