From 9601b4e1ec3297d0513fc4878177a30283e85e8d Mon Sep 17 00:00:00 2001 From: DanielElisenberg Date: Tue, 3 Jun 2025 12:26:02 +0200 Subject: [PATCH 1/2] cache_implementation: test --- metadata_service/adapter/datastore.py | 33 +++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/metadata_service/adapter/datastore.py b/metadata_service/adapter/datastore.py index 97c1817..e651ebd 100644 --- a/metadata_service/adapter/datastore.py +++ b/metadata_service/adapter/datastore.py @@ -1,10 +1,13 @@ import json +from typing import Tuple from metadata_service.config import environment from metadata_service.domain.version import Version from metadata_service.exceptions.exceptions import DataNotFoundException DATASTORE_ROOT_DIR = environment.get("DATASTORE_ROOT_DIR") +NEWEST_CACHE: Tuple[str, dict] = ("", {}) +LAST_REQUEST_CACHE: Tuple[str, dict] = ("", {}) def get_draft_version() -> dict: @@ -21,18 +24,44 @@ def get_datastore_versions() -> dict: return json.load(f) -def get_metadata_all(version: Version) -> str: +def get_from_cache(file_version: str) -> dict | None: + if file_version == NEWEST_CACHE[0]: + return NEWEST_CACHE[1] + if file_version == LAST_REQUEST_CACHE[0]: + return LAST_REQUEST_CACHE[1] + return None + + +def update_cache(file_version: str, metadata_all): + global NEWEST_CACHE + global LAST_REQUEST_CACHE + if NEWEST_CACHE[0] == "" or LAST_REQUEST_CACHE == "": + NEWEST_CACHE = (file_version, metadata_all) + LAST_REQUEST_CACHE = (file_version, metadata_all) + elif file_version > NEWEST_CACHE[0]: + NEWEST_CACHE = (file_version, metadata_all) + else: + LAST_REQUEST_CACHE = (file_version, metadata_all) + + +def get_metadata_all(version: Version) -> dict: if version.is_draft(): file_version = "DRAFT" else: file_version = version.to_3_underscored() + metadata_all = get_from_cache(file_version) + if metadata_all is not None: + return metadata_all metadata_all_file_path = ( f"{DATASTORE_ROOT_DIR}/datastore/metadata_all__{file_version}.json" ) try: with open(metadata_all_file_path, "r", encoding="utf-8") as f: - return json.load(f) + metadata_all = json.load(f) + if not version.is_draft(): + update_cache(file_version, metadata_all) + return metadata_all except FileNotFoundError as e: raise DataNotFoundException( f"metadata_all for version {version} not found" From 88d2745ec7362f37e1b234f8ffeb4a562bca7693 Mon Sep 17 00:00:00 2001 From: Daniel Elisenberg <33904479+DanielElisenberg@users.noreply.github.com> Date: Tue, 3 Jun 2025 12:51:08 +0200 Subject: [PATCH 2/2] cache_implementation: pr fix MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Linn Bjørnerud <125447659+linnbjornerud@users.noreply.github.com> --- metadata_service/adapter/datastore.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metadata_service/adapter/datastore.py b/metadata_service/adapter/datastore.py index e651ebd..7085f57 100644 --- a/metadata_service/adapter/datastore.py +++ b/metadata_service/adapter/datastore.py @@ -35,7 +35,7 @@ def get_from_cache(file_version: str) -> dict | None: def update_cache(file_version: str, metadata_all): global NEWEST_CACHE global LAST_REQUEST_CACHE - if NEWEST_CACHE[0] == "" or LAST_REQUEST_CACHE == "": + if NEWEST_CACHE[0] == "" or LAST_REQUEST_CACHE[0] == "": NEWEST_CACHE = (file_version, metadata_all) LAST_REQUEST_CACHE = (file_version, metadata_all) elif file_version > NEWEST_CACHE[0]: