Sentinel/sentinel-extension
ZhangYan 9db0c70cbb Fix thread-blocked problem of EtcdDataSource (#2991)
* fix thread blocked problem of etcd watcher

in the previous version of EtcdDataSource, when the flowRules defined in the etcd change and trigger etcd watcher, there will be a following error:
2022-12-07 14:36:03.592 [vertx-blocked-thread-checker] WARN io.vertx.core.impl.BlockedThreadChecker [?:?] -  Thread Thread[vert.x-eventloop-thread-0,5,main] has been blocked for 2336 ms, time limit is 2000 ms
2022-12-07 14:36:04.592 [vertx-blocked-thread-checker] WARN io.vertx.core.impl.BlockedThreadChecker [?:?] -  Thread Thread[vert.x-eventloop-thread-0,5,main] has been blocked for 3337 ms, time limit is 2000 ms
2022-12-07 14:36:05.592 [vertx-blocked-thread-checker] WARN io.vertx.core.impl.BlockedThreadChecker [?:?] -  Thread Thread[vert.x-eventloop-thread-0,5,main] has been blocked for 4337 ms, time limit is 2000 ms
2022-12-07 14:36:06.595 [vertx-blocked-thread-checker] WARN io.vertx.core.impl.BlockedThreadChecker [?:?] -  Thread Thread[vert.x-eventloop-thread-0,5,main] has been blocked for 5337 ms, time limit is 2000 ms
io.vertx.core.VertxException: Thread blocked
 at sun.misc.Unsafe.park(Native Method)
 at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
 at java.util.concurrent.CompletableFuture$Signaller.block(CompletableFuture.java:1707)
 at java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3334)
 at java.util.concurrent.CompletableFuture.waitingGet(CompletableFuture.java:1742)
 at java.util.concurrent.CompletableFuture.get(CompletableFuture.java:1908)
 at com.htsc.fst.saas.infrastructure.component.EtcdDataSource.readSource(EtcdDataSource.java:92)
 at com.htsc.fst.saas.infrastructure.component.EtcdDataSource.readSource(EtcdDataSource.java:23)
 at com.alibaba.csp.sentinel.datasource.AbstractDataSource.loadConfig(AbstractDataSource.java:44)
 at com.htsc.fst.saas.infrastructure.component.EtcdDataSource.lambda$initWatcher$0(EtcdDataSource.java:74)
 at com.htsc.fst.saas.infrastructure.component.EtcdDataSource$$Lambda$480/1375681611.accept(Unknown Source)
 at io.etcd.jetcd.Watch$1.onNext(Watch.java:183)
 at io.etcd.jetcd.impl.WatchImpl$WatcherImpl.onNext(WatchImpl.java:310)
 at io.etcd.jetcd.impl.WatchImpl$WatcherImpl$$Lambda$488/2088661957.handle(Unknown Source

I guess the reason is : when the watcher hold etcd Client, you can't use etcd Client in the Watch's consumer function. 
Besides the problem above, use getKeyValue() in the watchEvent can reduce once invoke with etcd server to getting the latest flowRules :)

* Update EtcdDataSource.java

Add charset adaptation -- accept the suggestion from @LProDreamAll
2023-12-27 20:40:26 +08:00
..
sentinel-annotation-aspectj Bump version to 1.8.6 2022-10-25 16:57:18 +08:00
sentinel-annotation-cdi-interceptor Bump version to 1.8.6 2022-10-25 16:57:18 +08:00
sentinel-datasource-apollo Bump version to 1.8.6 2022-10-25 16:57:18 +08:00
sentinel-datasource-consul Bump version to 1.8.6 2022-10-25 16:57:18 +08:00
sentinel-datasource-etcd Fix thread-blocked problem of EtcdDataSource (#2991) 2023-12-27 20:40:26 +08:00
sentinel-datasource-eureka Bump version to 1.8.6 2022-10-25 16:57:18 +08:00
sentinel-datasource-extension Bump version to 1.8.6 2022-10-25 16:57:18 +08:00
sentinel-datasource-nacos Bump version to 1.8.6 2022-10-25 16:57:18 +08:00
sentinel-datasource-redis Bump version to 1.8.6 2022-10-25 16:57:18 +08:00
sentinel-datasource-spring-cloud-config Bump version to 1.8.6 2022-10-25 16:57:18 +08:00
sentinel-datasource-zookeeper Bump version to 1.8.6 2022-10-25 16:57:18 +08:00
sentinel-metric-exporter Fix the bug that error occurs in JMX metrics exporter when resource name contains '*' (#2992) 2023-12-27 20:40:26 +08:00
sentinel-parameter-flow-control Bump version to 1.8.6 2022-10-25 16:57:18 +08:00
README.md Update documents 2018-08-07 19:43:32 +08:00
pom.xml Bump version to 1.8.6 2022-10-25 16:57:18 +08:00

README.md

Sentinel Extension

Sentinel extension modules provide additional extension points and functions.