avoid unnecessary code regeneration when the workflow has non task based blocks (#4071)
This commit is contained in:
@@ -127,6 +127,16 @@ DEFAULT_FIRST_BLOCK_LABEL = "block_1"
|
|||||||
DEFAULT_WORKFLOW_TITLE = "New Workflow"
|
DEFAULT_WORKFLOW_TITLE = "New Workflow"
|
||||||
|
|
||||||
CacheInvalidationReason = Literal["updated_block", "new_block", "removed_block"]
|
CacheInvalidationReason = Literal["updated_block", "new_block", "removed_block"]
|
||||||
|
BLOCK_TYPES_THAT_SHOULD_BE_CACHED = {
|
||||||
|
BlockType.TASK,
|
||||||
|
BlockType.TaskV2,
|
||||||
|
BlockType.VALIDATION,
|
||||||
|
BlockType.ACTION,
|
||||||
|
BlockType.NAVIGATION,
|
||||||
|
BlockType.EXTRACTION,
|
||||||
|
BlockType.LOGIN,
|
||||||
|
BlockType.FILE_DOWNLOAD,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
@@ -961,6 +971,7 @@ class WorkflowService:
|
|||||||
and block.label
|
and block.label
|
||||||
and block_result.status == BlockStatus.completed
|
and block_result.status == BlockStatus.completed
|
||||||
and not getattr(block, "disable_cache", False)
|
and not getattr(block, "disable_cache", False)
|
||||||
|
and block.block_type in BLOCK_TYPES_THAT_SHOULD_BE_CACHED
|
||||||
):
|
):
|
||||||
blocks_to_update.add(block.label)
|
blocks_to_update.add(block.label)
|
||||||
if block_result.status == BlockStatus.canceled:
|
if block_result.status == BlockStatus.canceled:
|
||||||
@@ -3320,12 +3331,16 @@ class WorkflowService:
|
|||||||
if script_block.script_block_label:
|
if script_block.script_block_label:
|
||||||
cached_block_labels.add(script_block.script_block_label)
|
cached_block_labels.add(script_block.script_block_label)
|
||||||
|
|
||||||
definition_labels = {block.label for block in workflow.workflow_definition.blocks if block.label}
|
should_cache_block_labels = {
|
||||||
definition_labels.add(settings.WORKFLOW_START_BLOCK_LABEL)
|
block.label
|
||||||
|
for block in workflow.workflow_definition.blocks
|
||||||
|
if block.label and block.block_type in BLOCK_TYPES_THAT_SHOULD_BE_CACHED
|
||||||
|
}
|
||||||
|
should_cache_block_labels.add(settings.WORKFLOW_START_BLOCK_LABEL)
|
||||||
cached_block_labels.add(settings.WORKFLOW_START_BLOCK_LABEL)
|
cached_block_labels.add(settings.WORKFLOW_START_BLOCK_LABEL)
|
||||||
|
|
||||||
if cached_block_labels != definition_labels:
|
if cached_block_labels != should_cache_block_labels:
|
||||||
missing_labels = definition_labels - cached_block_labels
|
missing_labels = should_cache_block_labels - cached_block_labels
|
||||||
if missing_labels:
|
if missing_labels:
|
||||||
blocks_to_update.update(missing_labels)
|
blocks_to_update.update(missing_labels)
|
||||||
# Always rebuild the orchestrator if the definition changed
|
# Always rebuild the orchestrator if the definition changed
|
||||||
@@ -3345,6 +3360,18 @@ class WorkflowService:
|
|||||||
)
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
LOG.info(
|
||||||
|
"deleting old workflow script and generating new script",
|
||||||
|
workflow_id=workflow.workflow_id,
|
||||||
|
workflow_run_id=workflow_run.workflow_run_id,
|
||||||
|
cache_key_value=rendered_cache_key_value,
|
||||||
|
script_id=existing_script.script_id,
|
||||||
|
script_revision_id=existing_script.script_revision_id,
|
||||||
|
run_with=workflow_run.run_with,
|
||||||
|
blocks_to_update=list(blocks_to_update),
|
||||||
|
code_gen=code_gen,
|
||||||
|
)
|
||||||
|
|
||||||
# delete the existing workflow scripts if any
|
# delete the existing workflow scripts if any
|
||||||
await app.DATABASE.delete_workflow_scripts_by_permanent_id(
|
await app.DATABASE.delete_workflow_scripts_by_permanent_id(
|
||||||
organization_id=workflow.organization_id,
|
organization_id=workflow.organization_id,
|
||||||
|
|||||||
Reference in New Issue
Block a user