[Ur] Explicitly asking for a sql rollback

Adam Chlipala adamc at csail.mit.edu
Sun Feb 3 09:13:04 EST 2019


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!




More information about the Ur mailing list