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

Support for project modules that produce multiple JARs (with classifiers) #22336

Merged
merged 2 commits into from
Jan 5, 2022

Conversation

aloubyansky
Copy link
Member

@aloubyansky aloubyansky commented Dec 18, 2021

This change allows to have a "view" of an artifact content located at one or more output directories applying include and exclude filters. Essentially, it adds a possibility to support project modules that produce more than one (JAR) artifact.

Currently, the assumption in dev and test modes is that if an artifact resolves to one or more output directories, all the content found in those directories will represent the artifact's content. If however there were include/exclude filters configured for the artifact, this may lead to more classes/resources being indexed and loaded, which may lead to errors. This PR is an attempt to support these cases.

There are quite a few changes in the dependency-related API, for example:

  • ResolvedDependency.getResolvedPaths() now returns the paths that would have been resolved by Maven/Gradle (the current implementation prefers local output dirs in dev and test modes)
  • ResolvedDependency.getContentTree() returns an instance of PathTree representing artifact's content (whether it's a JAR or an output directory with possible filtering applied)
  • ArtifactSources WorkspaceModule.getSources(String classifier) allows to obtain the sources/output content layout for a given artifact (there are also helper methods like ArtifactSources getMainSources(), ArtifactSources getTestSources())
  • PathTreeClassPathElement was introduced and became the main impl of the ClassPathElement

@famod this should help your use-case, with this change your mocks classifier based on test-jar will be supported in dev mode. I would appreciate if you could give it a try and confirm it works for you. I did add a test in this PR for your use-case.

@Postremus do you mind checking this PR and perhaps see how far it throws back the performance gains you've achieved lately? :)

@quarkus-bot
Copy link

quarkus-bot bot commented Dec 18, 2021

/cc @Karm, @galderz, @zakkak

@aloubyansky
Copy link
Member Author

@glefloch this should allow us to better represent the Gradle model too, although it's not yet fully leveraged.

@famod
Copy link
Member

famod commented Dec 18, 2021

Great, I'll put this high on my list!

@quarkus-bot
Copy link

quarkus-bot bot commented Dec 18, 2021

This workflow status is outdated as a new workflow run has been triggered.

Failing Jobs - Building 646c0f3

Status Name Step Failures Logs Raw logs
JVM Tests - JDK 11 Build Failures Logs Raw logs
✔️ JVM Tests - JDK 17
Native Tests - HTTP Build Failures Logs Raw logs

Full information is available in the Build summary check run.

Failures

⚙️ JVM Tests - JDK 11 #

- Failing: extensions/jdbc/jdbc-mssql/deployment 
! Skipped: integration-tests/jpa-mssql 

📦 extensions/jdbc/jdbc-mssql/deployment

io.quarkus.jdbc.mssql.deployment.DevServicesMsSQLDatasourceTestCase. - More details - Source on GitHub

java.lang.RuntimeException: 
java.lang.RuntimeException: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
	[error]: Build step io.quarkus.datasource.deployment.devservices.DevServicesDatasourceProcessor#launchDatabases threw an exception: java.lang.RuntimeException: org.testcontainers.containers.ContainerLaunchException: Container startup failed

⚙️ Native Tests - HTTP #

- Failing: integration-tests/vertx-http 

📦 integration-tests/vertx-http

io.quarkus.it.vertx.AccessLogTestCaseIT.testAccessLogContent - More details - Source on GitHub

org.awaitility.core.ConditionTimeoutException: Assertion condition defined in public void io.quarkus.it.vertx.AccessLogTestCase.testAccessLogContent() throws java.lang.Exception access log doesn't contain an entry for /simple/access-log-test-endpoint?foo=fa037b01-102d-4a05-bab2-4849ed32c764 ==> expected: <true> but was: <false> within 10 seconds.
	at org.awaitility.core.ConditionAwaiter.await(ConditionAwaiter.java:164)
	at org.awaitility.core.AssertionCondition.await(AssertionCondition.java:119)

@Postremus
Copy link
Member

@aloubyansky
Measurements as reported by the started in s. line.

mvn clean compile quarkus:dev
main (e866c8e): 2.028s
This PR (646c0f3): 2.782s

force restart (s)
main (e866c8e): 0.356s
This PR (646c0f3): 0.758s

@aloubyansky
Copy link
Member Author

Wow. Thanks a lot @Postremus!

@aloubyansky
Copy link
Member Author

@Postremus what did you use to profile bootstrapping? I am going to look into it.

@Postremus
Copy link
Member

Postremus commented Dec 18, 2021

@aloubyansky
I used the reproducer from #21552 to retrieve the measurements.

For bootstrap profiling on windows, I use following approach:

  • Start the app using mvnw clean compile quarkus:dev -Dsuspend
  • Attach a profiler (e.g. in built async profiler from IDEA)
  • Connect a debugger to the app. This will let it continue running.
  • Wait till the app is started.
  • Stop the profiler.

On Linux / wslv2, I use async-profiler directly.

  • Add following configuration to quarkus-maven-plugin. Make sure to point to your async-profiler installation.
<configuration>
                    <jvmArgs>
                        -agentpath:/mnt/c/tools/java/async-profiler/build/libasyncProfiler.so=start,event=cpu,file=startup-cpu-profile-999-SNAPSHOT.html,interval=10000,simple
                    </jvmArgs>
                </configuration>
  • Start the app using mvnw clean compile quarkus:dev
  • Once the app is fully started, stop it.
  • In the main project directory, a .html file with the flamegraph should appear

@aloubyansky
Copy link
Member Author

Thanks!

@aloubyansky
Copy link
Member Author

Just fyi, I found how to get it to pretty much the same numbers as in 2.6.0.Final. I'll push an update once I clean my new changes up.

@famod
Copy link
Member

famod commented Dec 21, 2021

@aloubyansky cool, I'll start testing once you have pushed that iteration.

@aloubyansky
Copy link
Member Author

aloubyansky commented Dec 22, 2021

I pushed more changes with optimizations. Here is what I collected from 10 launches of mvn clean quarkus:dev and subsequent forced restarts for your reproducer project @Postremus on Linux:

  • 2.6.0.Final
    boot: 1412 ms
    restart: 268 ms

  • main (175b973)
    boot: 1355 ms
    restart: 245 ms

  • this PR (6d572df)
    boot: 1478 ms
    restart: 229 ms

So the boot is still slower (especially compared to main - great job @Postremus), although not as dramatically. The restart was consistently faster by a bit, however.

@aloubyansky
Copy link
Member Author

I'll need to fix this on Windows, probably a path handling issue

2021-12-22T16:26:37.5115433Z [ERROR] Failures: 
2021-12-22T16:26:37.5116613Z [ERROR]   OpenApiStaticModelsTestCase.testMultipleStaticFiles:33 1 expectation failed.
2021-12-22T16:26:37.5117923Z JSON path paths.'/openapi'.get.operationId doesn't match.
2021-12-22T16:26:37.5118749Z Expected: someOperation
2021-12-22T16:26:37.5119225Z   Actual: null

@quarkus-bot
Copy link

quarkus-bot bot commented Dec 22, 2021

This workflow status is outdated as a new workflow run has been triggered.

Failing Jobs - Building 6d572df

Status Name Step Failures Logs Raw logs
✔️ JVM Tests - JDK 11
JVM Tests - JDK 11 Windows Build Failures Logs Raw logs
✔️ JVM Tests - JDK 17
Native Tests - HTTP Build Failures Logs Raw logs
Native Tests - gRPC Build Failures Logs Raw logs

Full information is available in the Build summary check run.

Failures

⚙️ JVM Tests - JDK 11 Windows #

- Failing: extensions/smallrye-openapi/deployment 
! Skipped: extensions/agroal/deployment extensions/elytron-security-jdbc/deployment extensions/flyway/deployment and 133 more

📦 extensions/smallrye-openapi/deployment

io.quarkus.smallrye.openapi.test.jaxrs.OpenApiStaticModelsTestCase.testMultipleStaticFiles line 33 - More details - Source on GitHub

java.lang.AssertionError: 
1 expectation failed.
JSON path paths.'/openapi'.get.operationId doesn't match.

⚙️ Native Tests - HTTP #

- Failing: integration-tests/vertx-http 

📦 integration-tests/vertx-http

io.quarkus.it.vertx.AccessLogTestCaseIT.testAccessLogContent - More details - Source on GitHub

org.awaitility.core.ConditionTimeoutException: Assertion condition defined in public void io.quarkus.it.vertx.AccessLogTestCase.testAccessLogContent() throws java.lang.Exception access log doesn't contain an entry for /simple/access-log-test-endpoint?foo=b547d99a-64ee-46c2-867c-f915b7abc539 ==> expected: <true> but was: <false> within 10 seconds.
	at org.awaitility.core.ConditionAwaiter.await(ConditionAwaiter.java:164)
	at org.awaitility.core.AssertionCondition.await(AssertionCondition.java:119)

⚙️ Native Tests - gRPC #

- Failing: integration-tests/grpc-mutual-auth integration-tests/grpc-plain-text-mutiny 

📦 integration-tests/grpc-mutual-auth

io.quarkus.grpc.examples.hello.HelloWorldMutualTlsEndpointIT.testHelloWorldServiceUsingBlockingStub - More details - Source on GitHub

java.net.SocketTimeoutException: Read timed out
	at java.base/java.net.SocketInputStream.socketRead0(Native Method)
	at java.base/java.net.SocketInputStream.socketRead(SocketInputStream.java:115)

io.quarkus.grpc.examples.hello.HelloWorldMutualTlsEndpointIT.testHelloWorldServiceUsingMutinyStub - More details - Source on GitHub

java.net.SocketTimeoutException: Read timed out
	at java.base/java.net.SocketInputStream.socketRead0(Native Method)
	at java.base/java.net.SocketInputStream.socketRead(SocketInputStream.java:115)

io.quarkus.grpc.examples.hello.HelloWorldMutualTlsServiceIT.testHelloWorldServiceUsingBlockingStub - More details - Source on GitHub

java.net.SocketTimeoutException: Read timed out
	at java.base/java.net.SocketInputStream.socketRead0(Native Method)
	at java.base/java.net.SocketInputStream.socketRead(SocketInputStream.java:115)

io.quarkus.grpc.examples.hello.HelloWorldMutualTlsServiceIT.testHelloWorldServiceUsingMutinyStub - More details - Source on GitHub

java.net.SocketTimeoutException: Read timed out
	at java.base/java.net.SocketInputStream.socketRead0(Native Method)
	at java.base/java.net.SocketInputStream.socketRead(SocketInputStream.java:115)

📦 integration-tests/grpc-plain-text-mutiny

io.quarkus.grpc.examples.hello.HelloWorldEndpointIT.shouldSetHeader - More details - Source on GitHub

java.net.SocketTimeoutException: Read timed out
	at java.base/java.net.SocketInputStream.socketRead0(Native Method)
	at java.base/java.net.SocketInputStream.socketRead(SocketInputStream.java:115)

io.quarkus.grpc.examples.hello.HelloWorldEndpointIT.shouldSetHeaderWithMutiny - More details - Source on GitHub

java.net.SocketTimeoutException: Read timed out
	at java.base/java.net.SocketInputStream.socketRead0(Native Method)
	at java.base/java.net.SocketInputStream.socketRead(SocketInputStream.java:115)

io.quarkus.grpc.examples.hello.HelloWorldEndpointIT.shouldSetHeaderWithInterface - More details - Source on GitHub

java.net.SocketTimeoutException: Read timed out
	at java.base/java.net.SocketInputStream.socketRead0(Native Method)
	at java.base/java.net.SocketInputStream.socketRead(SocketInputStream.java:115)

io.quarkus.grpc.examples.hello.HelloWorldEndpointIT.testHelloWorldServiceUsingBlockingStub - More details - Source on GitHub

java.net.SocketTimeoutException: Read timed out
	at java.base/java.net.SocketInputStream.socketRead0(Native Method)
	at java.base/java.net.SocketInputStream.socketRead(SocketInputStream.java:115)

io.quarkus.grpc.examples.hello.HelloWorldEndpointIT.testHelloWorldServiceUsingMutinyStub - More details - Source on GitHub

java.net.SocketTimeoutException: Read timed out
	at java.base/java.net.SocketInputStream.socketRead0(Native Method)
	at java.base/java.net.SocketInputStream.socketRead(SocketInputStream.java:115)

io.quarkus.grpc.examples.hello.HelloWorldServiceIT.shouldSetHeader - More details - Source on GitHub

java.net.SocketTimeoutException: Read timed out
	at java.base/java.net.SocketInputStream.socketRead0(Native Method)
	at java.base/java.net.SocketInputStream.socketRead(SocketInputStream.java:115)

io.quarkus.grpc.examples.hello.HelloWorldServiceIT.shouldSetHeaderWithMutiny - More details - Source on GitHub

java.net.SocketTimeoutException: Read timed out
	at java.base/java.net.SocketInputStream.socketRead0(Native Method)
	at java.base/java.net.SocketInputStream.socketRead(SocketInputStream.java:115)

io.quarkus.grpc.examples.hello.HelloWorldServiceIT.shouldSetHeaderWithInterface - More details - Source on GitHub

java.net.SocketTimeoutException: Read timed out
	at java.base/java.net.SocketInputStream.socketRead0(Native Method)
	at java.base/java.net.SocketInputStream.socketRead(SocketInputStream.java:115)

io.quarkus.grpc.examples.hello.HelloWorldServiceIT.testHelloWorldServiceUsingBlockingStub - More details - Source on GitHub

java.net.SocketTimeoutException: Read timed out
	at java.base/java.net.SocketInputStream.socketRead0(Native Method)
	at java.base/java.net.SocketInputStream.socketRead(SocketInputStream.java:115)

io.quarkus.grpc.examples.hello.HelloWorldServiceIT.testHelloWorldServiceUsingMutinyStub - More details - Source on GitHub

java.net.SocketTimeoutException: Read timed out
	at java.base/java.net.SocketInputStream.socketRead0(Native Method)
	at java.base/java.net.SocketInputStream.socketRead(SocketInputStream.java:115)

@gsmet
Copy link
Member

gsmet commented Dec 22, 2021

I think we should get to the bottom of the slowdown because I fail to see how a change to support producing multiple jars could impact the default case.

@aloubyansky
Copy link
Member Author

Looks like @stuartwdouglas is going to be on vacation until the 17th and might not have time to review this until the 2.7.0.CR1 (19.01), in which case it may be too late to include this in 2.7.0.Final (02.02).

@famod
Copy link
Member

famod commented Dec 30, 2021

Bummer, but thanks for letting us know.
I hope you won't have too many merge conflicts over time.
I suppose nobody else can "replace" Stuart in this matter?

@aloubyansky
Copy link
Member Author

I think this change fixes enough of critical issues (linked) to be considered for 2.7.0 even if Stuart isn't available. It has to get a proper review though. WDYT @gsmet and @geoand?

Copy link
Member

@famod famod left a comment

Choose a reason for hiding this comment

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

I tried to be of some help and reviewed what I felt able to (and left some small comments).

LGTM overall, but I'm lacking in-depth knowledge of some parts!

Files.walkFileTree(root, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
if (dir.equals(root) || dir.toString().equals("/") || dir.startsWith(devTemplatesPath))
Copy link
Member

Choose a reason for hiding this comment

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

Is this intentionally missing the curly brackets? This class seems a bit inconsistent in that regard, even before your changes.

Copy link
Member Author

Choose a reason for hiding this comment

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

I didn't pay attention, tbh. I'll add the brackets.


PathCollection getBuildFiles();

default PathTree getContentTree(String classifier) {
//System.out.println("WorkspaceModule.getContentTree " + /* getId() + */ ":" + classifier);
Copy link
Member

Choose a reason for hiding this comment

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

This can probably be removed now?

Copy link
Member Author

Choose a reason for hiding this comment

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

Yes, I'll remove it, I kept it as a reminder this line could break dev mode.

try {
super.close();
} finally {
fs.close();
Copy link
Member

Choose a reason for hiding this comment

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

No idea how realistic either of the cases is here and maybe it was a deliberate choice, but if this fails it would shadow the exception from super.close() (if any).
Maybe add a catch and use addSuppressed()?


@Override
public OpenPathTree openTree() {
return this;//CachingPathTree.of(this);
Copy link
Member

Choose a reason for hiding this comment

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

Is //CachingPathTree.of(this); a leftover?

Copy link
Member Author

Choose a reason for hiding this comment

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

It's kind of a WIP. I'll remove it.

List<Integer> list = (List<Integer>) v.getClass().getMethod("version").invoke(v);
version = list.get(0);
} catch (Exception e) {
//version 8
Copy link
Member

Choose a reason for hiding this comment

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

Do we even support Java 8 anymore? pom.xml says no if I'm not mistaken.

Copy link
Member Author

Choose a reason for hiding this comment

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

We don't. I copied this code from another class, tbh. I'll change it to fail hard.

try {
return new Manifest(new ByteArrayInputStream(mf.getData()));
} catch (IOException e) {
log.warnf("Failed to parse manifest for %s", toString());
Copy link
Member

Choose a reason for hiding this comment

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

Is this intentionally swallowing the IOE?

Copy link
Member Author

Choose a reason for hiding this comment

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

I'll add e to the warnf.

@Override
public Set<String> getProvidedResources() {
if (resources == null) {
synchronized (this) {
Copy link
Member

Choose a reason for hiding this comment

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

I'm probably missing something important or obvious, but shouldn't this use the locks instead?

Copy link
Member Author

Choose a reason for hiding this comment

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

Good point.

@Override
protected Manifest readManifest() {
return withOpenTree(tree -> {
return tree.getManifest();
Copy link
Member

Choose a reason for hiding this comment

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

Could be a method ref instead, AFAICS.

Copy link
Member Author

Choose a reason for hiding this comment

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

Right.

list.add(include.getValue());
}
filter = PathFilter.forIncludes(list);
} else {
Copy link
Member

Choose a reason for hiding this comment

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

Are you sure about ignoring excludes when there are includes?
E.g.: https://stackoverflow.com/a/2450803/9529981

Copy link
Member Author

Choose a reason for hiding this comment

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

No, I'll fix it.

Copy link
Member

Choose a reason for hiding this comment

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

Copy link
Member Author

Choose a reason for hiding this comment

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

Thanks, we'll need to add proper tests for this.


return new FilePathTree(p);
} catch (IOException e) {
throw new IllegalArgumentException(p + " does not exist");
Copy link
Member

@famod famod Dec 31, 2021

Choose a reason for hiding this comment

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

This is probably the most likely case, but javadoc of Files.readAttributes says: if an I/O error occurs, so better include the IOE as the cause?

Copy link
Member Author

Choose a reason for hiding this comment

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

Agreed

@geoand
Copy link
Contributor

geoand commented Jan 3, 2022

I think this change fixes enough of critical issues (linked) to be considered for 2.7.0 even if Stuart isn't available. It has to get a proper review though. WDYT @gsmet and @geoand?

I agree we want this in for 2.7

@gsmet
Copy link
Member

gsmet commented Jan 3, 2022

@aloubyansky I was going to merge but unfortunately there is a conflict.

@aloubyansky
Copy link
Member Author

Yes, rebased.

@gsmet
Copy link
Member

gsmet commented Jan 3, 2022

OK, so let's merge this but it's big so let's be ready to fix things quickly after the CR1 release if things go south for some weird project setups.

@aloubyansky aloubyansky force-pushed the multijar-modules branch 2 times, most recently from 7856f6a to db58b6b Compare January 3, 2022 23:04
@quarkus-bot
Copy link

quarkus-bot bot commented Jan 4, 2022

This workflow status is outdated as a new workflow run has been triggered.

Failing Jobs - Building db58b6b

Status Name Step Failures Logs Raw logs
JVM Tests - JDK 11 Build Failures Logs Raw logs
JVM Tests - JDK 11 Windows Build Failures Logs Raw logs
JVM Tests - JDK 17 Build Failures Logs Raw logs
Native Tests - Misc4 Build ⚠️ Check → Logs Raw logs

Full information is available in the Build summary check run.

Failures

⚙️ JVM Tests - JDK 11 #

- Failing: extensions/webjars-locator/deployment 
! Skipped: integration-tests/webjars-locator 

📦 extensions/webjars-locator/deployment

io.quarkus.webjar.locator.test.WebJarLocatorRootPathTest.test line 31 - More details - Source on GitHub

java.lang.AssertionError: 
1 expectation failed.
Expected status code <200> but was <500>.

⚙️ JVM Tests - JDK 11 Windows #

- Failing: extensions/webjars-locator/deployment 
! Skipped: integration-tests/webjars-locator 

📦 extensions/webjars-locator/deployment

io.quarkus.webjar.locator.test.WebJarLocatorRootPathTest.test line 31 - More details - Source on GitHub

java.lang.AssertionError: 
1 expectation failed.
Expected status code <200> but was <500>.

⚙️ JVM Tests - JDK 17 #

- Failing: extensions/webjars-locator/deployment 
! Skipped: integration-tests/webjars-locator 

📦 extensions/webjars-locator/deployment

io.quarkus.webjar.locator.test.WebJarLocatorRootPathTest.test line 31 - More details - Source on GitHub

java.lang.AssertionError: 
1 expectation failed.
Expected status code <200> but was <500>.

@aloubyansky aloubyansky force-pushed the multijar-modules branch 3 times, most recently from 588faf2 to 90b63db Compare January 4, 2022 17:30
@quarkus-bot
Copy link

quarkus-bot bot commented Jan 4, 2022

This workflow status is outdated as a new workflow run has been triggered.

Failing Jobs - Building 90b63db

Status Name Step Failures Logs Raw logs
JVM Tests - JDK 11 Build Failures Logs Raw logs
JVM Tests - JDK 11 Windows Build Failures Logs Raw logs
JVM Tests - JDK 17 Build Failures Logs Raw logs
Maven Tests - JDK 11 Build Failures Logs Raw logs
Maven Tests - JDK 11 Windows Build Failures Logs Raw logs

Full information is available in the Build summary check run.

Failures

⚙️ JVM Tests - JDK 11 #

- Failing: extensions/vertx-http/deployment 
! Skipped: core/test-extension/deployment extensions/agroal/deployment extensions/amazon-lambda-http/deployment and 290 more

📦 extensions/vertx-http/deployment

Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M5:test (default-test) on project quarkus-vertx-http-deployment: There was a timeout in the fork


⚙️ JVM Tests - JDK 11 Windows #

- Failing: extensions/resteasy-classic/resteasy/deployment 
! Skipped: extensions/agroal/deployment extensions/apicurio-registry-avro/deployment extensions/avro/deployment and 273 more

📦 extensions/resteasy-classic/resteasy/deployment

io.quarkus.resteasy.test.files.StaticResourceDeletionBeforeFirstRequestTest.shouldReturn404HttpStatusCode line 22 - More details - Source on GitHub

java.lang.AssertionError: 
1 expectation failed.
Expected status code <404> but was <500>.

⚙️ JVM Tests - JDK 17 #

- Failing: extensions/resteasy-classic/resteasy/deployment 
! Skipped: extensions/agroal/deployment extensions/apicurio-registry-avro/deployment extensions/avro/deployment and 273 more

📦 extensions/resteasy-classic/resteasy/deployment

io.quarkus.resteasy.test.files.StaticResourceDeletionBeforeFirstRequestTest.shouldReturn404HttpStatusCode line 22 - More details - Source on GitHub

java.lang.AssertionError: 
1 expectation failed.
Expected status code <404> but was <500>.

⚙️ Maven Tests - JDK 11 #

- Failing: integration-tests/maven 

📦 integration-tests/maven

io.quarkus.maven.it.DevMojoIT.testThatNonExistentSrcDirCanBeAdded line 298 - More details - Source on GitHub

org.awaitility.core.ConditionTimeoutException: Condition with lambda expression in io.quarkus.test.devmode.util.DevModeTestUtils that uses java.lang.String, java.lang.Stringint, intjava.util.concurrent.atomic.AtomicBoolean was not fulfilled within 5 minutes.
	at org.awaitility.core.ConditionAwaiter.await(ConditionAwaiter.java:164)
	at org.awaitility.core.CallableCondition.await(CallableCondition.java:78)

io.quarkus.maven.it.DevMojoIT.testThatNonExistentSrcDirCanBeAdded line 298 - More details - Source on GitHub

org.awaitility.core.ConditionTimeoutException: Condition with lambda expression in io.quarkus.test.devmode.util.DevModeTestUtils that uses java.lang.String, java.lang.Stringint, intjava.util.concurrent.atomic.AtomicBoolean was not fulfilled within 5 minutes.
	at org.awaitility.core.ConditionAwaiter.await(ConditionAwaiter.java:164)
	at org.awaitility.core.CallableCondition.await(CallableCondition.java:78)

⚙️ Maven Tests - JDK 11 Windows #

- Failing: integration-tests/maven 

📦 integration-tests/maven

io.quarkus.maven.it.DevMojoIT.testThatNonExistentSrcDirCanBeAdded line 298 - More details - Source on GitHub

org.awaitility.core.ConditionTimeoutException: Condition with lambda expression in io.quarkus.test.devmode.util.DevModeTestUtils that uses java.lang.String, java.lang.Stringint, intjava.util.concurrent.atomic.AtomicBoolean was not fulfilled within 5 minutes.
	at org.awaitility.core.ConditionAwaiter.await(ConditionAwaiter.java:164)
	at org.awaitility.core.CallableCondition.await(CallableCondition.java:78)

io.quarkus.maven.it.DevMojoIT.testThatNonExistentSrcDirCanBeAdded line 298 - More details - Source on GitHub

org.awaitility.core.ConditionTimeoutException: Condition with lambda expression in io.quarkus.test.devmode.util.DevModeTestUtils that uses java.lang.String, java.lang.Stringint, intjava.util.concurrent.atomic.AtomicBoolean was not fulfilled within 5 minutes.
	at org.awaitility.core.ConditionAwaiter.await(ConditionAwaiter.java:164)
	at org.awaitility.core.CallableCondition.await(CallableCondition.java:78)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
6 participants