cancel
Showing results for 
Search instead for 
Did you mean: 

Throttle Bot or Other Loop/Delay Mechanism?

brent_vanallen
New Contributor

I have a process where I am submitting a data load to an engine that reviews the data. I want to accomplish a couple things.

First - I want to be able to have the Pipeline pause for a delay I specify.

Second - I want the Pipeline to then “loop” and peridically check back using a DB lookup (Postgres Execute should work) to check the status of the submitted data…and do some kind of loop until it finds the status it wants, a timeout would be handy too in case it never finds the proper “complete” status.

Once it does find the right status it is looking for it would then continue past the loop condition and fire off post-processing steps in the database to clean data up, extract results of the submitted batch, etc.

I have seen a Snap referred to in the documentation as a “Throttle Bot Snap” in some examples (for instance this one https://docs-snaplogic.atlassian.net/wiki/spaces/SD/pages/2067890766/Use+Case+Employee+Onboarding), but I cannot actually find the snap itself or the Snap Pack it must come in. If anyone can help me with the above technical issue or tell me how to find the Throttle Bot Snap that woould be very appreciated.

Thank You,

Brent Van Allen
Aduro.

10 REPLIES 10

Thanks for the insight on the Snap. I used Viktor’s Ruby delay, but have been unable to get a loop working in order to (A) Submit a load to my MDM tool and (B) check back on DB status of the load to perform the next steps in the process. Setting this process up, Snaplogic looks like it avoids “entering” the loop…sticking on the step right before the loop starts.

I posted a diagram here, you can see the last Snap it will execute in green…once it gets here it just sits and spins. This shows that section of the pipeline where (A) we check back of data submitted upstream has finished processing, (B) we check back on that value and if not found to be “DONE” yet we push the document stream back onto itself with a UNION (C).

image

I’ve done something like this before. I think you’re going to need a multi-pipeline design - I don’t believe there is a way to loop within a single pipeline. The below is just one high-level design idea - there are other options.

The step1 pipeline will do the initial work, then call step2 pipeline (using Pipeline Execute) which will have the delay and check status. The step2 pipeline can have a loopback-or-continue Router snap following the status check where if the status is complete, it forks to the logic to finish the process; but if status is not complete, then it recalls step1 pipeline with Pipeline Execute. You can use parameters and Router snap in the step1 pipeline to determine whether step1 skips the initial processing and simply recalls step2 again. Parameters can also be used as a counter mechanism, so that if the counter exceeds x-number retries, then step2 fails or notifies as desired.

The Pipeline Execute documentation states that it doesn’t support redundancy (even though it works in some of my attempts), otherwise, I would recommend a design within a single pipeline. But I stick with the documentation for pipeline longevity.

No luck with that approach :). Will have to just keep at it.

So did you come up with a decent solution?

BTW, any explanation for why SnapLogic doesn’t support a simple loop flow?

I was never able to get looping to work. Even with the “callback” part of the loop separated out to a separate pipeline and using Pipeline Execute, it appears that Snaplogic can look ahead and detect if the logic in the datastream will create a potential loop…and refuses to enter the loop from the entry point (that would be looped back TO). I was able to get delay working via the suggested approach with a little Ruby script though.

We have not set it up yet but I anticipate that we will end up closing the loop logically by using a REST interface.