Hi! If updating or saving to the database fails for whatever reason, the outgoing batch of answers will stay on the client. So if you haven't closed the browser, should always be able to restart the server and re-submit the annotations by hitting "save" in the UI.
The update function is called before the answers are placed in the database. The before_db callback lets you modify examples you store (which doesn't affect the examples you're updating from). This ist mostly relevant if the JSON data you're sending around includes things like base64-encoded image data that you need in the UI and maybe for updating a model, but don't want to store in the database.
I know that currently we don't have the option of an after_db callback. But, as a feature request that would be really handy in a future version. In this way we can handle retraining over the full data set once we know 100% it's in the database.
Our current "solution" is to fork out a sub-process so that update returns almost instantly - but there is an obvious race condition here (e.g., when we go to re-run our full training loop there's a non-zero chance the database hasn't yet finished inserting all the updated annotations).
So if I understand your requirement correctly, you basically want to perform some action after the examples have been saved to the database, right? Instead of your subprocess approach, a potentially much simpler solution could be to just take care of saving to the database yourself in the update callback and set "dataset": False in the recipe. Under the hood, Prodigy mostly just calls into add_examples, so you could also do this: