Antoher example so you understand how may understand the bug in dovecote core :


# doveadm search -u jom@grosjo.net mailbox Sent text milan


doveadm(jom@grosjo.net): Info: Get last UID of Sent = 61707 -> Correctly assigned the proper mailbox to the back end
doveadm(jom@grosjo.net): Info: Get last UID of Sent = 61707
doveadm(jom@grosjo.net): Info: Query: FLAG=AND
doveadm(jom@grosjo.net): Info: Query(1): add term(wilcard) : Sent -> WHy is "sent" among the serach parameters ???
doveadm(jom@grosjo.net): Info: Query(2): add term(wilcard) : milan
doveadm(jom@grosjo.net): Info: Testing if wildcard
doveadm(jom@grosjo.net): Info: Query: set GLOBAL (no specified header)
doveadm(jom@grosjo.net): Info: Query : ( bcc:milan OR body:milan OR cc:milan OR from:milan OR message-id:milan OR subject:milan OR to:milan ) AND ( bcc:sent OR body:sent OR cc:sent OR from:sent OR message-id:sent OR subject:sent OR to:sent )
doveadm(jom@grosjo.net): Info: Query: 7 results in 71 ms

(and same loop)


 

In this example, the "Sent" shall *never*  be passed as argument to the backend (xapian, solr or any other), only the mailbox reference. However, it appears in the search parameters





On 2019-04-21 10:31, Joan Moreau via dovecot wrote:

For this first point, the problem is that dovecot core sends TWICE the request and "Inbox" appears in the list of arguments ! (inbox shall serve to select teh right mailbox, never sent to the backend)

And even if this would be solved, the dovecot core loops *after* the backend hs returneds the results


# doveadm search -u jom@grosjo.net mailbox inbox text milan
doveadm(jom@grosjo.net): Info: Get last UID of INBOX = 315526
doveadm(jom@grosjo.net): Info: Get last UID of INBOX = 315526
doveadm(jom@grosjo.net): Info: Query: FLAG=AND
doveadm(jom@grosjo.net): Info: Query(1): add term(wilcard) : inbox
doveadm(jom@grosjo.net): Info: Query(2): add term(wilcard) : milan
doveadm(jom@grosjo.net): Info: Testing if wildcard
doveadm(jom@grosjo.net): Info: Query: set GLOBAL (no specified header)
doveadm(jom@grosjo.net): Info: Query : ( bcc:inbox OR body:inbox OR cc:inbox OR from:inbox OR message-id:inbox OR subject:inbox OR to:inbox ) AND ( bcc:milan OR body:milan OR cc:milan OR from:milan OR message-id:milan OR subject:milan OR to:milan )
doveadm(jom@grosjo.net): Info: Query: 2 results in 1 ms // THIS IS WHEN BACKEND HAS FOUND RESULTS AND STOPPED
d82b4b0f550d38593644000095331209 847
d82b4b0f550d38593644000095331209 1569
d82b4b0f550d38593644000095331209 2260
d82b4b0f550d38593644000095331209 2575
d82b4b0f550d38593644000095331209 2811
d82b4b0f550d38593644000095331209 2885
d82b4b0f550d38593644000095331209 3038
d82b4b0f550d38593644000095331209 3121 -> LOOPING FOREVER


 


On 2019-04-21 09:57, Timo Sirainen via dovecot wrote:

On 3 Apr 2019, at 20.30, Joan Moreau via dovecot <dovecot@dovecot.org> wrote:
doveadm search -u jom@grosjo.net mailbox inbox text milan
output

doveadm(jom@grosjo.net): Info: Query : ( bcc:inbox OR body:inbox OR cc:inbox OR from:inbox OR message-id:inbox OR subject:inbox OR to:inbox OR uid:inbox ) AND ( bcc:milan OR body:milan OR cc:milan OR from:milan OR message-id:milan OR subject:milan OR to:milan OR uid:milan )

1 - The query is wrong

That's because fts_backend_xapian_lookup() isn't anywhere close to being correct. Try to copy the logic based on solr_add_definite_query_args().