Orm: Commits silently fail (Percona cluster + Galera plugin)

Created on 8 Nov 2019  路  7Comments  路  Source: doctrine/orm

Bug Report

| Q | A
|------------ | ------
| BC Break | no
| Version | 2.6.4

Summary

DBAL have been recently updated. It's now 2.10 (https://github.com/doctrine/dbal/pull/3588).
It fix issue with the commit() method. But it's not handled in ORM.

Current behavior

If commit() fails without exception (commit() return false but no exception), there is no information about that.

Expected behavior

Throw an exception if commit() fails and return false.

Bug

Most helpful comment

    if (!$conn->commit()) {
        throw new OptimisticLockException('Commit failed', $entity);
    }
} catch (Throwable $e) {
    $this->em->close();

    if ($conn->isTransactionActive()) {
        $conn->rollBack();
    }

Small proposal for UnitOfWork::commit()
I'll not have time to made a PR with unit tests, but hope this will help someone else for a better proposal

All 7 comments

@Hamael18 thanks. This seems to be an easy thing to solve and to isolate in a unit test.
Planning it for the next patch milestone :+1:

@lcobucci Unfortunately this needs to be moved to 2.7, since it requires a bump in the doctrine/dbal version from ^2.6 to ^2.10 and we're not able to do this on a patch level release.

I'm moving this to 2.7, which can tolerate dependency bumps like the required one here, and we can work on a quick/simple patch after we have 2.6.5 out of the door.

    if (!$conn->commit()) {
        throw new OptimisticLockException('Commit failed', $entity);
    }
} catch (Throwable $e) {
    $this->em->close();

    if ($conn->isTransactionActive()) {
        $conn->rollBack();
    }

Small proposal for UnitOfWork::commit()
I'll not have time to made a PR with unit tests, but hope this will help someone else for a better proposal

@chosroes thanks!

I'm moving this to version 2.8.0 because DBAL requires PHP 7.2+ and we'll release 2.7.0 still supporting PHP 7.1+.

Looks like this should have been closed by 1da002ca2f84d9d5da11b4c60e24d957cb8f6c16?

Was this page helpful?
0 / 5 - 0 ratings