Now that I look at this, this doesn't have to do with karlserveless. It's been latent in Karl for some time. Basically when we put messages in the quarantine, because they have an exception for some reason, we don't do anything to roll back the work that might have been done before we hit the exception. We don't want to abort the entire transaction, since that would defeat the point of moving messages to the quarantine. And, of course, moving messages to the quarantine is part of the transaction. It might make sense to start using savepoints, though, and roll back to a savepoint made before attempting to process a message, before moving the message to the quarantine. I've never been superclear how well savepoints work in ZODB. Will look into it.
Now that I look at this, this doesn't have to do with karlserveless. It's been latent in Karl for some time. Basically when we put messages in the quarantine, because they have an exception for some reason, we don't do anything to roll back the work that might have been done before we hit the exception. We don't want to abort the entire transaction, since that would defeat the point of moving messages to the quarantine. And, of course, moving messages to the quarantine is part of the transaction. It might make sense to start using savepoints, though, and roll back to a savepoint made before attempting to process a message, before moving the message to the quarantine. I've never been superclear how well savepoints work in ZODB. Will look into it.