From fde6e672cff80a794b038afd9cbe48ea33a841aa Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Mon, 2 May 2011 18:51:09 -0700 Subject: [PATCH] Fix error in domainstatusnetworkinstaller that cleared tags table An error in the domainstatusnetworkinstaller cleared the tags table, losing any information about sites on the service. (We discovered this in production on StatusNet OnDemand). Conjunction of these factors: 1) the installer code was using an insert()'ed object with an auto-incrementing key, which because the statusnet.ini was incorrect, wasn't getting updated. 2) It then called setTag() on that object, which deletes all tags matching the id, then adds in the new ones. 3) Because the ID was null, DB_DataObject deleted all rows in the table. I've made a work-around that re-fetches the status_network object based on its (unique) nickname, which gets the correct ID, which should work for tags. Confirmed that it works. Still need to fix the underlying problems, however. --- .../DomainStatusNetwork/domainstatusnetworkinstaller.php | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/plugins/DomainStatusNetwork/domainstatusnetworkinstaller.php b/plugins/DomainStatusNetwork/domainstatusnetworkinstaller.php index ea8220056c..c871c2328e 100644 --- a/plugins/DomainStatusNetwork/domainstatusnetworkinstaller.php +++ b/plugins/DomainStatusNetwork/domainstatusnetworkinstaller.php @@ -177,10 +177,17 @@ class DomainStatusNetworkInstaller extends Installer throw new ServerException("Could not create status_network: " . print_r($sn, true)); } + // Re-fetch; stupid auto-increment integer isn't working + + $sn = Status_network::staticGet('nickname', $sn->nickname); + + if (empty($sn)) { + throw new ServerException("Created {$this->nickname} status_network and could not find it again."); + } + $sn->setTags(array('domain='.$this->domain)); $this->sn = $sn; - } function checkSchema() -- 2.39.5