Skip to content
Snippets Groups Projects
Commit d350725f authored by Piotr Maślanka's avatar Piotr Maślanka
Browse files

force closing var series

parent 6e409cf2
No related branches found
No related tags found
No related merge requests found
...@@ -322,7 +322,7 @@ cdef class Database: ...@@ -322,7 +322,7 @@ cdef class Database:
series.close() # because already closed series won't close themselves series.close() # because already closed series won't close themselves
self.open_series = {} self.open_series = {}
for var_series in self.open_varlen_series.values(): for var_series in self.open_varlen_series.values():
var_series.close() var_series.close(True)
self.open_varlen_series = {} self.open_varlen_series = {}
self.closed = True self.closed = True
return 0 return 0
......
...@@ -18,7 +18,7 @@ cdef class VarlenSeries: ...@@ -18,7 +18,7 @@ cdef class VarlenSeries:
int gzip_level int gzip_level
cpdef int mark_synced_up_to(self, unsigned long long timestamp) except -1 cpdef int mark_synced_up_to(self, unsigned long long timestamp) except -1
cpdef int close(self) except -1 cpdef int close(self, bint force=*) except -1
cpdef int delete(self) except -1 cpdef int delete(self) except -1
cpdef tuple get_current_value(self) cpdef tuple get_current_value(self)
cdef int get_length_for(self, int index) cdef int get_length_for(self, int index)
......
...@@ -300,6 +300,7 @@ cdef class VarlenIterator: ...@@ -300,6 +300,7 @@ cdef class VarlenIterator:
def __init__(self, parent: VarlenSeries, start: int, stop: int, def __init__(self, parent: VarlenSeries, start: int, stop: int,
direct_bytes: bool = False): direct_bytes: bool = False):
self.parent = parent self.parent = parent
self.parent.references += 1
self.start = start self.start = start
self.stop = stop self.stop = stop
self.direct_bytes = direct_bytes self.direct_bytes = direct_bytes
...@@ -596,18 +597,20 @@ cdef class VarlenSeries: ...@@ -596,18 +597,20 @@ cdef class VarlenSeries:
""" """
return self.length_profile[-1 if index >= len(self.length_profile) else index] return self.length_profile[-1 if index >= len(self.length_profile) else index]
cpdef int close(self) except -1: cpdef int close(self, bint force=False) except -1:
""" """
Close this series. Close this series.
No-op if already closed. No-op if already closed.
:param force: set to True to ignore open references
:raises StillOpen: some references are being held :raises StillOpen: some references are being held
""" """
if self.closed: if self.closed:
return 0 return 0
if self.references: if self.references and not force:
raise StillOpen('still some iterators around') raise StillOpen('still some iterators around')
self.closed = True self.closed = True
......
...@@ -31,7 +31,6 @@ class TestDatabase(unittest.TestCase): ...@@ -31,7 +31,6 @@ class TestDatabase(unittest.TestCase):
ser = self.db.get_varlen_series('hello-world') ser = self.db.get_varlen_series('hello-world')
self.assertEqual(ser.get_current_value(), (20, b'\x00\x00\x00')) self.assertEqual(ser.get_current_value(), (20, b'\x00\x00\x00'))
self.assertEqual(ser.last_entry_ts, 20)
ser.close() ser.close()
self.db.delete_varlen_series('hello-world') self.db.delete_varlen_series('hello-world')
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment