Arjen van der Meijden
2005-Oct-28 08:45 UTC
[Xapian-discuss] Why is a "DocNotFoundError" when deleting a document a Fatal error in php?
Currently I've built a php-based indexer for a new set-up were we'd like to use Xapian as back-end. All works quite well, except deleting a document. It may occur that the index has not been synced before a document is to be deleted again. I.e. a document is queued to be added, but also queued to be deleted. Now the prettiest way to handle that is just to remove the document from the queue, but that's a lot of extra checks for a few rare cases I don't really like to do. So I basically just delete the document, if it doesn't exist well, that's perfectly ok for me. But Xapian considers it an error and throws the DocNotFoundError, which gets wrapped to a Fatal Error. PHP cannot recover from such a situation as easily as C or Java can (try-catch doesn't exist in php4, nor would it work for such a situation in 5 I think). Of course I can write my own error handler in php, but it may also be worth to consider to lower the severity of such a case? Best regards, Arjen
Arjen van der Meijden
2005-Oct-28 08:54 UTC
[Xapian-discuss] Why is a "DocNotFoundError" when deleting a document a Fatal error in php?
It turns out that also working around the issue using something like this won't work: $doc = Database_get_document($database, $docId); if($doc != null) { WritableDatabase_delete_document($database, $docId); WritableDatabase_flush($database); } The get_document appearantly also yields a fatal error. In php it is common return false or null in a "it doesn't exist" case. Best regards, Arjen Arjen van der Meijden wrote:> Currently I've built a php-based indexer for a new set-up were we'd like > to use Xapian as back-end. All works quite well, except deleting a > document. It may occur that the index has not been synced before a > document is to be deleted again. > > I.e. a document is queued to be added, but also queued to be deleted. > Now the prettiest way to handle that is just to remove the document from > the queue, but that's a lot of extra checks for a few rare cases I don't > really like to do. > So I basically just delete the document, if it doesn't exist well, > that's perfectly ok for me. But Xapian considers it an error and throws > the DocNotFoundError, which gets wrapped to a Fatal Error. > PHP cannot recover from such a situation as easily as C or Java can > (try-catch doesn't exist in php4, nor would it work for such a situation > in 5 I think). > Of course I can write my own error handler in php, but it may also be > worth to consider to lower the severity of such a case? > > Best regards, > > Arjen > > _______________________________________________ > Xapian-discuss mailing list > Xapian-discuss@lists.xapian.org > http://lists.xapian.org/mailman/listinfo/xapian-discuss >