Document the ACID properties of the store.
David Blume

David Blume commited on 2016-09-12 20:54:13
Showing 2 changed files, with 15 additions and 4 deletions.

... ...
@@ -2,6 +2,15 @@
2 2
 
3 3
 kvs is a rudimentary key/value store written in Python.
4 4
 
5
+## Dependencies and Guarantees
6
+
7
+kvs was written as an experiment. The master branch uses a local file for its backing store. Its ACID properties are as follows:
8
+
9
+* **Atomicity**: Either all tuples in a transaction are successfully saved or none are.
10
+* **Consistency**: Only valid states are saved, and saves are atomic. 
11
+* **Isolation**: All transactions are serialized.
12
+* **Durability**: System failure or restart won't break the store. Store writes are atomic.
13
+
5 14
 # Getting the project
6 15
 
7 16
 You can get a copy of this project by clicking on the
... ...
@@ -142,9 +142,13 @@ if __name__ == '__main__':
142 142
         with open('auth.txt', 'r') as f:
143 143
             authorization = f.read().strip()
144 144
         if doing_post and auth == authorization:
145
+            print "Content-type: text/plain; charset=utf-8\n"
145 146
             for new_key in args:
146
-                if new_key not in ('auth', ) and \
147
-                    len(new_key) < 80 and len(args[new_key].value) < 140:
147
+                if new_key  =='auth':
148
+                    continue
149
+                if  len(new_key) > 80 or len(args[new_key].value) > 140:
150
+                    print "Error: A key or value was too long."
151
+                    sys.exit(0)
148 152
                 if new_key in store and 'created' in store[new_key]:
149 153
                     created_time = store[new_key]['created']
150 154
                 else:
... ...
@@ -155,9 +159,7 @@ if __name__ == '__main__':
155 159
                                   'origin': os.environ['REMOTE_ADDR']}
156 160
             write_file(os.path.join(localdir, store_name), store)
157 161
             wrote_response = True
158
-                    print "Content-type: text/plain; charset=utf-8\n"
159 162
             print "OK"
160
-                    break
161 163
         elif not os.environ['QUERY_STRING'] and not doing_post:
162 164
             # just the home page, then
163 165
             print "Content-type: text/plain; charset=UTF-8\n"
164 166