Commit Graph

12531 Commits

Author SHA1 Message Date
Clément Renault
5a10de1b9f Merge pull request #122 from meilisearch/attribute-criterion
Introduce the Attribute criterion
2021-04-28 14:34:50 +02:00
many
3b7e6afb55 Make some refacto and add documentation 2021-04-28 13:53:27 +02:00
bors[bot]
8bc7dd8b03 Merge #143
143: Shared update store r=irevoire a=MarinPostma

This PR changes the updates process so that only one instance of an update store is shared among indexes.

This allows updates to always be processed sequentially without additional synchronization, and fixes the bug where all the first pending update for each index were reported as processing whereas only one was.

EDIT:

I ended having to rewrite the whole `UpdateStore` to allow updates being really queued and processed sequentially in the ordered they were added. For that purpose I created a `pending_queue` that orders the updates by a global update id.

To find the next `update_id` to use, both globally and for each index, I have created another database that contains the next id to use.

Finally, all updates that have been processed (with success or otherwise) are all stores in an `updates` database.

The layout for the keys of these databases are such that it is easy to iterate over the elements for a particular index, and greatly reduces the amount of code to do so, compared to the former implementation.

I have also simplified the locking mechanism for the update store, thanks to the StateLock data structure, that allow both an arbitrary number of readers and a single writer to concurrently access the state. The current state can be either Idle, Processing, or Snapshotting. When an update or snapshotting is ongoing, the process holds the state lock until it is done processing its task. When it is done, it sets bask the state to Idle.

I have made other small improvements here and there, and have let some other for work, such as:
- When creating an update file to hold a request's content, it would be preferable to first create a temporary file, and then atomically persist it when we have written to it. This would simplify the case when there is no data to be written to the file, since we wouldn't have to take care about cleaning after ourselves.
- The logic for content validation must be factored.
- Some more tests related to error handling in the process_pending_update function.
- The issue #159

close #114


Co-authored-by: Marin Postma <postma.marin@protonmail.com>
2021-04-27 18:41:55 +00:00
Thomas Payet
e6fd1afc3d Merge pull request #163 from meilisearch/curquiza-patch-1
Update README.md
2021-04-27 18:51:04 +02:00
Marin Postma
a961f0ce75 fix clippy warnings 2021-04-27 18:28:46 +02:00
Many
0add4d735c Update milli/src/search/criteria/attribute.rs
Co-authored-by: Clément Renault <clement@meilisearch.com>
2021-04-27 17:40:34 +02:00
Many
3794ffc952 Update milli/src/search/criteria/attribute.rs
Co-authored-by: Clément Renault <clement@meilisearch.com>
2021-04-27 17:39:23 +02:00
Many
329bd4a1bb Update milli/src/search/criteria/attribute.rs
Co-authored-by: Clément Renault <clement@meilisearch.com>
2021-04-27 17:39:03 +02:00
Many
3b1358b62f Update milli/src/search/criteria/attribute.rs
Co-authored-by: Clément Renault <clement@meilisearch.com>
2021-04-27 17:32:19 +02:00
Many
c862b1bc6b Update milli/src/search/criteria/attribute.rs
Co-authored-by: Clément Renault <clement@meilisearch.com>
2021-04-27 17:32:10 +02:00
Many
e92d137676 Update milli/src/search/criteria/attribute.rs
Co-authored-by: Clément Renault <clement@meilisearch.com>
2021-04-27 17:31:42 +02:00
Many
b3d6c6a9a0 Update milli/src/search/criteria/attribute.rs
Co-authored-by: Clément Renault <clement@meilisearch.com>
2021-04-27 17:31:13 +02:00
Many
498c2b298c Update milli/src/search/criteria/attribute.rs
Co-authored-by: Clément Renault <clement@meilisearch.com>
2021-04-27 17:30:02 +02:00
Many
0e4e6dfada Update milli/src/search/criteria/proximity.rs
Co-authored-by: Clément Renault <clement@meilisearch.com>
2021-04-27 17:29:52 +02:00
Clémentine Urquizar
cea0c1f41d Update README.md 2021-04-27 16:33:22 +02:00
Clémentine Urquizar
703d2026e4 Update README.md 2021-04-27 16:33:00 +02:00
bors[bot]
3d85b2d854 Merge #162
162: Re-enable ranking rules route r=MarinPostma a=MarinPostma

re-enable ranking rules setting route


Co-authored-by: Marin Postma <postma.marin@protonmail.com>
2021-04-27 13:55:40 +00:00
Marin Postma
bb79a15c04 reenable ranking rules route 2021-04-27 15:29:00 +02:00
Marin Postma
4fe2a13c71 rewrite update store 2021-04-27 15:20:52 +02:00
Marin Postma
51829ad85e review fixes 2021-04-27 15:10:57 +02:00
Marin Postma
c78f351300 fix tests 2021-04-27 15:10:57 +02:00
Marin Postma
ee675eadf1 fix stats 2021-04-27 15:10:55 +02:00
Marin Postma
33830d5ecf fix snapshots 2021-04-27 15:09:55 +02:00
Marin Postma
2b154524bb fix filtered out pending update 2021-04-27 15:09:23 +02:00
Marin Postma
b626d02ffe simplify index actor run loop 2021-04-27 15:09:22 +02:00
Marin Postma
9ce68d11a7 single update store instance 2021-04-27 15:09:21 +02:00
Marin Postma
5a38f13cae multi_index udpate store 2021-04-27 15:07:13 +02:00
Many
47d780b8ce Update milli/src/search/criteria/mod.rs
Co-authored-by: Irevoire <tamo@meilisearch.com>
2021-04-27 14:39:53 +02:00
Many
0daa0e170a Fix PR comments
Co-authored-by: Clément Renault <clement@meilisearch.com>
2021-04-27 14:39:53 +02:00
many
0d7d3ce802 Update roaring package 2021-04-27 14:39:53 +02:00
many
71740805a7 Fix forgotten typo tests 2021-04-27 14:39:53 +02:00
many
e77291a6f3 Optimize Atrribute criterion on big requests 2021-04-27 14:39:53 +02:00
many
716c8e22b0 Add style and comments 2021-04-27 14:39:52 +02:00
many
f853790016 Use the LCM of 10 first numbers to compute attribute rank 2021-04-27 14:39:52 +02:00
many
2b036449be Fix the return of equal candidates in different pages 2021-04-27 14:39:52 +02:00
many
0efa011e09 Make a small code clean-up 2021-04-27 14:39:52 +02:00
many
17c8c6f945 Make set algorithm return None when nothing can be returned 2021-04-27 14:39:52 +02:00
many
b3e2280bb9 Debug attribute criterion
* debug folding when initializing iterators
2021-04-27 14:39:52 +02:00
many
1eee0029a8 Make attribute criterion typo/prefix tolerant 2021-04-27 14:39:52 +02:00
many
59f58c15f7 Implement attribute criterion
* Implement WordLevelIterator
* Implement QueryLevelIterator
* Implement set algorithm based on iterators

Not tested + Some TODO to fix
2021-04-27 14:39:52 +02:00
Clément Renault
361193099f Reduce the amount of branches when query tree flattened 2021-04-27 14:39:52 +02:00
Kerollmops
7ff4a2a708 Display the number of entries in the infos crate 2021-04-27 14:39:52 +02:00
Kerollmops
1aad66bdaa Compute stats about the word prefix level positions database in the infos crate 2021-04-27 14:39:52 +02:00
Kerollmops
e65bad16cc Compute the words prefixes at the end of an update 2021-04-27 14:39:52 +02:00
many
ab92c814c3 Fix attributes score 2021-04-27 14:35:43 +02:00
Clément Renault
0ad9499b93 Fix an indexing bug in the words level positions 2021-04-27 14:35:43 +02:00
Clément Renault
7aa5753ed2 Make the attribute positions range bounds to be fixed 2021-04-27 14:35:43 +02:00
Clément Renault
658f316511 Introduce the Initial Criterion 2021-04-27 14:35:43 +02:00
Kerollmops
89ee2cf576 Introduce the TreeLevel struct 2021-04-27 14:25:35 +02:00
Kerollmops
bd1a371c62 Compute the WordsLevelPositions only once 2021-04-27 14:25:34 +02:00