Skip to content

Commit

Permalink
ITC-3014 Add unique index to MySQL tables to avoid race condition #1517
Browse files Browse the repository at this point in the history
  • Loading branch information
nook24 committed Jun 6, 2023
1 parent bdd6250 commit 2c2c243
Show file tree
Hide file tree
Showing 2 changed files with 150 additions and 0 deletions.
90 changes: 90 additions & 0 deletions config/Migrations/20230606131052_UniqueIndexForIsUnique.php
@@ -0,0 +1,90 @@
<?php
// Copyright (C) <2015> <it-novum GmbH>
//
// This file is dual licensed
//
// 1.
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, version 3 of the License.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
// 2.
// If you purchased an openITCOCKPIT Enterprise Edition you can use this file
// under the terms of the openITCOCKPIT Enterprise Edition license agreement.
// License agreement and license key will be shipped with the order
// confirmation.

declare(strict_types=1);

use Migrations\AbstractMigration;

/**
* Class UniqueIndexForIsUnique
*
* Created via:
* oitc migrations create UniqueIndexForIsUnique
*
* Run migration:
* oitc migrations migrate
*
*/
class UniqueIndexForIsUnique extends AbstractMigration {
/**
* Change Method.
*
* More information on this method is available here:
* https://book.cakephp.org/phinx/0/en/migrations.html#the-change-method
* @return void
*/
public function change(): void {

if ($this->hasTable('agentchecks')) {
$this->table('agentchecks')
->addIndex(
[
'name',
],
['unique' => true]
)
->update();
}

if ($this->hasTable('macros')) {
$this->table('macros')
->addIndex(
[
'name',
],
['unique' => true]
)
->update();
}

if ($this->hasTable('users')) {
$this->table('users')
->addIndex(
[
'email',
],
['unique' => true]
)
->addIndex(
[
'email',
'ldap_dn'
],
['unique' => true]
)
->update();
}

}
}
@@ -0,0 +1,60 @@
<?php
// Copyright (C) <2015> <it-novum GmbH>
//
// This file is dual licensed
//
// 1.
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, version 3 of the License.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//

// 2.
// If you purchased an openITCOCKPIT Enterprise Edition you can use this file
// under the terms of the openITCOCKPIT Enterprise Edition license agreement.
// License agreement and license key will be shipped with the order
// confirmation.

declare(strict_types=1);

use Migrations\AbstractMigration;

/**
* Class UniqueIndexForIsUnique
*
* Created via:
* oitc migrations create -p GrafanaModule UniqueIndexForIsUnique
*
* Run migration:
* oitc migrations migrate -p GrafanaModule
*
*/
class UniqueIndexForIsUnique extends AbstractMigration {
/**
* Change Method.
*
* More information on this method is available here:
* https://book.cakephp.org/phinx/0/en/migrations.html#the-change-method
* @return void
*/
public function change(): void {
if ($this->hasTable('grafana_userdashboards')) {
$this->table('grafana_userdashboards')
->addIndex(
[
'name',
],
['unique' => true]
)
->update();
}
}
}

0 comments on commit 2c2c243

Please sign in to comment.