apex-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From David Yan <da...@datatorrent.com>
Subject Supporting iterations in Apex
Date Wed, 16 Sep 2015 20:44:26 GMT
Hi all,

One current disadvantage of Apex is the inability to do iterations and
machine learning algorithms because we don't allow loops in the application
DAG (hence the name DAG).  I am proposing that we allow loops in the DAG if
the loop advances the window ID by a configured amount.  A JIRA ticket has
been created:


I have started this work in my fork at

The current progress is that a simple test case works.  Major work still
needs to be done with respect to recovery and partitioning.

The value ITERATION_WINDOW_COUNT is an attribute to an input port of an
operator.  If the value of the attribute is greater than or equal to 1, any
tuples sent to the input port are treated to be ITERATION_WINDOW_COUNT
windows ahead of what they are.

For recovery, we will need to checkpoint all the tuples between ports with
the to replay the looped tuples.  During the recovery, if the operator has
an input port, with ITERATION_WINDOW_COUNT=2, is recovering from checkpoint
window 14, the tuples for that input port from window 13 and window 14 need
to be replayed to be treated as window 15 and window 16 respectively (13+2
and 14+2).

In other words, we need to store all the tuples from window with ID
committedWindowId minus ITERATION_WINDOW_COUNT for recovery and purge the
tuples earlier than that window.
We can optimize this by only storing the tuples for ITERATION_WINDOW_COUNT
windows prior to any checkpoint.

For that, we need a storage mechanism for the tuples.  Chandni already has
something that fits this usage case in Apex Malhar.  The class is
IdempotentStorageManager.  In order for this to be used in Apex core, we
need to deprecate the class in Apex Malhar and move it to Apex Core.

A JIRA ticket has been created for this particular work:


Some of the above has been discussed among Thomas, Chetan, Chandni, and

For partitioning, we have not started any discussion or brainstorming.  We
appreciate any feedback on this and any other aspect related to supporting
iterations in general.



  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message