I am in the process of porting an old (four years) KinoSearch
application to Lucy; from scratch, not drop in, but starting from
small parts and building back up.
I have a stubbed indexer script working appropriately *until* I
daemonize it with Proc::Daemon::Init(), When I do that, a single index
pass/commit or an index pass with truncate => 1 works still but if it
has to build on the current index instead, it bombs out with a
memory/paging/bad-file error from a peculiar location for the Lucy
code; I think it's the build dir.
FATAL - mmap of offset 0 and length 2044 (page size 4096) against
'/usr/local/apv_4045_2/hss/var/lucy/cases/seg_3/cf.dat' failed: Bad
file descriptor
(/usr/local/apv_4045_2/hss/var/lucy/cases/seg_3/lexicon-28.ix)
S_fill at /root/Lucy-0.3.3/core/Lucy/Store/InStream.c line 206
at /usr/local/apv_4045_2/hss/lib/StudyShare/Lucy/Indexer.pm line 152
It says Lucy code is in /root/ (where it was built and installed per
the INSTALL doc that comes with the dist). But the code was installed
in the regular site_perl tree-
perldoc -l Lucy
/usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/Lucy.pod
If it's relevant the actual call that is throwing the error is-
$self->delete_by_term( field => "id", term => $case->id );
If it is commented out, it just moves the error to the ->commit call
but is still related to looking in the wrong place for the Lucy code-
FATAL - mmap of offset 4096 and length 656 (page size 4096) against
'/usr/local/apv_4045_2/hss/var/lucy/cases/seg_7/cf.dat' failed:
Permission denied
(/usr/local/apv_4045_2/hss/var/lucy/cases/seg_7/lexicon-2.ixix)
S_fill at /root/Lucy-0.3.3/core/Lucy/Store/InStream.c line 206
The self gives the clue that I'm subclassing-
use base "Lucy::Index::Indexer";
Not sure if that's become a no-no. It worked with KinoSearch.
Any ideas? Why is it looking in /root/? The script is not run as root.
What is it about daemonization is making it wonky?
Thank you!
-Ashley