question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

How will Activity with different parameters work?

See original GitHub issue

Problem Statement

Consider a video conversion activity, steps,

  1. Activity1: Download blob to local file filePath
  2. Activity2: run ffmpeg on filePath
  3. Activity3: upload file filePath + “.mp4”

In this case filePath cannot be unique to execution, because what if temp file clean up process kicks in and deletes the file as process was recovered from crash.

So in first execution lets say filePath was c:\file\1.dat

Execution is interrupted and before firing Activity1 we change filePath to c:\file\2.dat because file 1.dat may or may not have been download successfully or file may not be present.

What will happen if we fire activity 1 with c:\file\2.dat argument?

  1. Activity1 will be played for c:\file\2.dat or not? I assume it should be played.
  2. What will happen to previous Activity1 with c:\file\1.dat? Will it cause any issue for Orchestration to finish or not? Will Orchestration hang forever as it could not finish first activity?

Issue Analytics

  • State:closed
  • Created 2 years ago
  • Comments:12 (3 by maintainers)

github_iconTop GitHub Comments

1reaction
ConnorMcMahoncommented, Jun 22, 2021

@ackava, I am a bit confused about your claim that Durable Tasks are not suited for large workflows that span days to months. The issues we brought up above were specifically with the non-determinism and the fact that most storage providers do not guarantee the locality of activities running on the same VM.

The Eternity framework you built looks interesting, and has a lot of the syntactic sugar that we have built on top of Durable Task Framework in Durable Functions, though with some very different design decisions around determinism and locality. I do think your decision to move mostly to blobs and tables is interesting, and I think may bypass some of the corner cases we have had to tackle over the years.

EDIT: I will say that you may want to consider some edge cases of your decision to run all activities on the same VM, such as what happens when that worker goes down mid-workflow?

1reaction
davidmrdavidcommented, May 28, 2021

Hi @ackava,

Sorry for causing confusion, I did delete my original answer because I wrote it thinking that you were asking about Durable Functions instead of the Durable Task Framework. I wanted to re-post it with an updated answer, but the thread progressed further before I managed to post it. In any case, let’s not worry about it, Chris and Connor have already made the main points I wanted to convey 😃 .

To answer your latest question, you’re correct, that would crash with a NonDeterministicOrchestrationException. That being said, it’s probably a bit dangerous to rely on that behavior. Ideally, there would be no way your orchestration could change a parameter value on a replay, as that goes against the coding constraints (determinism) that the framework expects of orchestrator code.

As others have pointed out, if changing this file name is unavoidable, it might make sense to combine all affected activities into just one, and to make that pipeline occur with just one activity call. That way, you encapsulate non-determinism in activities, and keep orchestrators replay-safe.

Read more comments on GitHub >

github_iconTop Results From Across the Web

Android: an idiom for Activity parameters | by Nelson Leme
In that object, you can pass parameters to the Activity , which will be aggregated to the Intent as extra info.
Read more >
android - Start an Activity with a parameter
I want to create and start an activity to show information about a game. I show that information I need a gameId. How...
Read more >
Passing multiple parameters to CallActivity function
Firstly you should set the param values in your datatransform which you want to pass to the activity and call your activity. This...
Read more >
Activity: Parameters - Microsoft MakeCode Arcade
Parameters are variables that can be passed (given) to the function. This allows for functions that can react appropriately to different conditions and ......
Read more >
How to use parameters and expressions in Azure Data ...
You can use parameters to pass external values into pipelines, datasets, linked services, and data flows. Once the parameter has been passed ...
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found