- ingest_records(cl, recs);
- cl->state = Client_Idle;
- }
- else if (*r->presentStatus)
- {
- yaz_log(YLOG_WARN, "Bad Present response %s",
- cl->database->database->url);
- cl->state = Client_Error;
- client_show_raw_error(cl, "bad present response");
+ {
+ int offset = cl->record_offset;
+ if ((rec = ZOOM_resultset_record(resultset, offset)))
+ {
+ cl->record_offset++;
+ if (cl->session == 0)
+ ;
+ else if (ZOOM_record_error(rec, &msg, &addinfo, 0))
+ {
+ yaz_log(YLOG_WARN, "Record error %s (%s): %s (rec #%d)",
+ msg, addinfo, client_get_url(cl),
+ cl->record_offset);
+ }
+ else
+ {
+ struct session_database *sdb = client_get_database(cl);
+ NMEM nmem = nmem_create();
+ const char *xmlrec;
+ int new_max = 0;
+ char type[80];
+ yaz_log(YLOG_LOG, "Record ingest begin client=%p session=%p", cl, cl->session);
+ pthread_mutex_lock(&ingest_mutex);
+ ++ingest_counter;
+ if (ingest_counter > ingest_max)
+ {
+ ingest_max = ingest_counter;
+ new_max = ingest_max;
+ }
+ pthread_mutex_unlock(&ingest_mutex);
+ if (new_max)
+ yaz_log(YLOG_LOG, "New max client=%p new_max=%d", cl, new_max);
+ if (nativesyntax_to_type(sdb, type, rec))
+ yaz_log(YLOG_WARN, "Failed to determine record type");
+ xmlrec = ZOOM_record_get(rec, type, NULL);
+ if (!xmlrec)
+ yaz_log(YLOG_WARN, "ZOOM_record_get failed from %s",
+ client_get_url(cl));
+ else
+ {
+ if (ingest_record(cl, xmlrec, cl->record_offset, nmem))
+ yaz_log(YLOG_WARN, "Failed to ingest from %s",
+ client_get_url(cl));
+ }
+ pthread_mutex_lock(&ingest_mutex);
+ --ingest_counter;
+ pthread_mutex_unlock(&ingest_mutex);
+ nmem_destroy(nmem);
+ yaz_log(YLOG_LOG, "Record ingest end client=%p session=%p max=%d", cl, cl->session, ingest_max);
+ }
+ }
+ else
+ {
+ yaz_log(YLOG_WARN, "Expected record, but got NULL, offset=%d",
+ offset);
+ }
+ }