aboutsummaryrefslogtreecommitdiff
path: root/note/weedfs.txt
diff options
context:
space:
mode:
Diffstat (limited to 'note/weedfs.txt')
-rw-r--r--note/weedfs.txt46
1 files changed, 46 insertions, 0 deletions
diff --git a/note/weedfs.txt b/note/weedfs.txt
new file mode 100644
index 000000000..d07ad9484
--- /dev/null
+++ b/note/weedfs.txt
@@ -0,0 +1,46 @@
+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 weedfs, 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>
+
+