Cromwell release-49 新特性解析

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: 近期发布的 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月前
|
存储 Java
深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。
【10月更文挑战第16天】本文深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。HashSet基于哈希表实现,添加元素时根据哈希值分布,遍历时顺序不可预测;而TreeSet利用红黑树结构,按自然顺序或自定义顺序存储元素,确保遍历时有序输出。文章还提供了示例代码,帮助读者更好地理解这两种集合类型的使用场景和内部机制。
48 3
|
2月前
|
存储 算法 Java
解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用
在Java中,Set接口以其独特的“无重复”特性脱颖而出。本文通过解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用。
55 3
|
2月前
|
缓存 JavaScript 前端开发
Vue3与Vue2生命周期对比:新特性解析与差异探讨
Vue3与Vue2生命周期对比:新特性解析与差异探讨
150 2
|
1月前
|
编译器 C# 开发者
C# 9.0 新特性解析
C# 9.0 是微软在2020年11月随.NET 5.0发布的重大更新,带来了一系列新特性和改进,如记录类型、初始化器增强、顶级语句、模式匹配增强、目标类型的新表达式、属性模式和空值处理操作符等,旨在提升开发效率和代码可读性。本文将详细介绍这些新特性,并提供代码示例和常见问题解答。
46 7
C# 9.0 新特性解析
|
25天前
|
编译器 PHP 开发者
PHP 8新特性解析与实战应用####
随着PHP 8的发布,这一经典编程语言迎来了诸多令人瞩目的新特性和性能优化。本文将深入探讨PHP 8中的几个关键新功能,包括命名参数、JIT编译器、新的字符串处理函数以及错误处理改进等。通过实际代码示例,展示如何在现有项目中有效利用这些新特性来提升代码的可读性、维护性和执行效率。无论你是PHP新手还是经验丰富的开发者,本文都将为你提供实用的技术洞察和最佳实践指导。 ####
28 1
|
26天前
|
数据安全/隐私保护 iOS开发 开发者
iOS 14隐私保护新特性深度解析####
随着数字时代的到来,隐私保护已成为全球用户最为关注的问题之一。苹果在最新的iOS 14系统中引入了一系列创新功能,旨在增强用户的隐私和数据安全。本文将深入探讨iOS 14中的几大隐私保护新特性,包括App跟踪透明度、剪贴板访问通知和智能防追踪功能,分析这些功能如何提升用户隐私保护,并评估它们对开发者和用户体验的影响。 ####
|
1月前
|
PHP 开发者
PHP 7新特性深度解析
【10月更文挑战第40天】随着PHP 7的发布,这个广泛使用的语言带来了许多令人兴奋的新特性和性能改进。本文将深入探讨PHP 7的主要变化,包括类型声明、错误处理机制、性能优化等方面,帮助开发者更好地理解和应用这些新特性。
34 4
|
1月前
|
C# 开发者
C# 10.0 新特性解析
C# 10.0 在性能、可读性和开发效率方面进行了多项增强。本文介绍了文件范围的命名空间、记录结构体、只读结构体、局部函数的递归优化、改进的模式匹配和 lambda 表达式等新特性,并通过代码示例帮助理解这些特性。
36 2
|
1月前
|
PHP 开发者
PHP 7新特性深度解析及其最佳实践
【10月更文挑战第31天】本文将深入探讨PHP 7带来的革新,从性能提升到语法改进,再到错误处理机制的变革。我们将通过实际代码示例,展示如何高效利用这些新特性来编写更加健壮和高效的PHP应用。无论你是PHP新手还是资深开发者,这篇文章都将为你打开一扇窗,让你看到PHP 7的强大之处。
|
1月前
|
安全 编译器 PHP
PHP 8新特性解析与实践应用####
————探索PHP 8的创新功能及其在现代Web开发中的实际应用

推荐镜像

更多