During document content indexing of our Records, I get errors.
Error processing event on database '##' for processor 'Content Indexing' The system cannot find the file specified. When I look for the file, it indeed does not exist. So I query the TSEVENTDAT table in SQL using the edEstoreID (file path) and see the events, occasionally there is an event 71 and an event 73, knowing that 71 is the ID to triger indexing and 73 is the ID to state that the file no longer exists if I delete the record for 71 then Indexing proceeds as planned. Why can't the system after receiving an error that the file does not exist, delete the records and continue processing events? We process over 1000 documents a day and if the error occurs over the weekend it takes me hours to get the DCI to complete having to delete records in the database about every 100 or so documents.
Is it fair to assume youu're on a version pre IDOL? I think this is corrected in newer versions.
The problem you've outlined is because of how it's designed. When things happen in the database they are queued up for processing. So if someone registers a document (or adds a new revision/rendition) it queues up an content index entry. Later if that electronic object is deleted (maybe the record is deleted, revision is purged, or rendition removed) it queues up other things. There is no logic to actually go remove other types of events.
You have a few options:
1) Ignore it and deal with the side affects (fun huhn?)
2) Try to increase the throughput of the queue processing so that it processes things before they get deleted
3) Prevent electronic objects from being deleted (or replaced)
4) Add a trigger on the TSEVENTDAT table so that it detects these delete entries and then manually removes pending DCI entries for matching objectUris (I've done this before and it works well)
5) Create a scheduled task that does the same basic thing as #4
2. Go into the event processor configuration options tab and adjust the settings. The defaults are rathe rlow. Maybe try a batch size of 1,000 and polling interval of 60 seconds.
3. I figured as much
4. Rough outline of the trigger is below. For #5 I have a sample .Net app that does this, but not giving that out.
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
-- Author: Erik Willsey
-- Description: Trigger to forcibly remove pending DCI event entries
CREATE TRIGGER [dbo].[tseventdat_dciFix]
declare @sourceType as smallint
declare @objectType as smallint
declare @objectUri as bigint
select @sourceType = edEventType, @objectType = edObjectType, @objectUri = edObjectUri from inserted
if ( @sourceType = 73 )
delete from tseventdat where edEventType = 71 AND edObjectType = @objectType AND edObjectUri = @objectUri