Blame


1 be7cbb4e 2005-07-12 devnull .TH VENTI 7
2 be7cbb4e 2005-07-12 devnull .SH NAME
3 be7cbb4e 2005-07-12 devnull venti \- archival storage server
4 be7cbb4e 2005-07-12 devnull .SH DESCRIPTION
5 be7cbb4e 2005-07-12 devnull Venti is a block storage server intended for archival data.
6 be7cbb4e 2005-07-12 devnull In a Venti server, the SHA1 hash of a block's contents acts
7 be7cbb4e 2005-07-12 devnull as the block identifier for read and write operations.
8 be7cbb4e 2005-07-12 devnull This approach enforces a write-once policy, preventing
9 be7cbb4e 2005-07-12 devnull accidental or malicious destruction of data. In addition,
10 be7cbb4e 2005-07-12 devnull duplicate copies of a block are coalesced, reducing the
11 be7cbb4e 2005-07-12 devnull consumption of storage and simplifying the implementation
12 be7cbb4e 2005-07-12 devnull of clients.
13 be7cbb4e 2005-07-12 devnull .PP
14 be7cbb4e 2005-07-12 devnull This manual page documents the basic concepts of
15 be7cbb4e 2005-07-12 devnull block storage using Venti as well as the Venti network protocol.
16 be7cbb4e 2005-07-12 devnull .PP
17 be7cbb4e 2005-07-12 devnull .IR Venti (1)
18 be7cbb4e 2005-07-12 devnull documents some simple clients.
19 be7cbb4e 2005-07-12 devnull .IR Vac (1),
20 be7cbb4e 2005-07-12 devnull .IR vbackup (1),
21 be7cbb4e 2005-07-12 devnull .IR vacfs (4),
22 be7cbb4e 2005-07-12 devnull and
23 be7cbb4e 2005-07-12 devnull .IR vnfs (4)
24 be7cbb4e 2005-07-12 devnull are more complex clients.
25 be7cbb4e 2005-07-12 devnull .PP
26 be7cbb4e 2005-07-12 devnull .IR Venti (3)
27 be7cbb4e 2005-07-12 devnull describes a C library interface for accessing
28 be7cbb4e 2005-07-12 devnull Venti servers and manipulating Venti data structures.
29 be7cbb4e 2005-07-12 devnull .PP
30 be7cbb4e 2005-07-12 devnull .IR Venti.conf (7)
31 be7cbb4e 2005-07-12 devnull describes the Venti server configuration file.
32 be7cbb4e 2005-07-12 devnull .PP
33 be7cbb4e 2005-07-12 devnull .IR Venti (8)
34 be7cbb4e 2005-07-12 devnull describes the programs used to run a Venti server.
35 be7cbb4e 2005-07-12 devnull .PP
36 be7cbb4e 2005-07-12 devnull .SS "Scores
37 be7cbb4e 2005-07-12 devnull The SHA1 hash that identifies a block is called its
38 be7cbb4e 2005-07-12 devnull .IR score .
39 be7cbb4e 2005-07-12 devnull The score of the zero-length block is called the
40 be7cbb4e 2005-07-12 devnull .IR "zero score" .
41 be7cbb4e 2005-07-12 devnull .PP
42 be7cbb4e 2005-07-12 devnull Scores may have an optional
43 be7cbb4e 2005-07-12 devnull .IB label :
44 be7cbb4e 2005-07-12 devnull prefix, typically used to
45 be7cbb4e 2005-07-12 devnull describe the format of the data.
46 be7cbb4e 2005-07-12 devnull For example,
47 be7cbb4e 2005-07-12 devnull .IR vac (1)
48 be7cbb4e 2005-07-12 devnull uses a
49 be7cbb4e 2005-07-12 devnull .B vac:
50 be7cbb4e 2005-07-12 devnull prefix, while
51 be7cbb4e 2005-07-12 devnull .IR vbackup (1)
52 be7cbb4e 2005-07-12 devnull uses prefixes corresponding to the file system
53 be7cbb4e 2005-07-12 devnull types:
54 be7cbb4e 2005-07-12 devnull .BR ext2: ,
55 be7cbb4e 2005-07-12 devnull .BR ffs: ,
56 be7cbb4e 2005-07-12 devnull and so on.
57 be7cbb4e 2005-07-12 devnull .SS "Files and Directories
58 be7cbb4e 2005-07-12 devnull Venti accepts blocks up to 56 kilobytes in size.
59 be7cbb4e 2005-07-12 devnull By convention, Venti clients use hash trees of blocks to
60 be7cbb4e 2005-07-12 devnull represent arbitrary-size data
61 be7cbb4e 2005-07-12 devnull .IR files .
62 be7cbb4e 2005-07-12 devnull The data to be stored is split into fixed-size
63 be7cbb4e 2005-07-12 devnull blocks and written to the server, producing a list
64 be7cbb4e 2005-07-12 devnull of scores.
65 be7cbb4e 2005-07-12 devnull The resulting list of scores is split into fixed-size pointer
66 be7cbb4e 2005-07-12 devnull blocks (using only an integral number of scores per block)
67 be7cbb4e 2005-07-12 devnull and written to the server, producing a smaller list
68 be7cbb4e 2005-07-12 devnull of scores.
69 be7cbb4e 2005-07-12 devnull The process continues, eventually ending with the
70 be7cbb4e 2005-07-12 devnull score for the hash tree's top-most block.
71 be7cbb4e 2005-07-12 devnull Each file stored this way is summarized by
72 be7cbb4e 2005-07-12 devnull a
73 be7cbb4e 2005-07-12 devnull .B VtEntry
74 be7cbb4e 2005-07-12 devnull structure recording the top-most score, the depth
75 be7cbb4e 2005-07-12 devnull of the tree, the data block size, and the pointer block size.
76 be7cbb4e 2005-07-12 devnull One or more
77 be7cbb4e 2005-07-12 devnull .B VtEntry
78 be7cbb4e 2005-07-12 devnull structures can be concatenated
79 be7cbb4e 2005-07-12 devnull and stored as a special file called a
80 be7cbb4e 2005-07-12 devnull .IR directory .
81 be7cbb4e 2005-07-12 devnull In this
82 be7cbb4e 2005-07-12 devnull manner, arbitrary trees of files can be constructed
83 be7cbb4e 2005-07-12 devnull and stored.
84 be7cbb4e 2005-07-12 devnull .PP
85 be7cbb4e 2005-07-12 devnull Scores passed between programs conventionally refer
86 be7cbb4e 2005-07-12 devnull to
87 be7cbb4e 2005-07-12 devnull .B VtRoot
88 be7cbb4e 2005-07-12 devnull blocks, which contain descriptive information
89 be7cbb4e 2005-07-12 devnull as well as the score of a block containing a small number
90 be7cbb4e 2005-07-12 devnull of
91 be7cbb4e 2005-07-12 devnull .B VtEntries .
92 be7cbb4e 2005-07-12 devnull .SS "Block Types
93 be7cbb4e 2005-07-12 devnull To allow programs to traverse these structures without
94 be7cbb4e 2005-07-12 devnull needing to understand their higher-level meanings,
95 be7cbb4e 2005-07-12 devnull Venti tags each block with a type. The types are:
96 be7cbb4e 2005-07-12 devnull .PP
97 be7cbb4e 2005-07-12 devnull .nf
98 be7cbb4e 2005-07-12 devnull .ft L
99 be7cbb4e 2005-07-12 devnull VtDataType 000 \f1data\fL
100 be7cbb4e 2005-07-12 devnull VtDataType+1 001 \fRscores of \fPVtDataType\fR blocks\fL
101 be7cbb4e 2005-07-12 devnull VtDataType+2 002 \fRscores of \fPVtDataType+1\fR blocks\fL
102 be7cbb4e 2005-07-12 devnull \fR\&...\fL
103 be7cbb4e 2005-07-12 devnull VtDirType 010 VtEntry\fR structures\fL
104 be7cbb4e 2005-07-12 devnull VtDirType+1 011 \fRscores of \fLVtDirType\fR blocks\fL
105 be7cbb4e 2005-07-12 devnull VtDirType+2 012 \fRscores of \fLVtDirType+1\fR blocks\fL
106 be7cbb4e 2005-07-12 devnull \fR\&...\fL
107 be7cbb4e 2005-07-12 devnull VtRootType 020 VtRoot\fR structure\fL
108 be7cbb4e 2005-07-12 devnull .fi
109 be7cbb4e 2005-07-12 devnull .PP
110 be7cbb4e 2005-07-12 devnull The octal numbers listed are the type numbers used
111 be7cbb4e 2005-07-12 devnull by the commands below.
112 be7cbb4e 2005-07-12 devnull (For historical reasons, the type numbers used on
113 be7cbb4e 2005-07-12 devnull disk and on the wire are different from the above.
114 be7cbb4e 2005-07-12 devnull They do not distinguish
115 be7cbb4e 2005-07-12 devnull .BI VtDataType+ n
116 be7cbb4e 2005-07-12 devnull blocks from
117 be7cbb4e 2005-07-12 devnull .BI VtDirType+ n
118 be7cbb4e 2005-07-12 devnull blocks.)
119 be7cbb4e 2005-07-12 devnull .SS "Zero Truncation
120 be7cbb4e 2005-07-12 devnull To avoid storing the same short data blocks padded with
121 be7cbb4e 2005-07-12 devnull differing numbers of zeros, Venti clients working with fixed-size
122 be7cbb4e 2005-07-12 devnull blocks conventionally
123 be7cbb4e 2005-07-12 devnull `zero truncate' the blocks before writing them to the server.
124 be7cbb4e 2005-07-12 devnull For example, if a 1024-byte data block contains the
125 be7cbb4e 2005-07-12 devnull 11-byte string
126 be7cbb4e 2005-07-12 devnull .RB ` hello " " world '
127 be7cbb4e 2005-07-12 devnull followed by 1013 zero bytes,
128 be7cbb4e 2005-07-12 devnull a client would store only the 11-byte block.
129 be7cbb4e 2005-07-12 devnull When the client later read the block from the server,
130 be7cbb4e 2005-07-12 devnull it would append zeros to the end as necessary to
131 be7cbb4e 2005-07-12 devnull reach the expected size.
132 be7cbb4e 2005-07-12 devnull .PP
133 be7cbb4e 2005-07-12 devnull When truncating pointer blocks
134 be7cbb4e 2005-07-12 devnull .RB ( VtDataType+ \fIn
135 be7cbb4e 2005-07-12 devnull and
136 be7cbb4e 2005-07-12 devnull .BI VtDirType+ n
137 be7cbb4e 2005-07-12 devnull blocks),
138 be7cbb4e 2005-07-12 devnull trailing zero scores are removed
139 be7cbb4e 2005-07-12 devnull instead of trailing zero bytes.
140 be7cbb4e 2005-07-12 devnull .PP
141 be7cbb4e 2005-07-12 devnull Because of the truncation convention,
142 be7cbb4e 2005-07-12 devnull any file consisting entirely of zero bytes,
143 be7cbb4e 2005-07-12 devnull no matter what the length, will be represented by the zero score:
144 be7cbb4e 2005-07-12 devnull the data blocks contain all zeros and are thus truncated
145 be7cbb4e 2005-07-12 devnull to the empty block, and the pointer blocks contain all zero scores
146 be7cbb4e 2005-07-12 devnull and are thus also truncated to the empty block,
147 be7cbb4e 2005-07-12 devnull and so on up the hash tree.
148 be7cbb4e 2005-07-12 devnull .SS NETWORK PROTOCOL
149 be7cbb4e 2005-07-12 devnull A Venti session begins when a
150 be7cbb4e 2005-07-12 devnull .I client
151 be7cbb4e 2005-07-12 devnull connects to the network address served by a Venti
152 be7cbb4e 2005-07-12 devnull .IR server ;
153 be7cbb4e 2005-07-12 devnull the conventional address is
154 be7cbb4e 2005-07-12 devnull .BI tcp! server !venti
155 be7cbb4e 2005-07-12 devnull (the
156 be7cbb4e 2005-07-12 devnull .B venti
157 be7cbb4e 2005-07-12 devnull port is 17034).
158 be7cbb4e 2005-07-12 devnull Both client and server begin by sending a version
159 be7cbb4e 2005-07-12 devnull string of the form
160 be7cbb4e 2005-07-12 devnull .BI venti- versions - comment \en \fR.
161 be7cbb4e 2005-07-12 devnull The
162 be7cbb4e 2005-07-12 devnull .I versions
163 be7cbb4e 2005-07-12 devnull field is a list of acceptable versions separated by
164 be7cbb4e 2005-07-12 devnull colons.
165 be7cbb4e 2005-07-12 devnull The protocol described here is version
166 be7cbb4e 2005-07-12 devnull .B 02 .
167 be7cbb4e 2005-07-12 devnull The client is responsible for choosing a common
168 be7cbb4e 2005-07-12 devnull version and sending it in the
169 be7cbb4e 2005-07-12 devnull .B VtThello
170 be7cbb4e 2005-07-12 devnull message, described below.
171 be7cbb4e 2005-07-12 devnull .PP
172 be7cbb4e 2005-07-12 devnull After the initial version exchange, the client transmits
173 be7cbb4e 2005-07-12 devnull .I requests
174 be7cbb4e 2005-07-12 devnull .RI ( T-messages )
175 be7cbb4e 2005-07-12 devnull to the server, which subsequently returns
176 be7cbb4e 2005-07-12 devnull .I replies
177 be7cbb4e 2005-07-12 devnull .RI ( R-messages )
178 be7cbb4e 2005-07-12 devnull to the client.
179 be7cbb4e 2005-07-12 devnull The combined act of transmitting (receiving) a request
180 be7cbb4e 2005-07-12 devnull of a particular type, and receiving (transmitting) its reply
181 be7cbb4e 2005-07-12 devnull is called a
182 be7cbb4e 2005-07-12 devnull .I transaction
183 be7cbb4e 2005-07-12 devnull of that type.
184 be7cbb4e 2005-07-12 devnull .PP
185 be7cbb4e 2005-07-12 devnull Each message consists of a sequence of bytes.
186 be7cbb4e 2005-07-12 devnull Two-byte fields hold unsigned integers represented
187 be7cbb4e 2005-07-12 devnull in big-endian order (most significant byte first).
188 be7cbb4e 2005-07-12 devnull Data items of variable lengths are represented by
189 be7cbb4e 2005-07-12 devnull a one-byte field specifying a count,
190 be7cbb4e 2005-07-12 devnull .IR n ,
191 be7cbb4e 2005-07-12 devnull followed by
192 be7cbb4e 2005-07-12 devnull .I n
193 be7cbb4e 2005-07-12 devnull bytes of data.
194 be7cbb4e 2005-07-12 devnull Text strings are represented similarly,
195 be7cbb4e 2005-07-12 devnull using a two-byte count with
196 be7cbb4e 2005-07-12 devnull the text itself stored as a UTF-8 encoded sequence
197 be7cbb4e 2005-07-12 devnull of Unicode characters (see
198 be7cbb4e 2005-07-12 devnull .IR utf (7)).
199 be7cbb4e 2005-07-12 devnull Text strings are not
200 be7cbb4e 2005-07-12 devnull .SM NUL\c
201 be7cbb4e 2005-07-12 devnull -terminated:
202 be7cbb4e 2005-07-12 devnull .I n
203 be7cbb4e 2005-07-12 devnull counts the bytes of UTF-8 data, which include no final
204 be7cbb4e 2005-07-12 devnull zero byte.
205 be7cbb4e 2005-07-12 devnull The
206 be7cbb4e 2005-07-12 devnull .SM NUL
207 be7cbb4e 2005-07-12 devnull character is illegal in text strings in the Venti protocol.
208 be7cbb4e 2005-07-12 devnull The maximum string length in Venti is 1024 bytes.
209 be7cbb4e 2005-07-12 devnull .PP
210 be7cbb4e 2005-07-12 devnull Each Venti message begins with a two-byte size field
211 be7cbb4e 2005-07-12 devnull specifying the length in bytes of the message,
212 be7cbb4e 2005-07-12 devnull not including the length field itself.
213 be7cbb4e 2005-07-12 devnull The next byte is the message type, one of the constants
214 be7cbb4e 2005-07-12 devnull in the enumeration in the include file
215 be7cbb4e 2005-07-12 devnull .BR <venti.h> .
216 be7cbb4e 2005-07-12 devnull The next byte is an identifying
217 be7cbb4e 2005-07-12 devnull .IR tag ,
218 be7cbb4e 2005-07-12 devnull used to match responses with requests.
219 be7cbb4e 2005-07-12 devnull The remaining bytes are parameters of different sizes.
220 be7cbb4e 2005-07-12 devnull In the message descriptions, the number of bytes in a field
221 be7cbb4e 2005-07-12 devnull is given in brackets after the field name.
222 be7cbb4e 2005-07-12 devnull The notation
223 be7cbb4e 2005-07-12 devnull .IR parameter [ n ]
224 be7cbb4e 2005-07-12 devnull where
225 be7cbb4e 2005-07-12 devnull .I n
226 be7cbb4e 2005-07-12 devnull is not a constant represents a variable-length parameter:
227 be7cbb4e 2005-07-12 devnull .IR n [1]
228 be7cbb4e 2005-07-12 devnull followed by
229 be7cbb4e 2005-07-12 devnull .I n
230 be7cbb4e 2005-07-12 devnull bytes of data forming the
231 be7cbb4e 2005-07-12 devnull .IR parameter .
232 be7cbb4e 2005-07-12 devnull The notation
233 be7cbb4e 2005-07-12 devnull .IR string [ s ]
234 be7cbb4e 2005-07-12 devnull (using a literal
235 be7cbb4e 2005-07-12 devnull .I s
236 be7cbb4e 2005-07-12 devnull character)
237 be7cbb4e 2005-07-12 devnull is shorthand for
238 be7cbb4e 2005-07-12 devnull .IR s [2]
239 be7cbb4e 2005-07-12 devnull followed by
240 be7cbb4e 2005-07-12 devnull .I s
241 be7cbb4e 2005-07-12 devnull bytes of UTF-8 text.
242 be7cbb4e 2005-07-12 devnull The notation
243 be7cbb4e 2005-07-12 devnull .IR parameter []
244 be7cbb4e 2005-07-12 devnull where
245 be7cbb4e 2005-07-12 devnull .I parameter
246 be7cbb4e 2005-07-12 devnull is the last field in the message represents a
247 be7cbb4e 2005-07-12 devnull variable-length field that comprises all remaining
248 be7cbb4e 2005-07-12 devnull bytes in the message.
249 be7cbb4e 2005-07-12 devnull .PP
250 be7cbb4e 2005-07-12 devnull All Venti RPC messages are prefixed with a field
251 be7cbb4e 2005-07-12 devnull .IR size [2]
252 be7cbb4e 2005-07-12 devnull giving the length of the message that follows
253 be7cbb4e 2005-07-12 devnull (not including the
254 be7cbb4e 2005-07-12 devnull .I size
255 be7cbb4e 2005-07-12 devnull field itself).
256 be7cbb4e 2005-07-12 devnull The message bodies are:
257 be7cbb4e 2005-07-12 devnull .ta \w'\fLVtTgoodbye 'u
258 be7cbb4e 2005-07-12 devnull .IP
259 be7cbb4e 2005-07-12 devnull .ne 2v
260 be7cbb4e 2005-07-12 devnull .B VtThello
261 be7cbb4e 2005-07-12 devnull .IR tag [1]
262 be7cbb4e 2005-07-12 devnull .IR version [ s ]
263 be7cbb4e 2005-07-12 devnull .IR uid [ s ]
264 be7cbb4e 2005-07-12 devnull .IR strength [1]
265 be7cbb4e 2005-07-12 devnull .IR crypto [ n ]
266 be7cbb4e 2005-07-12 devnull .IR codec [ n ]
267 be7cbb4e 2005-07-12 devnull .br
268 be7cbb4e 2005-07-12 devnull .B VtRhello
269 be7cbb4e 2005-07-12 devnull .IR tag [1]
270 be7cbb4e 2005-07-12 devnull .IR sid [ s ]
271 be7cbb4e 2005-07-12 devnull .IR rcrypto [1]
272 be7cbb4e 2005-07-12 devnull .IR rcodec [1]
273 be7cbb4e 2005-07-12 devnull .IP
274 be7cbb4e 2005-07-12 devnull .ne 2v
275 be7cbb4e 2005-07-12 devnull .B VtTping
276 be7cbb4e 2005-07-12 devnull .IR tag [1]
277 be7cbb4e 2005-07-12 devnull .br
278 be7cbb4e 2005-07-12 devnull .B VtRping
279 be7cbb4e 2005-07-12 devnull .IR tag [1]
280 be7cbb4e 2005-07-12 devnull .IP
281 be7cbb4e 2005-07-12 devnull .ne 2v
282 be7cbb4e 2005-07-12 devnull .B VtTread
283 be7cbb4e 2005-07-12 devnull .IR tag [1]
284 be7cbb4e 2005-07-12 devnull .IR score [20]
285 be7cbb4e 2005-07-12 devnull .IR type [1]
286 be7cbb4e 2005-07-12 devnull .IR pad [1]
287 be7cbb4e 2005-07-12 devnull .IR count [2]
288 be7cbb4e 2005-07-12 devnull .br
289 be7cbb4e 2005-07-12 devnull .B VtRead
290 be7cbb4e 2005-07-12 devnull .IR tag [1]
291 be7cbb4e 2005-07-12 devnull .IR data []
292 be7cbb4e 2005-07-12 devnull .IP
293 be7cbb4e 2005-07-12 devnull .ne 2v
294 be7cbb4e 2005-07-12 devnull .B VtTwrite
295 be7cbb4e 2005-07-12 devnull .IR tag [1]
296 be7cbb4e 2005-07-12 devnull .IR type [1]
297 be7cbb4e 2005-07-12 devnull .IR pad [3]
298 be7cbb4e 2005-07-12 devnull .IR data []
299 be7cbb4e 2005-07-12 devnull .br
300 be7cbb4e 2005-07-12 devnull .B VtRwrite
301 be7cbb4e 2005-07-12 devnull .IR tag [1]
302 be7cbb4e 2005-07-12 devnull .IR score [20]
303 be7cbb4e 2005-07-12 devnull .IP
304 be7cbb4e 2005-07-12 devnull .ne 2v
305 be7cbb4e 2005-07-12 devnull .B VtTsync
306 be7cbb4e 2005-07-12 devnull .IR tag [1]
307 be7cbb4e 2005-07-12 devnull .br
308 be7cbb4e 2005-07-12 devnull .B VtRsync
309 be7cbb4e 2005-07-12 devnull .IR tag [1]
310 be7cbb4e 2005-07-12 devnull .IP
311 be7cbb4e 2005-07-12 devnull .ne 2v
312 be7cbb4e 2005-07-12 devnull .B VtRerror
313 be7cbb4e 2005-07-12 devnull .IR tag [1]
314 be7cbb4e 2005-07-12 devnull .IR error [ s ]
315 be7cbb4e 2005-07-12 devnull .IP
316 be7cbb4e 2005-07-12 devnull .ne 2v
317 be7cbb4e 2005-07-12 devnull .B VtTgoodbye
318 be7cbb4e 2005-07-12 devnull .IR tag [1]
319 be7cbb4e 2005-07-12 devnull .PP
320 be7cbb4e 2005-07-12 devnull Each T-message has a one-byte
321 be7cbb4e 2005-07-12 devnull .I tag
322 be7cbb4e 2005-07-12 devnull field, chosen and used by the client to identify the message.
323 be7cbb4e 2005-07-12 devnull The server will echo the request's
324 be7cbb4e 2005-07-12 devnull .I tag
325 be7cbb4e 2005-07-12 devnull field in the reply.
326 be7cbb4e 2005-07-12 devnull Clients should arrange that no two outstanding
327 be7cbb4e 2005-07-12 devnull messages have the same tag field so that responses
328 be7cbb4e 2005-07-12 devnull can be distinguished.
329 be7cbb4e 2005-07-12 devnull .PP
330 be7cbb4e 2005-07-12 devnull The type of an R-message will either be one greater than
331 be7cbb4e 2005-07-12 devnull the type of the corresponding T-message or
332 be7cbb4e 2005-07-12 devnull .BR Rerror ,
333 be7cbb4e 2005-07-12 devnull indicating that the request failed.
334 be7cbb4e 2005-07-12 devnull In the latter case, the
335 be7cbb4e 2005-07-12 devnull .I error
336 be7cbb4e 2005-07-12 devnull field contains a string describing the reason for failure.
337 be7cbb4e 2005-07-12 devnull .PP
338 be7cbb4e 2005-07-12 devnull Venti connections must begin with a
339 be7cbb4e 2005-07-12 devnull .B hello
340 be7cbb4e 2005-07-12 devnull transaction.
341 be7cbb4e 2005-07-12 devnull The
342 be7cbb4e 2005-07-12 devnull .B VtThello
343 be7cbb4e 2005-07-12 devnull message contains the protocol
344 be7cbb4e 2005-07-12 devnull .I version
345 be7cbb4e 2005-07-12 devnull that the client has chosen to use.
346 be7cbb4e 2005-07-12 devnull The fields
347 be7cbb4e 2005-07-12 devnull .IR strength ,
348 be7cbb4e 2005-07-12 devnull .IR crypto ,
349 be7cbb4e 2005-07-12 devnull and
350 be7cbb4e 2005-07-12 devnull .IR codec
351 be7cbb4e 2005-07-12 devnull could be used to add authentication, encryption,
352 be7cbb4e 2005-07-12 devnull and compression to the Venti session
353 be7cbb4e 2005-07-12 devnull but are currently ignored.
354 be7cbb4e 2005-07-12 devnull The
355 be7cbb4e 2005-07-12 devnull .IR rcrypto ,
356 be7cbb4e 2005-07-12 devnull and
357 be7cbb4e 2005-07-12 devnull .I rcodec
358 be7cbb4e 2005-07-12 devnull fields in the
359 be7cbb4e 2005-07-12 devnull .B VtRhello
360 be7cbb4e 2005-07-12 devnull response are similarly ignored.
361 be7cbb4e 2005-07-12 devnull The
362 be7cbb4e 2005-07-12 devnull .IR uid
363 be7cbb4e 2005-07-12 devnull and
364 be7cbb4e 2005-07-12 devnull .IR sid
365 be7cbb4e 2005-07-12 devnull fields are intended to be the identity
366 be7cbb4e 2005-07-12 devnull of the client and server but, given the lack of
367 be7cbb4e 2005-07-12 devnull authentication, should be treated only as advisory.
368 be7cbb4e 2005-07-12 devnull The initial
369 be7cbb4e 2005-07-12 devnull .B hello
370 be7cbb4e 2005-07-12 devnull should be the only
371 be7cbb4e 2005-07-12 devnull .B hello
372 be7cbb4e 2005-07-12 devnull transaction during the session.
373 be7cbb4e 2005-07-12 devnull .PP
374 be7cbb4e 2005-07-12 devnull The
375 be7cbb4e 2005-07-12 devnull .B ping
376 be7cbb4e 2005-07-12 devnull message has no effect and
377 be7cbb4e 2005-07-12 devnull is used mainly for debugging.
378 be7cbb4e 2005-07-12 devnull Servers should respond immediately to pings.
379 be7cbb4e 2005-07-12 devnull .PP
380 be7cbb4e 2005-07-12 devnull The
381 be7cbb4e 2005-07-12 devnull .B read
382 be7cbb4e 2005-07-12 devnull message requests a block with the given
383 be7cbb4e 2005-07-12 devnull .I score
384 be7cbb4e 2005-07-12 devnull and
385 be7cbb4e 2005-07-12 devnull .I type .
386 be7cbb4e 2005-07-12 devnull Use
387 be7cbb4e 2005-07-12 devnull .I vttodisktype
388 be7cbb4e 2005-07-12 devnull and
389 be7cbb4e 2005-07-12 devnull .I vtfromdisktype
390 be7cbb4e 2005-07-12 devnull (see
391 be7cbb4e 2005-07-12 devnull .IR venti (3))
392 be7cbb4e 2005-07-12 devnull to convert a block type enumeration value
393 be7cbb4e 2005-07-12 devnull .RB ( VtDataType ,
394 be7cbb4e 2005-07-12 devnull etc.)
395 be7cbb4e 2005-07-12 devnull to the
396 be7cbb4e 2005-07-12 devnull .I type
397 be7cbb4e 2005-07-12 devnull used on disk and in the protocol.
398 be7cbb4e 2005-07-12 devnull The
399 be7cbb4e 2005-07-12 devnull .I count
400 be7cbb4e 2005-07-12 devnull field specifies the maximum expected size
401 be7cbb4e 2005-07-12 devnull of the block.
402 be7cbb4e 2005-07-12 devnull The
403 be7cbb4e 2005-07-12 devnull .I data
404 be7cbb4e 2005-07-12 devnull in the reply is the block's contents.
405 be7cbb4e 2005-07-12 devnull .PP
406 be7cbb4e 2005-07-12 devnull The
407 be7cbb4e 2005-07-12 devnull .B write
408 be7cbb4e 2005-07-12 devnull message writes a new block of the given
409 be7cbb4e 2005-07-12 devnull .I type
410 be7cbb4e 2005-07-12 devnull with contents
411 be7cbb4e 2005-07-12 devnull .I data
412 be7cbb4e 2005-07-12 devnull to the server.
413 be7cbb4e 2005-07-12 devnull The response includes the
414 be7cbb4e 2005-07-12 devnull .I score
415 be7cbb4e 2005-07-12 devnull to use to read the block,
416 be7cbb4e 2005-07-12 devnull which should be the SHA1 hash of
417 be7cbb4e 2005-07-12 devnull .IR data .
418 be7cbb4e 2005-07-12 devnull .PP
419 be7cbb4e 2005-07-12 devnull The Venti server may buffer written blocks in memory,
420 be7cbb4e 2005-07-12 devnull waiting until after responding to the
421 be7cbb4e 2005-07-12 devnull .B write
422 be7cbb4e 2005-07-12 devnull message before writing them to
423 be7cbb4e 2005-07-12 devnull permanent storage.
424 be7cbb4e 2005-07-12 devnull The server will delay the response to a
425 be7cbb4e 2005-07-12 devnull .B sync
426 be7cbb4e 2005-07-12 devnull message until after all blocks in earlier
427 be7cbb4e 2005-07-12 devnull .B write
428 be7cbb4e 2005-07-12 devnull messages have been written to permanent storage.
429 be7cbb4e 2005-07-12 devnull .PP
430 be7cbb4e 2005-07-12 devnull The
431 be7cbb4e 2005-07-12 devnull .B goodbye
432 be7cbb4e 2005-07-12 devnull message ends a session. There is no
433 be7cbb4e 2005-07-12 devnull .BR VtRgoodbye :
434 be7cbb4e 2005-07-12 devnull upon receiving the
435 be7cbb4e 2005-07-12 devnull .BR VtTgoodbye
436 be7cbb4e 2005-07-12 devnull message, the server terminates up the connection.
437 be7cbb4e 2005-07-12 devnull .SH SEE ALSO
438 be7cbb4e 2005-07-12 devnull .IR venti (1),
439 7e6f40b2 2005-07-13 devnull .IR venti (3),
440 7e6f40b2 2005-07-13 devnull .IR venti (8)
441 7e6f40b2 2005-07-13 devnull .br
442 7e6f40b2 2005-07-13 devnull Sean Quinlan and Sean Dorward,
443 7e6f40b2 2005-07-13 devnull ``Venti: a new approach to archival storage'',
444 7e6f40b2 2005-07-13 devnull .I "Usenix Conference on File and Storage Technologies" ,
445 7e6f40b2 2005-07-13 devnull 2002.