Search: Add get_es_client() to ES backend and update SignalProcessor
Review Request #15053 — Created May 13, 2026 and updated
Two targeted changes to existing files:
-ElasticsearchBackend.get_es_client()— adds a new method to the
Elasticsearch search backend that constructs and returns a raw
elasticsearch.Elasticsearchclient using the URL from the current backend
configuration. Used byFacetedSearchEngineto run direct ES queries outside
of Haystack. RaisesRuntimeErrorif the installedelasticsearchpackage
is unsupported.
-SignalProcessor— extendshandle_saveandhandle_deleteto call
FacetCache().invalidate_group(group_id)after each successful index update.
A_MODEL_TO_GROUPmapping at module level translates the model class name
to its facet cache group ID, coveringReviewRequest,User,Profile,
Group, and all comment model types (Comment,GeneralComment,
FileAttachmentComment,ScreenshotComment). Unrecognised model types are
silently ignored. Cache invalidation is skipped when the index update itself
raises an exception.
Group.usersM2M changes are also handled: when users are added to or removed
from a group the affected user records are re-indexed and the user group's
cache is invalidated.
Ran full test suite.
Verified thatget_es_clientreturns a correctly configured Elasticsearch
client and raisesRuntimeErrorfor unsupported package versions. Verified
thatSignalProcessorinvalidates the correct facet cache group after save and
delete for all tracked model types, silently ignores unrecognised models, and
does not propagate indexing exceptions. Confirmed existing backend and signal
processor behaviour is unchanged.
| Summary | ID |
|---|---|
| 171b5c9ecbfbe28250b16ea3444851fafde6a582 | |
| 66c1ba16c101b1723e3803d9784004e01ab8b6c3 |
| Description | From | Last Updated |
|---|---|---|
|
continuation line over-indented for visual indent Column: 36 Error code: E127 |
|
|
|
line too long (82 > 79 characters) Column: 80 Error code: E501 |
|
|
|
line too long (80 > 79 characters) Column: 80 Error code: E501 |
|
|
|
line too long (81 > 79 characters) Column: 80 Error code: E501 |
|
|
|
line too long (81 > 79 characters) Column: 80 Error code: E501 |
|
|
|
continuation line over-indented for visual indent Column: 36 Error code: E127 |
|
|
|
line too long (82 > 79 characters) Column: 80 Error code: E501 |
|
|
|
line too long (80 > 79 characters) Column: 80 Error code: E501 |
|
|
|
'reviewboard.search.testing.search_enabled' imported but unused Column: 1 Error code: F401 |
|
|
|
'reviewboard.search.search_backend_registry' imported but unused Column: 1 Error code: F401 |
|
|
|
line too long (80 > 79 characters) Column: 80 Error code: E501 |
|
|
|
'reviewboard.search.testing.search_enabled' imported but unused Column: 1 Error code: F401 |
|
|
|
'reviewboard.search.search_backend_registry' imported but unused Column: 1 Error code: F401 |
|
- Commits:
-
Summary ID Author 762404efe45048fef2306fc18fbffb4add677d0e DanielCasaresIglesias 3c33a032f9e0104d5343802ac9a0c8282894ea00 DanielCasaresIglesias
Checks run (2 succeeded)
- Change Summary:
-
Updated
signal_processor.pyto properly reindex a review request when a comment, review, issue, etc. is published on that review request.
Updated tests to ensure this is tracked correctly. - Testing Done:
-
~ Verified that
get_es_clientreturns a correctly configured Elasticsearch~ Ran full test suite.
+ Verified that get_es_clientreturns a correctly configured Elasticsearchclient and raises RuntimeErrorfor unsupported package versions. Verifiedthat SignalProcessorinvalidates the correct facet cache group after save anddelete for all tracked model types, silently ignores unrecognised models, and does not propagate indexing exceptions. Confirmed existing backend and signal processor behaviour is unchanged. - Commits:
-
Summary ID Author 3c33a032f9e0104d5343802ac9a0c8282894ea00 DanielCasaresIglesias 3343cbafea00a0aba52011b1de6ebda931f40798 Daniel Casares-Iglesias - Diff:
-
Revision 3 (+3400 -314)
Checks run (1 failed, 1 succeeded)
flake8
- Commits:
-
Summary ID 3343cbafea00a0aba52011b1de6ebda931f40798 171b5c9ecbfbe28250b16ea3444851fafde6a582 b508db3f9253792cce09ac01f3144aa0a8ef7277