venti-client 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. .TH VENTI-CLIENT 2
  2. .SH NAME
  3. vtconnect, vthello, vtread, vtwrite, vtreadpacket, vtwritepacket, vtsync, vtping, vtrpc, ventidoublechecksha1 \- Venti client
  4. .SH SYNOPSIS
  5. .ft L
  6. #include <u.h>
  7. .br
  8. #include <libc.h>
  9. .br
  10. #include <venti.h>
  11. .ta +\w'\fLPacket* 'u +\w'\fLxxxxxxxx'u
  12. .PP
  13. .B
  14. Packet* vtrpc(VtConn *z, Packet *p)
  15. .PP
  16. .B
  17. int vthello(VtConn *z)
  18. .PP
  19. .B
  20. int vtconnect(VtConn *z)
  21. .PP
  22. .B
  23. int vtread(VtConn *z, uchar score[VtScoreSize],
  24. .br
  25. .B
  26. uint type, uchar *buf, int n)
  27. .PP
  28. .B
  29. int vtwrite(VtConn *z, uchar score[VtScoreSize],
  30. .br
  31. .B
  32. uint type, uchar *buf, int n)
  33. .PP
  34. .B
  35. Packet* vtreadpacket(VtConn *z, uchar score[VtScoreSize],
  36. .br
  37. .B
  38. uint type, int n)
  39. .PP
  40. .B
  41. int vtwritepacket(VtConn *z, uchar score[VtScoreSize],
  42. .br
  43. .B
  44. uint type, Packet *p)
  45. .PP
  46. .B
  47. int vtsync(VtConn *z)
  48. .PP
  49. .B
  50. int vtping(VtConn *z)
  51. .PP
  52. .B
  53. extern int ventidoublechecksha1; /* default 1 */
  54. .SH DESCRIPTION
  55. These routines execute the client side of the
  56. .IR venti (6)
  57. protocol.
  58. .PP
  59. .I Vtrpc
  60. executes a single Venti RPC transaction, sending the request
  61. packet
  62. .IR p
  63. and then waiting for and returning the response packet.
  64. .I Vtrpc
  65. will set the tag in the packet.
  66. .I Vtrpc
  67. frees
  68. .IR p ,
  69. even on error.
  70. .I Vtrpc
  71. is typically called only indirectly, via the functions below.
  72. .PP
  73. .I Vthello
  74. executes a
  75. .B hello
  76. transaction, setting
  77. .IB z ->sid
  78. to the name used by the server.
  79. .I Vthello
  80. is typically called only indirectly, via
  81. .IR vtconnect .
  82. .PP
  83. .I Vtconnect
  84. calls
  85. .I vtversion
  86. (see
  87. .IR venti-conn (2))
  88. and
  89. .IR vthello ,
  90. in that order, returning success only
  91. if both succeed.
  92. This sequence (calling
  93. .I vtversion
  94. and then
  95. .IR vthello )
  96. must be done before the functions below can be called.
  97. .PP
  98. .I Vtread
  99. reads the block with the given
  100. .I score
  101. and
  102. .I type
  103. from the server,
  104. stores the returned data
  105. in memory at
  106. .IR buf ,
  107. and returns the number of bytes read.
  108. If the server's block has size larger than
  109. .IR n ,
  110. .I vtread
  111. does not modify
  112. .I buf
  113. and
  114. returns an error.
  115. .PP
  116. .I Vtwrite
  117. writes the
  118. .I n
  119. bytes in
  120. .I buf
  121. as a block of the given
  122. .IR type ,
  123. setting
  124. .IR score .
  125. .PP
  126. .I Vtreadpacket
  127. and
  128. .I vtwritepacket
  129. are like
  130. .I vtread
  131. and
  132. .I vtwrite
  133. but return or accept the block contents in the
  134. form of a
  135. .BR Packet .
  136. They avoid making a copy of the data.
  137. .PP
  138. .I Vtsync
  139. causes the server to flush all pending write requests
  140. to disk before returning.
  141. .PP
  142. .I Vtping
  143. executes a ping transaction with the server.
  144. .PP
  145. By default,
  146. .I vtread
  147. and
  148. .I vtreadpacket
  149. check that the SHA1 hash of the returned data
  150. matches the requested
  151. .IR score ,
  152. and
  153. .I vtwrite
  154. and
  155. .I vtwritepacket
  156. check that the returned
  157. .I score
  158. matches the SHA1 hash of the written data.
  159. Setting
  160. .I ventidoublechecksha1
  161. to zero disables these extra checks,
  162. mainly for benchmarking purposes.
  163. Doing so in production code is not recommended.
  164. .PP
  165. These functions can be called from multiple threads
  166. or procs simultaneously to issue requests
  167. in parallel.
  168. Programs that issue requests from multiple threads
  169. in the same proc should start separate procs running
  170. .I vtsendproc
  171. and
  172. .I vtrecvproc
  173. as described in
  174. .IR venti-conn (2).
  175. .SH SOURCE
  176. .B /sys/src/libventi
  177. .SH SEE ALSO
  178. .IR venti (2),
  179. .IR venti-conn (2),
  180. .IR venti-packet (2),
  181. .IR venti (6)
  182. .SH DIAGNOSTICS
  183. .I Vtrpc
  184. and
  185. .I vtpacket
  186. return nil on error.
  187. The other routines return \-1 on error.
  188. .PP
  189. .I Vtwrite
  190. returns 0 on success: there are no partial writes.