Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Caveats in FanOut implementation #2

Open
jmalins opened this issue May 5, 2017 · 2 comments
Open

Caveats in FanOut implementation #2

jmalins opened this issue May 5, 2017 · 2 comments

Comments

@jmalins
Copy link

jmalins commented May 5, 2017

Great project with a great name (to a former EE).

The current FanOut implementation has a few caveats that are probably worth documenting, since they may be issues for some usage patterns.

  • The state of the running fan-outs in maintained in memory of the dispatcher activity, failure of that process means the sub-states are lost. If sub-activities are stateless, it's not a problem, because the parent can retry, but if the children are stateful or non-idempotent, it could be a problem.

  • The DescribeExecution polling of the sub-activity states will be subject to throttling (200 unit bucket / account, refilling at 1 unit/sec). If your use case involves many concurrent parent executions, long-running activities or high fan-out / execution, it could be a problem.

I'm sure there's tons of use cases where neither of these will be a problem. In our case, we considered a similar fanout implementation, but had to give it up after analysis revealed we'd run afoul of the throttle limits at our expected volume.

@derek-pryor
Copy link
Contributor

Thanks for the feedback. You are correct in your observations and I'll be updating the documentation to better convey these limitations.

You comment also made me realize that there is a bug with error handling (when an error is detected in a sub-process). A fix for that is being worked on.

@derek-pryor
Copy link
Contributor

I just added some new functionality that touches on this. PR #4 adds a non-blocking version of fanout that keeps state in a dictionary that is passed to the function. It doesn't completely solve how to handle failure cases, as right now it still will cancel any running sub-stepfunctions on a failure.

In addition a status_delay has been added to slow the status polling process to not hit the throttling limit.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants