source: trunk/docs/frontends/download-status.rst

Last change on this file was 82579ce, checked in by Zooko Wilcox-O'Hearn <zooko@…>, at 2013-11-08T21:08:05Z

magic first line tells emacs to use utf8+bom

Add ".. -*- coding: utf-8-with-signature -*-" to the first line of each .rst
file. This tells emacs to treat the file contents as utf-8, and also to prepend
a so-called utf-8 "bom" marker at the beginning of the file. This patch also
prepends those markers to each of those files.

  • Property mode set to 100644
File size: 5.2 KB
Line 
1.. -*- coding: utf-8-with-signature -*-
2
3===============
4Download status
5===============
6
7
8Introduction
9============
10
11The WUI will display the "status" of uploads and downloads.
12
13The Welcome Page has a link entitled "Recent Uploads and Downloads"
14which goes to this URL:
15
16http://$GATEWAY/status
17
18Each entry in the list of recent operations has a "status" link which
19will take you to a page describing that operation.
20
21For immutable downloads, the page has a lot of information, and this
22document is to explain what it all means. It was written by Brian
23Warner, who wrote the v1.8.0 downloader code and the code which
24generates this status report about the v1.8.0 downloader's
25behavior. Brian posted it to the trac:
26https://tahoe-lafs.org/trac/tahoe-lafs/ticket/1169#comment:1
27
28Then Zooko lightly edited it while copying it into the docs/
29directory.
30
31What's involved in a download?
32==============================
33
34Downloads are triggered by read() calls, each with a starting offset (defaults
35to 0) and a length (defaults to the whole file). A regular web-API GET request
36will result in a whole-file read() call.
37
38Each read() call turns into an ordered sequence of get_segment() calls. A
39whole-file read will fetch all segments, in order, but partial reads or
40multiple simultaneous reads will result in random-access of segments. Segment
41reads always return ciphertext: the layer above that (in read()) is responsible
42for decryption.
43
44Before we can satisfy any segment reads, we need to find some shares. ("DYHB"
45is an abbreviation for "Do You Have Block", and is the message we send to
46storage servers to ask them if they have any shares for us. The name is
47historical, from Mojo Nation/Mnet/Mountain View, but nicely distinctive.
48Tahoe-LAFS's actual message name is remote_get_buckets().). Responses come
49back eventually, or don't.
50
51Once we get enough positive DYHB responses, we have enough shares to start
52downloading. We send "block requests" for various pieces of the share.
53Responses come back eventually, or don't.
54
55When we get enough block-request responses for a given segment, we can decode
56the data and satisfy the segment read.
57
58When the segment read completes, some or all of the segment data is used to
59satisfy the read() call (if the read call started or ended in the middle of a
60segment, we'll only use part of the data, otherwise we'll use all of it).
61
62Data on the download-status page
63================================
64
65DYHB Requests
66-------------
67
68This shows every Do-You-Have-Block query sent to storage servers and their
69results. Each line shows the following:
70
71* the serverid to which the request was sent
72* the time at which the request was sent. Note that all timestamps are
73  relative to the start of the first read() call and indicated with a "+" sign
74* the time at which the response was received (if ever)
75* the share numbers that the server has, if any
76* the elapsed time taken by the request
77
78Also, each line is colored according to the serverid. This color is also used
79in the "Requests" section below.
80
81Read Events
82-----------
83
84This shows all the FileNode read() calls and their overall results. Each line
85shows:
86
87* the range of the file that was requested (as [OFFSET:+LENGTH]). A whole-file
88  GET will start at 0 and read the entire file.
89* the time at which the read() was made
90* the time at which the request finished, either because the last byte of data
91  was returned to the read() caller, or because they cancelled the read by
92  calling stopProducing (i.e. closing the HTTP connection)
93* the number of bytes returned to the caller so far
94* the time spent on the read, so far
95* the total time spent in AES decryption
96* total time spend paused by the client (pauseProducing), generally because the
97  HTTP connection filled up, which most streaming media players will do to
98  limit how much data they have to buffer
99* effective speed of the read(), not including paused time
100
101Segment Events
102--------------
103
104This shows each get_segment() call and its resolution. This table is not well
105organized, and my post-1.8.0 work will clean it up a lot. In its present form,
106it records "request" and "delivery" events separately, indicated by the "type"
107column.
108
109Each request shows the segment number being requested and the time at which the
110get_segment() call was made.
111
112Each delivery shows:
113
114* segment number
115* range of file data (as [OFFSET:+SIZE]) delivered
116* elapsed time spent doing ZFEC decoding
117* overall elapsed time fetching the segment
118* effective speed of the segment fetch
119
120Requests
121--------
122
123This shows every block-request sent to the storage servers. Each line shows:
124
125* the server to which the request was sent
126* which share number it is referencing
127* the portion of the share data being requested (as [OFFSET:+SIZE])
128* the time the request was sent
129* the time the response was received (if ever)
130* the amount of data that was received (which might be less than SIZE if we
131  tried to read off the end of the share)
132* the elapsed time for the request (RTT=Round-Trip-Time)
133
134Also note that each Request line is colored according to the serverid it was
135sent to. And all timestamps are shown relative to the start of the first
136read() call: for example the first DYHB message was sent at +0.001393s about
1371.4 milliseconds after the read() call started everything off.
Note: See TracBrowser for help on using the repository browser.