Browse Source

Fix issue with delete only transactions

Jonas Borgström 12 years ago
parent
commit
938901d7aa
1 changed files with 22 additions and 2 deletions
  1. 22 2
      darc/store.py

+ 22 - 2
darc/store.py

@@ -216,7 +216,9 @@ class Store(object):
             segment, _ = self.index[id]
             self.segments[segment] -= 1
             self.compact.add(segment)
-            self.compact.add(self.io.write_delete(id))
+            segment = self.io.write_delete(id)
+            self.segments.setdefault(segment, 0)
+            self.compact.add(segment)
         except KeyError:
             pass
         segment, offset = self.io.write_put(id, data)
@@ -232,7 +234,9 @@ class Store(object):
             segment, offset = self.index.pop(id)
             self.segments[segment] -= 1
             self.compact.add(segment)
-            self.compact.add(self.io.write_delete(id))
+            segment = self.io.write_delete(id)
+            self.compact.add(segment)
+            self.segments.setdefault(segment, 0)
         except KeyError:
             raise self.DoesNotExist
 
@@ -466,6 +470,22 @@ class StoreTestCase(unittest.TestCase):
         self.store.rollback()
         self.assertEqual(self.store.get('00000000000000000000000000000000'), 'foo')
 
+    def test_single_kind_transactions(self):
+        # put
+        self.store.put('00000000000000000000000000000000', 'foo')
+        self.store.commit()
+        self.store.close()
+        # replace
+        self.store = self.open()
+        self.store.put('00000000000000000000000000000000', 'bar')
+        self.store.commit()
+        self.store.close()
+        # delete
+        self.store = self.open()
+        self.store.delete('00000000000000000000000000000000')
+        self.store.commit()
+
+
 
 def suite():
     return unittest.TestLoader().loadTestsFromTestCase(StoreTestCase)