Technoboy- opened a new pull request #1886:
URL: https://github.com/apache/incubator-shenyu/pull/1886
##Motivation
#1832 has involved a concurrent issue with below trace. The easy way to fix
is reverting.
```
07:14:45.276 [shenyu-upstream-health-check-request-4] INFO
org.apache.shenyu.common.healthcheck.HealthCheckTask - [Health Check] Selector
[null] upstream health check failed, server is offline.
07:14:45.320 [shenyu-upstream-health-check-3] ERROR
org.apache.shenyu.common.healthcheck.HealthCheckTask - [Health Check] Meet
problem:
java.util.ConcurrentModificationException: null
at java.util.ArrayList.forEach(ArrayList.java:1262)
at
org.apache.shenyu.common.healthcheck.HealthCheckTask.lambda$check$3(HealthCheckTask.java:144)
at
java.util.concurrent.ConcurrentHashMap.forEach(ConcurrentHashMap.java:1597)
at
org.apache.shenyu.common.healthcheck.HealthCheckTask.check(HealthCheckTask.java:144)
at
org.apache.shenyu.common.healthcheck.HealthCheckTask.doHealthCheck(HealthCheckTask.java:139)
at
org.apache.shenyu.common.healthcheck.HealthCheckTask.healthCheck(HealthCheckTask.java:127)
at
org.apache.shenyu.common.healthcheck.HealthCheckTask.run(HealthCheckTask.java:118)
at
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
at
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
07:14:46.266 [shenyu-upstream-health-check-request-4] INFO
org.apache.shenyu.common.healthcheck.HealthCheckTask - [Health Check] Selector
[null] upstream http://www.baidu.com health check passed, server is back online.
07:14:47.300 [main] INFO
org.apache.shenyu.common.healthcheck.HealthCheckTask - [Health Check] Selector
[null] all upstream as removed.
07:14:47.302 [main] INFO
org.apache.shenyu.common.healthcheck.HealthCheckTask - [Health Check] Selector
[null] all upstream as removed.
07:14:47.304 [main] INFO
org.apache.shenyu.common.healthcheck.HealthCheckTask - [Health Check] Selector
[null] upstream null was removed.
07:14:47.306 [main] INFO
org.apache.shenyu.common.healthcheck.HealthCheckTask - [Health Check] Selector
[null] upstream null was removed.
Error: Tests run: 3, Failures: 1, Errors: 0, Skipped: 0, Time elapsed:
6.653 s <<< FAILURE! - in
org.apache.shenyu.common.healthcheck.HealthCheckTaskTest
Error: org.apache.shenyu.common.healthcheck.HealthCheckTaskTest.testRun
Time elapsed: 6.37 s <<< FAILURE!
java.lang.AssertionError
at
org.apache.shenyu.common.healthcheck.HealthCheckTaskTest.testRun(HealthCheckTaskTest.java:91)
```
But this class have some defects that not support concurrent event though
it's using synchronized in some snippets.
Current defects:
If healthCheck invoked by ScheduledThreadPoolExecutor, this will block other
thread to do triggerRemoveOne/triggerAddOne.
And it's not support shutdown gracefully.
Shenyu is a gateway project which async and latency is sensitive to user.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]