jenkins-bot has submitted this change and it was merged.

Change subject: PostgreSQL: Fix text search on moved pages
......................................................................


PostgreSQL: Fix text search on moved pages

When a page is updated under PostgreSQL, there is code to
de-index all but the most recent version of the page.  But
when a page is moved, it was accidentally de-indexing the
most recent version as well, because rev_text_id is not
incremented in that case.  A simple tweak to the SQL
fixes that.

I added code to the update script to find pages
previously corrupted by this problem and reindex them.

Bug: 66650
Change-Id: I52e1bbbd8592be5e7c7383c225e6b4c19bbe5b9e
---
M includes/installer/PostgresUpdater.php
M includes/search/SearchPostgres.php
A maintenance/postgres/archives/patch-textsearch_bug66650.sql
M maintenance/postgres/update-keys.sql
4 files changed, 21 insertions(+), 1 deletion(-)

Approvals:
  Aaron Schulz: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/includes/installer/PostgresUpdater.php 
b/includes/installer/PostgresUpdater.php
index 9e41276..f2f2a26 100644
--- a/includes/installer/PostgresUpdater.php
+++ b/includes/installer/PostgresUpdater.php
@@ -409,6 +409,8 @@
                        array( 'addPgField', 'mwuser', 'user_password_expires', 
'TIMESTAMPTZ NULL' ),
                        array( 'changeFieldPurgeTable', 'l10n_cache', 
'lc_value', 'bytea',
                                "replace(lc_value,'\','\\\\')::bytea" ),
+                       // 1.23.9
+                       array( 'rebuildTextSearch'),
 
                        // 1.24
                        array( 'addPgField', 'page_props', 'pp_sortkey', 'float 
NULL' ),
@@ -949,4 +951,12 @@
                        $this->applyPatch( 'patch-tsearch2funcs.sql', false, 
"Rewriting tsearch2 triggers" );
                }
        }
+
+       protected function rebuildTextSearch() {
+               if ( $this->updateRowExists( 'patch-textsearch_bug66650.sql' ) 
) {
+                       $this->output( "...bug 66650 already fixed or not 
applicable.\n" );
+                       return true;
+               };
+               $this->applyPatch( 'patch-textsearch_bug66650.sql', false, 
"Rebuilding text search for bug 66650" );
+       }
 }
diff --git a/includes/search/SearchPostgres.php 
b/includes/search/SearchPostgres.php
index bda10b0..71e3b63 100644
--- a/includes/search/SearchPostgres.php
+++ b/includes/search/SearchPostgres.php
@@ -186,7 +186,7 @@
        function update( $pageid, $title, $text ) {
                ## We don't want to index older revisions
                $sql = "UPDATE pagecontent SET textvector = NULL WHERE 
textvector IS NOT NULL and old_id IN " .
-                               "(SELECT rev_text_id FROM revision WHERE 
rev_page = " . intval( $pageid ) .
+                               "(SELECT DISTINCT rev_text_id FROM revision 
WHERE rev_page = " . intval( $pageid ) .
                                " ORDER BY rev_text_id DESC OFFSET 1)";
                $this->db->query( $sql );
                return true;
diff --git a/maintenance/postgres/archives/patch-textsearch_bug66650.sql 
b/maintenance/postgres/archives/patch-textsearch_bug66650.sql
new file mode 100644
index 0000000..e4f5681
--- /dev/null
+++ b/maintenance/postgres/archives/patch-textsearch_bug66650.sql
@@ -0,0 +1,5 @@
+UPDATE /*_*/pagecontent SET textvector=to_tsvector(old_text)
+WHERE textvector IS NULL AND old_id IN 
+(SELECT  max(rev_text_id) FROM revision GROUP BY rev_page);
+
+INSERT INTO /*_*/updatelog(ul_key) VALUES ('patch-textsearch_bug66650.sql');
diff --git a/maintenance/postgres/update-keys.sql 
b/maintenance/postgres/update-keys.sql
index 7761d0c..b858551 100644
--- a/maintenance/postgres/update-keys.sql
+++ b/maintenance/postgres/update-keys.sql
@@ -27,3 +27,8 @@
        VALUES( 
'user_former_groups-ufg_group-patch-ufg_group-length-increase-255.sql', null );
 INSERT INTO /*_*/updatelog (ul_key, ul_value)
        VALUES( 'user_properties-up_property-patch-up_property.sql', null );
+
+-- PostgreSQL-specific patches.
+
+INSERT INTO /*_*/updatelog (ul_key, ul_value)
+       VALUES( 'patch-textsearch_bug66650.sql', null );

-- 
To view, visit https://gerrit.wikimedia.org/r/153565
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I52e1bbbd8592be5e7c7383c225e6b4c19bbe5b9e
Gerrit-PatchSet: 2
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: Jjanes <jeff.ja...@gmail.com>
Gerrit-Reviewer: Aaron Schulz <asch...@wikimedia.org>
Gerrit-Reviewer: Jjanes <jeff.ja...@gmail.com>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to