alibaba / Sentinel

A powerful flow control component enabling reliability, resilience and monitoring for microservices. (面向云原生微服务的高可用流控防护组件)
https://sentinelguard.io/
Apache License 2.0
22.32k stars 8k forks source link

[BUG] 系统自适应限流 调用 SystemBlockException 构造方法 并抛出时 未初始化父类 BlockException 的成员变量 AbstractRule 导致捕获异常使用 EagleEyeLogUtil.log 记录日志时触发 空指针异常 #3255

Open intjfyl opened 10 months ago

intjfyl commented 10 months ago

Issue Description

Type: bug report

Describe what happened

系统自适应限流 调用 SystemBlockException 构造方法 并抛出时 未初始化父类 BlockException 的成员变量 AbstractRule 导致捕获异常使用 EagleEyeLogUtil.log 记录日志时触发 空指针异常。 上述空指针异常 “掩盖” 了 抛出的 SystemBlockException,导致即使触发系统自适应保护,请求仍会发送到后台的接口。

Describe what you expected to happen

触发系统自适应保护后,正常抛出并记录异常,后台接口接收不到请求。

How to reproduce it (as minimally and precisely as possible)

  1. 使用 1.8.6 版本的 sentinel 依赖
  2. 配置系统自适应保护规则
  3. 触发配置的规则,使代码抛出 SystemBlockException 异常
  4. 在 com.alibaba.csp.sentinel.slots.system.SystemRuleManager#checkSystem 处打断点,逐步调试观察异常抛出和处理逻辑
  5. com.alibaba.csp.sentinel.slots.logger.LogSlot#entry 处 观测到空指针异常产生

image

Tell us your environment

msly commented 9 months ago

https://github.com/alibaba/Sentinel/pull/2853 引入的bug @sczyh30

xixihaha520389 commented 8 months ago

哈哈,刚刚也发现了