Fix UniqueConstraintViolationException while insert into oc_groups

* fixes race condition in insert
* fixes potentiaol deadlock

Signed-off-by: Morris Jobke <hey@morrisjobke.de>
This commit is contained in:
Morris Jobke 2018-11-12 17:36:35 +01:00
parent 859dd1e742
commit 84fd81e33f
No known key found for this signature in database
GPG key ID: FE03C3A163FEDE68

View file

@ -41,6 +41,7 @@
namespace OC\Group;
use Doctrine\DBAL\Exception\UniqueConstraintViolationException;
use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\Group\Backend\ABackend;
use OCP\Group\Backend\IAddToGroupBackend;
@ -97,10 +98,15 @@ class Database extends ABackend
public function createGroup(string $gid): bool {
$this->fixDI();
// Add group
$result = $this->dbConn->insertIfNotExist('*PREFIX*groups', [
'gid' => $gid,
]);
try {
// Add group
$builder = $this->dbConn->getQueryBuilder();
$result = $builder->insert('groups')
->setValue('gid', $builder->createNamedParameter($gid))
->execute();
} catch(UniqueConstraintViolationException $e) {
$result = 0;
}
// Add to cache
$this->groupCache[$gid] = $gid;