X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;ds=sidebyside;f=index%2Fkey_block.c;h=19a3a1ad9f530d909407ee44ae2f82faee249c28;hb=527dab66d9847bb7f8a931c558306a070064bf25;hp=375e2c6ac8c6b5df3a9bd56e9916d4b853f36f27;hpb=dbb2d91da77e66472ebf9c9e5311a5b263ad66f1;p=idzebra-moved-to-github.git diff --git a/index/key_block.c b/index/key_block.c index 375e2c6..19a3a1a 100644 --- a/index/key_block.c +++ b/index/key_block.c @@ -1,5 +1,5 @@ -/* $Id: key_block.c,v 1.3 2006-11-21 17:48:08 adam Exp $ - Copyright (C) 1995-2006 +/* $Id: key_block.c,v 1.10 2007-04-07 22:24:12 adam Exp $ + Copyright (C) 1995-2007 Index Data ApS This file is part of the Zebra server. @@ -22,6 +22,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include #include +#include #include #include @@ -29,9 +30,9 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include #endif -#include -#include "index.h" #include "key_block.h" +#include +#include struct zebra_key_block { char **key_buf; @@ -64,8 +65,6 @@ struct encode_info { char buf[ENCODE_BUFLEN]; }; -static int log_level = 0; - #define USE_SHELLSORT 0 #if USE_SHELLSORT @@ -187,6 +186,11 @@ zebra_key_block_t key_block_create(int mem, const char *key_tmp_dir, { zebra_key_block_t p = xmalloc(sizeof(*p)); +#if YAZ_POSIX_THREADS + /* we'll be making two memory areas so cut in half */ + if (use_threads) + mem = mem / 2; +#endif p->key_buf = (char**) xmalloc (mem); p->ptr_top = mem/sizeof(char*); p->ptr_i = 0; @@ -208,7 +212,7 @@ zebra_key_block_t key_block_create(int mem, const char *key_tmp_dir, p->alt_buf = (char**) xmalloc (mem); #endif } - yaz_log(YLOG_LOG, "key_block_create t=%d", p->use_threads); + yaz_log(YLOG_DEBUG, "key_block_create t=%d", p->use_threads); return p; } @@ -245,7 +249,7 @@ void key_block_destroy(zebra_key_block_t *pp) } } -void key_block_write(zebra_key_block_t p, SYSNO sysno, struct it_key *key_in, +void key_block_write(zebra_key_block_t p, zint sysno, struct it_key *key_in, int cmd, const char *str_buf, size_t str_len, zint staticrank, int static_rank_enable) { @@ -278,7 +282,10 @@ void key_block_write(zebra_key_block_t p, SYSNO sysno, struct it_key *key_in, ((char*)p->key_buf)[(p->key_buf_used)++] = cmd; if (static_rank_enable) + { + assert(staticrank >= 0); key_out.mem[j++] = staticrank; + } if (key_in->mem[1]) /* filter specified record ID */ key_out.mem[j++] = key_in->mem[1]; @@ -295,18 +302,20 @@ void key_block_write(zebra_key_block_t p, SYSNO sysno, struct it_key *key_in, void key_block_flush_int(zebra_key_block_t p, - char **key_buf, size_t ptr_top, size_t ptr_i) + char **key_buf, size_t ptr_top, size_t ptr_i) { FILE *outf; char out_fname[200]; char *prevcp, *cp; struct encode_info encode_info; + if (ptr_i == 0) + return ; + (p->key_file_no)++; - yaz_log(YLOG_LOG, "sorting section %d", (p->key_file_no)); - yaz_log(log_level, " sort_buff at %p n=%d", - key_buf + ptr_top - ptr_i,ptr_i); + yaz_log(YLOG_DEBUG, "sorting section %d", (p->key_file_no)); + assert(ptr_i > 0); #if USE_SHELLSORT shellsort(key_buf + ptr_top - ptr_i, ptr_i, @@ -322,7 +331,7 @@ void key_block_flush_int(zebra_key_block_t p, yaz_log (YLOG_FATAL|YLOG_ERRNO, "fopen %s", out_fname); zebra_exit("key_block_flush"); } - yaz_log(YLOG_LOG, "writing section %d", p->key_file_no); + yaz_log(YLOG_DEBUG, "writing section %d", p->key_file_no); prevcp = cp = (key_buf)[ptr_top - ptr_i]; encode_key_init (&encode_info); @@ -347,7 +356,7 @@ void key_block_flush_int(zebra_key_block_t p, yaz_log (YLOG_FATAL|YLOG_ERRNO, "fclose %s", out_fname); zebra_exit("key_block_flush"); } - yaz_log(YLOG_LOG, "finished section %d", p->key_file_no); + yaz_log(YLOG_DEBUG, "finished section %d", p->key_file_no); } void key_block_flush(zebra_key_block_t p, int is_final)