From 2b26774db469e5aa82f4bcd913a8127266af95b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Ma=C5=9Blanka?= <piotr.maslanka@henrietta.com.pl> Date: Tue, 1 Dec 2020 16:30:34 +0100 Subject: [PATCH] added get_open_series, fixed version in docs --- README.md | 2 +- docs/conf.py | 2 ++ setup.py | 2 +- tempsdb/database.pxd | 1 + tempsdb/database.pyx | 33 +++++++++++++++++++++++++++++---- tempsdb/series.pyx | 6 +++++- 6 files changed, 39 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 874b59a..69efa1c 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ So no variable encoding for you! ## v0.2 -* _TBA_ +* added `get_open_series` ## v0.1 diff --git a/docs/conf.py b/docs/conf.py index ed098b5..3c74354 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -16,11 +16,13 @@ # -- Project information ----------------------------------------------------- +import pkg_resources project = 'tempsdb' copyright = '2020, Piotr MaĹlanka' author = 'Piotr MaĹlanka' +release = pkg_resources.require("tempsdb")[0].version # -- General configuration --------------------------------------------------- diff --git a/setup.py b/setup.py index 5675e03..3fa4d7d 100644 --- a/setup.py +++ b/setup.py @@ -21,7 +21,7 @@ def find_pyx(*path) -> tp.List[str]: # setup(name='tempsdb', - version='0.2_a1', + version='0.2_a2', packages=['tempsdb'], install_requires=['satella>=2.14.21', 'ujson'], ext_modules=build([Multibuild('tempsdb', find_pyx('tempsdb')), ], diff --git a/tempsdb/database.pxd b/tempsdb/database.pxd index cfe5710..b837ae6 100644 --- a/tempsdb/database.pxd +++ b/tempsdb/database.pxd @@ -14,6 +14,7 @@ cdef class Database: cpdef TimeSeries create_series(self, str name, int block_size, unsigned long entries_per_chunk, int page_size=*) + cpdef list get_open_series(self) cpdef Database create_database(str path) diff --git a/tempsdb/database.pyx b/tempsdb/database.pyx index bf83cd5..96a294e 100644 --- a/tempsdb/database.pyx +++ b/tempsdb/database.pyx @@ -1,6 +1,8 @@ import os import threading +from satella.coding import DictDeleter + from tempsdb.exceptions import DoesNotExist, AlreadyExists from .series cimport TimeSeries, create_series @@ -20,6 +22,28 @@ cdef class Database: self.lock = threading.Lock() self.mpm = None + cpdef list get_open_series(self): + """ + Return all open series + + .. versionadded:: 0.2 + + :return: open series + :rtype: tp.List[TimeSeries] + """ + cdef: + list output = [] + TimeSeries series + str name + with self.lock: + with DictDeleter(self.open_series) as dd: + for name, series in dd.items(): + if series.closed: + dd.delete() + else: + output.append(series) + return series + cpdef TimeSeries get_series(self, name: str): """ Load and return an existing series @@ -92,8 +116,7 @@ cdef class Database: self.mpm = mpm cdef TimeSeries series for series in self.open_series.values(): - if not series.closed: - series.register_memory_pressure_manager(mpm) + series.register_memory_pressure_manager(mpm) # no-op if already closed return 0 def __del__(self): @@ -106,8 +129,10 @@ cdef class Database: if self.closed: return 0 cdef TimeSeries series - for series in self.open_series.values(): - series.close() + with self.lock: + for series in self.open_series.values(): + series.close() # because already closed series won't close themselves + self.open_series = {} self.closed = True return 0 diff --git a/tempsdb/series.pyx b/tempsdb/series.pyx index 41a9bb7..038cb1a 100644 --- a/tempsdb/series.pyx +++ b/tempsdb/series.pyx @@ -276,8 +276,12 @@ cdef class TimeSeries: Register a memory pressure manager. This registers :meth:`~tempsdb.series.TimeSeries.close_chunks` as remaining in severity - to be called each 30 minutes. + to be called each 30 seconds. + + No op if already closed """ + if self.closed: + return self.mpm = mpm.register_on_remaining_in_severity(1, 30)(self.close_chunks) cpdef int close_chunks(self) except -1: -- GitLab