plume-model: refactor Searcher to have its own DbPool #809
No reviewers
Labels
No labels
A: API
A: Backend
A: Federation
A: Front-End
A: I18N
A: Meta
A: Security
Build
C: Bug
C: Discussion
C: Enhancement
C: Feature
Compatibility
Dependency
Design
Documentation
Good first issue
Help welcome
Mobile
Rendering
S: Blocked
S: Duplicate
S: Incomplete
S: Instance specific
S: Invalid
S: Needs Voting/Discussion
S: Ready for review
Suggestion
S: Voted on Loomio
S: Wontfix
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: Plume/Plume#809
Loading…
Reference in a new issue
No description provided.
Delete branch "igalic/Plume:refactor/extract-searcher-with-dbpool"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
This PR is another attempt at fixing #799
Instead of relying on a separate actor model, as described, we make use of the fact that DbPool is an
Arc
, and can be arbitrarily cloned, so we add it toSearcher
. Further more, anddb_pool.get()
acts like sending a message to an Actor: if there are enough connections, the Pool gives us one, if not, tough luck!this way, we don't need to pass along a conn into the searcher functions.
This should make splitting PlumeRocket up into its components a little easier.
👌
@ -175,15 +186,16 @@ impl Searcher {
let lang = schema.get_field("lang").unwrap();
let license = schema.get_field("license").unwrap();
let conn = self.dbpool.get().unwrap();
I would prefer using
?
instead ofunwrap
here.can you briefly explain why?
we use
.unwrap()
in all other lines.I think all the previous ones are safe: we now it can't panic because we control the search index schema, we know that these fields exist (even if Rust can't check this at comoile-time). Here, we may fail to get a DB connection from the pool for whatever reason, and I think we should make the error "go up", so that the web UI or the CLI can display a proper error.
@ -222,24 +229,27 @@ impl Searcher {
let searcher = self.reader.searcher();
let res = searcher.search(&query.into_query(), &collector).unwrap();
let conn = self.dbpool.get().unwrap();
Same here.
👀
@ -40,6 +40,7 @@ pub enum Error {
Io(std::io::Error),
MissingApProperty,
NotFound,
DbPool,
you're not trying to convert the original
diesel::r2d2::Error
?It is a
r2d2::Error
, not the same as Diesel's one apparently. And I don't want to add another direct dependency in our Cargo.toml.gonna have to ask somebody how the heck this is happening
@ -177,1 +188,4 @@
let conn = match self.dbpool.get() {
Ok(c) => c,
Err(_) => return Err(Error::DbPool),
that means we won't know exactly why the pool didn't give us a connection
🙋🏻♀️
@ -31,0 +55,4 @@
///
/// The panic messages are normally explicit enough for a human to
/// understand how to fix the issue when they see it.
pub fn new(db_pool: DbPool) -> Arc<Self> {
why are we returning
Arc<Self>
?this means our code needs to know exactly how it's going to be used
what about cli? does that use an Arc?
i would use this function to only return a Self
there's no need to init_pool, we just want a copy
we can create an initialize method, which tries to call open and create methods in the appropriate order with the error recovery, if that makes sense here
but as it stands, for a new function, this does too much
9309ed279f
toa5c81498b2
closing in favour of #813
Pull request closed