rollback transaction on error