[Xapian-discuss] xapian-tcpsrv throws "Error reading block" exceptions

Rocco Caputo rcaputo at pobox.com
Mon Jun 19 15:56:53 BST 2006


On Jun 18, 2006, at 17:39, Olly Betts wrote:

> On Sat, Jun 17, 2006 at 01:13:58AM -0400, Rocco Caputo wrote:
>> It seems to be coming from both the flint and quartz backends.
>
> They currently share a lot of code, so that's not too suprising.
> Or maybe it's the remote backend.
>
>> I switched from flint to quartz and partly rebuild the database from
>> scratch.  The error persists:
>>
>> Exception: REMOTE:Error reading block 184743170: got end of file at
>> Search.pm line 281.
>> Exception: REMOTE:Error reading block 4050387271: File too large at
>> Search.pm line 281.

> Did you try my -fno-strict-aliasing suggestion?  Check if the perl
> bindings are built with it, and if not make sure they are!

Yes.  I verified that Perl is adding -fno-strict-aliasing.

> Other things to try:
>
> * Run quartzcheck on the quartz database to see if it finds any  
> corruption.
>
> * Run xapian-tcpsrv under valgrind to see if it can find anything
>   untoward going on.

Currently there isn't a quartz version of the database.  I switched  
back to flint after verifying the quartz backend behaved the same.

The problem seems to be related to sharing a single open database  
across multiple child processes.  Adding a db.reopen() call to the  
start of TcpServer::run_once() seems to have resolved the exception.   
I've been running ten concurrent clients overnight, and none of the  
1,355,000 queries have encountered the "Error reading block ###"  
exception.

The remaining exceptions are sensible and recoverable: can't connect,  
no response from remote end, revision being read has been discarded.   
My test client has retried about 8650 of them so far.

-- 
Rocco Caputo - rcaputo at pobox.com



More information about the Xapian-discuss mailing list