当前位置: 首页 > news >正文

分布式事务Seata使用不当引发的全局锁问题

报错信息

2025-08-12T19:36:27.803+08:00 ERROR 1 --- [xxx-inference] [io-32123-exec-7] o.a.s.r.d.exec.AbstractDMLBaseExecutor : execute executeAutoCommitTrue error:Global lock wait timeout org.apache.seata.rm.datasource.exec.LockWaitTimeoutException: Global lock wait timeout at org.apache.seata.rm.datasource.exec.LockRetryController.sleep(LockRetryController.java:66) ~[seata-all-2.1.0.jar!/:2.1.0] at org.apache.seata.rm.datasource.ConnectionProxy$LockRetryPolicy.doRetryOnLockConflict(ConnectionProxy.java:364) ~[seata-all-2.1.0.jar!/:2.1.0] at org.apache.seata.rm.datasource.exec.AbstractDMLBaseExecutor$LockRetryPolicy.execute(AbstractDMLBaseExecutor.java:188) ~[seata-all-2.1.0.jar!/:2.1.0]

错误代码示例

@GlobalTransactional
public void deletePod(PodBo podBo) {KubernetesClient kubernetesClient = k8SClientMgr.getConnect("", true);ModelServiceEntity modelServiceEntity = modelServiceMapper.selectById(podBo.getServiceId());if (modelServiceEntity == null) {throw new RuntimeException("模型服务不存在");}if (podBo.getServiceId() != null) {UpdateWrapper<ModelServiceEntity> updateWrapper = new UpdateWrapper<>();updateWrapper.eq("id", podBo.getServiceId());updateWrapper.set("status", 1);modelServiceMapper.update(null, updateWrapper);// 远程调用删除任务inferenceTaskApi.deleteInferenceTask(Arrays.asList(modelServiceEntity.getInferenceTaskId().split(",")));}ResourceDefinitionContext context = new ResourceDefinitionContext.Builder().withGroup("kubeai.org").withVersion("v1").withPlural("models").withKind("Model").withNamespaced(true).build();// 删除 CRD 资源kubernetesClient.genericKubernetesResources(context).inNamespace(namespace).withName(podBo.getName().toLowerCase()).delete();
}

问题分析

// 这里查询了model_service表,seata会对model_service表进行加锁
ModelServiceEntity modelServiceEntity = modelServiceMapper.selectById(podBo.getServiceId());// 这里又进行了修改操作,由于前面已经加锁了,导致这里无法执行成功,进而超时
modelServiceMapper.update(null, updateWrapper);

问题解决

查询逻辑和更新逻辑不在一个事务里执行即可

public void deletePod(PodBo podBo) {KubernetesClient kubernetesClient = k8SClientMgr.getConnect("", true);ModelServiceEntity modelServiceEntity = modelServiceMapper.selectById(podBo.getServiceId());if (modelServiceEntity == null) {throw new RuntimeException("模型服务不存在");}deleteResource(kubernetesClient, podBo, modelServiceEntity);
}@GlobalTransactional
public void deleteResource(KubernetesClient kubernetesClient, PodBo podBo, ModelServiceEntity modelServiceEntity) {if (podBo.getServiceId() != null) {UpdateWrapper<ModelServiceEntity> updateWrapper = new UpdateWrapper<>();updateWrapper.eq("id", podBo.getServiceId());updateWrapper.set("status", 1);modelServiceMapper.update(null, updateWrapper);// 远程调用删除任务inferenceTaskApi.deleteInferenceTask(Arrays.asList(modelServiceEntity.getInferenceTaskId().split(",")));}ResourceDefinitionContext context = new ResourceDefinitionContext.Builder().withGroup("kubeai.org").withVersion("v1").withPlural("models").withKind("Model").withNamespaced(true).build();// 删除 CRD 资源kubernetesClient.genericKubernetesResources(context).inNamespace(namespace).withName(podBo.getName().toLowerCase()).delete();
}

http://www.dtcms.com/a/327438.html

相关文章:

  • 解锁Java线程池:从原理到实战的深度剖析
  • 无人机三维路径规划
  • 前端基础知识NodeJS系列 - 06( Node 中的 Stream 的理解?应用场景?)
  • 如何实现PostgreSQL的高可用性,包括主流的复制方案、负载均衡方法以及故障转移流程?
  • TensorBoard的使用 小土堆pytorch记录
  • 数据类型 list
  • 小白挑战一周上架元服务——ArkUI04
  • 前端最新Vue2+Vue3基础入门到实战项目全套教程,自学前端vue就选黑马程序员,一套全通关!笔记
  • Java面试宝典:G1垃圾收集器上
  • 超详细!VMware12 安装win7操作系统
  • react+vite来优化下每次使用hook函数都要引入的情况
  • Neo4j Cypher
  • 哪个视频播放器好用?视频播放器PotPlayer下载安装与调教教程
  • QGraphicsAnchorLayout测试pyside6和C++
  • 微内核与插件化设计思想及其在前端项目中的应用
  • 怎么写好汉语言文学专业的论文?
  • TongSearch3.0.6.0安装和使用指引(by lqw)
  • Day 38: Dataset类和DataLoader类
  • 三点估算法(Three-Point Estimation)
  • OpenHarmony介绍
  • 知识篇 | Oracle Active Data Guard(ADG)同步机制再学习
  • TCP服务器网络编程设计流程详解
  • 车规级霍尔开关芯片SC25891 | 为汽车安全带扣筑起高可靠性安全防线
  • FileLink:为企业跨网文件传输筑牢安全与效率基石
  • Go 语言中的结构体、切片与映射:构建高效数据模型的基石
  • apache+虚拟主机
  • windows git安装步骤
  • 深入剖析 React 合成事件:透过 onClick 看本质
  • Flutter UI Kits by Olayemi Garuba:免费开源的高质量UI组件库
  • C++中template、 implicit 、explicit关键字详解