From: Adam Dickmeiss Date: Fri, 9 Oct 2009 13:14:41 +0000 (+0200) Subject: Fixed size hash for some structures. X-Git-Tag: v1.2.2~14^2~1 X-Git-Url: http://lists.indexdata.com/cgi-bin?a=commitdiff_plain;h=03931e4f790152dfec6ae6ca615d49e84940b987;p=pazpar2-moved-to-github.git Fixed size hash for some structures. Fixed size hash lists for termlists, reclists.. Remove global variable parameters.toget. --- diff --git a/src/client.c b/src/client.c index 95e130a..08cc491 100644 --- a/src/client.c +++ b/src/client.c @@ -520,11 +520,8 @@ void client_start_search(struct client *cl) if (*opt_maxrecs) ZOOM_connection_option_set(link, "count", opt_maxrecs); else - { - char n[128]; - sprintf(n, "%d", global_parameters.toget); - ZOOM_connection_option_set(link, "count", n); - } + ZOOM_connection_option_set(link, "count", "100"); + if (databaseName) ZOOM_connection_option_set(link, "databaseName", databaseName); @@ -721,8 +718,7 @@ int client_parse_query(struct client *cl, const char *query) extract_terms(se->nmem, cn, p); se->relevance = relevance_create( se->service->relevance_pct, - se->nmem, (const char **) p, - se->expected_maxrecs); + se->nmem, (const char **) p); } ccl_rpn_delete(cn); diff --git a/src/logic.c b/src/logic.c index 550222e..3ce3091 100644 --- a/src/logic.c +++ b/src/logic.c @@ -77,8 +77,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA struct parameters global_parameters = { 0, // dump_records - 0, // debug_mode - 100, + 0 // debug_mode }; static void log_xml_doc(xmlDoc *doc) @@ -146,8 +145,7 @@ static void add_facet(struct session *s, const char *type, const char *value) s->termlists[i].name = nmem_strdup(s->nmem, type); s->termlists[i].termlist - = termlist_create(s->nmem, s->expected_maxrecs, - TERMLIST_HIGH_SCORE); + = termlist_create(s->nmem, TERMLIST_HIGH_SCORE); s->num_termlists = i + 1; } termlist_insert(s->termlists[i].termlist, value); @@ -493,9 +491,7 @@ enum pazpar2_error_code search(struct session *se, live_channels = select_targets(se, criteria); if (live_channels) { - int maxrecs = live_channels * global_parameters.toget; // This is buggy!!! - se->reclist = reclist_create(se->nmem, maxrecs); - se->expected_maxrecs = maxrecs; + se->reclist = reclist_create(se->nmem); } else return PAZPAR2_NO_TARGETS; @@ -663,7 +659,6 @@ struct session *new_session(NMEM nmem, struct conf_service *service) session->num_termlists = 0; session->reclist = 0; session->clients = 0; - session->expected_maxrecs = 0; session->session_nmem = nmem; session->nmem = nmem_create(); session->wrbuf = wrbuf_alloc(); diff --git a/src/parameters.h b/src/parameters.h index 412ed0d..22c65a1 100644 --- a/src/parameters.h +++ b/src/parameters.h @@ -26,7 +26,6 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA struct parameters { int dump_records; int debug_mode; - int toget; }; extern struct parameters global_parameters; diff --git a/src/pazpar2.h b/src/pazpar2.h index 14815cd..738774e 100644 --- a/src/pazpar2.h +++ b/src/pazpar2.h @@ -125,7 +125,6 @@ struct session { struct relevance *relevance; struct reclist *reclist; struct session_watchentry watchlist[SESSION_WATCH_MAX + 1]; - int expected_maxrecs; int total_hits; int total_records; int total_merged; diff --git a/src/reclists.c b/src/reclists.c index 70b091f..64fafbb 100644 --- a/src/reclists.c +++ b/src/reclists.c @@ -32,8 +32,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA struct reclist { struct reclist_bucket **hashtable; - int hashtable_size; - int hashmask; + unsigned hash_size; int num_records; struct reclist_bucket *sorted_list; @@ -217,21 +216,14 @@ void reclist_rewind(struct reclist *l) l->sorted_ptr = l->sorted_list; } -struct reclist *reclist_create(NMEM nmem, int numrecs) +struct reclist *reclist_create(NMEM nmem) { - int hashsize = 1; - struct reclist *res; - - assert(numrecs); - while (hashsize < numrecs) - hashsize <<= 1; - res = nmem_malloc(nmem, sizeof(struct reclist)); + struct reclist *res = nmem_malloc(nmem, sizeof(struct reclist)); + res->hash_size = 399; res->hashtable - = nmem_malloc(nmem, hashsize * sizeof(struct reclist_bucket*)); - memset(res->hashtable, 0, hashsize * sizeof(struct reclist_bucket*)); - res->hashtable_size = hashsize; + = nmem_malloc(nmem, res->hash_size * sizeof(struct reclist_bucket*)); + memset(res->hashtable, 0, res->hash_size * sizeof(struct reclist_bucket*)); res->nmem = nmem; - res->hashmask = hashsize - 1; // Creates a bitmask res->sorted_ptr = 0; res->sorted_list = 0; @@ -264,7 +256,7 @@ struct record_cluster *reclist_insert( struct reclist *l, assert(merge_key); assert(total); - bucket = jenkins_hash((unsigned char*) merge_key) & l->hashmask; + bucket = jenkins_hash((unsigned char*) merge_key) % l->hash_size; for (p = &l->hashtable[bucket]; *p; p = &(*p)->hnext) { diff --git a/src/reclists.h b/src/reclists.h index d49acff..a356431 100644 --- a/src/reclists.h +++ b/src/reclists.h @@ -34,7 +34,7 @@ struct reclist_sortparms struct reclist_sortparms *next; }; -struct reclist *reclist_create(NMEM, int numrecs); +struct reclist *reclist_create(NMEM); struct record_cluster *reclist_insert( struct reclist *tl, struct conf_service *service, struct record *record, diff --git a/src/relevance.c b/src/relevance.c index ffcda2c..f2a58e7 100644 --- a/src/relevance.c +++ b/src/relevance.c @@ -241,7 +241,7 @@ void relevance_countwords(struct relevance *r, struct record_cluster *cluster, struct relevance *relevance_create(pp2_charset_t pct, - NMEM nmem, const char **terms, int numrecs) + NMEM nmem, const char **terms) { struct relevance *res = nmem_malloc(nmem, sizeof(struct relevance)); const char **p; diff --git a/src/relevance.h b/src/relevance.h index 4fba31e..e271d8c 100644 --- a/src/relevance.h +++ b/src/relevance.h @@ -28,7 +28,7 @@ struct record_cluster; struct reclist; struct relevance *relevance_create(pp2_charset_t pct, - NMEM nmem, const char **terms, int numrecs); + NMEM nmem, const char **terms); void relevance_newrec(struct relevance *r, struct record_cluster *cluster); void relevance_countwords(struct relevance *r, struct record_cluster *cluster, const char *words, int multiplier); diff --git a/src/termlists.c b/src/termlists.c index 892e6d9..3646d67 100644 --- a/src/termlists.c +++ b/src/termlists.c @@ -42,8 +42,7 @@ struct termlist_bucket struct termlist { struct termlist_bucket **hashtable; - int hashtable_size; - int hashmask; + unsigned hash_size; struct termlist_score **highscore; int highscore_size; @@ -53,24 +52,14 @@ struct termlist NMEM nmem; }; -struct termlist *termlist_create(NMEM nmem, int numterms, int highscore_size) +struct termlist *termlist_create(NMEM nmem, int highscore_size) { - int hashsize = 1; - int halfnumterms; - struct termlist *res; - - // Calculate a hash size smallest power of 2 larger than 50% of expected numterms - halfnumterms = numterms >> 1; - if (halfnumterms < 0) - halfnumterms = 1; - while (hashsize < halfnumterms) - hashsize <<= 1; - res = nmem_malloc(nmem, sizeof(struct termlist)); - res->hashtable = nmem_malloc(nmem, hashsize * sizeof(struct termlist_bucket*)); - memset(res->hashtable, 0, hashsize * sizeof(struct termlist_bucket*)); - res->hashtable_size = hashsize; + struct termlist *res = nmem_malloc(nmem, sizeof(struct termlist)); + res->hash_size = 399; + res->hashtable = + nmem_malloc(nmem, res->hash_size * sizeof(struct termlist_bucket*)); + memset(res->hashtable, 0, res->hash_size * sizeof(struct termlist_bucket*)); res->nmem = nmem; - res->hashmask = hashsize - 1; // Creates a bitmask res->highscore = nmem_malloc(nmem, highscore_size * sizeof(struct termlist_score *)); res->highscore_size = highscore_size; @@ -131,7 +120,7 @@ void termlist_insert(struct termlist *tl, const char *term) for (cp = buf + strlen(buf); cp != buf && strchr(",. -", cp[-1]); cp--) cp[-1] = '\0'; - bucket = jenkins_hash((unsigned char *)buf) & tl->hashmask; + bucket = jenkins_hash((unsigned char *)buf) % tl->hash_size; for (p = &tl->hashtable[bucket]; *p; p = &(*p)->next) { if (!strcmp(buf, (*p)->term.term)) diff --git a/src/termlists.h b/src/termlists.h index 1bd27b1..d3a5b1b 100644 --- a/src/termlists.h +++ b/src/termlists.h @@ -30,7 +30,7 @@ struct termlist_score struct termlist; -struct termlist *termlist_create(NMEM nmem, int numterms, int highscore_size); +struct termlist *termlist_create(NMEM nmem, int highscore_size); void termlist_insert(struct termlist *tl, const char *term); struct termlist_score **termlist_highscore(struct termlist *tl, int *len);