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]


Reply via email to