mirror of
https://github.com/zulip/zulip.git
synced 2025-11-04 22:13:26 +00:00
upgrade: Add management command to fix FTS indexes.
Upgrading the base OS's dictionary files can corrupt our FTS indexes. We add a command for fixing them. Fixes #14982.
This commit is contained in:
committed by
Tim Abbott
parent
23fe58f5be
commit
c231d88d9f
@@ -239,12 +239,14 @@ instructions for other supported platforms.
|
|||||||
|
|
||||||
5. Finally, we need to reinstall the current version of Zulip, which
|
5. Finally, we need to reinstall the current version of Zulip, which
|
||||||
among other things will recompile Zulip's Python module
|
among other things will recompile Zulip's Python module
|
||||||
dependencies for your new version of Python:
|
dependencies for your new version of Python and rewrite Zulip's
|
||||||
|
full-text search indexes to work with the upgraded dictionary
|
||||||
|
packages:
|
||||||
|
|
||||||
```
|
```
|
||||||
rm -rf /srv/zulip-venv-cache/*
|
rm -rf /srv/zulip-venv-cache/*
|
||||||
/home/zulip/deployments/current/scripts/lib/upgrade-zulip-stage-2 \
|
/home/zulip/deployments/current/scripts/lib/upgrade-zulip-stage-2 \
|
||||||
/home/zulip/deployments/current/ --ignore-static-assets
|
/home/zulip/deployments/current/ --ignore-static-assets --audit-fts-indexes
|
||||||
```
|
```
|
||||||
|
|
||||||
That last command will finish by restarting your Zulip server; you
|
That last command will finish by restarting your Zulip server; you
|
||||||
@@ -378,9 +380,9 @@ To upgrade the version of PostgreSQL on the Zulip server:
|
|||||||
/home/zulip/deployments/current/scripts/setup/upgrade-postgres
|
/home/zulip/deployments/current/scripts/setup/upgrade-postgres
|
||||||
```
|
```
|
||||||
|
|
||||||
That last command will finish by restarting your Zulip server; you
|
`upgrade-postgres` will have finished by restarting your Zulip server;
|
||||||
should now be able to navigate to its URL and confirm everything is
|
you should now be able to navigate to its URL and confirm everything
|
||||||
working correctly.
|
is working correctly.
|
||||||
|
|
||||||
|
|
||||||
## Modifying Zulip
|
## Modifying Zulip
|
||||||
|
|||||||
@@ -81,6 +81,8 @@ parser.add_argument("--ignore-static-assets", dest="ignore_static_assets", actio
|
|||||||
help="Do not attempt to copy/manage static assets.")
|
help="Do not attempt to copy/manage static assets.")
|
||||||
parser.add_argument("--skip-purge-old-deployments", dest="skip_purge_old_deployments",
|
parser.add_argument("--skip-purge-old-deployments", dest="skip_purge_old_deployments",
|
||||||
action="store_true", help="Skip purging old deployments.")
|
action="store_true", help="Skip purging old deployments.")
|
||||||
|
parser.add_argument("--audit-fts-indexes", dest="audit_fts_indexes",
|
||||||
|
action="store_true", help="Audit and fix full text search indexes.")
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
deploy_path = args.deploy_path
|
deploy_path = args.deploy_path
|
||||||
@@ -268,6 +270,11 @@ logging.info("Restarting Zulip...")
|
|||||||
subprocess.check_output(["./scripts/restart-server", "--fill-cache"], preexec_fn=su_to_zulip)
|
subprocess.check_output(["./scripts/restart-server", "--fill-cache"], preexec_fn=su_to_zulip)
|
||||||
logging.info("Upgrade complete!")
|
logging.info("Upgrade complete!")
|
||||||
|
|
||||||
|
if args.audit_fts_indexes:
|
||||||
|
logging.info("Correcting full-text search indexes for updated dictionary files")
|
||||||
|
logging.info("This may take a while but the server should work while it runs.")
|
||||||
|
subprocess.check_call(["./manage.py", "audit_fts_indexes"], preexec_fn=su_to_zulip)
|
||||||
|
|
||||||
if not args.skip_purge_old_deployments:
|
if not args.skip_purge_old_deployments:
|
||||||
logging.info("Purging old deployments...")
|
logging.info("Purging old deployments...")
|
||||||
subprocess.check_call(["./scripts/purge-old-deployments"])
|
subprocess.check_call(["./scripts/purge-old-deployments"])
|
||||||
|
|||||||
19
zerver/management/commands/audit_fts_indexes.py
Normal file
19
zerver/management/commands/audit_fts_indexes.py
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
from typing import Any
|
||||||
|
|
||||||
|
from django.db import connection
|
||||||
|
|
||||||
|
from zerver.lib.management import ZulipBaseCommand
|
||||||
|
|
||||||
|
|
||||||
|
class Command(ZulipBaseCommand):
|
||||||
|
def handle(self, *args: Any, **kwargs: str) -> None:
|
||||||
|
with connection.cursor() as cursor:
|
||||||
|
cursor.execute("""
|
||||||
|
UPDATE zerver_message
|
||||||
|
SET search_tsvector =
|
||||||
|
to_tsvector('zulip.english_us_search', subject || rendered_content)
|
||||||
|
WHERE to_tsvector('zulip.english_us_search', subject || rendered_content) != search_tsvector
|
||||||
|
""")
|
||||||
|
|
||||||
|
fixed_message_count = cursor.rowcount
|
||||||
|
print(f"Fixed {fixed_message_count} messages.")
|
||||||
Reference in New Issue
Block a user