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