Home

Awesome

wrek

Author: Richard Kallos

Lightweight concurrent DAG execution engine

Description

Wrek is designed to execute task dependency graphs concurrently. A vertex V in a task dependency graph can execute once all vertices with paths to V have finished executing. This execution model is similar to tools like Concourse CI.

To retrieve events from wrek, you can pass in the pid of a gen_event process, and add handlers as you see fit.

Requirements

Build

$ rebar3 compile

How to use

  1. Write callback modules that implement the wrek_vert behaviour.
  2. Create a map Map reflecting the structure of the graph you want to run.
  3. wrek:start(Map) or wrek:start(Map, Opts).

Options

Example

-module(true_vert).
-behaviour(wrek_vert).

-export([run/2]).

run(_Args, Parent) ->
    {ok, Fun} = wrek_vert:exec(Parent, ".", "true"),
    ok = Fun(),
    {ok, #{}}.
1> Map = #{
    one => #{module => true_vert, args => [], deps => []},
    two => #{module => true_vert, args => [], deps => [one]},
    three => #{module => true_vert, args => [], deps => [one]}}.
2> wrek:start(Map). % Runs one, then two+three concurrently

Individual Vertex Timeout

VertDefn = #{module => wrek_sleep_vert, args => [], deps => [], timeout => 10},

Where timeout is the number of milliseconds until normal completion or forced timeout.