小文件写:
来源:互联网 发布:淘宝装修比较好的店铺 编辑:程序博客网 时间:2024/05/21 10:17
小文件写:HttpSM::set_next_stateHttpSM::do_cache_prepare_writeHttpSM::do_cache_prepare_actionHttpCacheSM::open_write1. CacheProcessor::open_write 2. Cache::open_write //new_CacheVC3. CacheVC::callcont4. CacheVC::openWriteMain5. CacheVC::calluser6. CacheVC::die7. CacheVC::openWriteClose8. CacheVC::openWriteCloseHead9. CacheVC::updateVector10. CacheVC::do_write_call11. CacheVC::handleWrite //Vol::aggWrite12. CacheVC::openWriteCloseHeadDone //dir_insert, use first_key for object13. CacheVC::openWriteCloseDir 14. free_CacheVC ts源代码中各个模块的设计都是Processor+Continuation+EventSystem机制。cache层提供给其他模块的外部接口为CacheProcessor,而内部接口,则为类CacheVC。Cache::open_write通过Cache::key_to_vol方法确定使用哪一个Vol存储要写入的object,同时生成一个负责写操作流程的CacheVC对象,并通过回调函数callcont提示上层Continuation写操作已经准备好了,这时上层Continuation调用CacheVC的openWriteMain函数,由此写操作开始。这里要解释一下Vol这个数据结构。在第一章说过,用户通过storage.config文件配置存储空间,ts对每一个存储空间根据disk layout进行格式化操作,并最终以一个Vol表示这个空间。举例来说,用户在storage.config中配置了三个裸设备,同时没有配置volume.config文件的情况下,则一个裸设备对应一个Vol。总之,一个Vol对应一个实际划分好的存储空间。Vol维护一个写队列,它是一个CacheVC的list,当Vol调用aggWrite时,则从该list中取出CacheVC并通过函数agg_copy将要写的内容拷入一个buffer中,最后将该buffer一次性写入cache。这个buffer称为agg buffer。openWriteMain读取上层Continuation要写入cache的object的body内容。对于小文件,openWriteMain会通过回调函数calluser提示上层Continuation直到整个内容读取完毕为止。这时,上层Continuation对CacheVC调用do_io_close操作,进入die函数,并进一步进入openWriteClose函数体。openWriteClose函数通过CacheVC提供的很多位状态信息,判断这是一个小文件,从而进一步调用openWriteCloseHead函数。openWriteCloseHead函数调用updateVector函数确定是否需要更新head内容,并最终调用do_write_call进入handleWrite,执行最后的写cache操作。handleWrite将CacheVC自己加入到Vol的写cache队列中,并判断Vol当前是否正在进行写cache,如果没有,则立即命令Vol进行cache写,并进入openWriteCloseHeadDone,通过宏dir_insert,使用first_key找到索引区中对应的未使用的索引,并将相关元信息如object在磁盘上的offset等保存到该索引中。最后,CacheVC进入openWriteCloseDir函数,对于正常流程来说,这时候执行free_CacheVC释放CacheVC的内存空间,整个写操作完成。而在CacheVC命令Vol进行cache写后,Vol进入aggWrite流程,它通过将写cache任务分派给一个aio线程(aio模块),执行异步写。
62K小文件写:CacheProcessor::open_writeCache::open_writeCacheVC::callcontCacheVC::openWriteMainCacheVC::calluserCacheVC::openWriteMainCacheVC::calluserCacheVC::openWriteMainCacheVC::calluserCacheVC::dieCacheVC::openWriteCloseCacheVC::openWriteCloseHeadCacheVC::updateVectorCacheVC::do_write_callCacheVC::handleWriteCacheVC::openWriteCloseHeadDoneCacheVC::openWriteCloseDir
阅读全文
0 0
- 小文件写:
- 写文件的小问题
- 读文件和写文件小例子
- 文件后面续写的小问题
- 写的一个小的文件加密
- Asp.NET(asp)写文件的一个小实例程序。
- 写的一个删除文件的小例子
- IOS写文件时需要注意得小地方
- Python写的一个收集文件的小程序
- winform写的搜索文件目录小程序
- 自己写了一个flume小文件合并脚本,解决hdfs小文件过多问题
- python spark中parquet文件写到hdfs,同时避免太多的小文件(block小文件合并)
- 使用文件流写Xml文件时得到的一个小经验
- 使用文件流写Xml文件时得到的一个小经验 .
- Python文件操作小练习之写替换文件里的个别字符(保存到新文件/当前文件)
- 写文件
- 写文件
- 写文件
- JAVA-16.2-生产消费者模式
- android TV 开发 (一) 准备开发电视应用
- java消息摘要算法加密
- Android用小米5调试出现Installation failed with message Failed to establish session问题
- java 接口回调
- 小文件写:
- Maven项目没有Project Facets的解决方法
- Python 异常处理
- 000030:创建等价于if...else的三元运算符
- HashMap和ConcurrentHashMap浅析
- oracle 函数(function) NANVL的扩展,语法笔记
- 质因数分解 和 判断是否为质数
- C++构造函数中初始化成员的先后顺序
- composer安装yii advanced token的获取办法