On 2/3/19 7:54 AM, Simon Van Casteren wrote:
About your first comment,

Yes I have the same code habit of first running validations and then doing the actual work. As long as stuff stays kind of simple that is manageable. But a place where this has caused some serious bugs was in my import page. So I have a function that runs validations and then makes the resource in the database. Now, my import page makes many of these at once, based on a CSV file format (see one of my previous questions). However when one fails, I'd like the whole import to fail. A complete rollback operation would make this much easier and less error-prone since I now have to delete all the previous saved resource when one resource fails to save. It was more of a question on how to do it though, since providing an explicit rollback is probably more dangerous than it's worth.

Right.  This part sounds doable by splitting your import functionality into separate validation and database insertion.  It sounds like a small drag, but at least it only locally affects your use case.

One example of a pain arising from general database rollback is: imagine a nicely encapsulated function that allocates a message-passing channel, stashes it in an appropriate database table, and returns it to the caller (perhaps declared as an abstract type, so the caller doesn't even know a channel is involved).  The caller uses the rollback function you asked for, but the caller also hangs onto and uses the channel.  Now we have a scary ability to break application-wide invariants: rollback is, in effect, a way to mess with "private fields" of library modules!


_______________________________________________
Ur mailing list
Ur@impredicative.com
http://www.impredicative.com/cgi-bin/mailman/listinfo/ur

Reply via email to