Merge remote-tracking branch 'origin/jetty-10.0.x' into jetty-11.0.x

This commit is contained in:
Joakim Erdfelt 2022-11-04 15:42:41 -05:00
commit fbd4387a3e
No known key found for this signature in database
GPG Key ID: 2D0E1FB8FE4B68B4
7 changed files with 41 additions and 30 deletions

2
Jenkinsfile vendored
View File

@ -106,7 +106,7 @@ def mavenBuild(jdk, cmdline, mvnName) {
"MAVEN_OPTS=-Xms2g -Xmx4g -Djava.awt.headless=true"]) {
configFileProvider(
[configFile(fileId: 'oss-settings.xml', variable: 'GLOBAL_MVN_SETTINGS')]) {
sh "mvn --no-transfer-progress -s $GLOBAL_MVN_SETTINGS -Dmaven.repo.local=.repository -Pci -DexcludedGroups=\"external, large-disk-resource, stress, slow\" -V -B -e -Djetty.testtracker.log=true $cmdline"
sh "mvn --no-transfer-progress -s $GLOBAL_MVN_SETTINGS -Dmaven.repo.local=.repository -Pci -DexcludedGroups=\"external, large-disk-resource, stress, slow, flaky\" -V -B -e -Djetty.testtracker.log=true $cmdline"
}
}
}

View File

@ -1501,14 +1501,15 @@ public abstract class HTTP2Session extends ContainerLifeCycle implements ISessio
/**
* <p>The HTTP/2 specification requires that stream ids are monotonically increasing,
* see https://tools.ietf.org/html/rfc7540#section-5.1.1.</p>
* see <a href="https://tools.ietf.org/html/rfc7540#section-5.1.1">RFC 7540, 5.1.1</a>.</p>
* <p>This implementation uses a queue to atomically reserve a stream id and claim
* a slot in the queue; the slot is then assigned the entries to write.</p>
* <p>Concurrent threads push slots in the queue but only one thread flushes
* the slots, up to the slot that has a non-null entries to write, therefore
* guaranteeing that frames are sent strictly in their stream id order.</p>
* <p>This class also coordinates the creation of streams with the close of
* the session, see https://tools.ietf.org/html/rfc7540#section-6.8.</p>
* the session, see
* <a href="https://tools.ietf.org/html/rfc7540#section-6.8">RFC 7540, 6.8</a>.</p>
*/
private class StreamsState
{
@ -1527,7 +1528,7 @@ public abstract class HTTP2Session extends ContainerLifeCycle implements ISessio
private CloseState getCloseState()
{
try (AutoLock l = lock.lock())
try (AutoLock ignored = lock.lock())
{
return closed;
}
@ -1536,7 +1537,7 @@ public abstract class HTTP2Session extends ContainerLifeCycle implements ISessio
private CompletableFuture<Void> shutdown()
{
CompletableFuture<Void> future;
try (AutoLock l = lock.lock())
try (AutoLock ignored = lock.lock())
{
if (shutdownCallback != null)
return shutdownCallback;
@ -1550,7 +1551,7 @@ public abstract class HTTP2Session extends ContainerLifeCycle implements ISessio
{
boolean sendGoAway = false;
boolean tryRunZeroStreamsAction = false;
try (AutoLock l = lock.lock())
try (AutoLock ignored = lock.lock())
{
switch (closed)
{
@ -1661,7 +1662,7 @@ public abstract class HTTP2Session extends ContainerLifeCycle implements ISessio
LOG.debug("Halting ({}) for {}", reason, HTTP2Session.this);
GoAwayFrame goAwayFrame = null;
GoAwayFrame goAwayFrameEvent;
try (AutoLock l = lock.lock())
try (AutoLock ignored = lock.lock())
{
switch (closed)
{
@ -1696,7 +1697,7 @@ public abstract class HTTP2Session extends ContainerLifeCycle implements ISessio
{
boolean failStreams = false;
boolean tryRunZeroStreamsAction = false;
try (AutoLock l = lock.lock())
try (AutoLock ignored = lock.lock())
{
switch (closed)
{
@ -1806,7 +1807,7 @@ public abstract class HTTP2Session extends ContainerLifeCycle implements ISessio
String reason = "input_shutdown";
Throwable cause = null;
boolean failStreams = false;
try (AutoLock l = lock.lock())
try (AutoLock ignored = lock.lock())
{
switch (closed)
{
@ -1866,7 +1867,7 @@ public abstract class HTTP2Session extends ContainerLifeCycle implements ISessio
boolean sendGoAway = false;
GoAwayFrame goAwayFrame = null;
Throwable cause = null;
try (AutoLock l = lock.lock())
try (AutoLock ignored = lock.lock())
{
switch (closed)
{
@ -1933,7 +1934,7 @@ public abstract class HTTP2Session extends ContainerLifeCycle implements ISessio
{
GoAwayFrame goAwayFrame;
Throwable cause;
try (AutoLock l = lock.lock())
try (AutoLock ignored = lock.lock())
{
switch (closed)
{
@ -1970,7 +1971,7 @@ public abstract class HTTP2Session extends ContainerLifeCycle implements ISessio
private void onWriteFailure(Throwable x)
{
String reason = "write_failure";
try (AutoLock l = lock.lock())
try (AutoLock ignored = lock.lock())
{
switch (closed)
{
@ -2028,7 +2029,7 @@ public abstract class HTTP2Session extends ContainerLifeCycle implements ISessio
// but only one moves to CLOSED and runs the action.
Runnable action = null;
CompletableFuture<Void> future;
try (AutoLock l = lock.lock())
try (AutoLock ignored = lock.lock())
{
long count = streamCount.get();
if (count > 0)
@ -2133,7 +2134,7 @@ public abstract class HTTP2Session extends ContainerLifeCycle implements ISessio
private Stream newUpgradeStream(HeadersFrame frame, Stream.Listener listener, Consumer<Throwable> failFn)
{
int streamId;
try (AutoLock l = lock.lock())
try (AutoLock ignored = lock.lock())
{
streamId = localStreamIds.getAndAdd(2);
HTTP2Session.this.onStreamCreated(streamId);
@ -2153,7 +2154,7 @@ public abstract class HTTP2Session extends ContainerLifeCycle implements ISessio
private boolean newRemoteStream(int streamId)
{
try (AutoLock l = lock.lock())
try (AutoLock ignored = lock.lock())
{
switch (closed)
{
@ -2237,7 +2238,7 @@ public abstract class HTTP2Session extends ContainerLifeCycle implements ISessio
private int reserveSlot(Slot slot, int streamId, Consumer<Throwable> fail)
{
Throwable failure = null;
try (AutoLock l = lock.lock())
try (AutoLock ignored = lock.lock())
{
if (closed == CloseState.NOT_CLOSED)
{
@ -2263,7 +2264,7 @@ public abstract class HTTP2Session extends ContainerLifeCycle implements ISessio
private void freeSlot(Slot slot, int streamId)
{
try (AutoLock l = lock.lock())
try (AutoLock ignored = lock.lock())
{
slots.remove(slot);
}
@ -2292,7 +2293,7 @@ public abstract class HTTP2Session extends ContainerLifeCycle implements ISessio
while (true)
{
List<HTTP2Flusher.Entry> entries;
try (AutoLock l = lock.lock())
try (AutoLock ignored = lock.lock())
{
if (flushing == null)
flushing = thread;
@ -2320,7 +2321,7 @@ public abstract class HTTP2Session extends ContainerLifeCycle implements ISessio
@Override
public String toString()
{
try (AutoLock l = lock.lock())
try (AutoLock ignored = lock.lock())
{
return String.format("state=[streams=%d,%s,goAwayRecv=%s,goAwaySent=%s,failure=%s]",
streamCount.get(),

View File

@ -40,7 +40,7 @@ import org.eclipse.jetty.util.component.LifeCycle;
import org.eclipse.jetty.util.ssl.SslContextFactory;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
import static org.hamcrest.MatcherAssert.assertThat;
@ -102,8 +102,8 @@ public class End2EndClientTest
LifeCycle.stop(server);
}
@Disabled("Flaky test - see Issue #8815")
@Test
@Tag("flaky") // Issue #8815
public void testSimpleHTTP1() throws Exception
{
ContentResponse response = client.newRequest("https://localhost:" + connector.getLocalPort())
@ -141,6 +141,7 @@ public class End2EndClientTest
}
@Test
@Tag("flaky") // Issue #8815
public void testMultiThreadedHTTP1()
{
int count = 1000;

View File

@ -16,6 +16,8 @@ package org.eclipse.jetty.servlets;
import org.eclipse.jetty.toolchain.test.jupiter.WorkDir;
import org.eclipse.jetty.toolchain.test.jupiter.WorkDirExtension;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@ExtendWith(WorkDirExtension.class)
@ -28,4 +30,12 @@ public class CloseableDoSFilterTest extends AbstractDoSFilterTest
{
startServer(workDir, CloseableDoSFilter.class);
}
@Override
@Test
@Tag("flaky")
public void testUnavailableIP() throws Exception
{
super.testUnavailableIP();
}
}

View File

@ -118,7 +118,7 @@
<springboot.version>2.1.1.RELEASE</springboot.version>
<taglibs-standard-impl.version>1.2.5</taglibs-standard-impl.version>
<taglibs-standard-spec.version>1.2.5</taglibs-standard-spec.version>
<testcontainers.version>1.17.4</testcontainers.version>
<testcontainers.version>1.17.5</testcontainers.version>
<weld.version>4.0.3.Final</weld.version>
<wildfly.common.version>1.6.0.Final</wildfly.common.version>
<wildfly.elytron.version>2.0.0.Final</wildfly.elytron.version>
@ -154,7 +154,7 @@
<maven.release.plugin.version>2.5.3</maven.release.plugin.version>
<maven.remote-resources-plugin.version>3.0.0</maven.remote-resources-plugin.version>
<maven.resources.plugin.version>3.3.0</maven.resources.plugin.version>
<maven.shade.plugin.version>3.4.0</maven.shade.plugin.version>
<maven.shade.plugin.version>3.4.1</maven.shade.plugin.version>
<maven.surefire.plugin.version>3.0.0-M5</maven.surefire.plugin.version>
<maven.source.plugin.version>3.2.1</maven.source.plugin.version>
<maven.war.plugin.version>3.3.2</maven.war.plugin.version>

View File

@ -251,7 +251,7 @@ public class DemoModulesTests extends AbstractJettyHomeTest
try (JettyHomeTester.Run runConfig = distribution.start(argsConfig))
{
assertTrue(runConfig.awaitFor(5, TimeUnit.SECONDS));
assertTrue(runConfig.awaitFor(20, TimeUnit.SECONDS));
assertEquals(0, runConfig.getExitValue());
int httpPort = distribution.freePort();
@ -264,7 +264,7 @@ public class DemoModulesTests extends AbstractJettyHomeTest
};
try (JettyHomeTester.Run runStart = distribution.start(argsStart))
{
assertTrue(runStart.awaitConsoleLogsFor("Started Server@", 10, TimeUnit.SECONDS));
assertTrue(runStart.awaitConsoleLogsFor("Started Server@", 20, TimeUnit.SECONDS));
startHttpClient();
ContentResponse helloResponse = client.GET("http://localhost:" + httpPort + "/test/hello");

View File

@ -43,7 +43,6 @@ import org.eclipse.jetty.http3.client.http.HttpClientTransportOverHTTP3;
import org.eclipse.jetty.io.ClientConnector;
import org.eclipse.jetty.start.FS;
import org.eclipse.jetty.tests.distribution.openid.OpenIdProvider;
import org.eclipse.jetty.toolchain.test.PathAssert;
import org.eclipse.jetty.unixsocket.client.HttpClientTransportOverUnixSockets;
import org.eclipse.jetty.unixsocket.server.UnixSocketConnector;
import org.eclipse.jetty.util.BlockingArrayQueue;
@ -1001,15 +1000,15 @@ public class DistributionTests extends AbstractJettyHomeTest
try (JettyHomeTester.Run run1 = distribution.start("--add-module=https,test-keystore,ssl-ini"))
{
assertTrue(run1.awaitFor(5, TimeUnit.SECONDS));
assertTrue(run1.awaitFor(20, TimeUnit.SECONDS));
assertEquals(0, run1.getExitValue());
// Override the property on the command line with the correct password.
try (JettyHomeTester.Run run2 = distribution.start(pathProperty + "=cmdline"))
{
assertTrue(run2.awaitConsoleLogsFor("Started Server@", 5, TimeUnit.SECONDS));
PathAssert.assertFileExists("${jetty.base}/cmdline", jettyBase.resolve("cmdline"));
PathAssert.assertNotPathExists("${jetty.base}/modbased", jettyBase.resolve("modbased"));
assertTrue(run2.awaitConsoleLogsFor("Started Server@", 20, TimeUnit.SECONDS));
assertTrue(Files.exists(jettyBase.resolve("cmdline")));
assertFalse(Files.exists(jettyBase.resolve("modbased")));
}
}
}