The goal is to make fulltext search back-ends more extensible, configurable and robust.
When this is finished it will be possible to have multiple search storage back-ends and
potentially multiple instances of each. Individual instances can be configured as any of:
- read-only
- write-only
- read-write
- disabled
I'm also attempting to reuse the connection health monitoring infrastructure from
PhabricatorDatabaseHealthRecord for monitoring the health of elasticsearch nodes. This will
allow Wikimedia's phabricator to be redundant across data centers (mysql already is,
elasticsearch should be as well).
The real-world use-case I have in mind here is writing to two indexes (two elasticsearch clusters
in different data centers) but reading from only one. Then toggling the readable property when
we want to migrate to the other data center (and when we migrate from elasticsearch 2.x to 5.x)
Remaining TODO:
- Callers will obtain a wrapper that will have the PhabricatorFulltextStorageEngine interface but will
transparently aggregate multiple back-end instances.