sirix icon indicating copy to clipboard operation
sirix copied to clipboard

Starting a rest-api service that fails to connect to keycloak exits with status code 0

Open anmonteiro opened this issue 6 years ago • 12 comments

Full Stack Trace
io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: localhost/127.0.0.1:8080
        at java.base/sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
        at java.base/sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:779)
        at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:327)
        at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:340)
        at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:632)
        at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:579)
        at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:496)
        at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:458)
        at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:897)
        at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
        at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.net.ConnectException: Connection refused
        ... 11 more
Sep 28, 2019 11:28:52 PM io.vertx.core.impl.launcher.commands.VertxIsolatedDeployer
SEVERE: Failed in deploying verticle
io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: localhost/127.0.0.1:8080
        at java.base/sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
        at java.base/sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:779)
        at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:327)
        at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:340)
        at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:632)
        at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:579)
        at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:496)
        at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:458)
        at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:897)
        at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
        at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.net.ConnectException: Connection refused
        ... 11 more

io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: localhost/127.0.0.1:8080
        at java.base/sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
        at java.base/sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:779)
        at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:327)
        at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:340)
        at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:632)
        at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:579)
        at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:496)
        at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:458)
        at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:897)
        at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
        at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.net.ConnectException: Connection refused
        ... 11 more

If the rest-api service fails to start due to keycloak not being available, it still exits with status code 0.

Expected behavior is a different status code.

I'm running into this while trying to wait for keycloak to be serving requests before starting up the web instance in docker-compose.

anmonteiro avatar Sep 28 '19 23:09 anmonteiro

Thanks, I might not have time to fix this today, but hopefully tomorrow evening

JohannesLichtenberger avatar Sep 29 '19 06:09 JohannesLichtenberger

And sorry that you're running into some troubles... hope you're still eager to give it a try :-)

JohannesLichtenberger avatar Sep 29 '19 07:09 JohannesLichtenberger

Hmm, BTW: What do you mean with the status code? The HTTP response error status code?

JohannesLichtenberger avatar Sep 30 '19 19:09 JohannesLichtenberger

Oh I meant exit code for the program. I must have been in a rush when I wrote this.

anmonteiro avatar Sep 30 '19 19:09 anmonteiro

Oh, okay, but I'm just using the Launcher:

https://github.com/sirixdb/sirix/blob/master/bundles/sirix-rest-api/src/main/kotlin/org/sirix/rest/Main.kt

Hmm, don't know how to change the exit code

JohannesLichtenberger avatar Sep 30 '19 20:09 JohannesLichtenberger

Feels like this should help https://github.com/eclipse-vertx/vert.x/issues/1401

anmonteiro avatar Sep 30 '19 20:09 anmonteiro

The Launcher should even be called directly from the fat jar:

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>2.3</version>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
            <configuration>
              <transformers>
                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                  <manifestEntries>
                    <Main-Class>io.vertx.core.Launcher</Main-Class>
                    <Main-Verticle>${verticle.name}</Main-Verticle>
                  </manifestEntries>
                </transformer>
                <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
                  <resource>META-INF/services/io.vertx.core.spi.VerticleFactory</resource>
                </transformer>
              </transformers>
              <artifactSet>
              </artifactSet>
              <outputFile>${project.build.directory}/${project.artifactId}-${project.version}-fat.jar</outputFile>
            </configuration>
          </execution>
        </executions>
      </plugin>

Maybe it's using the run-command:

  /**
   * Exits the JVM and indicate an issue during the Vert.x initialization.
   */
  public static void exitBecauseOfVertxInitializationIssue() {
    exit(VERTX_INITIALIZATION_EXIT_CODE);
  }

and this is calling

  /**
   * Exits the JVM with the given exit code.
   *
   * @param code the code, {@code 0} for success. By convention a non zero value if return to denotes an
   *             error.
   */
  public static void exit(int code) {
    System.exit(code);
  }

But I think in Kotlin it should probably be https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.system/exit-process.html

Not sure if I did something wrong or if it's a Vert.x Kotlin issue.

JohannesLichtenberger avatar Sep 30 '19 20:09 JohannesLichtenberger

But System.exit(int) should work I think.

JohannesLichtenberger avatar Sep 30 '19 20:09 JohannesLichtenberger

Oh BTW: Let's me know if you run into other bugs (if you still give it a try) :-)

JohannesLichtenberger avatar Oct 02 '19 13:10 JohannesLichtenberger

I changed some stuff in the Dockerfile and docker-compose file. If you change localhost to keycloak in sirix-conf.json and follow the instructions on https://sirix.io/rest-api.html it should be up and running. But regarding this particular error I don't really know :(

JohannesLichtenberger avatar Oct 15 '19 06:10 JohannesLichtenberger