|
|
|
@ -817,27 +817,32 @@ class StateStore(SQLBaseStore): |
|
|
|
|
|
|
|
|
|
@defer.inlineCallbacks |
|
|
|
|
def _background_index_state(self, progress, batch_size): |
|
|
|
|
def reindex_txn(txn): |
|
|
|
|
if isinstance(self.database_engine, PostgresEngine): |
|
|
|
|
txn.execute( |
|
|
|
|
"CREATE INDEX CONCURRENTLY state_groups_state_type_idx" |
|
|
|
|
" ON state_groups_state(state_group, type, state_key)" |
|
|
|
|
) |
|
|
|
|
txn.execute( |
|
|
|
|
"DROP INDEX IF EXISTS state_groups_state_id" |
|
|
|
|
) |
|
|
|
|
else: |
|
|
|
|
txn.execute( |
|
|
|
|
"CREATE INDEX state_groups_state_type_idx" |
|
|
|
|
" ON state_groups_state(state_group, type, state_key)" |
|
|
|
|
) |
|
|
|
|
txn.execute( |
|
|
|
|
"DROP INDEX IF EXISTS state_groups_state_id" |
|
|
|
|
) |
|
|
|
|
def reindex_txn(conn): |
|
|
|
|
conn.rollback() |
|
|
|
|
# postgres insists on autocommit for the index |
|
|
|
|
conn.set_session(autocommit=True) |
|
|
|
|
try: |
|
|
|
|
txn = conn.cursor() |
|
|
|
|
if isinstance(self.database_engine, PostgresEngine): |
|
|
|
|
txn.execute( |
|
|
|
|
"CREATE INDEX CONCURRENTLY state_groups_state_type_idx" |
|
|
|
|
" ON state_groups_state(state_group, type, state_key)" |
|
|
|
|
) |
|
|
|
|
txn.execute( |
|
|
|
|
"DROP INDEX IF EXISTS state_groups_state_id" |
|
|
|
|
) |
|
|
|
|
else: |
|
|
|
|
txn.execute( |
|
|
|
|
"CREATE INDEX state_groups_state_type_idx" |
|
|
|
|
" ON state_groups_state(state_group, type, state_key)" |
|
|
|
|
) |
|
|
|
|
txn.execute( |
|
|
|
|
"DROP INDEX IF EXISTS state_groups_state_id" |
|
|
|
|
) |
|
|
|
|
finally: |
|
|
|
|
conn.set_session(autocommit=False) |
|
|
|
|
|
|
|
|
|
yield self.runInteraction( |
|
|
|
|
self.STATE_GROUP_INDEX_UPDATE_NAME, reindex_txn |
|
|
|
|
) |
|
|
|
|
yield self.runWithConnection(reindex_txn) |
|
|
|
|
|
|
|
|
|
yield self._end_background_update(self.STATE_GROUP_INDEX_UPDATE_NAME) |
|
|
|
|
|
|
|
|
|