随笔 - 936  文章 - 0  评论 - 3  阅读 - 30万

开发记录:国标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
		}

	}

修改代码后,再次删除的时候点击页面程序,则不会出现崩溃情况,角色也能够顺利删除。

posted on   EasyGBS  阅读(114)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示