From: Adam Dickmeiss Date: Mon, 28 Feb 2011 12:32:49 +0000 (+0100) Subject: zebra_register_check fixes X-Git-Tag: v2.0.46~9 X-Git-Url: http://sru.miketaylor.org.uk/cgi-bin?a=commitdiff_plain;h=5a0bd8219f5265caf462c669ba9557b8d7fc2aed;p=idzebra-moved-to-github.git zebra_register_check fixes Log at most 20 entries for each error type during check. Allow up to IT_KEY_LEVEL_MAX (5) , not 4 in check for each key. --- diff --git a/include/idzebra/api.h b/include/idzebra/api.h index 64af3a3..f91a536 100644 --- a/include/idzebra/api.h +++ b/include/idzebra/api.h @@ -511,7 +511,7 @@ ZEBRA_RES zebra_set_break_handler(ZebraHandle zh, void *client_data); YAZ_EXPORT -ZEBRA_RES zebra_register_check(ZebraHandle zh, int verbose_level); +ZEBRA_RES zebra_register_check(ZebraHandle zh, int message_limit); YAZ_END_CDECL diff --git a/index/zebraapi.c b/index/zebraapi.c index 0ef006b..6c3f630 100644 --- a/index/zebraapi.c +++ b/index/zebraapi.c @@ -2195,7 +2195,7 @@ ZEBRA_RES zebra_compact(ZebraHandle zh) } static ZEBRA_RES zebra_record_check(ZebraHandle zh, Record rec, - zint *no_keys, int verbose_level, + zint *no_keys, int message_limit, zint *no_long_dict_entries, zint *no_failed_dict_lookups, zint *no_invalid_keys, @@ -2230,12 +2230,25 @@ static ZEBRA_RES zebra_record_check(ZebraHandle zh, Record rec, (*no_keys)++; + if (key_in.len < 2 || key_in.len > IT_KEY_LEVEL_MAX) + { + res = ZEBRA_FAIL; + (*no_invalid_keys)++; + if (*no_invalid_keys <= message_limit) + { + do_fail = 1; + yaz_log(YLOG_WARN, "Record " ZINT_FORMAT + ": unexpected key length %d", + rec->sysno, key_in.len); + } + } if (ord_len + slen >= sizeof(ord_buf)-1) { - (*no_long_dict_entries)++; res = ZEBRA_FAIL; - if (verbose_level >= 1) + (*no_long_dict_entries)++; + if (*no_long_dict_entries <= message_limit) { + do_fail = 1; /* so bad it can not fit into our ord_buf */ yaz_log(YLOG_WARN, "Record " ZINT_FORMAT ": long dictionary entry %d + %d", @@ -2247,10 +2260,11 @@ static ZEBRA_RES zebra_record_check(ZebraHandle zh, Record rec, ord_buf[ord_len + slen] = '\0'; if (ord_len + slen >= IT_MAX_WORD) { - do_fail = 1; + res = ZEBRA_FAIL; (*no_long_dict_entries)++; - if (verbose_level >= 1) + if (*no_long_dict_entries <= message_limit) { + do_fail = 1; yaz_log(YLOG_WARN, "Record " ZINT_FORMAT ": long dictionary entry %d + %d", rec->sysno, (int) ord_len, (int) slen); @@ -2259,10 +2273,11 @@ static ZEBRA_RES zebra_record_check(ZebraHandle zh, Record rec, info = dict_lookup(zh->reg->dict, ord_buf); if (!info) { - do_fail = 1; + res = ZEBRA_FAIL; (*no_failed_dict_lookups)++; - if (verbose_level >= 1) + if (*no_failed_dict_lookups <= message_limit) { + do_fail = 1; yaz_log(YLOG_WARN, "Record " ZINT_FORMAT ": term do not exist in dictionary", rec->sysno); } @@ -2273,10 +2288,11 @@ static ZEBRA_RES zebra_record_check(ZebraHandle zh, Record rec, if (*info != sizeof(pos)) { - do_fail = 1; + res = ZEBRA_FAIL; (*no_invalid_dict_infos)++; - if (verbose_level >= 1) + if (*no_invalid_dict_infos <= message_limit) { + do_fail = 1; yaz_log(YLOG_WARN, "Record " ZINT_FORMAT ": long dictionary entry %d + %d", rec->sysno, (int) ord_len, (int) slen); @@ -2292,10 +2308,11 @@ static ZEBRA_RES zebra_record_check(ZebraHandle zh, Record rec, scope); if (!ispt) { - do_fail = 1; + res = ZEBRA_FAIL; (*no_invalid_isam_entries)++; - if (verbose_level >= 1) + if (*no_invalid_isam_entries <= message_limit) { + do_fail = 1; yaz_log(YLOG_WARN, "Record " ZINT_FORMAT ": isamb_pp_open entry " ZINT_FORMAT " not found", @@ -2322,10 +2339,11 @@ static ZEBRA_RES zebra_record_check(ZebraHandle zh, Record rec, r = isamb_pp_forward(ispt, &isam_key, &until_key); if (r != 1) { - do_fail = 1; + res = ZEBRA_FAIL; (*no_invalid_isam_entries)++; - if (verbose_level >= 1) + if (*no_invalid_isam_entries <= message_limit) { + do_fail = 1; yaz_log(YLOG_WARN, "Record " ZINT_FORMAT ": isamb_pp_forward " ZINT_FORMAT " returned no entry", @@ -2337,10 +2355,12 @@ static ZEBRA_RES zebra_record_check(ZebraHandle zh, Record rec, int cmp = key_compare(&until_key, &isam_key); if (cmp != 0) { - do_fail = 1; + res = ZEBRA_FAIL; (*no_invalid_isam_entries)++; - if (verbose_level >= 1) + if (*no_invalid_isam_entries + <= message_limit) { + do_fail = 1; yaz_log(YLOG_WARN, "Record " ZINT_FORMAT ": isamb_pp_forward " @@ -2365,26 +2385,11 @@ static ZEBRA_RES zebra_record_check(ZebraHandle zh, Record rec, } } } - if (key_in.len < 2 || key_in.len > 4) - { - do_fail = 1; - (*no_invalid_keys)++; - if (verbose_level >= 1) - { - yaz_log(YLOG_WARN, "Record " ZINT_FORMAT - ": unexpected key length %d", - rec->sysno, key_in.len); - } - } if (do_fail) { - res = ZEBRA_FAIL; - if (verbose_level >= 1) - { - zebra_it_key_str_dump(zh, &key_in, str, - slen, nmem, YLOG_LOG); - nmem_reset(nmem); - } + zebra_it_key_str_dump(zh, &key_in, str, + slen, nmem, YLOG_LOG); + nmem_reset(nmem); } } nmem_destroy(nmem); @@ -2393,7 +2398,7 @@ static ZEBRA_RES zebra_record_check(ZebraHandle zh, Record rec, return res; } -ZEBRA_RES zebra_register_check(ZebraHandle zh, int verbose_level) +ZEBRA_RES zebra_register_check(ZebraHandle zh, int message_limit) { ZEBRA_RES res = ZEBRA_FAIL; if (zebra_begin_read(zh) == ZEBRA_OK) @@ -2419,7 +2424,7 @@ ZEBRA_RES zebra_register_check(ZebraHandle zh, int verbose_level) Record r1; zint no_keys; - if (zebra_record_check(zh, rec, &no_keys, verbose_level, + if (zebra_record_check(zh, rec, &no_keys, message_limit, &no_long_dict_entries, &no_failed_dict_lookups, &no_invalid_keys, diff --git a/index/zebraidx.c b/index/zebraidx.c index 3291a79..3494e19 100644 --- a/index/zebraidx.c +++ b/index/zebraidx.c @@ -177,14 +177,9 @@ int main(int argc, char **argv) { show_filters(zs); } - else if (!strcmp(arg, "check0")) + else if (!strncmp(arg, "check", 5)) { - if (zebra_register_check(zh, 0) != ZEBRA_OK) - yaz_log(YLOG_WARN, "register check failed"); - } - else if (!strcmp(arg, "check1") || !strcmp(arg, "check")) - { - if (zebra_register_check(zh, 1) != ZEBRA_OK) + if (zebra_register_check(zh, 10) != ZEBRA_OK) yaz_log(YLOG_WARN, "register check failed"); } else