You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Alfresco Content Services:通过CMIS并发创建新版本时出现“Node does not exist”错误

Alfresco Content Services:通过CMIS并发创建新版本时出现“Node does not exist”错误

最近我在把Alfresco从5.0.d版本升级到25.1版本,升级路径走的是5.0 -> 5.2 -> 7.4 -> 25.1,底层用的是MariaDB 10.5。整体升级过程大多比较顺利,没遇到太多麻烦,但碰到了一个奇怪的问题。

我有一个基于CMIS的脚本,负责维护1000多个文件的更新——脚本会逐个处理文件,先通过CMIS查询在Alfresco里找到对应的现有文件,然后通过签出(check-out)、签入(check-in)的流程上传新版本。这个脚本在旧版本Alfresco上运行得非常稳定,但升级到25.1之后,只要并发运行这个脚本,就时不时会抛出“Node does not exist”的错误,换成单线程运行就完全没问题。

针对这个问题,我排查了几个方向,整理了一些可行的思路和解决方案:

  • 检查Alfresco节点缓存同步:新版本Alfresco的缓存策略可能做了调整,并发场景下,脚本通过CMIS查询到节点后,可能其他线程的操作已经修改了节点状态(比如完成了签入/签出),但缓存还没同步,导致后续操作找不到节点。可以在CMIS查询获取节点后,手动调用节点的refresh()方法,确保拿到的是最新的节点状态。
  • 调整数据库事务隔离级别:MariaDB 10.5默认的事务隔离级别是REPEATABLE READ,在高并发场景下可能会导致不同线程看到的节点数据不一致。可以尝试修改Alfresco的数据库连接配置,将事务隔离级别设置为READ COMMITTED,让每个线程都能看到最新提交的节点状态。
  • 强化CMIS操作的原子性:把签出、上传新版本、签入的流程封装成一个原子操作,避免中间步骤被其他线程干扰。比如在签出节点后,立即通过CMIS的锁定机制给节点加锁,完成签入操作后再释放锁定,确保同一时间只有一个线程在操作该节点。
  • 查看Alfresco详细日志:开启DEBUG级别的Alfresco日志,重点关注节点操作相关的日志条目。当出现“Node does not exist”错误时,核对报错的节点ID在MariaDB数据库中是否真实存在,同时查看当时是否有其他线程对该节点执行了删除、移动等操作。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 12:50:29