SAP Gateway 批处理中的 ETag 并发控制,为什么 Change Set 要配合 Deferred Mode

📅 发布时间:2026/9/15 10:39:18
SAP Gateway 批处理中的 ETag 并发控制,为什么 Change Set 要配合 Deferred Mode
在 SAP Gateway Client 的/IWFND/GW_CLIENT里调试一个$batch请求时,有一种问题非常容易把排查方向带偏。单独发送UPDATE请求时,ETag校验完全正常,可是一旦把几个更新操作放进同一个Change Set,某个排在后面的更新却突然收到412 Precondition Failed。客户端明明刚刚读取过数据,携带的If-Match看上去也是最新的,为什么到了批处理里却变成了过期版本。问题并不一定出在客户端,也不一定是ETag生成逻辑有 Bug。真正需要观察的是Change Set中多个修改操作的执行时机。SAP Gateway 对ETag提供了通用的 conditional handling 支持。OData 借助 HTTP 的ETag实现 optimistic concurrency control,也就是乐观并发控制。客户端读取一个实体时,可以得到代表该资源当前版本的ETag。客户端执行PUT、MERGE或DELETE一类修改时,再通过If-Match把先前得到的ETag带回来。服务端发现当前资源版本已经变化,就可以拒绝这次修改,典型返回结果就是 HTTP412 Precondition F