From d2bf2d8a8b447ba94bf59f4fcfba59c2ed0fd578 Mon Sep 17 00:00:00 2001 From: Thomas Rausch Date: Tue, 12 Sep 2023 21:09:37 +0200 Subject: [PATCH] add service_name attribute to AssetDirectory --- localstack/services/dynamodb/provider.py | 2 +- localstack/services/kinesis/provider.py | 2 +- localstack/services/opensearch/provider.py | 4 ++-- localstack/services/redshift/provider.py | 2 +- localstack/services/s3/v3/provider.py | 2 +- localstack/services/stepfunctions/provider.py | 2 +- localstack/state/core.py | 24 ++++++++++++------- 7 files changed, 23 insertions(+), 15 deletions(-) diff --git a/localstack/services/dynamodb/provider.py b/localstack/services/dynamodb/provider.py index 10dce8d009bcb..36d485e3ea1a2 100644 --- a/localstack/services/dynamodb/provider.py +++ b/localstack/services/dynamodb/provider.py @@ -363,7 +363,7 @@ def on_before_start(self): def accept_state_visitor(self, visitor: StateVisitor): visitor.visit(dynamodb_stores) visitor.visit(dynamodbstreams_stores) - visitor.visit(AssetDirectory(os.path.join(config.dirs.data, self.service))) + visitor.visit(AssetDirectory(self.service, os.path.join(config.dirs.data, self.service))) def on_before_state_reset(self): self.server.stop_dynamodb() diff --git a/localstack/services/kinesis/provider.py b/localstack/services/kinesis/provider.py index d4ce0c1dda219..16059c9890f7f 100644 --- a/localstack/services/kinesis/provider.py +++ b/localstack/services/kinesis/provider.py @@ -62,7 +62,7 @@ def __init__(self): def accept_state_visitor(self, visitor: StateVisitor): visitor.visit(kinesis_stores) - visitor.visit(AssetDirectory(os.path.join(config.dirs.data, "kinesis"))) + visitor.visit(AssetDirectory(self.service, os.path.join(config.dirs.data, "kinesis"))) def on_before_state_load(self): # no need to restart servers, since that happens lazily in `server_manager.get_server_for_account`. diff --git a/localstack/services/opensearch/provider.py b/localstack/services/opensearch/provider.py index 1d43cc327c964..b4aade3740e68 100644 --- a/localstack/services/opensearch/provider.py +++ b/localstack/services/opensearch/provider.py @@ -405,8 +405,8 @@ def get_store(account_id: str, region_name: str) -> OpenSearchStore: def accept_state_visitor(self, visitor: StateVisitor): visitor.visit(opensearch_stores) - visitor.visit(AssetDirectory(os.path.join(config.dirs.data, "opensearch"))) - visitor.visit(AssetDirectory(os.path.join(config.dirs.data, "elasticsearch"))) + visitor.visit(AssetDirectory(self.service, os.path.join(config.dirs.data, "opensearch"))) + visitor.visit(AssetDirectory(self.service, os.path.join(config.dirs.data, "elasticsearch"))) def on_after_state_load(self): """Starts clusters whose metadata has been restored.""" diff --git a/localstack/services/redshift/provider.py b/localstack/services/redshift/provider.py index 59f6eeade58f1..4f432e3a1aef5 100644 --- a/localstack/services/redshift/provider.py +++ b/localstack/services/redshift/provider.py @@ -37,7 +37,7 @@ def fix_keys(o, **kwargs): class RedshiftProvider(RedshiftApi): def accept_state_visitor(self, visitor: StateVisitor): visitor.visit(redshift_backends) - visitor.visit(AssetDirectory(os.path.join(config.dirs.data, "redshift"))) + visitor.visit(AssetDirectory(self.service, os.path.join(config.dirs.data, "redshift"))) @handler("DescribeClusterSecurityGroups", expand=False) def describe_cluster_security_groups( diff --git a/localstack/services/s3/v3/provider.py b/localstack/services/s3/v3/provider.py index e2fc0af1a261a..d5868b465d82f 100644 --- a/localstack/services/s3/v3/provider.py +++ b/localstack/services/s3/v3/provider.py @@ -304,7 +304,7 @@ def on_after_init(self): def accept_state_visitor(self, visitor: StateVisitor): visitor.visit(s3_stores) - visitor.visit(AssetDirectory(self._storage_backend.root_directory)) + visitor.visit(AssetDirectory(self.service, self._storage_backend.root_directory)) def on_before_state_save(self): self._storage_backend.flush() diff --git a/localstack/services/stepfunctions/provider.py b/localstack/services/stepfunctions/provider.py index 8f7ba23581982..059acb5b9fe4c 100644 --- a/localstack/services/stepfunctions/provider.py +++ b/localstack/services/stepfunctions/provider.py @@ -38,7 +38,7 @@ def get_forward_url(self) -> str: return f"http://{LOCALHOST}:{config.LOCAL_PORT_STEPFUNCTIONS}" def accept_state_visitor(self, visitor: StateVisitor): - visitor.visit(AssetDirectory(os.path.join(config.dirs.data, self.service))) + visitor.visit(AssetDirectory(self.service, os.path.join(config.dirs.data, self.service))) def on_before_start(self): start_stepfunctions() diff --git a/localstack/state/core.py b/localstack/state/core.py index b067b280e4021..f76d7f72b4e72 100644 --- a/localstack/state/core.py +++ b/localstack/state/core.py @@ -2,14 +2,17 @@ import io from typing import IO, Any, Protocol, runtime_checkable -StateContainer = Any -"""While a StateContainer can in principle be anything, localstack currently supports by default the following -containers: -- BackendDict (moto backend state) -- AccountRegionBundle (localstack stores) -- AssetDirectory (folders on disk) -""" +class StateContainer(Protocol): + """While a StateContainer can in principle be anything, localstack currently supports by default the following + containers: + + - BackendDict (moto backend state) + - AccountRegionBundle (localstack stores) + - AssetDirectory (folders on disk) + """ + + service_name: str class StateLifecycleHook: @@ -70,12 +73,17 @@ class AssetDirectory: A state container manifested as a directory on the file system. """ + service_name: str path: str - def __init__(self, path: str): + def __init__(self, service_name: str, path: str): + if not service_name: + raise ValueError("service name must be set") + if not path: raise ValueError("path must be set") + self.service_name = service_name self.path = path def __str__(self):