From b0797dd6ff756c6e7f66b0dc9f2848e0022cf1fb Mon Sep 17 00:00:00 2001 From: Adam Dickmeiss Date: Fri, 30 Nov 2012 14:35:00 +0100 Subject: [PATCH] Improved logging for record ingestion failures --- src/client.c | 38 ++++++++++++++++++++++++++++---------- src/normalize_record.c | 6 ++++++ src/session.c | 6 ++---- 3 files changed, 36 insertions(+), 14 deletions(-) diff --git a/src/client.c b/src/client.c index 54d5f51..c12b84f 100644 --- a/src/client.c +++ b/src/client.c @@ -582,17 +582,18 @@ static void client_record_ingest(struct client *cl) const char *msg, *addinfo; ZOOM_record rec = 0; ZOOM_resultset resultset = cl->resultset; - int offset = cl->record_offset; - if ((rec = ZOOM_resultset_record_immediate(resultset, offset))) + struct session *se = client_get_session(cl); + + if ((rec = ZOOM_resultset_record_immediate(resultset, cl->record_offset))) { - cl->record_offset++; + int offset = ++cl->record_offset; if (cl->session == 0) { /* no operation */ } else if (ZOOM_record_error(rec, &msg, &addinfo, 0)) { - yaz_log(YLOG_WARN, "Record error %s (%s): %s (rec #%d)", - msg, addinfo, client_get_id(cl), cl->record_offset); + session_log(se, YLOG_WARN, "Record error %s (%s): %s #%d", + msg, addinfo, client_get_id(cl), offset); } else { @@ -603,17 +604,33 @@ static void client_record_ingest(struct client *cl) const char *s = session_setting_oneval(sdb, PZ_NATIVESYNTAX); if (nativesyntax_to_type(s, type, rec)) - yaz_log(YLOG_WARN, "Failed to determine record type"); + session_log(se, 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_id(cl)); + { + const char *rec_syn = ZOOM_record_get(rec, "syntax", NULL); + session_log(se, YLOG_WARN, "ZOOM_record_get failed from %s #%d", + client_get_id(cl), offset); + session_log(se, YLOG_LOG, "pz:nativesyntax=%s . " + "ZOOM record type=%s . Actual record syntax=%s", + s ? s : "null", type, + rec_syn ? rec_syn : "null"); + } else { /* OK = 0, -1 = failure, -2 = Filtered */ int rc = ingest_record(cl, xmlrec, cl->record_offset, nmem); if (rc == -1) - yaz_log(YLOG_WARN, "Failed to ingest from %s", client_get_id(cl)); + { + const char *rec_syn = ZOOM_record_get(rec, "syntax", NULL); + session_log(se, YLOG_WARN, + "Failed to ingest record from %s #%d", + client_get_id(cl), offset); + session_log(se, YLOG_LOG, "pz:nativesyntax=%s . " + "ZOOM record type=%s . Actual record syntax=%s", + s ? s : "null", type, + rec_syn ? rec_syn : "null"); + } if (rc == -2) cl->filtered += 1; } @@ -622,7 +639,8 @@ static void client_record_ingest(struct client *cl) } else { - yaz_log(YLOG_WARN, "Expected record, but got NULL, offset=%d", offset); + session_log(se, YLOG_WARN, "Got NULL record from %s #%d", + client_get_id(cl), cl->record_offset); } } diff --git a/src/normalize_record.c b/src/normalize_record.c index 9a81fb3..cb53cf6 100644 --- a/src/normalize_record.c +++ b/src/normalize_record.c @@ -178,6 +178,12 @@ int normalize_record_transform(normalize_record_t nt, xmlDoc **doc, *doc = ndoc; else { + if (!ndoc) + yaz_log(YLOG_WARN, "XSLT produced no document"); + else if (!root) + yaz_log(YLOG_WARN, "XSLT produced XML with no root node"); + else if (!root->children) + yaz_log(YLOG_WARN, "XSLT produced XML with no root children nodes"); if (ndoc) xmlFreeDoc(ndoc); return -1; diff --git a/src/session.c b/src/session.c index 9469fd2..1927a1c 100644 --- a/src/session.c +++ b/src/session.c @@ -256,8 +256,7 @@ static xmlDoc *record_to_xml(struct session *se, if (!rdoc) { - session_log(se, YLOG_FATAL, "Non-wellformed XML received from %s", - db->id); + session_log(se, YLOG_WARN, "Non-wellformed XML"); return 0; } @@ -350,8 +349,7 @@ static xmlDoc *normalize_record(struct session *se, if (normalize_record_transform(sdb->map, &rdoc, (const char **)parms)) { - session_log(se, YLOG_WARN, "Normalize failed from %s", - sdb->database->id); + session_log(se, YLOG_WARN, "Normalize failed"); } else { -- 1.7.10.4