X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Fzebraapi.c;h=b57ed8aa62d523bde783bab1ce5cb81efba6acac;hb=886253fb90810e512cacf4f02694645ead7a22e0;hp=bb0c06fbe0f1d7a9ed0e838ec1ddb34bcfa29017;hpb=7e75317bed8eecabcb57e59b16093a32238738e2;p=idzebra-moved-to-github.git diff --git a/index/zebraapi.c b/index/zebraapi.c index bb0c06f..b57ed8a 100644 --- a/index/zebraapi.c +++ b/index/zebraapi.c @@ -2,7 +2,7 @@ * Copyright (C) 1995-2002, Index Data * All rights reserved. * - * $Id: zebraapi.c,v 1.45 2002-02-20 17:30:01 adam Exp $ + * $Id: zebraapi.c,v 1.49 2002-03-21 10:25:42 adam Exp $ */ #include @@ -34,9 +34,6 @@ static void zebra_chdir (ZebraService zh) static void zebra_flush_reg (ZebraHandle zh) { - if (zh->service->matchDict) - dict_close (zh->service->matchDict); - zh->service->matchDict = 0; zebraExplain_flush (zh->service->zei, 1, zh); extract_flushWriteKeys (zh); @@ -71,8 +68,10 @@ ZebraHandle zebra_open (ZebraService zs) zh->seqno = 0; zh->last_val = 0; - zh->lock_normal = zebra_lock_create ("norm.LCK", 0); - zh->lock_shadow = zebra_lock_create ("shadow.LCK", 0); + zh->lock_normal = zebra_lock_create (res_get(zs->res, "lockDir"), + "norm.LCK", 0); + zh->lock_shadow = zebra_lock_create (res_get(zs->res, "lockDir"), + "shadow.LCK", 0); zh->key_buf = 0; zh->admin_databaseName = 0; @@ -152,7 +151,6 @@ static int zebra_register_activate (ZebraHandle zh, int rw, int useshadow) zs->recTypes = recTypes_init (zs->dh); recTypes_default_handlers (zs->recTypes); - zs->records = NULL; zs->zebra_maps = zebra_maps_open (zs->res); zs->rank_classes = NULL; @@ -160,12 +158,14 @@ static int zebra_register_activate (ZebraHandle zh, int rw, int useshadow) zs->dict = 0; zs->sortIdx = 0; zs->isams = 0; + zs->matchDict = 0; #if ZMBOL zs->isam = 0; zs->isamc = 0; zs->isamd = 0; #endif zs->zei = 0; + zs->matchDict = 0; zebraRankInstall (zs, rank1_class); @@ -181,7 +181,11 @@ static int zebra_register_activate (ZebraHandle zh, int rw, int useshadow) logf (LOG_WARN, "rec_open"); return -1; } - if (!(zs->dict = dict_open (zs->bfs, FNAME_DICT, 80, rw, 0))) + if (rw) + { + zs->matchDict = dict_open (zs->bfs, GMATCH_DICT, 20, 1, 0); + } + if (!(zs->dict = dict_open (zs->bfs, FNAME_DICT, 40, rw, 0))) { logf (LOG_WARN, "dict_open"); return -1; @@ -282,6 +286,8 @@ static int zebra_register_deactivate (ZebraHandle zh) { zebraExplain_close (zs->zei, 0); dict_close (zs->dict); + if (zs->matchDict) + dict_close (zs->matchDict); sortIdx_close (zs->sortIdx); if (zs->isams) isams_close (zs->isams); @@ -455,6 +461,8 @@ void zebra_search_rpn (ZebraHandle zh, ODR stream, ODR decode, logf(LOG_APP,"SEARCH:%d:",zh->hits); } + + void zebra_records_retrieve (ZebraHandle zh, ODR stream, const char *setname, Z_RecordComposition *comp, oid_value input_format, int num_recs, @@ -688,17 +696,22 @@ int zebra_string_norm (ZebraHandle zh, unsigned reg_id, } -void zebra_set_state (int val, int seqno) +void zebra_set_state (ZebraHandle zh, int val, int seqno) { + char *fname = zebra_mk_fname (res_get(zh->service->res, "lockDir"), + "state.LCK"); long p = getpid(); - FILE *f = fopen ("state.LCK", "w"); + FILE *f = fopen (fname, "w"); fprintf (f, "%c %d %ld\n", val, seqno, p); fclose (f); + xfree (fname); } -void zebra_get_state (char *val, int *seqno) +void zebra_get_state (ZebraHandle zh, char *val, int *seqno) { - FILE *f = fopen ("state.LCK", "r"); + char *fname = zebra_mk_fname (res_get(zh->service->res, "lockDir"), + "state.LCK"); + FILE *f = fopen (fname, "r"); *val = 'o'; *seqno = 0; @@ -708,6 +721,7 @@ void zebra_get_state (char *val, int *seqno) fscanf (f, "%c %d", val, seqno); fclose (f); } + xfree (fname); } static int zebra_begin_read (ZebraHandle zh) @@ -716,14 +730,16 @@ static int zebra_begin_read (ZebraHandle zh) char val; int seqno; - zebra_flush_reg (zh); (zh->trans_no)++; if (zh->trans_no != 1) + { + zebra_flush_reg (zh); return 0; + } - zebra_get_state (&val, &seqno); + zebra_get_state (zh, &val, &seqno); if (val == 'd') val = 'o'; if (seqno != zh->seqno) @@ -798,7 +814,7 @@ void zebra_begin_trans (ZebraHandle zh) zebra_lock_w (zh->lock_shadow); } - zebra_get_state (&val, &seqno); + zebra_get_state (zh, &val, &seqno); if (val == 'c') { yaz_log (LOG_LOG, "previous transaction didn't finish commit"); @@ -829,11 +845,9 @@ void zebra_begin_trans (ZebraHandle zh) abort(); return; } - zebra_set_state ('d', seqno); + zebra_set_state (zh, 'd', seqno); zebra_register_activate (zh, 1, rval ? 1 : 0); - zh->service->matchDict = dict_open (zh->service->bfs, GMATCH_DICT, - 50, 1, 0); zh->seqno = seqno; } @@ -854,7 +868,7 @@ void zebra_end_trans (ZebraHandle zh) zebra_register_deactivate (zh); - zebra_get_state (&val, &seqno); + zebra_get_state (zh, &val, &seqno); if (val != 'd') { BFiles bfs = bfs_create (res_get (zh->service->res, "shadow")); @@ -863,7 +877,7 @@ void zebra_end_trans (ZebraHandle zh) } if (!rval) seqno++; - zebra_set_state ('o', seqno); + zebra_set_state (zh, 'o', seqno); zebra_unlock (zh->lock_shadow); zebra_unlock (zh->lock_normal); @@ -915,13 +929,13 @@ void zebra_commit (ZebraHandle zh) bfs = bfs_create (res_get (zh->service->res, "register")); - zebra_get_state (&val, &seqno); + zebra_get_state (zh, &val, &seqno); if (rval && *rval) bf_cache (bfs, rval); if (bf_commitExists (bfs)) { - zebra_set_state ('c', seqno); + zebra_set_state (zh, 'c', seqno); logf (LOG_LOG, "commit start"); bf_commitExec (bfs); @@ -931,7 +945,7 @@ void zebra_commit (ZebraHandle zh) logf (LOG_LOG, "commit clean"); bf_commitClean (bfs, rval); seqno++; - zebra_set_state ('o', seqno); + zebra_set_state (zh, 'o', seqno); } else { @@ -954,7 +968,7 @@ void zebra_init (ZebraHandle zh) bf_reset (bfs); bfs_destroy (bfs); - zebra_set_state ('o', 0); + zebra_set_state (zh, 'o', 0); } void zebra_compact (ZebraHandle zh)