Files
MemoryBear/api/app/core/compensation.py
2025-12-15 14:09:43 +08:00

48 lines
1.6 KiB
Python

"""
Compensation Transaction Handler
Handles operations that cannot be rolled back (like file system operations).
"""
from typing import List, Callable
from app.core.logging_config import get_logger
logger = get_logger(__name__)
class CompensationHandler:
"""补偿事务处理器,用于处理无法回滚的操作"""
def __init__(self):
self._compensations: List[Callable] = []
def register(self, compensation: Callable):
"""
注册补偿操作
Args:
compensation: 补偿操作的可调用对象
"""
self._compensations.append(compensation)
logger.debug(f"Registered compensation operation: {compensation.__name__ if hasattr(compensation, '__name__') else 'lambda'}")
def execute(self):
"""执行所有补偿操作(按注册的逆序执行)"""
if not self._compensations:
logger.debug("No compensation operations to execute")
return
logger.info(f"Executing {len(self._compensations)} compensation operations")
for compensation in reversed(self._compensations):
try:
compensation()
logger.debug("Compensation operation executed successfully")
except Exception as e:
logger.error(f"补偿操作失败: {e}", exc_info=True)
def clear(self):
"""清空补偿操作"""
count = len(self._compensations)
self._compensations.clear()
if count > 0:
logger.debug(f"Cleared {count} compensation operations")