You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
46 lines
1.3 KiB
46 lines
1.3 KiB
How to submit a content
|
|
1. Find physical volumes
|
|
1.c Create a hash value
|
|
1.d find a write logic volume id, and return [logic volume id, {physical volume ids}]
|
|
2. submit to physical volumes
|
|
2.c
|
|
generate the cookie
|
|
generate a unique id as key
|
|
choose the right altKey
|
|
send bytes to physical volumes
|
|
2.s each
|
|
save bytes
|
|
store map[key uint64, altKey uint32]<offset, size>
|
|
for updated entry, set old entry's offset to zero
|
|
3.c
|
|
wait for all physical volumes to finish
|
|
store the /<logic volume id>/<key>_<cookie>_<altKey>.<ext>
|
|
|
|
How to retrieve a content
|
|
1.c
|
|
send logic volume id
|
|
1.d
|
|
find least busy volume's id
|
|
2.c
|
|
send URI /<physical volume id>/<key>_<cookie>_<altKey>.<ext>
|
|
|
|
|
|
How to submit a content
|
|
1. send bytes to SeaweedFS, got <volume id, key uint64, cookie code>
|
|
store <key uint64, volume id uint32, cookie code uint32, ext>, and other information
|
|
|
|
To read a content
|
|
2. use logic volume id to lookup a <machine id>
|
|
render url as /<machine id>/<volume id>/<key>/<cookie>.ext
|
|
|
|
The directory server
|
|
0.init
|
|
load and collect <logic volume id, machine ids> mapping
|
|
1.on submit content
|
|
find a free logic volume id, start sending content to 3 machines
|
|
if all of them finishes, return <logic volume id, key, cookie code>
|
|
2.on read content
|
|
based on logic volume id, pick a machine with less load,
|
|
return <machine id>
|
|
|
|
|