Transferring content when deleting sites is error-prone
Open
Nobody has claimed this yet.
- Dominant language
- PHP
- Stars
- 3.6k
- Forks
- 705
- Avg merge
- 1d 5h
- Merged PRs (30d)
- 134
Description
Looks like it chokes on duplicate URIs…
2018-08-27 15:48:15 [::1][2][-][info][yii\db\Command::execute] UPDATE `elements_sites` SET `siteId`=1, `dateUpdated`='2018-08-27 19:48:15' WHERE `elementId` IN ('253', '254', '255', '258', '327', '419', '257')
2018-08-27 15:48:15 [::1][2][-][profile begin][yii\db\Command::execute] UPDATE `elements_sites` SET `siteId`=1, `dateUpdated`='2018-08-27 19:48:15' WHERE `elementId` IN ('253', '254', '255', '258', '327', '419', '257')
2018-08-27 15:48:15 [::1][2][-][profile end][yii\db\Command::execute] UPDATE `elements_sites` SET `siteId`=1, `dateUpdated`='2018-08-27 19:48:15' WHERE `elementId` IN ('253', '254', '255', '258', '327', '419', '257')
2018-08-27 15:48:15 [::1][2][-][error][yii\db\IntegrityException] PDOException: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'about-us-1' for key 'elements_sites_uri_siteId_unq_idx' in /Users/timkelty/Sites/rdac/vendor/composer/yiisoft/yii2/db/Command.php:994
Stack trace:
#0 /Users/timkelty/Sites/rdac/vendor/composer/yiisoft/yii2/db/Command.php(994): PDOStatement->execute()
#1 /Users/timkelty/Sites/rdac/vendor/composer/craftcms/cms/src/services/Sites.php(840): yii\db\Command->execute()
#2 /Users/timkelty/Sites/rdac/vendor/composer/craftcms/cms/src/services/Sites.php(753): craft\services\Sites->deleteSite(Object(craft\models\Site), 1)
#3 /Users/timkelty/Sites/rdac/vendor/composer/craftcms/cms/src/controllers/SitesController.php(321): craft\services\Sites->deleteSiteById(2, 1)
#4 [internal function]: craft\controllers\SitesController->actionDeleteSite()
#5 /Users/timkelty/Sites/rdac/vendor/composer/yiisoft/yii2/base/InlineAction.php(57): call_user_func_array(Array, Array)
#6 /Users/timkelty/Sites/rdac/vendor/composer/yiisoft/yii2/base/Controller.php(157): yii\base\InlineAction->runWithParams(Array)
#7 /Users/timkelty/Sites/rdac/vendor/composer/craftcms/cms/src/web/Controller.php(80): yii\base\Controller->runAction('delete-site', Array)
#8 /Users/timkelty/Sites/rdac/vendor/composer/yiisoft/yii2/base/Module.php(528): craft\web\Controller->runAction('delete-site', Array)
#9 /Users/timkelty/Sites/rdac/vendor/composer/craftcms/cms/src/web/Application.php(240): yii\base\Module->runAction('sites/delete-si...', Array)
#10 /Users/timkelty/Sites/rdac/vendor/composer/craftcms/cms/src/web/Application.php(450): craft\web\Application->runAction('sites/delete-si...', Array)
#11 /Users/timkelty/Sites/rdac/vendor/composer/craftcms/cms/src/web/Application.php(211): craft\web\Application->_processActionRequest(Object(craft\web\Request))
#12 /Users/timkelty/Sites/rdac/vendor/composer/yiisoft/yii2/base/Application.php(386): craft\web\Application->handleRequest(Object(craft\web\Request))
#13 /Users/timkelty/Sites/rdac/lib/bootstrap.php(36): yii\base\Application->run()
#14 /Users/timkelty/Sites/rdac/sites/rdac/public/index.php(2): require_once('/Users/timkelty...')
#15 {main}
Next yii\db\IntegrityException: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'about-us-1' for key 'elements_sites_uri_siteId_unq_idx'
The SQL being executed was: UPDATE `elements_sites` SET `siteId`=1, `dateUpdated`='2018-08-27 19:48:15' WHERE `elementId` IN ('253', '254', '255', '258', '327', '419', '257') in /Users/timkelty/Sites/rdac/vendor/composer/yiisoft/yii2/db/Schema.php:595
Stack trace:
#0 /Users/timkelty/Sites/rdac/vendor/composer/yiisoft/yii2/db/Command.php(1004): yii\db\Schema->convertException(Object(PDOException), 'UPDATE `element...')
#1 /Users/timkelty/Sites/rdac/vendor/composer/craftcms/cms/src/services/Sites.php(840): yii\db\Command->execute()
#2 /Users/timkelty/Sites/rdac/vendor/composer/craftcms/cms/src/services/Sites.php(753): craft\services\Sites->deleteSite(Object(craft\models\Site), 1)
#3 /Users/timkelty/Sites/rdac/vendor/composer/craftcms/cms/src/controllers/SitesController.php(321): craft\services\Sites->deleteSiteById(2, 1)
#4 [internal function]: craft\controllers\SitesController->actionDeleteSite()
#5 /Users/timkelty/Sites/rdac/vendor/composer/yiisoft/yii2/base/InlineAction.php(57): call_user_func_array(Array, Array)
#6 /Users/timkelty/Sites/rdac/vendor/composer/yiisoft/yii2/base/Controller.php(157): yii\base\InlineAction->runWithParams(Array)
#7 /Users/timkelty/Sites/rdac/vendor/composer/craftcms/cms/src/web/Controller.php(80): yii\base\Controller->runAction('delete-site', Array)
#8 /Users/timkelty/Sites/rdac/vendor/composer/yiisoft/yii2/base/Module.php(528): craft\web\Controller->runAction('delete-site', Array)
#9 /Users/timkelty/Sites/rdac/vendor/composer/craftcms/cms/src/web/Application.php(240): yii\base\Module->runAction('sites/delete-si...', Array)
#10 /Users/timkelty/Sites/rdac/vendor/composer/craftcms/cms/src/web/Application.php(450): craft\web\Application->runAction('sites/delete-si...', Array)
#11 /Users/timkelty/Sites/rdac/vendor/composer/craftcms/cms/src/web/Application.php(211): craft\web\Application->_processActionRequest(Object(craft\web\Request))
#12 /Users/timkelty/Sites/rdac/vendor/composer/yiisoft/yii2/base/Application.php(386): craft\web\Application->handleRequest(Object(craft\web\Request))
#13 /Users/timkelty/Sites/rdac/lib/bootstrap.php(36): yii\base\Application->run()
#14 /Users/timkelty/Sites/rdac/sites/rdac/public/index.php(2): require_once('/Users/timkelty...')
#15 {main}
Additional Information:
Array
(
[0] => 23000
[1] => 1062
[2] => Duplicate entry 'about-us-1' for key 'elements_sites_uri_siteId_unq_idx'
)
2018-08-27 15:48:14 [::1][2][-][info][application] $_GET = [
'p' => 'cp/actions/sites/delete-site'
]
2018-08-27 15:48:15 [::1][2][-][info][yii\db\Command::execute] UPDATE `elements_sites` SET `siteId`=1, `dateUpdated`='2018-08-27 19:48:15' WHERE `elementId` IN ('253', '254', '255', '258', '327', '419', '257')
2018-08-27 15:48:15 [::1][2][-][profile begin][yii\db\Command::execute] UPDATE `elements_sites` SET `siteId`=1, `dateUpdated`='2018-08-27 19:48:15' WHERE `elementId` IN ('253', '254', '255', '258', '327', '419', '257')
2018-08-27 15:48:15 [::1][2][-][profile end][yii\db\Command::execute] UPDATE `elements_sites` SET `siteId`=1, `dateUpdated`='2018-08-27 19:48:15' WHERE `elementId` IN ('253', '254', '255', '258', '327', '419', '257')
2018-08-27 15:48:15 [::1][2][-][error][yii\db\IntegrityException] PDOException: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'about-us-1' for key 'elements_sites_uri_siteId_unq_idx' in /Users/timkelty/Sites/rdac/vendor/composer/yiisoft/yii2/db/Command.php:994
Stack trace:
#0 /Users/timkelty/Sites/rdac/vendor/composer/yiisoft/yii2/db/Command.php(994): PDOStatement->execute()
#1 /Users/timkelty/Sites/rdac/vendor/composer/craftcms/cms/src/services/Sites.php(840): yii\db\Command->execute()
#2 /Users/timkelty/Sites/rdac/vendor/composer/craftcms/cms/src/services/Sites.php(753): craft\services\Sites->deleteSite(Object(craft\models\Site), 1)
#3 /Users/timkelty/Sites/rdac/vendor/composer/craftcms/cms/src/controllers/SitesController.php(321): craft\services\Sites->deleteSiteById(2, 1)
#4 [internal function]: craft\controllers\SitesController->actionDeleteSite()
#5 /Users/timkelty/Sites/rdac/vendor/composer/yiisoft/yii2/base/InlineAction.php(57): call_user_func_array(Array, Array)
#6 /Users/timkelty/Sites/rdac/vendor/composer/yiisoft/yii2/base/Controller.php(157): yii\base\InlineAction->runWithParams(Array)
#7 /Users/timkelty/Sites/rdac/vendor/composer/craftcms/cms/src/web/Controller.php(80): yii\base\Controller->runAction('delete-site', Array)
#8 /Users/timkelty/Sites/rdac/vendor/composer/yiisoft/yii2/base/Module.php(528): craft\web\Controller->runAction('delete-site', Array)
#9 /Users/timkelty/Sites/rdac/vendor/composer/craftcms/cms/src/web/Application.php(240): yii\base\Module->runAction('sites/delete-si...', Array)
#10 /Users/timkelty/Sites/rdac/vendor/composer/craftcms/cms/src/web/Application.php(450): craft\web\Application->runAction('sites/delete-si...', Array)
#11 /Users/timkelty/Sites/rdac/vendor/composer/craftcms/cms/src/web/Application.php(211): craft\web\Application->_processActionRequest(Object(craft\web\Request))
#12 /Users/timkelty/Sites/rdac/vendor/composer/yiisoft/yii2/base/Application.php(386): craft\web\Application->handleRequest(Object(craft\web\Request))
#13 /Users/timkelty/Sites/rdac/lib/bootstrap.php(36): yii\base\Application->run()
#14 /Users/timkelty/Sites/rdac/sites/rdac/public/index.php(2): require_once('/Users/timkelty...')
#15 {main}
Next yii\db\IntegrityException: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'about-us-1' for key 'elements_sites_uri_siteId_unq_idx'
The SQL being executed was: UPDATE `elements_sites` SET `siteId`=1, `dateUpdated`='2018-08-27 19:48:15' WHERE `elementId` IN ('253', '254', '255', '258', '327', '419', '257') in /Users/timkelty/Sites/rdac/vendor/composer/yiisoft/yii2/db/Schema.php:595
Stack trace:
#0 /Users/timkelty/Sites/rdac/vendor/composer/yiisoft/yii2/db/Command.php(1004): yii\db\Schema->convertException(Object(PDOException), 'UPDATE `element...')
#1 /Users/timkelty/Sites/rdac/vendor/composer/craftcms/cms/src/services/Sites.php(840): yii\db\Command->execute()
#2 /Users/timkelty/Sites/rdac/vendor/composer/craftcms/cms/src/services/Sites.php(753): craft\services\Sites->deleteSite(Object(craft\models\Site), 1)
#3 /Users/timkelty/Sites/rdac/vendor/composer/craftcms/cms/src/controllers/SitesController.php(321): craft\services\Sites->deleteSiteById(2, 1)
#4 [internal function]: craft\controllers\SitesController->actionDeleteSite()
#5 /Users/timkelty/Sites/rdac/vendor/composer/yiisoft/yii2/base/InlineAction.php(57): call_user_func_array(Array, Array)
#6 /Users/timkelty/Sites/rdac/vendor/composer/yiisoft/yii2/base/Controller.php(157): yii\base\InlineAction->runWithParams(Array)
#7 /Users/timkelty/Sites/rdac/vendor/composer/craftcms/cms/src/web/Controller.php(80): yii\base\Controller->runAction('delete-site', Array)
#8 /Users/timkelty/Sites/rdac/vendor/composer/yiisoft/yii2/base/Module.php(528): craft\web\Controller->runAction('delete-site', Array)
#9 /Users/timkelty/Sites/rdac/vendor/composer/craftcms/cms/src/web/Application.php(240): yii\base\Module->runAction('sites/delete-si...', Array)
#10 /Users/timkelty/Sites/rdac/vendor/composer/craftcms/cms/src/web/Application.php(450): craft\web\Application->runAction('sites/delete-si...', Array)
#11 /Users/timkelty/Sites/rdac/vendor/composer/craftcms/cms/src/web/Application.php(211): craft\web\Application->_processActionRequest(Object(craft\web\Request))
#12 /Users/timkelty/Sites/rdac/vendor/composer/yiisoft/yii2/base/Application.php(386): craft\web\Application->handleRequest(Object(craft\web\Request))
#13 /Users/timkelty/Sites/rdac/lib/bootstrap.php(36): yii\base\Application->run()
#14 /Users/timkelty/Sites/rdac/sites/rdac/public/index.php(2): require_once('/Users/timkelty...')
#15 {main}
Additional Information:
Array
(
[0] => 23000
[1] => 1062
[2] => Duplicate entry 'about-us-1' for key 'elements_sites_uri_siteId_unq_idx'
)
2018-08-27 15:48:14 [::1][2][-][info][application] $_GET = [
'p' => 'cp/actions/sites/delete-site'
]
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start at vendor/composer/craftcms/cms/src/services/Sites.php around lines 753 and 840, called by SitesController.php line 321, and inspect the site-deletion content transfer that issues the elements_sites UPDATE. Reproduce deletion with duplicate URIs and verify that the site is deleted without the elements_sites_uri_siteId_unq_idx integrity error.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- php
- Domain
- backend, databases
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100