0
0
Fork 1
mirror of https://mau.dev/maunium/synapse.git synced 2024-12-15 13:03:51 +01:00

GIN reindex: Fix syntax errors, improve exception handling

This commit is contained in:
Richard van der Hoff 2018-02-02 15:25:27 +00:00
parent 6b02fc80d1
commit 4a6d551704

View file

@ -157,29 +157,43 @@ class SearchStore(BackgroundUpdateStore):
@defer.inlineCallbacks @defer.inlineCallbacks
def _background_reindex_gin_search(self, progress, batch_size): def _background_reindex_gin_search(self, progress, batch_size):
'''This handles old synapses which used GIST indexes, if any; """This handles old synapses which used GIST indexes, if any;
converting them back to be GIN as per the actual schema. converting them back to be GIN as per the actual schema.
''' """
def create_index(conn): def create_index(conn):
try:
conn.rollback() conn.rollback()
# we have to set autocommit, because postgres refuses to
# CREATE INDEX CONCURRENTLY without it.
conn.set_session(autocommit=True) conn.set_session(autocommit=True)
try:
c = conn.cursor() c = conn.cursor()
# if we skipped the conversion to GIST, we may already/still
# have an event_search_fts_idx; unfortunately postgres 9.4
# doesn't support CREATE INDEX IF EXISTS so we just catch the
# exception and ignore it.
import psycopg2
try:
c.execute( c.execute(
"CREATE INDEX CONCURRENTLY event_search_fts_idx" "CREATE INDEX CONCURRENTLY event_search_fts_idx"
" ON event_search USING GIN (vector)" " ON event_search USING GIN (vector)"
) )
except psycopg2.ProgrammingError as e:
c.execute("DROP INDEX event_search_fts_idx_gist")
conn.set_session(autocommit=False)
except e:
logger.warn( logger.warn(
"Ignoring error %s when trying to switch from GIST to GIN" % (e,) "Ignoring error %r when trying to switch from GIST to GIN",
e
) )
# we should now be able to delete the GIST index.
c.execute(
"DROP INDEX IF EXISTS event_search_fts_idx_gist"
)
finally:
conn.set_session(autocommit=False)
if isinstance(self.database_engine, PostgresEngine): if isinstance(self.database_engine, PostgresEngine):
yield self.runWithConnection(create_index) yield self.runWithConnection(create_index)