UN-2874 Address CodeRabbit review: Add lock TTL and error checking for destination processing
- Add lock TTL (10 min default) to prevent deadlock if worker crashes during destination processing - Add error check before marking DESTINATION_PROCESSING SUCCESS to ensure no false success status - Add DESTINATION_PROCESSING_LOCK_TTL_IN_SECOND=600 to workers/sample.env 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -257,6 +257,7 @@ MAX_PARALLEL_FILE_BATCHES=1
|
||||
# File Execution TTL Configuration
|
||||
FILE_EXECUTION_TRACKER_TTL_IN_SECOND=18000
|
||||
FILE_EXECUTION_TRACKER_COMPLETED_TTL_IN_SECOND=300
|
||||
DESTINATION_PROCESSING_LOCK_TTL_IN_SECOND=300
|
||||
EXECUTION_RESULT_TTL_SECONDS=86400
|
||||
EXECUTION_CACHE_TTL_SECONDS=86400
|
||||
INSTANT_WF_POLLING_TIMEOUT=300
|
||||
|
||||
@@ -352,9 +352,13 @@ class WorkerDestinationConnector:
|
||||
|
||||
# Atomically acquire lock by setting DESTINATION_PROCESSING stage
|
||||
# This prevents race conditions - first worker to set this stage wins
|
||||
# Use shorter TTL for lock to prevent deadlock if worker crashes (10 min default)
|
||||
LOCK_TTL = int(
|
||||
os.environ.get("DESTINATION_PROCESSING_LOCK_TTL_IN_SECOND", 600)
|
||||
)
|
||||
try:
|
||||
logger.info(
|
||||
f"Acquiring destination processing lock for file '{file_ctx.file_name}'"
|
||||
f"Acquiring destination processing lock for file '{file_ctx.file_name}' with TTL {LOCK_TTL}s"
|
||||
)
|
||||
tracker.update_stage_status(
|
||||
exec_ctx.execution_id,
|
||||
@@ -363,6 +367,7 @@ class WorkerDestinationConnector:
|
||||
stage=FileExecutionStage.DESTINATION_PROCESSING,
|
||||
status=FileExecutionStageStatus.IN_PROGRESS,
|
||||
),
|
||||
ttl_in_second=LOCK_TTL,
|
||||
)
|
||||
logger.info(
|
||||
f"Successfully acquired destination processing lock for file '{file_ctx.file_name}'"
|
||||
|
||||
@@ -230,8 +230,13 @@ class WorkerWorkflowExecutionService:
|
||||
)
|
||||
logger.info(f"Destination processing completed for {file_name}")
|
||||
|
||||
# Mark destination processing as successful
|
||||
if workflow_file_execution_id and workflow_success:
|
||||
# Mark destination processing as successful - only if workflow succeeded AND no destination errors
|
||||
if (
|
||||
workflow_file_execution_id
|
||||
and workflow_success
|
||||
and destination_result
|
||||
and not destination_result.error
|
||||
):
|
||||
try:
|
||||
tracker = FileExecutionStatusTracker()
|
||||
tracker.update_stage_status(
|
||||
|
||||
Reference in New Issue
Block a user