[Xapian-discuss] problem on closing writable databases

Markus Wörle mrks at mrks.de
Tue Feb 3 16:56:15 GMT 2009


Hi

(I am using xapian 1.0.10, with perl bindings.)

because of the issue, that xapian btrees thin out in the longrun, I  
decided to add support to my indexer for auto-compacting an index from  
time to time using the xapian-compact binary. It does so by

* flushing the open index
* undef the database-handle to do an inplicit close (there is no way  
to do an explicit close, right?)
* running "xapian-compact -n --no-renumber ./index ./index-compact   
2>&1 >/dev/null"
* moving ./index -> ./index-old
(* copying some arbitrary statistic files from ./index-old to ./index- 
compact, but this won't affect anything)
* moving ./index-compact -> ./index
* deleting ./index-old
* reopening the ./index by calling the  
Search::Xapian::WritableDatabase->new() constructor

Now my problem is, that the diskspace ./index-old consumes doesn't get  
freed. So I used lsof and found out that a "cat" process is holding  
open filehandles on the .DB files.

cat  2072  root  36u  REG  8,1  997842944  5529607 /var/lib/wtf/db/ 
profile-old/record.DB (deleted)
cat  2072  root  38u  REG  8,1  121257984  5529616 /var/lib/wtf/db/ 
profile-old/value.DB (deleted)
cat  2072  root  39u  REG  8,1  717463552  5529610 /var/lib/wtf/db/ 
profile-old/termlist.DB (deleted)
cat  2072  root  40u  REG  8,1 1703305216  5529613 /var/lib/wtf/db/ 
profile-old/position.DB (deleted)
cat  2072  root  41u  REG  8,1 1943666688  5529604 /var/lib/wtf/db/ 
profile-old/postlist.DB (deleted)

this cat-process corresponds to my index-daemon

root      1656  0.0  0.1 234732 54592 ?        S    16:35   0:00  
indexd overlord
root      1657 18.6  0.3 342596 164416 ?       R    16:35   5:13  \_  
indexd
root      1658  0.0  0.0   3868   468 ?        S    16:35   0:00       
\_ /bin/cat
root      1659  0.0  0.0   3868   468 ?        S    16:35   0:00       
\_ /bin/cat
root      1660  0.0  0.0   3868   468 ?        S    16:35   0:00       
\_ /bin/cat
root      1661  0.0  0.0   3868   472 ?        S    16:35   0:00       
\_ /bin/cat
root      1662  0.0  0.0   3868   468 ?        S    16:35   0:00       
\_ /bin/cat
root      2072  0.0  0.0   3868   472 ?        S    16:43   0:00       
\_ /bin/cat
root      3693  0.0  0.0   3868   472 ?        S    17:01   0:00       
\_ /bin/cat

I read earlier that "cat" is used for locking, and I saw that its  
opening the flintlock files. But why does it hold these .DB file open?  
Is there a way to get these files closed properly without acutally  
quitting and restarting the process (which probably would by my  
workaround)?

Regards,
mrks



More information about the Xapian-discuss mailing list