开发记录:国标GB28181协议EasyGBS角色管理多次删除导致程序崩溃情况
我们对国标GB28181流媒体服务器EasyGBS做了新版调整,这段时间一直在进行测试。本栏目是对国标EasyGBS的开发过程中遇到的问题的记录。
开发记录:EasyGBS角色管理多次删除导致程序崩溃
EasyGBS新增了角色管理功能,管理员能够新建角色,同时也能够删除角色,每个角色都可以配置自己的设备。近期测试发现EasyGBS的角色删除功能偶尔报:当该角色下面有用户的时候,点击次数超过10次之后,程序会突然崩溃。
问题复现
首先我们新建角色Test01,并给新建的用户赋予他Test01的角色
在角色管理就能看到建立的此角色,随后我们点击删除角色,
此时整个页面刷新的时候都不能响应,程序在这时崩溃了。
问题分析
经过排查分析,是由于删除角色的时候开启了事务,但是再删除失败的时候事务没有释放。
tx := dbclient.Begin()
for _, v := range roleid_arr {
if v == adminRoleModer.ID {
c.IndentedJSON(400, "没有权限操作")
return
}
var tempcount = 0
dbclient.Where("rid = ?", v).First(&models.UserRole{}).Count(&tempcount)
if tempcount > 0 {
c.IndentedJSON(400, "该角色下面有用户")
return
}
}
问题解决
在失败的时候添加事务回滚tx.Rollback(),参考代码如下:
tx := dbclient.Begin()
for _, v := range roleid_arr {
if v == adminRoleModer.ID {
tx.Rollback()
c.IndentedJSON(400, "没有权限操作")
return
}
var tempcount = 0
dbclient.Where("rid = ?", v).First(&models.UserRole{}).Count(&tempcount)
if tempcount > 0 {
tx.Rollback()
c.IndentedJSON(400, "该角色下面有用户")
return
}
}
修改代码后,再次删除的时候点击页面程序,则不会出现崩溃情况,角色也能够顺利删除。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结