Repository: quarkusio/quarkus
Issue: Dev UI: exception related to log streaming

Looking at the reproducer for https://github.com/quarkusio/quarkus/issues/16534, and hitting `http://localhost:8080/weather` and `http://localhost:8080/q/dev/io.quarkus.quarkus-cache/caches` I've seen this exception several times:

```
2021-04-15 10:31:27,668 ERROR [io.qua.ver.htt.run.QuarkusErrorHandler] (vert.x-eventloop-thread-13) HTTP Request to /q/dev/logstream failed, error id: 890ea464-d38e-457e-b1cd-71ca5a3e8133-2: java.lang.IllegalStateException: Request has already been read
	at io.vertx.core.http.impl.Http1xServerRequest.checkEnded(Http1xServerRequest.java:628)
	at io.vertx.core.http.impl.Http1xServerRequest.handler(Http1xServerRequest.java:288)
	at io.vertx.core.http.impl.Http1xServerRequest.webSocket(Http1xServerRequest.java:423)
	at io.vertx.core.http.impl.Http1xServerRequest.webSocket(Http1xServerRequest.java:413)
	at io.vertx.core.http.impl.Http1xServerRequest.toWebSocket(Http1xServerRequest.java:402)
	at io.vertx.core.http.HttpServerRequest.toWebSocket(HttpServerRequest.java:367)
	at io.quarkus.vertx.http.runtime.AbstractRequestWrapper.toWebSocket(AbstractRequestWrapper.java:266)
	at io.vertx.ext.web.impl.HttpServerRequestWrapper.toWebSocket(HttpServerRequestWrapper.java:325)
	at io.quarkus.vertx.http.runtime.logstream.LogStreamWebSocket.handle(LogStreamWebSocket.java:42)
	at io.quarkus.vertx.http.runtime.logstream.LogStreamWebSocket.handle(LogStreamWebSocket.java:21)
	at io.vertx.ext.web.impl.RouteState.handleContext(RouteState.java:1129)
	at io.vertx.ext.web.impl.RoutingContextImplBase.iterateNext(RoutingContextImplBase.java:151)
	at io.vertx.ext.web.impl.RoutingContextWrapper.next(RoutingContextWrapper.java:196)
	at io.vertx.ext.web.impl.RouterImpl.handleContext(RouterImpl.java:236)
	at io.vertx.ext.web.impl.RouteState.handleContext(RouteState.java:1129)
	at io.vertx.ext.web.impl.RoutingContextImplBase.iterateNext(RoutingContextImplBase.java:151)
	at io.vertx.ext.web.impl.RoutingContextImpl.next(RoutingContextImpl.java:133)
	at io.quarkus.vertx.http.runtime.VertxHttpRecorder$4.handle(VertxHttpRecorder.java:336)
	at io.quarkus.vertx.http.runtime.VertxHttpRecorder$4.handle(VertxHttpRecorder.java:314)
	at io.vertx.ext.web.impl.RouteState.handleContext(RouteState.java:1129)
	at io.vertx.ext.web.impl.RoutingContextImplBase.iterateNext(RoutingContextImplBase.java:151)
	at io.vertx.ext.web.impl.RoutingContextImpl.next(RoutingContextImpl.java:133)
	at io.quarkus.vertx.http.runtime.devmode.VertxHttpHotReplacementSetup$3.handle(VertxHttpHotReplacementSetup.java:86)
	at io.quarkus.vertx.http.runtime.devmode.VertxHttpHotReplacementSetup$3.handle(VertxHttpHotReplacementSetup.java:75)
	at io.vertx.core.impl.future.FutureImpl$3.onSuccess(FutureImpl.java:124)
	at io.vertx.core.impl.future.FutureBase.lambda$emitSuccess$0(FutureBase.java:54)
	at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:164)
	at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:472)
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:500)
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	at java.base/java.lang.Thread.run(Thread.java:834)
```

Steps to reproduce:

- Start `cache-quickstart` in the dev mode
- Open `http://localhost:8080/weather`
- Open `http://localhost:8080/q/dev/io.quarkus.quarkus-cache/caches` 


Changed files:
extensions/vertx-http/runtime/src/main/java/io/quarkus/vertx/http/runtime/logstream/LogStreamWebSocket.java

diff --git a/extensions/vertx-http/runtime/src/main/java/io/quarkus/vertx/http/runtime/logstream/LogStreamWebSocket.java b/extensions/vertx-http/runtime/src/main/java/io/quarkus/vertx/http/runtime/logstream/LogStreamWebSocket.java
index 6fcdb3f6a24..fb5accc5c7a 100644
--- a/extensions/vertx-http/runtime/src/main/java/io/quarkus/vertx/http/runtime/logstream/LogStreamWebSocket.java
+++ b/extensions/vertx-http/runtime/src/main/java/io/quarkus/vertx/http/runtime/logstream/LogStreamWebSocket.java
@@ -38,7 +38,7 @@ public LogStreamWebSocket(HistoryHandler historyHandler) {
 
     @Override
     public void handle(RoutingContext event) {
-        if ("websocket".equalsIgnoreCase(event.request().getHeader(HttpHeaderNames.UPGRADE))) {
+        if ("websocket".equalsIgnoreCase(event.request().getHeader(HttpHeaderNames.UPGRADE)) && !event.request().isEnded()) {
             event.request().toWebSocket(new Handler<AsyncResult<ServerWebSocket>>() {
                 @Override
                 public void handle(AsyncResult<ServerWebSocket> event) {