fix GIST->GIN switch

This commit is contained in:
Matthew Hodgson 2018-01-09 16:55:51 +00:00
parent e79db0a673
commit a66f489678
3 changed files with 37 additions and 14 deletions

View file

@ -13,5 +13,7 @@
* limitations under the License.
*/
INSERT into background_updates (update_name, progress_json)
VALUES ('event_search_postgres_gist', '{}');
-- We no longer do this given we back it out again in schema 46
-- INSERT into background_updates (update_name, progress_json)
-- VALUES ('event_search_postgres_gist', '{}');

View file

@ -0,0 +1,17 @@
/* Copyright 2018 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
INSERT into background_updates (update_name, progress_json)
VALUES ('event_search_postgres_gin', '{}');

View file

@ -146,24 +146,28 @@ class SearchStore(BackgroundUpdateStore):
@defer.inlineCallbacks
def _background_reindex_gin_search(self, progress, batch_size):
'''This handles old synapses which used GIST indexes; converting them
back to be GIN as per the actual schema. Otherwise it crashes out
as a NOOP
'''This handles old synapses which used GIST indexes, if any;
converting them back to be GIN as per the actual schema.
'''
def create_index(conn):
conn.rollback()
conn.set_session(autocommit=True)
c = conn.cursor()
try:
conn.rollback()
conn.set_session(autocommit=True)
c = conn.cursor()
c.execute(
"CREATE INDEX CONCURRENTLY event_search_fts_idx"
" ON event_search USING GIN (vector)"
)
c.execute(
"CREATE INDEX CONCURRENTLY event_search_fts_idx"
" ON event_search USING GIN (vector)"
)
c.execute("DROP INDEX event_search_fts_idx_gist")
c.execute("DROP INDEX event_search_fts_idx_gist")
conn.set_session(autocommit=False)
conn.set_session(autocommit=False)
except e:
logger.warn(
"Ignoring error %s when trying to switch from GIST to GIN" % (e,)
)
if isinstance(self.database_engine, PostgresEngine):
yield self.runWithConnection(create_index)