Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
apache
Shardingsphere
提交
78c4d4b4
Shardingsphere
项目概览
apache
/
Shardingsphere
通知
56
Star
3
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Shardingsphere
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
78c4d4b4
编写于
11月 17, 2020
作者:
T
terrymanu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Integrate circuit break state switch with proxy
上级
89cc0a08
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
24 addition
and
0 deletion
+24
-0
shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/state/impl/CircuitBreakProxyState.java
...ere/proxy/frontend/state/impl/CircuitBreakProxyState.java
+24
-0
未找到文件。
shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/state/impl/CircuitBreakProxyState.java
浏览文件 @
78c4d4b4
...
...
@@ -17,12 +17,17 @@
package
org.apache.shardingsphere.proxy.frontend.state.impl
;
import
com.google.common.eventbus.Subscribe
;
import
io.netty.channel.ChannelHandlerContext
;
import
org.apache.shardingsphere.db.protocol.packet.DatabasePacket
;
import
org.apache.shardingsphere.governance.core.event.GovernanceEventBus
;
import
org.apache.shardingsphere.governance.core.registry.event.CircuitStateChangedEvent
;
import
org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection
;
import
org.apache.shardingsphere.proxy.backend.exception.CircuitBreakException
;
import
org.apache.shardingsphere.proxy.frontend.spi.DatabaseProtocolFrontendEngine
;
import
org.apache.shardingsphere.proxy.frontend.state.ProxyState
;
import
org.apache.shardingsphere.proxy.frontend.state.ProxyStateMachine
;
import
org.apache.shardingsphere.proxy.frontend.state.ProxyStateType
;
import
java.util.Optional
;
...
...
@@ -31,10 +36,29 @@ import java.util.Optional;
*/
public
final
class
CircuitBreakProxyState
implements
ProxyState
{
public
CircuitBreakProxyState
()
{
GovernanceEventBus
.
getInstance
().
register
(
this
);
}
@Override
public
void
execute
(
final
ChannelHandlerContext
context
,
final
Object
message
,
final
DatabaseProtocolFrontendEngine
databaseProtocolFrontendEngine
,
final
BackendConnection
backendConnection
)
{
context
.
writeAndFlush
(
databaseProtocolFrontendEngine
.
getCommandExecuteEngine
().
getErrorPacket
(
new
CircuitBreakException
()));
Optional
<
DatabasePacket
<?>>
databasePacket
=
databaseProtocolFrontendEngine
.
getCommandExecuteEngine
().
getOtherPacket
();
databasePacket
.
ifPresent
(
context:
:
writeAndFlush
);
}
/**
* Renew circuit breaker state.
*
* @param event circuit state changed event
*/
@Subscribe
public
synchronized
void
renew
(
final
CircuitStateChangedEvent
event
)
{
if
(
event
.
isCircuitBreak
())
{
ProxyStateMachine
.
switchState
(
ProxyStateType
.
CIRCUIT_BREAK
);
}
else
{
// TODO check previous state, maybe lock
ProxyStateMachine
.
switchState
(
ProxyStateType
.
OK
);
}
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录