当前位置: 首页 > 知识库问答 >
问题:

Uber Cadence工作流版本控制

仲孙才捷
2023-03-14

节奏工作流版本控制:

工作流执行具有以下代码:

        int version1 = Workflow.getVersion("change123", Workflow.DEFAULT_VERSION, 1);
        logger.info("version1: {}", version1);

工作流1: o/p的开始--版本1:1

工作流实施中的更改:

        int version1 = Workflow.getVersion("change1234", Workflow.DEFAULT_VERSION, 2);
        logger.info("version1: {}", version1);       

工作流2: o/p的开始--版本1:2

工作流实施中的更改:

       int version1 = Workflow.getVersion("change12345", Workflow.DEFAULT_VERSION, 3);
       logger.info("version1: {}", version1);        

工作流3: o/p的开始--版本1:3

工作流2的重放:o/p版本1: -1

工作流重播 1 : o/p --version1: -1

我期待低于o / p

重播工作流程2: o/p--版本1:2

工作流重播 1 : o/p -- 版本 1: 1

这意味着我们一次只能维护两个版本的工作流代码,

当前版本和所有旧版本的getVersion将给出工作流。默认_版本

如果我错了,请纠正我!

共有1个答案

陈德泽
2023-03-14

问题是您传入了不同的更改 ID

要为同一部分维护不同的版本,您必须继续使用相同的change eID,除非稍后不推荐使用change eID,但您想再次进行更改。

ChangID 是工作流中的标识符,用于区分更改的不同部分。例如,您的工作流程:

String resA = activities.executeA();

String resB = activities.executeB();

如果您想对executeA=进行更改

int versionA = Workflow.getVersion("changeToA", Workflow.DEFAULT_VERSION, 1);

if(versionA == 1){
  String resA = activities.executeAA();
}else{
  String resA = activities.executeA();
}


String resB = activities.executeB();

然后如果你想改变executeAA=

int versionA = Workflow.getVersion("changeToA", Workflow.DEFAULT_VERSION, 2);

if(versionA == 2){
  String resA = activities.executeAAA();
}else if versionA == 1{
  String resA = activities.executeAA();
}else{
  String resA = activities.executeA();
}


String resB = activities.executeB();

以便您可以维护多个版本。

然后,如果您想进行更改以执行B=

int versionA = Workflow.getVersion("changeToA", Workflow.DEFAULT_VERSION, 2);

if(versionA == 2){
  String resA = activities.executeAAA();
}else if versionA == 1{
  String resA = activities.executeAA();
}else{
  String resA = activities.executeA();
}

int versionB = Workflow.getVersion("changeToB", Workflow.DEFAULT_VERSION, 1);

if(versionB == 1){
  String resB = activities.executeBB();
}else{
  String resB = activities.executeB();
}

这里的关键是理解change eID,它确实有点棘手,但是一旦你得到它,它就很强大。

在代码中,由于您始终进行不同的更改 ID,因此已启动的工作流(工作流 1 和工作流 2)将始终获得DEFAULT_VERSION(-1)。

在内部,当处于执行模式(非重放)时,getVersion会在执行代码时将带有MaxVersion的Marker事件写入历史记录。

在重放模式下,如果Marker存在(ChangeID必须匹配,否则忽略标记),则返回Marker的版本,如果不存在(因为workflow 1在其执行模式下没有getVersion代码),则使用minVersion(在您的情况下是DEFAULT_VERSION)。(

查看更多文档:

为了golang

对于java

 类似资料:
  • 在我们开始搞明白 Git 命令之前,你有必要先了解一下版本控制的基本流程。这本书会向你一步步地详细阐述各种不同的工作流程。但是首先还是让我们先来一起了解一下版本控制的最基本的流程。 版本控制中的最基本的模块就是 “仓库(Repository)”。 名词解释 仓库(Repository) 你可以把一个仓库想象成一个数据库,在那里你的版本控制系统存储了项目积攒的所有版本和元数据(metadata)。在

  • Cadence工作流需要具有确定性,这意味着如果使用相同的输入参数执行工作流,工作流预计会产生完全相同的结果。 当我作为Cadence的新用户了解到上述需求时,我想知道当需要打破确定性的变化时,我如何才能长期维护工作流。 一个示例场景是,您有一个连续执行Activity1和Activity2的工作流,然后您需要更改这些活动的顺序,以便工作流在Activity1之前执行Activity2。还有许多其

  • 问题内容: 我想在使用vcs或dvcs时学习其他人的工作流程。 请描述您处理以下任务的策略: 实施功能 修复错误(在开发和部署应用期间) 代码审查 重构代码(审查后的代码) 合并补丁 发布较新版本的应用程序(台式机,网络,移动设备,您是否会区别对待?) 随意组织您的答案,而不是按任务分组,而是按您认为相关的任何分组,但请按VCS / DVCS进行组织(请不要混合使用)。 谢谢。 问题答案: VCS

  • 我在节奏工作流中引入了节奏版本控制,之后工作流在版本控制引入时停止执行。我收到以下错误: 2020-10-29T07:23:49.587Z调试内部/内部事件处理程序。go:465执行活动{“域”:“域_1”,“任务列表”:“任务列表_1”、“工作人员ID”:“6@cdnc-5ddb9ccbb5-5dt5j@tasklist“,”WorkflowType“:”do_work_workflow“,”W

  • 我了解我无法对工作流进行向后不兼容的更改:如何在不破坏确定性的情况下对优步节奏工作流进行更改或修复? 然而,我不确定这里的“向后不兼容”是什么意思。如果不使用getVersion,period,我就不能简单地部署新代码吗?或者,只要用于恢复的历史记录跟踪在两个版本之间兼容,那么我就可以在不使用getVersion的情况下进行更新?或者在某些情况下我可以不使用getVersion进行更新?

  • 本章提供了网络 API 的版本控制指南。由于一个 API 服务可能提供多个 API 接口),因此 API 版本控制策略适用于API 接口级别,而不适用于 API 服务)级别。 为了方便起见,术语 API 指的是以下各节中的 API 接口。 网络API应该使用语义化的版本。比如给定版本号 MAJOR.MINOR.PATCH: 当做出不兼容修改的时候,修改 MAJOR 版本号 当以向后兼容的方式添加功