From a80194fe060f0273336fe80e16db5634a510bef1 Mon Sep 17 00:00:00 2001 From: hjlarry Date: Wed, 17 Dec 2025 14:46:56 +0800 Subject: [PATCH] use SANDBOX_RECORDS_CLEAN_GRACEFUL_PERIOD env --- api/configs/feature/__init__.py | 19 ++++++++++++------- ...ear_free_plan_expired_workflow_run_logs.py | 2 +- ...ear_free_plan_expired_workflow_run_logs.py | 6 +++++- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/api/configs/feature/__init__.py b/api/configs/feature/__init__.py index 0ca317ee44..8fea64b841 100644 --- a/api/configs/feature/__init__.py +++ b/api/configs/feature/__init__.py @@ -647,13 +647,6 @@ class BillingConfig(BaseSettings): default=False, ) - BILLING_FREE_PLAN_GRACE_PERIOD_DAYS: NonNegativeInt = Field( - description=( - "Extra grace period in days applied after a tenant leaves a paid plan before being treated as free." - ), - default=21, - ) - class UpdateConfig(BaseSettings): """ @@ -1159,6 +1152,17 @@ class CeleryScheduleTasksConfig(BaseSettings): ) +class SandboxRecordsCleanConfig(BaseSettings): + SANDBOX_RECORDS_CLEAN_GRACEFUL_PERIOD: NonNegativeInt = Field( + description="Graceful period in days for sandbox records clean after subscription expiration", + default=21, + ) + SANDBOX_RECORDS_CLEAN_BATCH_SIZE: PositiveInt = Field( + description="Maximum number of records to process in each batch", + default=1000, + ) + + class PositionConfig(BaseSettings): POSITION_PROVIDER_PINS: str = Field( description="Comma-separated list of pinned model providers", @@ -1306,6 +1310,7 @@ class FeatureConfig( PositionConfig, RagEtlConfig, RepositoryConfig, + SandboxRecordsCleanConfig, SecurityConfig, TenantIsolatedTaskQueueConfig, ToolConfig, diff --git a/api/services/clear_free_plan_expired_workflow_run_logs.py b/api/services/clear_free_plan_expired_workflow_run_logs.py index 0589bb4868..6c17e9ddb4 100644 --- a/api/services/clear_free_plan_expired_workflow_run_logs.py +++ b/api/services/clear_free_plan_expired_workflow_run_logs.py @@ -45,7 +45,7 @@ class WorkflowRunCleanup: self.batch_size = batch_size self.billing_cache: dict[str, TenantPlanInfo | None] = {} self.dry_run = dry_run - self.free_plan_grace_period_days = dify_config.BILLING_FREE_PLAN_GRACE_PERIOD_DAYS + self.free_plan_grace_period_days = dify_config.SANDBOX_RECORDS_CLEAN_GRACEFUL_PERIOD self.workflow_run_repo: APIWorkflowRunRepository if workflow_run_repo: self.workflow_run_repo = workflow_run_repo diff --git a/api/tests/unit_tests/services/test_clear_free_plan_expired_workflow_run_logs.py b/api/tests/unit_tests/services/test_clear_free_plan_expired_workflow_run_logs.py index 66cd7ff8c9..aca7f6f669 100644 --- a/api/tests/unit_tests/services/test_clear_free_plan_expired_workflow_run_logs.py +++ b/api/tests/unit_tests/services/test_clear_free_plan_expired_workflow_run_logs.py @@ -74,7 +74,11 @@ def create_cleanup( grace_period_days: int = 0, **kwargs: Any, ) -> WorkflowRunCleanup: - monkeypatch.setattr(cleanup_module.dify_config, "BILLING_FREE_PLAN_GRACE_PERIOD_DAYS", grace_period_days) + monkeypatch.setattr( + cleanup_module.dify_config, + "SANDBOX_RECORDS_CLEAN_GRACEFUL_PERIOD", + grace_period_days, + ) return WorkflowRunCleanup(workflow_run_repo=repo, **kwargs)