Updates to ResourceHandler to be more flexible

The current state of ResourceHandler provides lots of useful code, but it's completely inaccessible outside of the construct of the pre-defined ResourceHandler methodology.  This PR attempts to extract that functionality into a more abstract use-case without damaging the existing utilization.  This is accomplished by an AbstractResourceHandler that provides the base Resource serving functionality and is extended by ResourceHandler.

Can one of the admins verify this patch?

this is ok to test

Linux Build 2179 outcome was FAILURE using a merge of e364e2688ccf55626141a5cc7d6093edafcec81d
Summary: Exit code 1 (new) Build time: 00:00:22

Windows Build 1919 outcome was FAILURE using a merge of e364e2688ccf55626141a5cc7d6093edafcec81d
Summary: Exit code 1 (new) Build time: 00:00:47

checkstyle check failed.
you can reproduce it locally by building it by mvn clean install

@ctomc sorry about that. Imports fixed and checkstyle is now passing.

Windows Build 1920 outcome was FAILURE using a merge of c4694140b1aba3bf9db79d2a8f77b79768dc7959
Summary: Execution timeout (new); tests failed: 15 (14 new), passed: 1419, ignored: 423 Build time: 00:45:05
Failed tests
io.undertow.server.handlers.RequestLimitingHandlerTestCase.testRateLimitingHandlerQueueFull{proxy}{http2-clear}: java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.net.SocketTimeoutException: Read timed out
	at io.undertow.server.handlers.RequestLimitingHandlerTestCase.testRateLimitingHandlerQueueFull(RequestLimitingHandlerTestCase.java:148)
Caused by: java.lang.RuntimeException: java.net.SocketTimeoutException: Read timed out
Caused by: java.net.SocketTimeoutException: Read timed out
------- Stderr: -------
16:33:25,743 DEBUG (XNIO-1 I/O-8) [io.undertow.server.handlers.proxy] <ProxyHandler.java:520> Sending request ClientRequest{path='/', method=GET, protocol=HTTP/1.1} to target localhost/<IP_ADDRESS>:8888 for exchange HttpServerExchange{ GET / request {Connection=[Keep-Alive], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:33:25,746 DEBUG (XNIO-1 I/O-2) [io.undertow.server.handlers.proxy] <ProxyHandler.java:520> Sending request ClientRequest{path='/', method=GET, protocol=HTTP/1.1} to target localhost/<IP_ADDRESS>:8888 for exchange HttpServerExchange{ GET / request {Connection=[Keep-Alive], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:33:25,743 DEBUG (XNIO-1 I/O-1) [io.undertow.server.handlers.proxy] <ProxyHandler.java:520> Sending request ClientRequest{path='/', method=GET, protocol=HTTP/1.1} to target localhost/<IP_ADDRESS>:8888 for exchange HttpServerExchange{ GET / request {Connection=[Keep-Alive], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:33:25,751 DEBUG (XNIO-1 I/O-2) [io.undertow.server.handlers.proxy] <ProxyHandler.java:527> Sent request ClientRequest{path='/', method=GET, protocol=HTTP/1.1} to target <IP_ADDRESS> for exchange HttpServerExchange{ GET / request {Connection=[Keep-Alive], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:33:25,893 DEBUG (XNIO-1 I/O-7) [io.undertow.server.handlers.proxy] <ProxyHandler.java:520> Sending request ClientRequest{path='/', method=GET, protocol=HTTP/1.1} to target localhost/<IP_ADDRESS>:8888 for exchange HttpServerExchange{ GET / request {Connection=[Keep-Alive], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:33:25,748 DEBUG (XNIO-1 I/O-8) [io.undertow.server.handlers.proxy] <ProxyHandler.java:527> Sent request ClientRequest{path='/', method=GET, protocol=HTTP/1.1} to target <IP_ADDRESS> for exchange HttpServerExchange{ GET / request {Connection=[Keep-Alive], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:33:25,900 DEBUG (XNIO-1 I/O-2) [io.undertow.server.handlers.proxy] <ProxyHandler.java:520> Sending request ClientRequest{path='/', method=GET, protocol=HTTP/1.1} to target localhost/<IP_ADDRESS>:8888 for exchange HttpServerExchange{ GET / request {Connection=[Keep-Alive], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:33:25,902 DEBUG (XNIO-1 I/O-2) [io.undertow.server.handlers.proxy] <ProxyHandler.java:527> Sent request ClientRequest{path='/', method=GET, protocol=HTTP/1.1} to target <IP_ADDRESS> for exchange HttpServerExchange{ GET / request {Connection=[Keep-Alive], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:33:25,747 DEBUG (XNIO-1 I/O-3) [io.undertow.server.handlers.proxy] <ProxyHandler.java:520> Sending request ClientRequest{path='/', method=GET, protocol=HTTP/1.1} to target localhost/<IP_ADDRESS>:8888 for exchange HttpServerExchange{ GET / request {Connection=[Keep-Alive], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:33:25,904 DEBUG (XNIO-1 I/O-2) [io.undertow.server.handlers.proxy] <ProxyHandler.java:520> Sending request ClientRequest{path='/', method=GET, protocol=HTTP/1.1} to target localhost/<IP_ADDRESS>:8888 for exchange HttpServerExchange{ GET / request {Connection=[Keep-Alive], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:33:25,902 DEBUG (XNIO-1 I/O-8) [io.undertow.server.handlers.proxy] <ProxyHandler.java:520> Sending request ClientRequest{path='/', method=GET, protocol=HTTP/1.1} to target localhost/<IP_ADDRESS>:8888 for exchange HttpServerExchange{ GET / request {Connection=[Keep-Alive], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:33:25,895 DEBUG (XNIO-1 I/O-7) [io.undertow.server.handlers.proxy] <ProxyHandler.java:527> Sent request ClientRequest{path='/', method=GET, protocol=HTTP/1.1} to target <IP_ADDRESS> for exchange HttpServerExchange{ GET / request {Connection=[Keep-Alive], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:33:25,760 DEBUG (XNIO-1 I/O-6) [io.undertow.server.handlers.proxy] <ProxyHandler.java:520> Sending request ClientRequest{path='/', method=GET, protocol=HTTP/1.1} to target localhost/<IP_ADDRESS>:8888 for exchange HttpServerExchange{ GET / request {Connection=[Keep-Alive], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:33:25,757 DEBUG (XNIO-1 I/O-5) [io.undertow.server.handlers.proxy] <ProxyHandler.java:520> Sending request ClientRequest{path='/', method=GET, protocol=HTTP/1.1} to target localhost/<IP_ADDRESS>:8888 for exchange HttpServerExchange{ GET / request {Connection=[Keep-Alive], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:33:25,756 DEBUG (XNIO-1 I/O-4) [io.undertow.server.handlers.proxy] <ProxyHandler.java:520> Sending request ClientRequest{path='/', method=GET, protocol=HTTP/1.1} to target localhost/<IP_ADDRESS>:8888 for exchange HttpServerExchange{ GET / request {Connection=[Keep-Alive], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:33:25,755 DEBUG (XNIO-1 I/O-1) [io.undertow.server.handlers.proxy] <ProxyHandler.java:527> Sent request ClientRequest{path='/', method=GET, protocol=HTTP/1.1} to target <IP_ADDRESS> for exchange HttpServerExchange{ GET / request {Connection=[Keep-Alive], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:33:25,918 DEBUG (XNIO-1 I/O-4) [io.undertow.server.handlers.proxy] <ProxyHandler.java:527> Sent request ClientRequest{path='/', method=GET, protocol=HTTP/1.1} to target <IP_ADDRESS> for exchange HttpServerExchange{ GET / request {Connection=[Keep-Alive], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:33:25,915 DEBUG (XNIO-1 I/O-5) [io.undertow.server.handlers.proxy] <ProxyHandler.java:527> Sent request ClientRequest{path='/', method=GET, protocol=HTTP/1.1} to target <IP_ADDRESS> for exchange HttpServerExchange{ GET / request {Connection=[Keep-Alive], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:33:25,913 DEBUG (XNIO-1 I/O-6) [io.undertow.server.handlers.proxy] <ProxyHandler.java:527> Sent request ClientRequest{path='/', method=GET, protocol=HTTP/1.1} to target <IP_ADDRESS> for exchange HttpServerExchange{ GET / request {Connection=[Keep-Alive], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:33:25,909 DEBUG (XNIO-1 I/O-8) [io.undertow.server.handlers.proxy] <ProxyHandler.java:527> Sent request ClientRequest{path='/', method=GET, protocol=HTTP/1.1} to target <IP_ADDRESS> for exchange HttpServerExchange{ GET / request {Connection=[Keep-Alive], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:33:25,908 DEBUG (XNIO-1 I/O-2) [io.undertow.server.handlers.proxy] <ProxyHandler.java:527> Sent request ClientRequest{path='/', method=GET, protocol=HTTP/1.1} to target <IP_ADDRESS> for exchange HttpServerExchange{ GET / request {Connection=[Keep-Alive], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:33:25,906 DEBUG (XNIO-1 I/O-3) [io.undertow.server.handlers.proxy] <ProxyHandler.java:527> Sent request ClientRequest{path='/', method=GET, protocol=HTTP/1.1} to target <IP_ADDRESS> for exchange HttpServerExchange{ GET / request {Connection=[Keep-Alive], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:33:25,926 DEBUG (XNIO-1 I/O-8) [io.undertow.server.handlers.proxy] <ProxyHandler.java:520> Sending request ClientRequest{path='/', method=GET, protocol=HTTP/1.1} to target localhost/<IP_ADDRESS>:8888 for exchange HttpServerExchange{ GET / request {Connection=[Keep-Alive], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:33:25,924 DEBUG (XNIO-1 I/O-6) [io.undertow.server.handlers.proxy] <ProxyHandler.java:520> Sending request ClientRequest{path='/', method=GET, protocol=HTTP/1.1} to target localhost/<IP_ADDRESS>:8888 for exchange HttpServerExchange{ GET / request {Connection=[Keep-Alive], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:33:25,922 DEBUG (XNIO-1 I/O-5) [io.undertow.server.handlers.proxy] <ProxyHandler.java:520> Sending request ClientRequest{path='/', method=GET, protocol=HTTP/1.1} to target localhost/<IP_ADDRESS>:8888 for exchange HttpServerExchange{ GET / request {Connection=[Keep-Alive], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:33:25,922 DEBUG (XNIO-1 I/O-4) [io.undertow.server.handlers.proxy] <ProxyHandler.java:520> Sending request ClientRequest{path='/', method=GET, protocol=HTTP/1.1} to target localhost/<IP_ADDRESS>:8888 for exchange HttpServerExchange{ GET / request {Connection=[Keep-Alive], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:33:25,920 DEBUG (XNIO-1 I/O-1) [io.undertow.server.handlers.proxy] <ProxyHandler.java:520> Sending request ClientRequest{path='/', method=GET, protocol=HTTP/1.1} to target localhost/<IP_ADDRESS>:8888 for exchange HttpServerExchange{ GET / request {Connection=[Keep-Alive], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:33:25,938 DEBUG (XNIO-1 I/O-4) [io.undertow.server.handlers.proxy] <ProxyHandler.java:527> Sent request ClientRequest{path='/', method=GET, protocol=HTTP/1.1} to target <IP_ADDRESS> for exchange HttpServerExchange{ GET / request {Connection=[Keep-Alive], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:33:25,936 DEBUG (XNIO-1 I/O-5) [io.undertow.server.handlers.proxy] <ProxyHandler.java:527> Sent request ClientRequest{path='/', method=GET, protocol=HTTP/1.1} to target <IP_ADDRESS> for exchange HttpServerExchange{ GET / request {Connection=[Keep-Alive], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:33:25,932 DEBUG (XNIO-1 I/O-6) [io.undertow.server.handlers.proxy] <ProxyHandler.java:527> Sent request ClientRequest{path='/', method=GET, protocol=HTTP/1.1} to target <IP_ADDRESS> for exchange HttpServerExchange{ GET / request {Connection=[Keep-Alive], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:33:25,930 DEBUG (XNIO-1 I/O-8) [io.undertow.server.handlers.proxy] <ProxyHandler.java:527> Sent request ClientRequest{path='/', method=GET, protocol=HTTP/1.1} to target <IP_ADDRESS> for exchange HttpServerExchange{ GET / request {Connection=[Keep-Alive], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:33:25,929 DEBUG (XNIO-1 I/O-3) [io.undertow.server.handlers.proxy] <ProxyHandler.java:520> Sending request ClientRequest{path='/', method=GET, protocol=HTTP/1.1} to target localhost/<IP_ADDRESS>:8888 for exchange HttpServerExchange{ GET / request {Connection=[Keep-Alive], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:33:25,944 DEBUG (XNIO-1 I/O-5) [io.undertow.server.handlers.proxy] <ProxyHandler.java:520> Sending request ClientRequest{path='/', method=GET, protocol=HTTP/1.1} to target localhost/<IP_ADDRESS>:8888 for exchange HttpServerExchange{ GET / request {Connection=[Keep-Alive], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:33:25,942 DEBUG (XNIO-1 I/O-4) [io.undertow.server.handlers.proxy] <ProxyHandler.java:520> Sending request ClientRequest{path='/', method=GET, protocol=HTTP/1.1} to target localhost/<IP_ADDRESS>:8888 for exchange HttpServerExchange{ GET / request {Connection=[Keep-Alive], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:33:25,940 DEBUG (XNIO-1 I/O-1) [io.undertow.server.handlers.proxy] <ProxyHandler.java:527> Sent request ClientRequest{path='/', method=GET, protocol=HTTP/1.1} to target <IP_ADDRESS> for exchange HttpServerExchange{ GET / request {Connection=[Keep-Alive], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:33:25,954 DEBUG (XNIO-1 I/O-4) [io.undertow.server.handlers.proxy] <ProxyHandler.java:527> Sent request ClientRequest{path='/', method=GET, protocol=HTTP/1.1} to target <IP_ADDRESS> for exchange HttpServerExchange{ GET / request {Connection=[Keep-Alive], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:33:25,951 DEBUG (XNIO-1 I/O-5) [io.undertow.server.handlers.proxy] <ProxyHandler.java:527> Sent request ClientRequest{path='/', method=GET, protocol=HTTP/1.1} to target <IP_ADDRESS> for exchange HttpServerExchange{ GET / request {Connection=[Keep-Alive], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:33:25,948 DEBUG (XNIO-1 I/O-3) [io.undertow.server.handlers.proxy] <ProxyHandler.java:527> Sent request ClientRequest{path='/', method=GET, protocol=HTTP/1.1} to target <IP_ADDRESS> for exchange HttpServerExchange{ GET / request {Connection=[Keep-Alive], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:33:25,957 DEBUG (XNIO-1 task-1) [io.undertow.request.error-response] <DelegatingBasicLogger.java:424> Setting error code 513 for exchange HttpServerExchange{ GET / request {x-disable-push=[true], x-forwarded-server=[localhost], user-agent=[Apache-HttpClient/4.2.6 (java 1.5)], x-forwarded-proto=[http], x-forwarded-port=[7777], x-forwarded-for=[<IP_ADDRESS>], x-forwarded-host=[localhost], Host=[localhost:7777]} response {}}: java.lang.RuntimeException
	at io.undertow.server.HttpServerExchange.setStatusCode(HttpServerExchange.java:1378)
	at io.undertow.server.handlers.ResponseCodeHandler.handleRequest(ResponseCodeHandler.java:79)
	at io.undertow.server.Connectors.executeRootHandler(Connectors.java:210)
	at io.undertow.server.handlers.RequestLimit$2.run(RequestLimit.java:117)
	at io.undertow.util.SameThreadExecutor.execute(SameThreadExecutor.java:35)
	at io.undertow.server.Connectors.executeRootHandler(Connectors.java:227)
	at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:809)

io.undertow.server.handlers.ReceiverTestCase.testBlockingReceivePartialString{proxy}{http2-clear}: java.lang.RuntimeException: test failed with i equal to 1
	at io.undertow.server.handlers.ReceiverTestCase.doTest(ReceiverTestCase.java:233)
	at io.undertow.server.handlers.ReceiverTestCase.testBlockingReceivePartialString(ReceiverTestCase.java:210)
Caused by: java.net.SocketTimeoutException: Read timed out
	at io.undertow.server.handlers.ReceiverTestCase.runTest(ReceiverTestCase.java:244)
	at io.undertow.server.handlers.ReceiverTestCase.doTest(ReceiverTestCase.java:231)
	at io.undertow.server.handlers.ReceiverTestCase.testBlockingReceivePartialString(ReceiverTestCase.java:210)
------- Stderr: -------
16:33:58,311 DEBUG (XNIO-1 I/O-6) [io.undertow.server.handlers.proxy] <ProxyHandler.java:520> Sending request ClientRequest{path='/partialstring?blocking', method=POST, protocol=HTTP/1.1} to target localhost/<IP_ADDRESS>:8888 for exchange HttpServerExchange{ POST /partialstring request {Connection=[Keep-Alive], Content-Length=[11000], Content-Type=[text/plain; charset=ISO-8859-1], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:33:58,316 DEBUG (XNIO-1 I/O-6) [io.undertow.server.handlers.proxy] <ProxyHandler.java:527> Sent request ClientRequest{path='/partialstring?blocking', method=POST, protocol=HTTP/1.1} to target <IP_ADDRESS> for exchange HttpServerExchange{ POST /partialstring request {Connection=[Keep-Alive], Content-Length=[11000], Content-Type=[text/plain; charset=ISO-8859-1], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:33:58,327 DEBUG (XNIO-1 I/O-6) [io.undertow.server.handlers.proxy] <ProxyHandler.java:652> Received response ClientResponse{responseHeaders={date=[Sun, 08 Jan 2017 23:31:38 GMT]}, responseCode=200, status='', protocol=HTTP/1.1} for request ClientRequest{path='/partialstring?blocking', method=POST, protocol=HTTP/1.1} for exchange HttpServerExchange{ POST /partialstring request {Connection=[Keep-Alive], Content-Length=[11000], Content-Type=[text/plain; charset=ISO-8859-1], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}

io.undertow.server.handlers.ReceiverTestCase.testAsyncReceivePartialString{proxy}{http2-clear}: java.lang.RuntimeException: test failed with i equal to 4
	at io.undertow.server.handlers.ReceiverTestCase.doTest(ReceiverTestCase.java:233)
	at io.undertow.server.handlers.ReceiverTestCase.testAsyncReceivePartialString(ReceiverTestCase.java:167)
Caused by: java.net.SocketTimeoutException: Read timed out
	at io.undertow.server.handlers.ReceiverTestCase.runTest(ReceiverTestCase.java:244)
	at io.undertow.server.handlers.ReceiverTestCase.doTest(ReceiverTestCase.java:231)
	at io.undertow.server.handlers.ReceiverTestCase.testAsyncReceivePartialString(ReceiverTestCase.java:167)
------- Stderr: -------
16:34:28,344 DEBUG (XNIO-1 I/O-2) [io.undertow.server.handlers.proxy] <ProxyHandler.java:520> Sending request ClientRequest{path='/partialstring', method=POST, protocol=HTTP/1.1} to target localhost/<IP_ADDRESS>:8888 for exchange HttpServerExchange{ POST /partialstring request {Connection=[Keep-Alive], Content-Length=[11000], Content-Type=[text/plain; charset=ISO-8859-1], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:34:28,346 DEBUG (XNIO-1 I/O-2) [io.undertow.server.handlers.proxy] <ProxyHandler.java:527> Sent request ClientRequest{path='/partialstring', method=POST, protocol=HTTP/1.1} to target <IP_ADDRESS> for exchange HttpServerExchange{ POST /partialstring request {Connection=[Keep-Alive], Content-Length=[11000], Content-Type=[text/plain; charset=ISO-8859-1], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:34:28,352 DEBUG (XNIO-1 I/O-2) [io.undertow.server.handlers.proxy] <ProxyHandler.java:652> Received response ClientResponse{responseHeaders={content-length=[11000], date=[Sun, 08 Jan 2017 23:31:38 GMT]}, responseCode=200, status='', protocol=HTTP/1.1} for request ClientRequest{path='/partialstring', method=POST, protocol=HTTP/1.1} for exchange HttpServerExchange{ POST /partialstring request {Connection=[Keep-Alive], Content-Length=[11000], Content-Type=[text/plain; charset=ISO-8859-1], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:34:28,357 DEBUG (XNIO-1 I/O-4) [io.undertow.server.handlers.proxy] <ProxyHandler.java:520> Sending request ClientRequest{path='/partialstring', method=POST, protocol=HTTP/1.1} to target localhost/<IP_ADDRESS>:8888 for exchange HttpServerExchange{ POST /partialstring request {Connection=[Keep-Alive], Content-Length=[22000], Content-Type=[text/plain; charset=ISO-8859-1], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:34:28,360 DEBUG (XNIO-1 I/O-4) [io.undertow.server.handlers.proxy] <ProxyHandler.java:527> Sent request ClientRequest{path='/partialstring', method=POST, protocol=HTTP/1.1} to target <IP_ADDRESS> for exchange HttpServerExchange{ POST /partialstring request {Connection=[Keep-Alive], Content-Length=[22000], Content-Type=[text/plain; charset=ISO-8859-1], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:34:28,363 DEBUG (XNIO-1 I/O-4) [io.undertow.server.handlers.proxy] <ProxyHandler.java:652> Received response ClientResponse{responseHeaders={content-length=[22000], date=[Sun, 08 Jan 2017 23:31:38 GMT]}, responseCode=200, status='', protocol=HTTP/1.1} for request ClientRequest{path='/partialstring', method=POST, protocol=HTTP/1.1} for exchange HttpServerExchange{ POST /partialstring request {Connection=[Keep-Alive], Content-Length=[22000], Content-Type=[text/plain; charset=ISO-8859-1], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:34:28,371 DEBUG (XNIO-1 I/O-5) [io.undertow.server.handlers.proxy] <ProxyHandler.java:520> Sending request ClientRequest{path='/partialstring', method=POST, protocol=HTTP/1.1} to target localhost/<IP_ADDRESS>:8888 for exchange HttpServerExchange{ POST /partialstring request {Connection=[Keep-Alive], Content-Length=[33000], Content-Type=[text/plain; charset=ISO-8859-1], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:34:28,375 DEBUG (XNIO-1 I/O-5) [io.undertow.server.handlers.proxy] <ProxyHandler.java:527> Sent request ClientRequest{path='/partialstring', method=POST, protocol=HTTP/1.1} to target <IP_ADDRESS> for exchange HttpServerExchange{ POST /partialstring request {Connection=[Keep-Alive], Content-Length=[33000], Content-Type=[text/plain; charset=ISO-8859-1], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:34:28,381 DEBUG (XNIO-1 I/O-5) [io.undertow.server.handlers.proxy] <ProxyHandler.java:652> Received response ClientResponse{responseHeaders={content-length=[33000], date=[Sun, 08 Jan 2017 23:31:38 GMT]}, responseCode=200, status='', protocol=HTTP/1.1} for request ClientRequest{path='/partialstring', method=POST, protocol=HTTP/1.1} for exchange HttpServerExchange{ POST /partialstring request {Connection=[Keep-Alive], Content-Length=[33000], Content-Type=[text/plain; charset=ISO-8859-1], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:34:28,390 DEBUG (XNIO-1 I/O-6) [io.undertow.server.handlers.proxy] <ProxyHandler.java:520> Sending request ClientRequest{path='/partialstring', method=POST, protocol=HTTP/1.1} to target localhost/<IP_ADDRESS>:8888 for exchange HttpServerExchange{ POST /partialstring request {Connection=[Keep-Alive], Content-Length=[44000], Content-Type=[text/plain; charset=ISO-8859-1], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:34:28,393 DEBUG (XNIO-1 I/O-6) [io.undertow.server.handlers.proxy] <ProxyHandler.java:527> Sent request ClientRequest{path='/partialstring', method=POST, protocol=HTTP/1.1} to target <IP_ADDRESS> for exchange HttpServerExchange{ POST /partialstring request {Connection=[Keep-Alive], Content-Length=[44000], Content-Type=[text/plain; charset=ISO-8859-1], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:34:28,399 DEBUG (XNIO-1 I/O-6) [io.undertow.server.handlers.proxy] <ProxyHandler.java:652> Received response ClientResponse{responseHeaders={content-length=[44000], date=[Sun, 08 Jan 2017 23:31:38 GMT]}, responseCode=200, status='', protocol=HTTP/1.1} for request ClientRequest{path='/partialstring', method=POST, protocol=HTTP/1.1} for exchange HttpServerExchange{ POST /partialstring request {Connection=[Keep-Alive], Content-Length=[44000], Content-Type=[text/plain; charset=ISO-8859-1], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}

io.undertow.server.handlers.ReceiverTestCase.testAsyncReceiveWholeBytes{proxy}{http2-clear}: java.lang.RuntimeException: test failed with i equal to 0
	at io.undertow.server.handlers.ReceiverTestCase.doTest(ReceiverTestCase.java:233)
	at io.undertow.server.handlers.ReceiverTestCase.testAsyncReceiveWholeBytes(ReceiverTestCase.java:172)
Caused by: java.net.SocketTimeoutException: Read timed out
	at io.undertow.server.handlers.ReceiverTestCase.runTest(ReceiverTestCase.java:244)
	at io.undertow.server.handlers.ReceiverTestCase.doTest(ReceiverTestCase.java:231)
	at io.undertow.server.handlers.ReceiverTestCase.testAsyncReceiveWholeBytes(ReceiverTestCase.java:172)

io.undertow.server.handlers.ReceiverTestCase.testBlockingReceiveWholeBytes{proxy}{http2-clear}: java.lang.RuntimeException: test failed with i equal to 4
	at io.undertow.server.handlers.ReceiverTestCase.doTest(ReceiverTestCase.java:233)
	at io.undertow.server.handlers.ReceiverTestCase.testBlockingReceiveWholeBytes(ReceiverTestCase.java:216)
Caused by: java.net.SocketTimeoutException: Read timed out
	at io.undertow.server.handlers.ReceiverTestCase.runTest(ReceiverTestCase.java:244)
	at io.undertow.server.handlers.ReceiverTestCase.doTest(ReceiverTestCase.java:231)
	at io.undertow.server.handlers.ReceiverTestCase.testBlockingReceiveWholeBytes(ReceiverTestCase.java:216)
------- Stderr: -------
16:35:28,425 DEBUG (XNIO-1 I/O-3) [io.undertow.server.handlers.proxy] <ProxyHandler.java:520> Sending request ClientRequest{path='/fullbytes?blocking', method=POST, protocol=HTTP/1.1} to target localhost/<IP_ADDRESS>:8888 for exchange HttpServerExchange{ POST /fullbytes request {Connection=[Keep-Alive], Content-Length=[11000], Content-Type=[text/plain; charset=ISO-8859-1], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:35:28,430 DEBUG (XNIO-1 I/O-3) [io.undertow.server.handlers.proxy] <ProxyHandler.java:527> Sent request ClientRequest{path='/fullbytes?blocking', method=POST, protocol=HTTP/1.1} to target <IP_ADDRESS> for exchange HttpServerExchange{ POST /fullbytes request {Connection=[Keep-Alive], Content-Length=[11000], Content-Type=[text/plain; charset=ISO-8859-1], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:35:28,439 DEBUG (XNIO-1 I/O-3) [io.undertow.server.handlers.proxy] <ProxyHandler.java:652> Received response ClientResponse{responseHeaders={date=[Sun, 08 Jan 2017 23:31:38 GMT]}, responseCode=200, status='', protocol=HTTP/1.1} for request ClientRequest{path='/fullbytes?blocking', method=POST, protocol=HTTP/1.1} for exchange HttpServerExchange{ POST /fullbytes request {Connection=[Keep-Alive], Content-Length=[11000], Content-Type=[text/plain; charset=ISO-8859-1], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:35:28,451 DEBUG (XNIO-1 I/O-4) [io.undertow.server.handlers.proxy] <ProxyHandler.java:520> Sending request ClientRequest{path='/fullbytes?blocking', method=POST, protocol=HTTP/1.1} to target localhost/<IP_ADDRESS>:8888 for exchange HttpServerExchange{ POST /fullbytes request {Connection=[Keep-Alive], Content-Length=[22000], Content-Type=[text/plain; charset=ISO-8859-1], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:35:28,457 DEBUG (XNIO-1 I/O-4) [io.undertow.server.handlers.proxy] <ProxyHandler.java:527> Sent request ClientRequest{path='/fullbytes?blocking', method=POST, protocol=HTTP/1.1} to target <IP_ADDRESS> for exchange HttpServerExchange{ POST /fullbytes request {Connection=[Keep-Alive], Content-Length=[22000], Content-Type=[text/plain; charset=ISO-8859-1], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:35:28,464 DEBUG (XNIO-1 I/O-4) [io.undertow.server.handlers.proxy] <ProxyHandler.java:652> Received response ClientResponse{responseHeaders={date=[Sun, 08 Jan 2017 23:31:38 GMT]}, responseCode=200, status='', protocol=HTTP/1.1} for request ClientRequest{path='/fullbytes?blocking', method=POST, protocol=HTTP/1.1} for exchange HttpServerExchange{ POST /fullbytes request {Connection=[Keep-Alive], Content-Length=[22000], Content-Type=[text/plain; charset=ISO-8859-1], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:35:28,477 DEBUG (XNIO-1 I/O-5) [io.undertow.server.handlers.proxy] <ProxyHandler.java:520> Sending request ClientRequest{path='/fullbytes?blocking', method=POST, protocol=HTTP/1.1} to target localhost/<IP_ADDRESS>:8888 for exchange HttpServerExchange{ POST /fullbytes request {Connection=[Keep-Alive], Content-Length=[33000], Content-Type=[text/plain; charset=ISO-8859-1], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:35:28,481 DEBUG (XNIO-1 I/O-5) [io.undertow.server.handlers.proxy] <ProxyHandler.java:527> Sent request ClientRequest{path='/fullbytes?blocking', method=POST, protocol=HTTP/1.1} to target <IP_ADDRESS> for exchange HttpServerExchange{ POST /fullbytes request {Connection=[Keep-Alive], Content-Length=[33000], Content-Type=[text/plain; charset=ISO-8859-1], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:35:28,491 DEBUG (XNIO-1 I/O-5) [io.undertow.server.handlers.proxy] <ProxyHandler.java:652> Received response ClientResponse{responseHeaders={date=[Sun, 08 Jan 2017 23:31:38 GMT]}, responseCode=200, status='', protocol=HTTP/1.1} for request ClientRequest{path='/fullbytes?blocking', method=POST, protocol=HTTP/1.1} for exchange HttpServerExchange{ POST /fullbytes request {Connection=[Keep-Alive], Content-Length=[33000], Content-Type=[text/plain; charset=ISO-8859-1], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:35:28,506 DEBUG (XNIO-1 I/O-6) [io.undertow.server.handlers.proxy] <ProxyHandler.java:520> Sending request ClientRequest{path='/fullbytes?blocking', method=POST, protocol=HTTP/1.1} to target localhost/<IP_ADDRESS>:8888 for exchange HttpServerExchange{ POST /fullbytes request {Connection=[Keep-Alive], Content-Length=[44000], Content-Type=[text/plain; charset=ISO-8859-1], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:35:28,511 DEBUG (XNIO-1 I/O-6) [io.undertow.server.handlers.proxy] <ProxyHandler.java:527> Sent request ClientRequest{path='/fullbytes?blocking', method=POST, protocol=HTTP/1.1} to target <IP_ADDRESS> for exchange HttpServerExchange{ POST /fullbytes request {Connection=[Keep-Alive], Content-Length=[44000], Content-Type=[text/plain; charset=ISO-8859-1], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:35:28,519 DEBUG (XNIO-1 I/O-6) [io.undertow.server.handlers.proxy] <ProxyHandler.java:652> Received response ClientResponse{responseHeaders={date=[Sun, 08 Jan 2017 23:31:38 GMT]}, responseCode=200, status='', protocol=HTTP/1.1} for request ClientRequest{path='/fullbytes?blocking', method=POST, protocol=HTTP/1.1} for exchange HttpServerExchange{ POST /fullbytes request {Connection=[Keep-Alive], Content-Length=[44000], Content-Type=[text/plain; charset=ISO-8859-1], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}

io.undertow.server.handlers.ReceiverTestCase.testAsyncReceiveWholeBytesFailed{proxy}{http2-clear}: java.lang.AssertionError
	at io.undertow.server.handlers.ReceiverTestCase.testAsyncReceiveWholeBytesFailed(ReceiverTestCase.java:194)

io.undertow.server.handlers.ReceiverTestCase.testAsyncReceiveWholeString{proxy}{http2-clear}: java.lang.RuntimeException: test failed with i equal to 1
	at io.undertow.server.handlers.ReceiverTestCase.doTest(ReceiverTestCase.java:233)
	at io.undertow.server.handlers.ReceiverTestCase.testAsyncReceiveWholeString(ReceiverTestCase.java:162)
Caused by: java.net.SocketTimeoutException: Read timed out
	at io.undertow.server.handlers.ReceiverTestCase.runTest(ReceiverTestCase.java:244)
	at io.undertow.server.handlers.ReceiverTestCase.doTest(ReceiverTestCase.java:231)
	at io.undertow.server.handlers.ReceiverTestCase.testAsyncReceiveWholeString(ReceiverTestCase.java:162)
------- Stderr: -------
16:36:02,484 DEBUG (XNIO-1 I/O-3) [io.undertow.server.handlers.proxy] <ProxyHandler.java:520> Sending request ClientRequest{path='/fullstring', method=POST, protocol=HTTP/1.1} to target localhost/<IP_ADDRESS>:8888 for exchange HttpServerExchange{ POST /fullstring request {Connection=[Keep-Alive], Content-Length=[11000], Content-Type=[text/plain; charset=ISO-8859-1], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:36:02,489 DEBUG (XNIO-1 I/O-3) [io.undertow.server.handlers.proxy] <ProxyHandler.java:527> Sent request ClientRequest{path='/fullstring', method=POST, protocol=HTTP/1.1} to target <IP_ADDRESS> for exchange HttpServerExchange{ POST /fullstring request {Connection=[Keep-Alive], Content-Length=[11000], Content-Type=[text/plain; charset=ISO-8859-1], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:36:02,502 DEBUG (XNIO-1 I/O-3) [io.undertow.server.handlers.proxy] <ProxyHandler.java:652> Received response ClientResponse{responseHeaders={content-length=[11000], date=[Sun, 08 Jan 2017 23:31:38 GMT]}, responseCode=200, status='', protocol=HTTP/1.1} for request ClientRequest{path='/fullstring', method=POST, protocol=HTTP/1.1} for exchange HttpServerExchange{ POST /fullstring request {Connection=[Keep-Alive], Content-Length=[11000], Content-Type=[text/plain; charset=ISO-8859-1], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:36:02,514 DEBUG (XNIO-1 I/O-4) [io.undertow.server.handlers.proxy] <ProxyHandler.java:520> Sending request ClientRequest{path='/fullstring', method=POST, protocol=HTTP/1.1} to target localhost/<IP_ADDRESS>:8888 for exchange HttpServerExchange{ POST /fullstring request {Connection=[Keep-Alive], Content-Length=[22000], Content-Type=[text/plain; charset=ISO-8859-1], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:36:02,519 DEBUG (XNIO-1 I/O-4) [io.undertow.server.handlers.proxy] <ProxyHandler.java:527> Sent request ClientRequest{path='/fullstring', method=POST, protocol=HTTP/1.1} to target <IP_ADDRESS> for exchange HttpServerExchange{ POST /fullstring request {Connection=[Keep-Alive], Content-Length=[22000], Content-Type=[text/plain; charset=ISO-8859-1], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:36:32,515 ERROR (XNIO-1 I/O-4) [io.undertow.proxy] <ProxyHandler.java:340> UT005027: Timing out request to localhost/<IP_ADDRESS>:8888/fullstring

io.undertow.server.handlers.ReceiverTestCase.testBlockingReceiveWholeString{proxy}{http2-clear}: java.lang.RuntimeException: test failed with i equal to 1
	at io.undertow.server.handlers.ReceiverTestCase.doTest(ReceiverTestCase.java:233)
	at io.undertow.server.handlers.ReceiverTestCase.testBlockingReceiveWholeString(ReceiverTestCase.java:205)
Caused by: java.net.SocketTimeoutException: Read timed out
	at io.undertow.server.handlers.ReceiverTestCase.runTest(ReceiverTestCase.java:244)
	at io.undertow.server.handlers.ReceiverTestCase.doTest(ReceiverTestCase.java:231)
	at io.undertow.server.handlers.ReceiverTestCase.testBlockingReceiveWholeString(ReceiverTestCase.java:205)
------- Stderr: -------
16:36:32,516 DEBUG (XNIO-1 I/O-4) [io.undertow.request.io] <Http2Channel.java:747> Sending goaway on channel Http2Channel peer localhost/<IP_ADDRESS>:8888 local /<IP_ADDRESS>:54614[ No Receiver [] -- [] -- []]: java.nio.channels.ClosedChannelException
	at io.undertow.protocols.http2.Http2Channel.sendGoAway(Http2Channel.java:747)
	at io.undertow.protocols.http2.Http2Channel.sendGoAway(Http2Channel.java:738)
	at io.undertow.client.http2.Http2ClientConnection.close(Http2ClientConnection.java:308)
	at org.xnio.IoUtils.safeClose(IoUtils.java:134)
	at io.undertow.server.handlers.proxy.ProxyHandler$ProxyClientHandler.cancel(ProxyHandler.java:341)
	at io.undertow.server.handlers.proxy.ProxyHandler$1.run(ProxyHandler.java:186)
	at org.xnio.nio.WorkerThread.safeRun(WorkerThread.java:580)
	at org.xnio.nio.WorkerThread.run(WorkerThread.java:464)

16:36:32,521 DEBUG (XNIO-1 I/O-4) [io.undertow.request.io] <AbstractFramedChannel.java:792> Channel Http2Channel peer localhost/<IP_ADDRESS>:8888 local /<IP_ADDRESS>:54614[ No Receiver [] -- [] -- []] is being closed: java.nio.channels.ClosedChannelException
	at io.undertow.server.protocol.framed.AbstractFramedChannel.close(AbstractFramedChannel.java:792)
	at org.xnio.IoUtils.safeClose(IoUtils.java:134)
	at io.undertow.protocols.http2.Http2Channel.sendGoAway(Http2Channel.java:761)
	at io.undertow.protocols.http2.Http2Channel.sendGoAway(Http2Channel.java:738)
	at io.undertow.client.http2.Http2ClientConnection.close(Http2ClientConnection.java:308)
	at org.xnio.IoUtils.safeClose(IoUtils.java:134)
	at io.undertow.server.handlers.proxy.ProxyHandler$ProxyClientHandler.cancel(ProxyHandler.java:341)
	at io.undertow.server.handlers.proxy.ProxyHandler$1.run(ProxyHandler.java:186)
	at org.xnio.nio.WorkerThread.safeRun(WorkerThread.java:580)
	at org.xnio.nio.WorkerThread.run(WorkerThread.java:464)

16:36:32,521 DEBUG (XNIO-1 I/O-6) [io.undertow.server.handlers.proxy] <ProxyHandler.java:520> Sending request ClientRequest{path='/fullstring?blocking', method=POST, protocol=HTTP/1.1} to target localhost/<IP_ADDRESS>:8888 for exchange HttpServerExchange{ POST /fullstring request {Connection=[Keep-Alive], Content-Length=[11000], Content-Type=[text/plain; charset=ISO-8859-1], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:36:32,526 ERROR (XNIO-1 I/O-4) [io.undertow.proxy] <ProxyHandler.java:623> UT005028: Proxy request to /fullstring failed: java.nio.channels.ClosedChannelException
	at io.undertow.client.http2.Http2ClientConnection.close(Http2ClientConnection.java:311)
	at org.xnio.IoUtils.safeClose(IoUtils.java:134)
	at io.undertow.server.handlers.proxy.ProxyHandler$ProxyClientHandler.cancel(ProxyHandler.java:341)
	at io.undertow.server.handlers.proxy.ProxyHandler$1.run(ProxyHandler.java:186)
	at org.xnio.nio.WorkerThread.safeRun(WorkerThread.java:580)
	at org.xnio.nio.WorkerThread.run(WorkerThread.java:464)

16:36:32,528 DEBUG (XNIO-1 I/O-6) [io.undertow.server.handlers.proxy] <ProxyHandler.java:527> Sent request ClientRequest{path='/fullstring?blocking', method=POST, protocol=HTTP/1.1} to target <IP_ADDRESS> for exchange HttpServerExchange{ POST /fullstring request {Connection=[Keep-Alive], Content-Length=[11000], Content-Type=[text/plain; charset=ISO-8859-1], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}
16:36:32,531 DEBUG (XNIO-1 I/O-4) [io.undertow.request.error-response] <DelegatingBasicLogger.java:424> Setting error code 503 for exchange HttpServerExchange{ POST /fullstring request {Connection=[Keep-Alive], Content-Length=[22000], Content-Type=[text/plain; charset=ISO-8859-1], User-Agent=[Apache-HttpClient/4.2.6 (java 1.5)], Host=[localhost:7777]} response {}}: java.lang.RuntimeException
	at io.undertow.server.HttpServerExchange.setStatusCode(HttpServerExchange.java:1378)
	at io.undertow.server.handlers.proxy.ProxyHandler.handleFailure(ProxyHandler.java:629)
	at io.undertow.server.handlers.proxy.ProxyHandler$ResponseCallback.failed(ProxyHandler.java:688)
	at io.undertow.client.http2.Http2ClientExchange.failed(Http2ClientExchange.java:124)
	at io.undertow.client.http2.Http2ClientConnection.close(Http2ClientConnection.java:311)
	at org.xnio.IoUtils.safeClose(IoUtils.java:134)
	at io.undertow.server.handlers.proxy.ProxyHandler$ProxyClientHandler.cancel(ProxyHandler.java:341)
	at io.undertow.server.handlers.proxy.ProxyHandler$1.run(ProxyHandler.java:186)
	at org.xnio.nio.WorkerThread.safeRun(WorkerThread.java:580)
	at org.xnio.nio.WorkerThread.run(WorkerThread.java:464)

io.undertow.server.handlers.ReceiverTestCase.testAsyncReceivePartialBytes{proxy}{http2-clear}: java.lang.RuntimeException: test failed with i equal to 0
	at io.undertow.server.handlers.ReceiverTestCase.doTest(ReceiverTestCase.java:233)
	at io.undertow.server.handlers.ReceiverTestCase.testAsyncReceivePartialBytes(ReceiverTestCase.java:200)
Caused by: java.net.SocketTimeoutException: Read timed out
	at io.undertow.server.handlers.ReceiverTestCase.runTest(ReceiverTestCase.java:244)
	at io.undertow.server.handlers.ReceiverTestCase.doTest(ReceiverTestCase.java:231)
	at io.undertow.server.handlers.ReceiverTestCase.testAsyncReceivePartialBytes(ReceiverTestCase.java:200)

io.undertow.server.handlers.ReceiverTestCase.testBlockingReceivePartialBytes{proxy}{http2-clear}: java.lang.RuntimeException: test failed with i equal to 0
	at io.undertow.server.handlers.ReceiverTestCase.doTest(ReceiverTestCase.java:233)
	at io.undertow.server.handlers.ReceiverTestCase.testBlockingReceivePartialBytes(ReceiverTestCase.java:221)
Caused by: java.net.SocketTimeoutException: Read timed out
	at io.undertow.server.handlers.ReceiverTestCase.runTest(ReceiverTestCase.java:244)
	at io.undertow.server.handlers.ReceiverTestCase.doTest(ReceiverTestCase.java:231)
	at io.undertow.server.handlers.ReceiverTestCase.testBlockingReceivePartialBytes(ReceiverTestCase.java:221)

io.undertow.server.handlers.PredicatedHandlersTestCase.testRewrite{proxy}{http2-clear}: java.net.SocketTimeoutException: Read timed out
	at io.undertow.server.handlers.PredicatedHandlersTestCase.testRewrite(PredicatedHandlersTestCase.java:67)
------- Stderr: -------
16:38:04,118 WARN  (main) [io.undertow] <PredicatedHandlersParser.java:460> UT005060: Predicate path(/skipallrules) and true -> done
method(GET) -> set(attribute='%{o,type}', value=get)
regex('(.*).css') -> {rewrite['${1}.xcss'];set(attribute='%{o,chained}', value=true)}
regex('(.*).redirect$') -> redirect['${1}.redirected']

set[attribute='%{o,someHeader}', value=always]
path-template('/foo/{bar}/{f}') -> set[attribute='%{o,template}', value='${bar}']
path-template('/bar->foo') -> redirect(/);regex('(.*).css') -> set[attribute='%{o,css}', value='true'] else set[attribute='%{o,css}', value='false']; path(/restart) -> {rewrite(/foo/a/b); restart; }
 uses old style square braces to define predicates, which will be removed in a future release. predicate[value] should be changed to predicate(value)
16:38:04,128 WARN  (main) [io.undertow] <PredicatedHandlersParser.java:460> UT005060: Predicate path(/skipallrules) and true -> done
method(GET) -> set(attribute='%{o,type}', value=get)
regex('(.*).css') -> {rewrite['${1}.xcss'];set(attribute='%{o,chained}', value=true)}
regex('(.*).redirect$') -> redirect['${1}.redirected']

set[attribute='%{o,someHeader}', value=always]
path-template('/foo/{bar}/{f}') -> set[attribute='%{o,template}', value='${bar}']
path-template('/bar->foo') -> redirect(/);regex('(.*).css') -> set[attribute='%{o,css}', value='true'] else set[attribute='%{o,css}', value='false']; path(/restart) -> {rewrite(/foo/a/b); restart; }
 uses old style square braces to define predicates, which will be removed in a future release. predicate[value] should be changed to predicate(value)
16:38:04,137 WARN  (main) [io.undertow] <PredicatedHandlersParser.java:460> UT005060: Predicate path(/skipallrules) and true -> done
method(GET) -> set(attribute='%{o,type}', value=get)
regex('(.*).css') -> {rewrite['${1}.xcss'];set(attribute='%{o,chained}', value=true)}
regex('(.*).redirect$') -> redirect['${1}.redirected']

set[attribute='%{o,someHeader}', value=always]
path-template('/foo/{bar}/{f}') -> set[attribute='%{o,template}', value='${bar}']
path-template('/bar->foo') -> redirect(/);regex('(.*).css') -> set[attribute='%{o,css}', value='true'] else set[attribute='%{o,css}', value='false']; path(/restart) -> {rewrite(/foo/a/b); restart; }
 uses old style square braces to define predicates, which will be removed in a future release. predicate[value] should be changed to predicate(value)
16:38:04,147 WARN  (main) [io.undertow] <PredicatedHandlersParser.java:460> UT005060: Predicate path(/skipallrules) and true -> done
method(GET) -> set(attribute='%{o,type}', value=get)
regex('(.*).css') -> {rewrite['${1}.xcss'];set(attribute='%{o,chained}', value=true)}
regex('(.*).redirect$') -> redirect['${1}.redirected']

set[attribute='%{o,someHeader}', value=always]
path-template('/foo/{bar}/{f}') -> set[attribute='%{o,template}', value='${bar}']
path-template('/bar->foo') -> redirect(/);regex('(.*).css') -> set[attribute='%{o,css}', value='true'] else set[attribute='%{o,css}', value='false']; path(/restart) -> {rewrite(/foo/a/b); restart; }
 uses old style square braces to define predicates, which will be removed in a future release. predicate[value] should be changed to predicate(value)

##### there are 5 more failed tests, see build details

Linux Build 2180 outcome was FAILURE using a merge of c4694140b1aba3bf9db79d2a8f77b79768dc7959
Summary: Execution timeout (new); tests passed: 2729, ignored: 478 Build time: 01:00:02

I'm pretty sure that's not my fault. ;)

Can someone confirm if this is something I need to do something about?  I'd like to move forward on getting this PR merged.

Looks like something went screwy with CI, I will investigate.
Looking at this it looks like you mostly want to control the resource and welcome file resolution process?
In general Undertow is based around the idea of composition, you chain functions together to get the desired result rather than inherit from things and modify them, which is why I want to think about this a bit more (the static method approach you originally proposed is much more in keeping with the Undertow way of doing things).
As I understand it your main requirement are flexibility in how the resource is resolved (based on other exchange properties than the path) and more flexibility in selecting a welcome file?

The welcome file stuff I don't especially care about, it just made sense to extract it because of common functionality being utilized.  Though in principle I agree the static approach is better, it would mean passing a lot of parameters to the static method.  If you'd like me to modify the PR to do that I'd be fine with it, just let me know.
Resource resolution is my primary issue, and as you can see from the PR, I want access to the HttpServerExchange as part of the resolving (since cookies, headers, path, etc. may be involved in determining the resource).

Any updates on this?  If this is going to be merged I'll rely on Undertow for resource handling.  Otherwise I need to add this functionality to my application directly.  Obviously I'd prefer the former.

What about if ResourceHandler just has the ability to override the served resource via an attachment? So in an earlier handler you can attach a Resource via ResourceHandler.RESOURCE AttachmentKey, and then if this is set the ResourceHandler will just serve it, instead of trying to resolve the resource via its ResourceManager?

I think that would be acceptable, but that update would imply a complete disconnect between Resource and ResourceManager which I would very much like.  However, I think a logical aspect of the update would be to remove the reference to ResourceManager from Resource so that a Resource is a pure Resource reference and relies on the currently serving ResourceManager to define things like getTransferMinSize.  So PathResource.serve would need to take in a ResourceManager instead of using one defined on the Resource.

That is not really in scope, the Resource needs a reference to the ResourceManager that created it (e.g. for the list() operation).
I really don't want to make any major changes to support this, mostly because I think for the most part your use case can already be handled via composition (i.e. multiple resource handlers and a handler that picks between them / rewrites the path as necessary).
In addition any sort of non compatible API change will need to wait for the next version so it would be a while before it was available.

That's reasonable.  I'd be willing to accept the attachment key for now and argue the other later. :)

Are there any updates on this?

Would something like https://github.com/undertow-io/undertow/compare/master...stuartwdouglas:resource-supplier?expand=1 be sufficient?
I have never really been happy with any of the possible solutions to this, but this seems like the most straightforward, as you can now control exactly what resource is served via the ResourceSupplier interface.

That's definitely an improvement as it allows much greater flexibility to find the resources.  It would be beneficial if the ResourceSupplier could also be configured for cache-control and the other options as well.

Where are we with this?

I am going for the ResourceSupplier interface approach.


RAML

On the mtdsa-662-new resource-model branch there is is a typo in self-employments/adjustments.json
title is I presume incorrect.
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "Allowances",
"type": "object",
For the avoidance of doubt can you clarify what tooling you are using to validate the raml?

Hi Andy,
Apologies for the delay in responding to this - thanks for the report. I have fixed this typo locally and will push it along with some other changes that I have made.
In terms of the tooling we are using to develop/validate the RAML - we use the RAML plugin for the Atom text editor which has some basic validation support, along with the raml2html package (https://github.com/raml2html/raml2html) that allows you to "compile" the RAML into a HTML document.
Thanks,
Jacob


Add examples for UrlScan

Besides the regular example for FileScan, there should be also examples for UrlScans for each SDKs.
Check if done:

[x] TypeScript
[x] PHP
[x] .NET
[x] Rust
[x] Python
[x] Java
[x] Javascript

I'm not sure how much sense it makes for rust to have a separate documentation as a Readme.md which needs to be kept up to date, if there is a compile time checked documentation which is always correct on doc.rs - vaas. Maybe just link to the docs in the readme?

@secana I updated the lib.rs with the new authentication mechanism & add an url scan example.


WIP: DO NOT MERGE Feat/usernames

🟡 Heimdall Review Status

Requirement
Status
More Info

Reviews

🟡
0/1

Denominator calculation

Show calculation

1 if user is bot
0

1 if user is external
0

From .codeflow.yml

1

Additional review requirements

Show calculation

Max
0

0

From CODEOWNERS

0

Global minimum
0

Max

1

1

1 if commit is unverified
0

Sum
1


[Bug]: impossible to use PDfReader with an S3 file because of Path() casting

Bug Description
Hey, so to sum it up, I create a SimpleDirectoryReader with a PDFReader as an extractor and an s3 bucket as an input_dir, with also s3 as a fs.
ThenI call load_data() which leads to the PDFReader's method load_data(file=input_dir). the input dir is in the s3 format but first thing in load_data are these 2 lines
if not isinstance(file, Path):
file = Path(file)
This transforms it into a WindowsPath instead of a PosixPath and that doesn't work with S3. I think these two lines should be deleted or at least adapted to the filesystem at use
Version
0.10.65
Steps to Reproduce
versions used are the most recent as of today 15.08.2024 for llama-index-readers-file llama-index and llama-index-core
input_dir = f"{bucket}/{files_dir}"
files_to_exclude = processed_files
loader = SimpleDirectoryReader(input_dir=input_dir, exclude=files_to_exclude, file_extractor=extractors, fs=s3fs])
#s3fs being an instance of s3fs.core.S3FileSystem
docs = loader.load_data()
Relevant Logs/Tracbacks
The error for one of the files, including additional traceback:

Failed to load file dtc-rag-lab/dtc-internal-test/files/TSLA-Q4-2021-Update.pdf with error: RetryError[<Future at 0x1b42c66de40 state=finished raised ValueError>]. Skipping...
Traceback (most recent call last):
  File "c:\Users\VM-User\Desktop\RagLab\dtc_rag_lab\venv\lib\site-packages\tenacity\__init__.py", line 478, in __call__
    result = fn(*args, **kwargs)
  File "c:\Users\VM-User\Desktop\RagLab\dtc_rag_lab\venv\lib\site-packages\llama_index\readers\file\docs\base.py", line 56, in load_data
    with fs.open(str(file), "rb") as fp:
  File "c:\Users\VM-User\Desktop\RagLab\dtc_rag_lab\venv\lib\site-packages\fsspec\spec.py", line 1303, in open
    f = self._open(
  File "c:\Users\VM-User\Desktop\RagLab\dtc_rag_lab\venv\lib\site-packages\s3fs\core.py", line 688, in _open
    return S3File(
  File "c:\Users\VM-User\Desktop\RagLab\dtc_rag_lab\venv\lib\site-packages\s3fs\core.py", line 2155, in __init__
    raise ValueError("Attempt to open non key-like path: %s" % path)
ValueError: Attempt to open non key-like path: dtc-rag-lab\dtc-internal-test\files\TSLA-Q4-2021-Update.pdf

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "c:\Users\VM-User\Desktop\RagLab\dtc_rag_lab\venv\lib\site-packages\llama_index\core\readers\file\base.py", line 540, in load_file
    docs = reader.load_data(input_file, **kwargs)
  File "c:\Users\VM-User\Desktop\RagLab\dtc_rag_lab\venv\lib\site-packages\tenacity\__init__.py", line 336, in wrapped_f
    return copy(f, *args, **kw)
  File "c:\Users\VM-User\Desktop\RagLab\dtc_rag_lab\venv\lib\site-packages\tenacity\__init__.py", line 475, in __call__
    do = self.iter(retry_state=retry_state)
  File "c:\Users\VM-User\Desktop\RagLab\dtc_rag_lab\venv\lib\site-packages\tenacity\__init__.py", line 376, in iter
    result = action(retry_state)
  File "c:\Users\VM-User\Desktop\RagLab\dtc_rag_lab\venv\lib\site-packages\tenacity\__init__.py", line 419, in exc_check
    raise retry_exc from fut.exception()
tenacity.RetryError: RetryError[<Future at 0x1b42c66de40 state=finished raised ValueError>]

oups sorry don't mind this


Dependency to @types/node makes electron package incompatible with typescript projects not using commonjs

The package installs @types/node package as dependency which is not compatible with e.g. @types/requirejs, as both defined require function in a different manner.
This case is pretty common for browser typescript projects using AMD, with e.g. nightmarejs as headless browser for unit tests which actually uses electron.

Electron version: 1.6.10
Operating system: Windows

@zeke Hm, this is one we didn't think of 🤔
I mean, technically the typings are accurate but the AMD definitions override the built in require function, maybe this is something that can be fixed in the AMD typings (somehow overriding the nodejs require declaration)

That's not actually the case: the Typescript compiler can't actually suppose you are using nodejs so Typescript so there is actually no built in require function. That's why you need typings if you want to use the require function which is defined in e.g. @types/nodes or @types/requirejs, but obviously they are not compatible so installing both packages will result in build error.

@tothdavid The thing is Electron has all Node.JS API's (including require) built in, this is what I meant by the built in require function.  If @types/requirejs needs to override that require I'm not sure how we can facilitate that or if it's something that needs to be fixed in those typings

Sure, that's perfectly fine that you have electron building on node.js, but why do you expose @types/node as a dependency when you don't even have any other .ts/d.ts in your package? Why is it not only a devDependency?
The thing I am telling you is that the @types/requirejs typings are not wrong, they are just different as commonjs is not really a valid option when your code runs in a browser. Also as I mentioned above using electron for running unit tests are a pretty common use case for any projects not just for the ones targeting node.js.

why do you expose @types/node as a dependency when you don't even have any other .ts/d.ts in your package

We do?  Check an install of electron, it will contain an electron typings file (only the more recent versions of electron have this file).
Also the latest version of this typings file is in the repo at the moment
https://github.com/electron-userland/electron-prebuilt/blob/master/electron.d.ts

The thing I am telling you is that the @types/requirejs typings are not wrong

I'm not saying they are, just saying there must be some way to resolve a conflict between two type declarations 😄

Oh, sorry, I checked the wrong version. :( But I can see it now.
You could still separate the typings from the main npm package and push the typings to a @types scoped package, but even typescript's recommendation is to publish them together:
https://www.typescriptlang.org/docs/handbook/declaration-files/publishing.html
Unfortunately require is a special function as it needs to be globally defined so there is not really a way (or at least none that I know of) to make both of them work in a single context.

Why not using this https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/electron/index.d.ts ?

@kenshyx That type definition file is community maintained and published to the @types scope, we now publish our own first-party typings file generated at build time from our docs and ship it with the electron module.

Yeah, but it's a good base to use, right now that module will become unusable because they clash.

@kenshyx First party typings are supposed to supersede the definitely typed modules.  In the near future, the @types/electron package will probably be deprecated as people shouldn't be using both.  They will just naturally get typings from the electron package.

The electron-prebuilt repo is being retired and its code has been moved into the electron/electron repo. For the sake of historical transparency, we will leave GitHub Issues enabled on this repository, but if you are still affected by the issue reported here, please open a new issue on electron/electron repo and reference this issue from it so people can get the full context. The electron repository has a large and active contributor community, so your issue is more likely to get the attention it deserves there. Thanks!
For this issue specifically, https://github.com/electron/electron-typescript-definitions might be the most appropriate place to continue the discussion.


Reload preview window on SIGWINCH (resize of window)

[x] I have read through the manual page (man fzf)
[x] I have the latest version of fzf
[x] I have searched through the existing issues

Info

OS

[x] Linux
[ ] Mac OS X
[ ] Windows
[ ] Etc.

Shell

[x] bash
[ ] zsh
[ ] fish

Problem / Steps to reproduce
Run the following :
I run the following :
printf "%s\n" "ls" "vim" | fzf --preview 'man {} 2>/dev/null' --preview-window 'right:50%:nohidden'

I can see the man page show up in the right.
However, when I resize the window having fzf, the resize event does not cause a redraw in the preview window, meaning that the preview window shows only half of its capacity.
I don't know whether this should be made automatic or optional with a flag.

fzf doesn't re-run the preview command on resize, so it just prints the previous result formatted for the previous width by man itself. You can restart the preview command using refresh-preview command.
fzf --preview 'date; echo $FZF_PREVIEW_COLUMNS' --bind space:refresh-preview

Related: can the preview command be restarted and somehow be input the current number of lines currently shown in the fzf list? This would enable the preview window to grow semi-dynamically; which is natural: the list of candidates shrinks, you want more details about each one. I don't know any clever way of persisting this, but for my use case I use three sets of fzf-lists that inform each other (ctrl+G: context -> list of candidates in that context etc).

fzf --bind resize:refresh-preview --preview date


Install Error

<EMAIL_ADDRESS>install /Users/ascc/develop/vagrant/working/P-Brain.ai/node_modules/libxmljs
node-pre-gyp install --fallback-to-build --loglevel http

node-pre-gyp http GET https://github.com/libxmljs/libxmljs/releases/download/v0.18.4/node-v48-darwin-x64.tar.gz
node-pre-gyp http 404 https://github.com/libxmljs/libxmljs/releases/download/v0.18.4/node-v48-darwin-x64.tar.gz
node-pre-gyp ERR! Tried to download(404): https://github.com/libxmljs/libxmljs/releases/download/v0.18.4/node-v48-darwin-x64.tar.gz
node-pre-gyp ERR! Pre-built binaries not found for<EMAIL_ADDRESS>and<EMAIL_ADDRESS>(node-v48 ABI) (falling back to source compile with node-gyp)
node-pre-gyp http 404 status code downloading tarball https://github.com/libxmljs/libxmljs/releases/download/v0.18.4/node-v48-darwin-x64.tar.gz

Second this. Relevant log lines:
node-pre-gyp http GET https://github.com/libxmljs/libxmljs/releases/download/v0.18.4/node-v48-linux-x64.tar.gz
node-pre-gyp http 404 https://github.com/libxmljs/libxmljs/releases/download/v0.18.4/node-v48-linux-x64.tar.gz
node-pre-gyp ERR! Tried to download(404): https://github.com/libxmljs/libxmljs/releases/download/v0.18.4/node-v48-linux-x64.tar.gz
node-pre-gyp ERR! Pre-built binaries not found for<EMAIL_ADDRESS>and<EMAIL_ADDRESS>(node-v48 ABI) (falling back to source compile with node-gyp)
node-pre-gyp http 404 status code downloading tarball https://github.com/libxmljs/libxmljs/releases/download/v0.18.4/node-v48-linux-x64.tar.gz

Yes, this is the way to install libxmljs, so there's no binary and you have to compile.
Seems an incomplete log. Are you running debian/ubuntu? You have installed apt-get install build-essential?
By the way, that was my error related to "Install error" -> https://github.com/libxmljs/libxmljs/issues/465

It fails for me too. Docker container centos7. The same error randomly happens on different platforms (alpine, redhat). I belive it is in a way related to who is building the library. By some reason it is not ok to be built as root. Well on docker containers be a root is default and there is no point to create users.
Not saying it is build as a different user without issues. It fails sporadically even user is other than root but chances are it will fail as root are way higher (almost 100%).
On some platforms like alpine providing flag --unsafe-perm is helping but on centos it makes no effect.
node-pre-gyp http GET https://github.com/libxmljs/libxmljs/releases/download/v0.18.4/node-v48-linux-x64.tar.gz
node-pre-gyp http 404 https://github.com/libxmljs/libxmljs/releases/download/v0.18.4/node-v48-linux-x64.tar.gz
node-pre-gyp ERR! Tried to download(404): https://github.com/libxmljs/libxmljs/releases/download/v0.18.4/node-v48-linux-x64.tar.gz
node-pre-gyp ERR! Pre-built binaries not found for<EMAIL_ADDRESS>and<EMAIL_ADDRESS>(node-v48 ABI) (falling back to source compile with node-gyp)
node-pre-gyp http 404 status code downloading tarball https://github.com/libxmljs/libxmljs/releases/download/v0.18.4/node-v48-linux-x64.tar.gz
gyp http GET https://nodejs.org/download/release/v6.9.5/node-v6.9.5-headers.tar.gz
gyp http 200 https://nodejs.org/download/release/v6.9.5/node-v6.9.5-headers.tar.gz
gyp WARN install got an error, rolling back install
gyp ERR! configure error
gyp ERR! stack Error: read ECONNRESET
gyp ERR! stack     at exports._errnoException (util.js:1022:11)
gyp ERR! stack     at TLSWrap.onread (net.js:569:26)
gyp ERR!  Exit status 1
npm ERR!
npm ERR! Failed at the<EMAIL_ADDRESS>install script 'node-pre-gyp install --fallback-to-build --loglevel http'.
npm ERR! Make sure you have the latest version of node.js and npm installed.

This is the Docker file
FROM centos:centos7
RUN yum -y update
RUN yum -y install curl wget bash bash-completion sudo vim net-tools openssh redis python make libtool-ltdl java gcc-c++ libxslt-devel
RUN yum -y groupinstall 'Development Tools'
RUN curl --silent --location https://rpm.nodesource.com/setup_6.x | bash -
RUN yum -y install nodejs
RUN npm install -g n
RUN n 6.9.5
WORKDIR /tmp
RUN npm install libxmljs
try to build libxmljs in this container and it will crash

Wasted a day trying to build a container just to figure out that there is a bug in oracle virtual box that makes node lib archives occasionally (99% of the time) to arrive with a corrupted SSH signatures
every time signature has to be validated and it is corrupted build will fail

Fixed in v0.18.7

I still get this issue:
node-pre-gyp http GET https://github.com/libxmljs/libxmljs/releases/download/v0.18.7/node-v59-win32-x64.tar.gz
node-pre-gyp http 404 https://github.com/libxmljs/libxmljs/releases/download/v0.18.7/node-v59-win32-x64.tar.gz
node-pre-gyp ERR! Tried to download(404): https://github.com/libxmljs/libxmljs/releases/download/v0.18.7/node-v59-win32-x64.tar.gz
node-pre-gyp ERR! Pre-built binaries not found for<EMAIL_ADDRESS>and<EMAIL_ADDRESS>(node-v59 ABI) (falling back to source compile with node-gyp)
node-pre-gyp http 404 status code downloading tarball https://github.com/libxmljs/libxmljs/releases/download/v0.18.7/node-v59-win32-x64.tar.gz

then a load of command guff and it blows up with:
TRACKER : error TRK0005: Failed to locate: "CL.exe". The system cannot find the file specified. [C:\Code\Projects\project\node_modules\libxmljs\build\xmljs.vcxproj]

Crisis averted, it was a new build so installed node 9 if I go back to node 8.* it works as expected.


Appstudio update test-custom-default-branch-gtlo

Pipelines as Code configuration proposal
To start the PipelineRun, add a new comment with content /ok-to-test
For more detailed information about running a PipelineRun, please refer to Pipelines as Code documentation Running the PipelineRun
To customize the proposed PipelineRuns after merge, please refer to Build Pipeline customization

Pipelines as Code CI/test-custom-default-branch-gtlo-on-pull-request has successfully validated your commit.

StatusDurationName

✅ Succeeded
8 seconds
init

✅ Succeeded
14 seconds
clone-repository

✅ Succeeded
32 seconds
build-container

✅ Succeeded
18 seconds
deprecated-base-image-check

✅ Succeeded
21 seconds
inspect-image

✅ Succeeded
1 minute
clamav-scan

✅ Succeeded
11 seconds
sbom-json-check

✅ Succeeded
13 seconds
clair-scan

✅ Succeeded
15 seconds
label-check

✅ Succeeded
7 seconds
show-summary

✅ Succeeded
7 seconds
show-sbom


Allow post-install to change the OVNK Image for dev

Description
Fixes

we can just have one var, other than that LGTM

ack, I prefer not to have string parsing but 🤷🏽


Index builders omit first slug

Same disclaimer as in #25 about noting so I don't forget:
Several of the indexing blocks in load-data.jsx include something like this:
indexes.type[meeting.types[j]] = {
    key: Slugify(meeting.types[j]),
    name: meeting.types[j],
    slugs: [],

I'm wondering if that last line should be slugs: [meeting.slug] ?

I don't believe this is an issue, because it pushes it to the empty array right after.
indexes.region[meeting.region].slugs.push(meeting.slug);

However if you can reproduceably show it's not working and want to do a PR then 👌

Ah, no, that's totally right.  I'll close this issue.


MEDIA_INFO_BUFFERING_START question

I'm trying to handle situation in which user seeks to video time that hasn't been buffered yet. I expect that MediaPlayer will call onInfo() with MEDIA_INFO_BUFFERING_START message (this happens with standard MediaPlayer). However, it doesn't. I would like to show a  progress dialog in time between seek click and start of video playback (it sometimes is even few seconds, so I cannot leave it without any info). How should I handle it properly? Are there any other listeners that react on video being buffered?

Thanks, that will be fixed in the next version.
In the meantime, use the OnSeekListener to show the progress dialog and the OnSeekCompleteListener to hide it. If the seek takes a long time, either because you're using exact seek mode or because of buffering, then the dialog will be visible. If a seek is quick, the dialog will be gone before the user realizes it.


Setting entity.visible = false sometimes makes other present entities invisible

I'm making a war strategy game using Crafty and am working on fog of war. I was getting problems with seemingly random (though consistent; the same pieces seem to disappear, but their location seems random) stretches of road, grass, etc. would disappear.
I confirmed this by commenting out all code except for a very specific function. I am selecting entities by component 'Shadow', which is overlayed on top of 'FakeGrass', with z values 2 and 1 respectively. Shadow also requires the FakeGrass component.
The idea was to make the Shadow tiles invisible when players are near them, thereby illuminating the fog. I've since changed to using transparency (alpha) and am setting the Shadow to alpha = 0 when players are nearby. I have since had zero issues with this problem.
I have confirmed that only Shadow tiles are being made invisible by looking for entities that do not have Shadow as a component. I have also triple checked the z-values, and none are being modified during the game.
Other notes:

the tiles are made visible again by clicking on them
the tiles often seem to be grouped (eg. I often get a black 3x3 square)
it will remove any other co-located entity (I've seen villages, roads, grass, and trees disappear)

I have since moved on and am successfully using alpha. In case this does get looked into, I've left some code below. I can supply more code if needed.

LineOfSight = {
  tileLineOfSight: function(side) {
    this.allEntitiesVisible('Shadow');  // starting by re-adding fog before removing areas near friendly units
    var tiles_in_sight = this.getGenericEntitiesInSight('Shadow', side);
    for (var i=0; i<tiles_in_sight.length; i++) {
      var tile = tiles_in_sight[i];
      if (!tile.has('Shadow')) {
        console.log("tile.type");   // these two lines never print
        console.log(tile.type);
      }
    }
    this.makeInvisible(tiles_in_sight);
    return this;
  },

makeInvisible: function(entities) {
    for (var i=0; i<entities.length; i++) {
      var entity = entities[i];
      if (!entity.has('Shadow')) {
        console.log("entity.type");    // again, these two lines never print
        console.log(entity.type);
      }
      entity.visible = false;
    }
    return this;
  },
}

I still haven't been able to reproduce this for myself, and I still don't see anything in the code that would cause it.  I'm going to go ahead and close this, since it's hard to tell if it's a problem with Crafty or something caused by the particular game code.  Anyone should feel free to reopen this if they can provide a simpler test case!
@heniotierra Did you ever figure out what was causing your issue?

@starwed Well, no, but I noticed that when the gllith I mentioned occurrs, the color of the sprites' background changes according to Crafty.background. However, there's nothing obvious to me that would trigger this glitch.

@starwed Yes, you can close this. I no longer have the issue if I choose Canvas. So presumably there is some situation in my game that caused the issue. That being said, I really didn't have a lot going on. Eg. I have absolutely no way to explain randomly placed black boxes - there is nothing in my code to create a black box, let alone a group of 9 of them that disappear as I move over them.
I'm guessing there is some really specific issue that crops up under very specific circumstances. Let's hope it was just my code! Regardless, I will report it in detail if it happens again.
Thanks!


Add compound input list for retention time calibration

Current implementation of the retention time calibration module searches for a common feature in multiple feature lists. After successful calibration, no info on the utilized feature can be found. Therefore, allow manual definition of compounds used for retention time calibration.

[ ] Add RT corrected data type to features and rows (bind)
[ ] Advanced parameter in alignment - use corrected RT (default)

I think the current module should be discarded and we should add RT calibration at the raw data level. This is what other platforms do (e.g. XCMS, Progenesis) and it has the advantage that the user can immediately see the aligned peaks in the TIC plot.

We could consider this approach: https://www.nature.com/articles/s41467-023-43909-5

Yes, Progenesis definitely modifies the retention times of the MS1 scans before performing feature detection. I think XCMS does that too, although not 100% sure. This approach makes gap-filling much easier later, because the RT range of each feature is constant across samples. It also makes alignment easier.

This is from XMCS docs:
The adjustRtime method(s) perform retention time correction (alignment) between chromatograms of different samples. Alignment is performed by default on MS level 1 data. Retention times of spec- tra from other MS levels, if present, are subsequently adjusted based on the adjusted retention times of the MS1 spectra. Note that calling adjustRtime on a xcms result object will remove any even- tually present previous alignment results as well as any correspondence analysis results. To run a second round of alignment, raw retention times need to be replaced with adjusted ones using the applyAdjustedRtime() function.

So it sounds like they overwrite the retention time in the scan headers.

Approaches:
Correct RT on the feature level:

[ ] just replace the RTType with the corrected retention time

Shapes and RT will mismatch, change of IonTimeSeries will cause FeatureDataUtils to replace the corrected RT
No changes needed in any of the module codes, as the corrected RT will be used by default
RT and representative spectrum will have different retention times

[ ] create a second type CorrectedRTType

Shapes and RT will match, shapes and CorrectedRT will mismatch
Adjustments needed to downstream tools such as Speclib search, DB search, Alignment, gap filling to either use corrected RT or original RT.

Corrected: Alignment, DB + Speclib searches, filtering
Original: Gap filling

Comparability with other software that shows raw data is still there (same RTs)

Correct RT on the raw data level

No issues with two RT types or downstream processing modules
possibility for negative retention times, which will mess up feature area calculation
no comparability of retention times with other software
against the philosophy of unaltered raw data

Might be good to try out the corrected RT in the scan header. This would be the easiest fix actually.
We could just add methods to Scan:

getRawRetentionTime
isRetentionTimeCorrected

And the old getRetentionTime method would return the corrected RT if present or the original RT otherwise.
As for negative RT values, this could be restricted by capping it at 0 or shifting to positive?


Create github action for running lint on code and show errors

We are formatting the code with prettier, need that to run on github actions so that the outputs can be seen  on the PRs on gthub.

Are we planning on an automated modification of the committed code itself by prettifying it through an actions bot, or just a console output in actions log as we currently see for the syntax errors?

Anything works fine.

@zeborg Are you working on this?. If not I would like to work on this.

@zeborg Are you working on this?. If you are not I would like to work on this.

@mdPial Hey bro! Yup, I've been testing it on my fork till now and it finally seems to be ok from my end. Will be making a PR soon.


Add location event types

Adds extensible event types m.ts, m.asset and m.location as described by msc3488, originally added to matrix-js-sdk

Closing in favour of https://github.com/matrix-org/matrix-js-sdk/pull/2229


Add endpoint to receive funds on-chain

As a user I want to receive funds onchain so I can open some channels :)

Command:
lncli newaddress p2wkh
See https://api.lightning.community/#newaddress

@rootzoll importrant issue


Checkpoints and rollbacks

The main ord instance at ordinals.com is now running redb, and I'm starting to think about how to deal with reorgs of the bitcoin blockchain.
We have a few tables, and will probably wind up with a few more, and it would be super convenient if redb supported checkpoints and rollbacks directly. We could keep checkpoints of the last 6 blocks (reorgs larger than a block or two are extremely rare, and reorgs of 6 blocks or more have never happened outside of a couple instances due to bugs) and upon detecting a reorg, roll back to the state before the orphaned block, and continue as normal. The alternative, which isn't actually that hard, is to figure out which transactions and blocks we need to purge from the database, but will be tricky, and could be a source of bugs if we don't get the rollback logic correct for each table.
Are checkpoints something that redb could support easily? E.g. instead of having two db roots and ping-ponging between them, have N db roots, configurable per database, and cycling through them every commit, or having some kind of explicit way of designating that a commit should be a checkpoint.

Ya, that's fairly straight forward, and is similar to the #271 issue I have filed already. The main thing I'll need to think through is the performance aspects: either the rollback will take time linear in the amount of data in the database, or the checkpoints will require space linear in the number of writes that occur after them. Restoring the data is easy, and doesn't even require n-buffered db roots -- the checkpoint object can just store the db root. However, all the allocator state in the database will have to be rolled back, which means undoing every allocator that occurs after the checkpoint is taken.

I think for ord the best thing would be that checkpoints require space linear in the number of writes that occur after them. We have one write transaction per block, and with six checkpoints, we'd have a maximum of five writes after a checkpoint. Our database is big, and will get bigger.
What would nested writes do? Having a write transaction pending, and then doing another write transaction within it?

It's linear in the number of insertions/deletions, not the number of transactions, but ya that still seems better.
Ya, the idea is that you can abort part of your transaction and continue with the rest of it. I'm not sure how useful it is, but it seems easy enough to support, and LMDB has them :)

@casey I thought of a simpler and hopefully better implementation, which is to just save a complete copy of the allocator state in the checkpoint. How would you feel about checkpoint objects that consume ~64kb of RAM per 1GB of data in the database?

@cberner That sounds totally reasonable to me. 64KiB * 6 checkpoints * 100 GiB (we're at 50 GB but giving some headroom) is 37.5 MiB RAM, which sounds pretty reasonable.
How does it work? I guess it needs to consult all checkpoint allocators states before freeing old pages?

Actually it's even easier than that. It doesn't free any pages that can be referenced by a checkpoint, just like when a read transaction is open. As an aside, I think I'm going to name them "savepoints" which seems to be a common term among SQL databases. So you have the invariant that any page which was allocated when the savepoint was created will still be allocated and have the same data. Therefore to rollback to the savepoint all you need to do is restore the root pointers to the old value, and then free any pages that were allocated after the savepoint was created. The latter is trivial to do by keeping a complete copy of the allocator state and restoring it

Dope, that sounds good to me.

Is savepoint more common than checkpoint? I was just doing some google searches, and "sql checkpoint" had more search results than "sql savepoint".

checkpoint is probably more common, but it means something different I think. SqlServer says that a checkpoint is a "known good point from which the SQL Server Database Engine can start applying changes contained in the log during recovery after an unexpected shutdown or crash", so basically it's a compaction of the WAL is how I read it. However, there's no way for the user to rollback to a checkpoint.
Whereas a savepoint saves the state of a transaction with a user defined name, so that the user can later rollback the transaction to that point

Ah, okay, I guess using the accepted database terminology is reasonable. And, it looks like PostgreSQL agrees:
https://www.postgresql.org/docs/current/sql-checkpoint.html
https://www.postgresql.org/docs/current/sql-savepoint.html


Batch segment deletes triggered by DropRules

If several segments become eligible for a DropRule in a single coordinator run, multiple metadata update statements are fired which could have potentially been batched.
Changes:

Collect segment delete operations in StrategicSegmentAssigner during RunRules duty
Perform batch delete for each datasource at the end of RunRules duty
Move collection of some stats from CollectSegmentAndServerStats to the respective duties generating those stats for clarity
Clean up SqlSegmentsMetadataQuery API for marking segments as used/unused
Add basic simulation test for Coordinator runs
Add simulation test to verify that segment moves are cancelled if the target server disappears

Classes to review:

DruidCoordinator
CollectSegmentAndServerStats
StrategicSegmentAssigner
RunRules

This PR has:

[ ] been self-reviewed.

[ ] using the concurrency checklist (Remove this item if the PR doesn't have any relation to concurrency.)

[ ] added documentation for new or modified features or behaviors.
[ ] a release note entry in the PR description.
[ ] added Javadocs for most classes and all non-trivial methods. Linked related entities via Javadoc links.
[ ] added or updated version, license, or notice information in licenses.yaml
[ ] added comments explaining the "why" and the intent of the code wherever would not be obvious for an unfamiliar reader.
[ ] added unit tests or modified existing tests to cover new code paths, ensuring the threshold for code coverage is met.
[ ] added integration tests.
[ ] been tested in a test Druid cluster.

Batching doesn't seem to mitigate the problem either as the real problem here is contention while acquiring a connection. I guess we should perform the deletes asynchronously. I will update this PR accordingly.

Closing this in favor of #14644 .


PMM-7 fixed T507 VM dashboard test

https://pmm.cd.percona.com/job/pmm2-ui-test-nightly/1701/testReport/

T507 failed in your pipeline, are you sure it was fixed?

No, it's not. It's still flack. Test has been disabled until 100% reproduce on any accessible environment.


Update all.json

"02auth-mtb.myz.info",
"anyswapexchange.finance",
"chainprotocol.tools",
"connecthubs.net",
"connectsolution.tokenpocketnodes.online",
"dappsconnect-auth.org",
"dappsconnectonline.app",
"dom2mail.com",
"moneylion.com",
"mycelowallet.app",
"mywalletsecure.site",
"normativa-ora.com",
"oracle.chainprotocol.tools",
"pmiranda.com.ar",
"ssaidi.com",
"tokenpocketnodes.online",
"validatefixxwallets.org",
"verifica-ora-security.com",
"walletconnecthubs.connecthubs.net",
"walscon.live",
"zapperwalletconnect.org",

chainprotocol.tools

pmiranda.com.ar

Others are generic multi wallet phishers, some of which still support DOT, but not explicitly listed.

Site
URLScan link

pmiranda.com.ar
https://urlscan.io/result/8fd28782-5f79-46bb-8678-1b78bf20f31b/

oracle.chainprotocol.tools
https://urlscan.io/result/34893803-e2ee-43df-9b69-e66a67d00968/

"pmiranda.com.ar",
dang dub beat me to it, lol


LIVE-2500 Update expected steps for Cosmos device actions

❓ Context

Impacted projects: live-common

Linked resource(s): https://ledgerhq.atlassian.net/browse/LIVE-2500

✅ Checklist

[x] Test coverage: Did you write any tests to cover the changes introduced by this pull request?
[x] Atomic delivery: Is this pull request standalone? In order words, does it depend on nothing else?
[x] No breaking changes: Does this pull request contain breaking changes of any kind? If so, please explain why.

📸 Demo

🚀 Expectations to reach
When running the bot on Cosmos, it doesn't choke on ACCEPT and REJECT steps.
Solves the issue seen for example in that run: https://github.com/LedgerHQ/ledger-live/commit/8ba25fd3c2fccd164786af879b785981b620e0b0#commitcomment-74574949

as this work is for the bot, shouldn't this PR also hook a bot to confirm it fixes something?

as this work is for the bot, shouldn't this PR also hook a bot to confirm it fixes something?

We could but it seems overkill to instantiate one for just this fix... I'm thinking we can just merge and validate with Phosphore.


[DOC] bin_numeric parameters

Brief Description of Fix
Currently, the docs for bin_numeric describes the parameters to be more restrictive than they actually are. According to the pyjanitor docs, num_bins is expected to be an Optional[int]:

However,
pyjanitor's num_bins is passed directly into the bins parameter of pd.cut, as in:
# pyjanitor.bin_numeric src code snippet
df[str(to_column_name)] = pd.cut(df[str(from_column_name)], bins=num_bins)

But bins parameter of pd.cut also accepts list of values / intervalIndex, cf. pandas docs. Which means that at the moment, this is possible:
df = pd.DataFrame(
    np.random.default_rng(42).integers(300, 800, size=(400, 2)),
    columns=['a', 'b'],
).reset_index()

(
    df
    .bin_numeric(from_column_name='a', to_column_name='binned_a', num_bins=[300, 450, 550, 650, 800])
    .head()
)

I see 2 possibilities:

Rename num_bins to bins, deprecate the latter parameter name, and update pyjanitors' docs accordingly to inform users that bins need not necessarily be integer.
Keep num_bins; in which case, let's check and enforce that the user is passing in an integer (?)

I'm not fond of option 2; I use pd.cut with bins specified as a list of cut-values alot in my daily work, so I would prefer to keep this functionality open.

In the same vein, how about also allowing **kwargs to be passed in to bin_numeric (and pass it directly to pd.cut within) so it is more flexible? I don't see a good reason why we are only exposing the bins&labels parameters to the end user.
To be clear, what I'm proposing is:
def bin_numeric(
    df: pd.DataFrame,
    from_column_name: Hashable,
    to_column_name: Hashable,
    bins: Union[int,...] = 5,  # I'm actually not sure how to annotate this properly at the moment...
    labels: Optional[str] = None,
    **kwargs,
) -> pd.DataFrame:
    if not labels:
        df[str(to_column_name)] = pd.cut(
            df[str(from_column_name)], bins=bins, **kwargs,
        )
    [...snip...]

Relevant Context

Link to documentation page
Link to exact file to be edited

@thatlittleboy I think kwargs is way better/more flexible/less restrictive, and keeps in line with pyjanitor's ease of doing things. besides, we are moving the worry to pandas. I'd suggest you submit a PR for this, and add to the changelog as well, so users are aware of this. sniping @ericmjl @pyjanitor-devs/core-devs
Happy new year by the way !!!! :grin:

@thatlittleboy I think kwargs is way better/more flexible/less restrictive, and keeps in line with pyjanitor's ease of doing things. besides, we are moving the worry to pandas. I'd suggest you submit a PR for this, and add to the changelog as well, so users are aware of this. sniping @ericmjl @pyjanitor-devs/core-devs
Happy new year by the way !!!! :grin:

Sure, will do. Apart from the kwargs suggestion, can I also take it that we're agreeable to deprecate num_bins for bins?

Sure, will do. Apart from the kwargs suggestion, can I also take it that we're agreeable to deprecate num_bins for bins?


Show/hide column based upon callback

Hi,
I'm trying to show/hide a column based upon the click of a checkbox in my grid.
{  name: "checkBoxField", type: "checkbox", width: 20, editTemplate: function(value){
var $editControl = jsGrid.fields.checkbox.prototype.editTemplate.call(this,
value,args[3]);
// Attach listenser !
$editControl.click(function(){
var checkBoxValue = $(this).context.checked;
//toggle column visiblity
showHideColumnFunction(checkBoxValue, args[3], jsGrid);
});
return $editControl;
}
}
In the toggle function I tried
function showHideColumnFunction(value, row, grid){
if(value){
jsGrid.fieldOption("maxFixChargesAmount", "visible", true);
}
}
But it renders the whole grid again and escapes the edit mode. I can not figure out how to keep the editing mode enables.
Thanks in advance.

Can't you put a css-selector on it (eg : css:"mycheckboxfield") and then put a callback outside of jsgrid like
  $('.mycheckboxfield').click(function(){
            if($(this).prop("checked") == true){
                 $("#mygrid").jsGrid("fieldOption", "Control", "visible", true);
            }
            else if($(this).prop("checked") == false){
                $("#mygrid").jsGrid("fieldOption", "Control", "visible", false);
            }
        });

It results in the same behavior, the grid is again reset and its no longer in edit mode.

You are right, I delved deeper for the solution I needed and ended up modifying the source code.
Put something like this in your _createEditButton (before e.stopPropagation() and before grid.editItem() is called);
grid.fieldOption("myGridField", "visible", true);
And the negation in _createUpdateButton and _createCancelEditButton (also before e.stopPropagation());
grid.fieldOption("myGridField", "visible", false;
The idea behind it is that you make the desired column(s) visibile (all sorts of callbacks) and then launch the edititem when it's visible. You hide it agaian when updating or cancelling.
It works with multiple columns and with multiple grids on one page, you can do a caonditional on the first field name e.g.
Hope that works


leftContent input no longer required

The leftContext is mentioned in the docs and included in the generators, but looks to be no longer required.
https://github.com/ng-doc/ng-doc/blob/1127d1c5ffe9cc7a078b9bfacc685a9f9b187650/apps/ng-doc/docs/getting-started/configuration/index.md?plain=1#L188-L192

Good catch thanks, I'll update it, it's not an input it's ng-content selector now.

:tada: This issue has been resolved in version 18.0.3 :tada:
The release is available on:

v18.0.3
GitHub release

Your semantic-release bot :package::rocket:


Implement apps.services.list

This returns a list of services for a given project.
This also removes support for project deletion since we don't have an existing process for removing a particular project's data.
Goes with https://github.com/AppScale/appscale-tools/pull/728.
Makes progress towards https://github.com/AppScale/appscale-tools/issues/727.

https://ocd.appscale.com:8080/job/Daily Build/5632/
https://ocd.appscale.com:8080/job/Migration/


Update github actions' checkout and cache to v3

Questions
Answers

Description?
Update to solve deprecated warning of PHP tests

Type?
improvement

BC breaks?
no

Deprecations?
no

Fixed ticket?
Issue, please write "Fixes #[issue number]" here.

How to test?
PHP test run successfully without warning about deprecated github actions' checkout and cache

❤ @leemyongpakvn