apache mod_dav框架的dav_hooks_propdb结构真的烂透了

apache的mod dav框架,其他说来还行,但是对于dead properties的dav_hooks_propdb结构真的烂透了。摘取做更新、删除操作的几个hook函数:

dav_error * remove(...)

dav_error * store(...)

dav_error * get_rollback(...)

dav_error * apply_rollback(...)

看看它框架的处理流程(对应PropPatch请求):

-->对于客户端请求的所有待remove/update的属性

     调用get_rollback(...)获取rollback结构,以便有失败调用做回滚

     对于remove的属性,调用remove(...)函数

     对于update的属性,调用store(...)函数

     如果失败,结束循环,进入回滚流程

<--结束

-->回滚流程

遍历所有已执行store/remove的请求,逐个调用apply_rollback(...)回滚。

<<--结束

dav协议规定,对于PropPatch更新/删除属性的操作,必须保证完整性,全部成功或者全部失败。

对于每个属性的更新或者删除逐个调用store或者remove,这没什么问题。

以update为例,但是它的框架就要求了,每次更新都必须真正的写入,如果失败再写入原值。很简单,它没有commit(...)函数。

试想假设后台是文件系统,对10个属性的更新就要堆文件执行10次写入操作,如果第3次失败,那么还要把前面两次的值再分别写回去。如果更新时文件写入失败了,怎么能保证回滚写入的时候成功呢,这个时候该怎么办?!

如果后台是一个服务,那岂不是更蛋疼!

这是哪个垃圾设计的垃圾框架!!!

正常的设计应该是:

dav_error * remove(...)

dav_error * store(...)

dav_error * commit(...)

dav_error * apply_rollback(...)

如果更新失败了,直接调用commit回滚。

在store中程序可以缓存住这些属性,在commit中直接提交就好了。结构简单,而且效率更高。apply_rollback都不需要实现。

本来可以在其db close时做最后的补救,可是框架中不对close做任何检查。无语!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值