Process Skip Example

# This module reuses the value_writer and value_reader processes
# from the value pass example to demonstrate the skip method.
# value_reader_skip reads the same value as value_reader itself and
# returns 0 when the value is odd, telling DeBasher to skip
# value_reader for that run, or 1 when it is even, letting it
# execute normally. This shows how a process can decide, from its
# own options, whether it needs to run at all. A skipped process
# counts as finished, so the processes that depend on it still run.

value_writer_document()
{
    document_process "Takes two numbers and produce their sum as output."
}

value_writer_explain_opts()
{
    # -num-a option
    local description="First number to be summed"
    explain_opt "-num-a" "<int>" "$description"

    # -num-b option
    local description="Second number to be summed"
    explain_opt "-num-b" "<int>" "$description"

    # -outv option
    local description="output value descriptor"
    explain_opt "-outv" "<int>" "$description"
}

value_writer_identify_cmdline_opts()
{
    opt_is_cmdline "-num-a"
    opt_is_cmdline "-num-b"
}

value_writer_define_opts()
{
    # Initialize variables
    local cmdline=$1
    local process_spec=$2
    local process_name=$3
    local process_outdir=$4
    local optlist=""

    # -num-a option
    define_cmdline_opt "$cmdline" "-num-a" optlist || return 1

    # -num-b option
    define_cmdline_opt "$cmdline" "-num-b" optlist || return 1

    # Define value descriptor option
    define_value_desc_opt "-outv" optlist || return 1

    # Save option list
    save_opt_list optlist
}

value_writer()
{
    # Initialize variables
    local num_a=$(read_opt_value_from_func_args "-num-a" "$@")
    local num_b=$(read_opt_value_from_func_args "-num-b" "$@")
    local outv=$(read_opt_value_from_func_args "-outv" "$@")

    # Calculate the sum
    local sum=$((num_a + num_b))

    # Write value to descriptor
    write_value_to_desc "${sum}" "${outv}"
}

value_reader_document()
{
    document_process "Get a value produced by another process, increases it in one unit and writes it in own directory."
}

value_reader_explain_opts()
{
    # -val-desc option
    local description="value descriptor"
    explain_opt "-val-desc" "<int>" "$description"

    # -outf option
    local description="output file"
    explain_opt "-outf" "<file>" "$description"
}

value_reader_identify_cmdline_opts()
{
    :
}

value_reader_define_opts()
{
    # Initialize variables
    local cmdline=$1
    local process_spec=$2
    local process_name=$3
    local process_outdir=$4
    local optlist=""

    # Define value descriptor option related to output value of
    # value_writer
    define_opt_from_proc_out "-val-desc" "value_writer" "-outv" optlist || return 1

    # Define output file option
    local outf="${process_outdir}/${process_name}.out"
    define_opt "-outf" "${outf}" optlist || return 1

    # Save option list
    save_opt_list optlist
}

value_reader()
{
    # Initialize variables
    local value=$(read_opt_value_from_func_args "-val-desc" "$@")
    local outf=$(read_opt_value_from_func_args "-outf" "$@")

    # Increment value by 1
    ((value++))

    # Write value to file
    echo "$value" > "${outf}"
}

value_reader_skip()
{
    # Initialize variables
    local value=$(read_opt_value_from_func_args "-val-desc" "$@")
    local outf=$(read_opt_value_from_func_args "-outf" "$@")

    # Skip if read value is odd
    if ((value % 2 == 0)); then
        return 1
    else
        return 0
    fi
}

debasher_skip_example_program()
{
    add_debasher_process "value_writer" "cpus=1 mem=32 time=00:01:00"
    add_debasher_process "value_reader" "cpus=1 mem=32 time=00:01:00"
}