Ingest Result Handlers
When you ingest a document using the Add, Replace, Remove or Update methods, the ingest command is placed in a queue and the method returns immediately. ConnectorLib C++ takes care of batching, sending the commands, and dealing with any transitory problems communicating with the target.
As a result, the Add, Replace, Remove and Update methods never fail, even if there is a problem ingesting a document. To find out whether each document was ingested successfully, you can register an Ingest result handler:
MyIngestResultHandler handler(task.log());
task.ingester().addResultHandler(handler);
The class MyIngestResultHandler is a user defined function object. In this example it is constructed with a Log.
The result handler is called whenever a document is successfully ingested or when ingestion fails for a document. A simple result handler is shown here:
class MyIngestResultHandler : public Ingester::ResultHandler
{
Log m_log;
public:
MyIngestResultHandler(const Log& log)
: m_log(log)
{}
void operator()(const IngestTask& ingestTask)
{
if (ingestTask.status() == IngestTaskStatus::Done)
{
m_log.full("Document " + ingestTask.document().reference()
+ ", ingest " + ingestTask.typeString() + " succeeded!");
}
else
{
m_log.full("Ingestion failed for " + ingestTask.document().reference());
}
}
};
Ingest result handlers are useful when you want to update state information only when documents are ingested successfully. An example of a connector using an ingest result handler for this purpose is included in Make an Incremental Synchronize Action.