Cromwell release-49 新特性解析

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 近期发布的 Cromwell release-49 版本发布了 Task 级别 Callcaching 开关和中间数据删除两个比较有用的新特性,下面对这些特性做个解析。

Task 级别 Callcaching 开关

我们知道,Callcaching是否启用可以通过如下方式来控制:

  • 配置文件:控制全局的Callcaching 是否开启
# Optional call-caching configuration.
call-caching {
  # Allows re-use of existing results for jobs you've already run
  # (default: false)
  enabled = true

  # Whether to invalidate a cache result forever if we cannot reuse them. Disable this if you expect some cache copies
  # to fail for external reasons which should not invalidate the cache (e.g. auth differences between users):
  # (default: true)
  invalidate-bad-cache-results = true
}

enabled 设置为 true 时,表示 Callcaching 开启,反正 Callcaching 关闭。

  • 提交工作流时的option选项
{
  "read_from_cache": true,
  "write_to_cache": true
}

其中 read_from_cache 表示本次工作流的执行是否从 cache 读取数据,即是否复用之前的运行结果。write_to_cache 表示本次工作流的执行结果是否写入 cache,即本次运行的结果是否给后面的执行复用。

但在有些场景下,我们需要工作流中的某个指定 task 每次都重新运行,即不使用 Callcaching。使用上面的方式是无法支持的。从 Release-49 版本开始,Cromwell 支持对单个 task 设置是否启用 Callcaching(官方文档),下面对这个特性做个介绍。

使用方法

具体来讲,我们可以在 task 定义的 meta 部分使用 volatile 来指定当前 task 是否使用 Callcaching,例如:

version 1.0

task make_random_int {

  meta {
    volatile: true
  }

  command <<<
    echo $RANDOM
  >>>

  output {
    Int random = read_string(stdout())
  }
}

volatile 设置为 true 时,表示当前 task 需要重新执行,不启用 Callcaching。不设置时,默认为false。

其实volatile在计算机编程语言中是个常见的关键字,比如在 C/C++/Java 等语言中都有,只不过各自代表的含义不同。例如在C语言中,volatile 关键字可以用来提醒编译器它后面所定义的变量随时有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有 volatile 关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现不一致的现象。

在 WDL 中,volatile的含义和C语言有点类似,表示当前的 task,需要每次都重新执行不要使用 Cache 中的记录。

中间文件删除

我们在使用 Cromwell 运行 WDL 的时候可能有这样的经历:一个工作流有若干个 task,每个 task 都会产生一定的输出文件。但是整个 Workflow 的输出是最后一个 Task 的输出,也就是说如果工作流运行结束后,只有最后一个 task 的输出是需要保存的,其他 task 的输出都属于中间文件。例如:

task task1 {
  input {
    File file1
    File file2
  }
  command {
    python do_stuff.py ${file2} ${file2}
  }
  output {
    File results = stdout()
  }
}

task task2 {
  input {
    File foobar
  }
  command {
    python do_stuff2.py ${foobar}
  }
  output {
    File results = stdout()
  }
}

workflow wf {
  input {
    File file1
    File file2
  }

  call task1 {
      input: file1 = file1, file2 = file2
  }
  call task2 {
    input: foobar=task1.results
  }

  output {
      File finals = task2.results
  }
}

在上面的例子中,workflow 最终的输出,只是task2的输出 results 这一个文件。但在 task1 中我们还产生了 task1.results 这样一个中间文件。
如果这些中间文件比较大的话,会占用较多的存储空间,不管是线上存储还是云上存储,都意味着成本。

Release-49 版本开始,Cromwell 支持一个 workflow option,来设置工作流运行结束后是否要将中间文件删除。

使用方法

要使用这个特性,需要配置两个地方:

  • 全局配置中,设置 delete-workflow-files 开关打开
system {
  # Option to allow Cromwell to delete intermediate output files once the workflow succeeds
  delete-workflow-files = true
}
  • 提交工作流时,在 option 中设置 delete_intermediate_output_files 为 true,表示当前工作流需要删除中间文件
{
  "delete_intermediate_output_files": true
}
目录
相关文章
|
2天前
|
PHP 开发者
PHP 7新特性深度解析与实践应用
【9月更文挑战第17天】本文将深入探讨PHP 7的新特性及其对开发者的实际影响,同时通过实例演示如何有效利用这些特性优化代码和提高性能。我们将从类型声明的增强开始,逐步深入到其他关键改进点,最后通过一个综合案例展示如何将这些新特性应用于日常开发中。
|
15天前
|
安全 Android开发 iOS开发
安卓与iOS的较量:技术特性与用户体验的深度解析
在移动操作系统的战场上,安卓和iOS一直占据着主导地位。本文将深入探讨这两大平台的核心技术特性,以及它们如何影响用户的体验。我们将从系统架构、应用生态、安全性能和创新功能四个方面进行比较,帮助读者更好地理解这两个系统的异同。
45 3
|
24天前
|
机器学习/深度学习 API PHP
PHP 7新特性深度解析与应用实践深入浅出:用深度学习识别手写数字
【8月更文挑战第27天】随着PHP 7的发布,这个广受欢迎的Web开发语言带来了许多令人兴奋的新特性。本文将深入探讨这些新特性,并展示如何在实际项目中利用它们来提升代码的性能和可维护性。无论你是PHP新手还是资深开发者,这篇文章都将为你提供宝贵的见解和实用的技巧。
|
1天前
|
自动驾驶 物联网 5G
深入解析5G NR(新无线电)及其主要特性
深入解析5G NR(新无线电)及其主要特性
12 2
|
7天前
|
PHP
PHP 7新特性深度解析与实践
【9月更文挑战第13天】本文将深入探讨PHP 7的新特性,包括性能提升、语法改进、错误处理等方面。我们将通过实例代码来展示这些新特性的使用方法和优势,帮助您更好地理解和应用PHP 7。
|
10天前
|
编译器 PHP 开发者
PHP 7新特性深度解析
在这篇文章中,我们将深入探讨PHP 7带来的一系列新特性,包括性能提升、语法改进等方面。通过对比分析,我们将揭示这些变化如何影响开发者的编码实践和应用程序的性能优化。
|
11天前
|
编译器 PHP 开发者
PHP 8新特性解析与应用实践
PHP 8作为PHP语言的最新版本,带来了许多令人兴奋的新特性和性能改进。本文将深入探讨PHP 8中的JIT编译器、联合类型、匹配表达式等关键更新,并通过实例演示如何在项目中有效利用这些新工具,帮助开发者提升代码质量和执行效率。
|
21天前
|
Java API
Java 8新特性:Lambda表达式与Stream API的深度解析
【7月更文挑战第61天】本文将深入探讨Java 8中的两个重要特性:Lambda表达式和Stream API。我们将首先介绍Lambda表达式的基本概念和语法,然后详细解析Stream API的使用和优势。最后,我们将通过实例代码演示如何结合使用Lambda表达式和Stream API,以提高Java编程的效率和可读性。
|
22天前
|
Rust JavaScript 前端开发
Rust! 无VDom! 尤雨溪解析 Vue.js 2024 新特性
Rust! 无VDom! 尤雨溪解析 Vue.js 2024 新特性
|
24天前
|
编译器 PHP 开发者
PHP 7新特性深度解析与实践深入浅出PHP:构建你的第一个动态网页
【8月更文挑战第27天】本文将深入探讨PHP 7的新特性,包括性能提升、语法改进等,并通过代码示例展示如何在实际项目中应用这些新特性。同时,我们还将讨论如何优化现有项目以充分利用PHP 7的优势。让我们一起探索PHP 7的世界,提升开发效率和项目质量!

热门文章

最新文章