Prechádzať zdrojové kódy

Compact segments in order to avoid left over commit tags

Jonas Borgström 13 rokov pred
rodič
commit
2d721232f9
1 zmenil súbory, kde vykonal 4 pridanie a 4 odobranie
  1. 4 4
      darc/store.py

+ 4 - 4
darc/store.py

@@ -136,7 +136,7 @@ class Store(object):
         def lookup(tag, key):
             return tag == TAG_PUT and self.index.get(key, (-1, -1))[0] == segment
         segments = self.segments
-        for segment in self.compact:
+        for segment in sorted(self.compact):
             if segments[segment] > 0:
                 for tag, key, data in self.io.iter_objects(segment, lookup, include_data=True):
                     new_segment, offset = self.io.write_put(key, data)
@@ -298,8 +298,8 @@ class LoggedIO(object):
     def segment_filename(self, segment):
         return os.path.join(self.path, 'data', str(segment / self.segments_per_dir), str(segment))
 
-    def get_write_fd(self):
-        if self.offset and self.offset > self.limit:
+    def get_write_fd(self, no_new=False):
+        if not no_new and self.offset and self.offset > self.limit:
             self.close_segment()
         if not self._write_fd:
             if self.segment % self.segments_per_dir == 0:
@@ -387,7 +387,7 @@ class LoggedIO(object):
         return self.segment
 
     def write_commit(self):
-        fd = self.get_write_fd()
+        fd = self.get_write_fd(no_new=True)
         header = self.header_no_crc_fmt.pack(self.header_fmt.size, TAG_COMMIT)
         crc = self.crc_fmt.pack(crc32(header) & 0xffffffff)
         fd.write(''.join((crc, header)))