Server Store
2017-01-20 06:30:13 0 举报
AI智能生成
Store,一个充满各种商品和服务的场所。在这里,你可以找到从日常生活用品到奢侈品的各种物品。商店通常有各种各样的货架和柜台,上面摆满了各种商品。在商店里,你可以找到衣服、鞋子、化妆品、电子产品、食品等等。此外,商店还提供各种服务,如理发、修鞋、修理电器等。有些商店还设有餐厅或咖啡厅,供顾客在购物之余休息和用餐。总之,商店是一个为人们提供方便和满足需求的场所。
作者其他创作
大纲/内容
接口
admin
/probe,探测
Server::probe
/bulk_volume
Server::bulkVolume
/compact_volume,compact
Server::compactVolume
/add_volume,从free volume中选出一个上线
Server::addVolume
http method不是POST返回错误
提取参数vid,作为当前volume唯一id
Store::AddVolume
判断当前Volumes中是否存在vid对应Volume,存在返回错误
Store::freeVolume,从Free Volume中取出一个可用的Volume
Store::addVolume,在Store的Volumes上追加Volume
Store::saveVolumeIndex,将上线的Volume写入到Store的元数据中
Store::Zookeeper::AddVolume
Zookeeper::volumePath,通过vid得到zk上路径参数
/zone/rank-A/store-A
Create创建相应节点&写入Volume数据
/tmp/block_1,/tmp/block_1.idx,1,图片文件、索引路径,Volume的id
/add_free_volume,在磁盘上增加一个volume
Server::addFreeVolume
http method不是POST返回错误
提取bdir,idir参数,bdir存储图片文件数据,idir存储图片索引文件数据,n代表几个volume
Store::AddFreeVolume
生成图片数据文件和索引文件名,bfile, ifile
newVolume,创建一个Free Volume
新创建的Free Volume追加到Store的FreeVolumes上
Store::saveFreeVolumeIndex,将新创建好的Free Volume元信息存储到Store的元数据中
api
/get,下载
Server.get
http method不是HEAD或GET返回错误
提取参数vid、key、cookie
从Store的Volumes中根据vid查找到Volume
Volume::Read,根据key和cookie字段
从Volume的needles中查找key对应的needle cache
needle.NewReader,用key和needle cache初始化一个Needle
Volume::read,读取数据到Needle中
SuperBlock::ReadAt,Volume的Block组件
Needle的Offset转换成文件的Offset
文件调用ReadAt,将读取的到的数据文件存储到Needle的Buffer中
Needle::Parse
判断Needle读出来的Key、TotalSize是否匹配
判断Needle的Flag是否等于needle.FlagDel ,等于的话在Volume的needles设置标记
验证cookie和Needle的Cookie是否匹配
将读取出来的Needle的数据写入到http回复包中
/upload,上传
Server::upload
/uploads,批量上传
Server::uploads
/del,删除
Server::del
组件
Store
Volumes,在线的Volume
SuperBlock
needles,Needle缓存,key是图片唯一id,value是在文件中的偏移,8字节对齐
Indexer
FreeVolumes,已分配的Volume
Stat Server
Admin Server
API Server
NewStore
连接ZK集群
打开Volume的元数据文件,加载里面的Volume选项,包括data、index目录、id这三项
打开Free Volume的元数据文件,加载里面的Volume选项,包括data、index目录、id这三项
Store::init
Store::parseFreeVolumeIndex,解析Free Volume元数据文件
全部读取出来,按照换行符分割
Store::parseIndex,解析行数据格式
newVolume,用id,bfile,ifile创建新的Volume
创建needles,缓存Needle的Offset
NewSuperBlock,创建SuperBlock,对图片数据读写操作
打开Block文件,一个用来写,一个用来读
SuperBlock::init
判断文件大小是否为0
大小为0
Fallocate,预分配4GB大小
SuperBlock::writeMeta
写入magic、ver、padding
大小不为0
SuperBlock::parseMeta
读取magic、ver、padding
写指针指向头部
NewIndexer,创建Indexer,对图片索引管理
NewRing,创建循环数组
判断Indexer文件大小
大小为0
Fallocate,预分配100M大小
大小不为0
子主题
创建协程,Indexer::merge
Volume::init
Indexer.Recovery
读取index文件,解析成Index
key对应的Offset保存到needles
SuperBlock.Recovery
从Indexer恢复的最后位置开始,读取Block文件并解析为Needle
key对应的Offset保存到needles
FreeVolumes append新的Volume
Store::parseVolumeIndex,解析Volume元数据文件
0 条评论
下一页