diff --git a/tempsdb/database.pyx b/tempsdb/database.pyx index d79343ad2fc0114a04d89eda9dc15f8cecc69aa9..fd2e3f3fce5a463e40e8b01b5c1922ddc48de091 100644 --- a/tempsdb/database.pyx +++ b/tempsdb/database.pyx @@ -322,7 +322,7 @@ cdef class Database: series.close() # because already closed series won't close themselves self.open_series = {} for var_series in self.open_varlen_series.values(): - var_series.close() + var_series.close(True) self.open_varlen_series = {} self.closed = True return 0 diff --git a/tempsdb/varlen.pxd b/tempsdb/varlen.pxd index 1657cccf0e8cdb60dad88af8b784ae60e192489d..76990eda0e1f8d889550a3b8cf5d29bbdf4c8846 100644 --- a/tempsdb/varlen.pxd +++ b/tempsdb/varlen.pxd @@ -18,7 +18,7 @@ cdef class VarlenSeries: int gzip_level 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 tuple get_current_value(self) cdef int get_length_for(self, int index) diff --git a/tempsdb/varlen.pyx b/tempsdb/varlen.pyx index 99d252cb91faebdfedb93d4c298caa8655730ed0..36c9f1d2504fba9e831b8b1c8fd39e1b49f0973b 100644 --- a/tempsdb/varlen.pyx +++ b/tempsdb/varlen.pyx @@ -300,6 +300,7 @@ cdef class VarlenIterator: def __init__(self, parent: VarlenSeries, start: int, stop: int, direct_bytes: bool = False): self.parent = parent + self.parent.references += 1 self.start = start self.stop = stop self.direct_bytes = direct_bytes @@ -596,18 +597,20 @@ cdef class VarlenSeries: """ 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. No-op if already closed. + :param force: set to True to ignore open references + :raises StillOpen: some references are being held """ if self.closed: return 0 - if self.references: + if self.references and not force: raise StillOpen('still some iterators around') self.closed = True diff --git a/tests/test_database.py b/tests/test_database.py index 24ab2462861957af578be56a14c5145613e75d76..c46991e51c5020faf251201fe80c4532c82c2874 100644 --- a/tests/test_database.py +++ b/tests/test_database.py @@ -31,7 +31,6 @@ class TestDatabase(unittest.TestCase): ser = self.db.get_varlen_series('hello-world') self.assertEqual(ser.get_current_value(), (20, b'\x00\x00\x00')) - self.assertEqual(ser.last_entry_ts, 20) ser.close() self.db.delete_varlen_series('hello-world')