annotate nobuild/doc/doodle.rst @ 138:a1c2b56cb44d

Beginnings of rst doc with embedded plantuml
author David Bryant <bagnose@gmail.com>
date Sun, 30 Sep 2012 15:25:53 +0930
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
138
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
1 ==================
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
2 Doodle Development
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
3 ==================
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
4
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
5 Introduction
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
6 ============
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
7
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
8 Objectives
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
9 ----------
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
10
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
11 Build Tool
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
12 ----------
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
13
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
14 Directory Organisation
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
15 ----------------------
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
16
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
17 Crucial Design Aspects
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
18 ======================
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
19
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
20 Tool Stack
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
21 ----------
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
22
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
23 Interaction, event handling, etc.
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
24
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
25 Undo Framework
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
26 --------------
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
27
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
28 Drawing Abstraction
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
29 -------------------
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
30
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
31 Detailed Component Descriptions
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
32 ===============================
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
33
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
34 CUT !!!
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
35
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
36 Scope
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
37 =====
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
38
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
39 Overview
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
40 ========
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
41
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
42 Definitions
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
43 -----------
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
44
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
45 Blocklet
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
46
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
47 Variable length block of data produced by breaking blobs on boundaries
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
48 such that identical blocklets are likely to occur in other blobs.
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
49 Internal to blockpool.
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
50
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
51 Blob
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
52
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
53 Arbitrary user data blocks stored/retrieved in blockpool.
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
54
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
55 Tag
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
56 A small identifier that refers to a blob within a blockpool.
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
57
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
58 Hash
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
59 A small identifier that refers to a blocklet within a blockpool.
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
60 Internal to blockpool.
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
61
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
62 BFST-lib
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
63 A shared-library (and associated header files) for invoking
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
64 BFST functions from another program.
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
65
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
66 BFST-CLI
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
67 The blocklets filestore executable.
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
68
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
69 BFST-API
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
70 A set of functions provided by BFST-lib for directly
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
71 accessing a blockpool or issuing commands to a BFST server.
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
72
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
73 Blockpool
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
74 A blockpool on disk.
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
75
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
76 Purpose
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
77 --------
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
78
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
79 BFST is a store/retrieve technology that increases effective data capacity by
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
80 eliminating redundant data. BFST presents a simple external API:
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
81
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
82 - blob -> tag: Store a blob (arbitrary block of data) in the blockpool and
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
83 receive a tag (small unique identifier) associated with the blob.
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
84
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
85 - tag -> blob: Retrieve a blob from the blockpool by providing the tag
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
86 associated with the blob.
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
87
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
88 Also supported: replaction between blockpools.
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
89
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
90 Higher level services can be built on top of blockpool, for example, a
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
91 DXi presents a file-server that uses BFST as a deduplication backend.
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
92
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
93 Operational Modes
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
94 -----------------
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
95
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
96 Blockpool operations can be performed via:
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
97
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
98 API calls:
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
99 Calling functions expored by libbfst.so.
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
100 (Local and remote operations.)
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
101
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
102 CLI execution:
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
103 Executing blockpool with chosen arguments.
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
104 (Local, remote and server launching.)
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
105
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
106 The blockpool executable can be launched in the following modes:
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
107
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
108 Local
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
109 Perform an operation on a local blockpool.
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
110 (Note deployed in this manner)
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
111
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
112 Client / Remote
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
113
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
114 Server
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
115
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
116 A Blockpool server can be conversed with in two ways:
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
117
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
118 - CLI mode
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
119
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
120 - API mode
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
121
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
122 Implementation
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
123 --------------
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
124
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
125 Repository Layout
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
126 -----------------
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
127
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
128 Simplified layout::
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
129
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
130 bfst
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
131 |
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
132 +--lib_rocksoft_c
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
133 |
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
134 +--libfilter Stream filtering library, eg find tar boundary.
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
135 |
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
136 +--blockpool
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
137 |
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
138 +--perl_mod ADLQuantum perl modules.
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
139 |
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
140 +--test
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
141
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
142 Supported Platforms
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
143 -------------------
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
144
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
145 Building
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
146 --------
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
147
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
148 Linux
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
149 `````
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
150
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
151 Running
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
152 -------
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
153
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
154 Testing
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
155 -------
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
156
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
157 - self tests (./blockpool/cli/blockpool selftest default)
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
158
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
159 - perl test harness ./test/scripts/test.sh
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
160
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
161 Detailed Description
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
162 ====================
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
163
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
164 Component: lib_rocksoft_c
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
165 -------------------------
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
166
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
167 Layout::
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
168
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
169 lib_rocksoft_c
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
170 |
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
171 +--low
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
172 |
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
173 +--ADLQuantum
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
174 |
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
175 +--test Self tests (unit tests)
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
176 |
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
177 +--external 3rd-party software
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
178
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
179 Component: libfilter
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
180 --------------------
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
181
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
182 Component: blockpool
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
183 --------------------
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
184
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
185 Layout::
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
186
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
187 blockpool
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
188 |
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
189 +--memory_budgets
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
190 |
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
191 +--api
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
192 |
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
193 +--cli
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
194 |
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
195 +--lib
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
196 | |
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
197 | +--test Self tests (unit tests)
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
198 | |
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
199 | +--ADLQuantum More perl modules
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
200 |
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
201 +--scripts
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
202 |
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
203 +--sdk
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
204 |
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
205 +--docs
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
206
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
207
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
208
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
209 Important:
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
210
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
211 - In a DXi, blockpool runs as in server mode.
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
212
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
213 - BPW is a client (one of many) it maintains a preconfigured
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
214 number of connections as a pool. These are used as required.
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
215
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
216 - shared memory segment runs from end-point (nfs/cifs/vtl/ost),
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
217 thru BPW and to bfst server.
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
218
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
219 - pcache is a portion of the shared segment that is used to communicated
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
220 between endpoints and BPW. BFST doesn't see pcache.
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
221
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
222 - BPW links the BFST shared library.
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
223
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
224 - When a new blob is stored in BFST, it is converted into blocklets,
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
225 if the blocklet matches then its ref-count is incremented, otherwise
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
226 a new blocklet is added. At the end of the conversion, the list of
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
227 hashes is hashed to form the blob tag.
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
228 If it turns out a blob with that tag already exists then the ref-count
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
229 of that tag is incremented, but the blocklets' ref-counts are NOT
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
230 decremented (to save cost). Somehow (I can't think how) everything
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
231 works out ok when the blobs are unreferenced.
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
232
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
233 - Note, when replication is being used a blob's ref-count can be incremented
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
234 without incrementing the ref-counts of the corresponding blocklets.
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
235 How in the hell is this discrepancy reconciled without leaking blocklets
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
236 or deleting blocklets in use.
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
237
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
238 Appendix
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
239 ========
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
240
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
241 Misc
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
242 ----
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
243
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
244 .. uml:: images/class-hierarchy
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
245
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
246 package "BPW" #ffffff {
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
247 class File
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
248 class TagRef
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
249 }
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
250
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
251 package "BFST" #ffffff {
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
252 class Blob {
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
253 byte[64] tag
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
254 int ref-count
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
255 }
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
256
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
257 class HashRef
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
258
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
259 class Blocklet {
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
260 byte[64] hash
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
261 int ref-count
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
262 Flags flags
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
263 byte[] data
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
264 }
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
265 }
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
266
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
267 File "1" *- "1..*" TagRef
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
268 TagRef "1..*" *-- "1" Blob
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
269
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
270 Blob "1" *- "1..*" HashRef
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
271 HashRef "1..*" *- "1" Blocklet
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
272
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
273 hide methods
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
274
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
275 - store: blob gets converted into blocklets, matched blocklets have
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
276 ref-count incremented, new blocklets added. At the end we calculate
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
277 the tag from the hash of hashes. Then if the tag matches an existing
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
278 blob we increment the blob's ref-count AND the blob's blocklet-ref-count.
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
279
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
280 - replicate: we have the tag of the blob, if there is a match then increment
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
281 the blob's ref-count but NOT the bloc's blocklet-ref-count.
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
282
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
283 Documentation Resources
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
284 -----------------------
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
285
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
286 - make USE_PLANTUML=true doc ; ${BROWSER} index.html
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
287
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
288 - ${BFST_ROOT}/blockpool/docs, ${BFST_ROOT}/libfilter/docs,
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
289 ${BFST_ROOT}/blockpool/api/docs, ${BFST_ROOT}/blockpool/cli/docs
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
290
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
291 - Wiki links
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
292
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
293 - Misc
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
294
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
295 - http://wiki.adl.quantum.com/index.php/Tips_and_Tricks
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
296
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
297 - Building on Linux:
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
298
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
299 - http://wiki.adl.quantum.com/index.php/Compiling_Blockpool_On_Linux
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
300
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
301 - http://wiki.adl.quantum.com/index.php/BuildInfrastructure
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
302
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
303 - `Document repository
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
304 <http://wiki.adl.quantum.com/index.php/Document_Repository>`_
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
305
a1c2b56cb44d Beginnings of rst doc with embedded plantuml
David Bryant <bagnose@gmail.com>
parents:
diff changeset
306 - `C Coding Standard <http://inside.adl.quantum.com/nlee/cstan/>`_