From 5402489b101b792e481ffad68ee0e7c449012fb4 Mon Sep 17 00:00:00 2001 From: Adam Dickmeiss Date: Thu, 21 Mar 2002 10:25:42 +0000 Subject: [PATCH] use lockDir. Fixes for searchResult for null/sort sets --- index/index.h | 6 ++++-- index/lockutil.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++------ index/zebraapi.c | 40 ++++++++++++++++++++++++---------------- index/zrpn.c | 13 ++++++++----- rset/rsnull.c | 7 +++++-- 5 files changed, 87 insertions(+), 31 deletions(-) diff --git a/index/index.h b/index/index.h index 6064462..7a78de2 100644 --- a/index/index.h +++ b/index/index.h @@ -2,7 +2,7 @@ * Copyright (C) 1995-2002, Index Data * All rights reserved. * Sebastian Hammer, Adam Dickmeiss, Heikki Levanto - * $Id: index.h,v 1.73 2002-02-20 17:30:01 adam Exp $ + * $Id: index.h,v 1.74 2002-03-21 10:25:42 adam Exp $ */ #ifndef INDEX_H @@ -144,13 +144,15 @@ int zebraIndexWait (ZebraHandle zh, int commitPhase); #define FNAME_TOUCH_TIME "zebraidx.time" typedef struct zebra_lock_info *ZebraLockHandle; -ZebraLockHandle zebra_lock_create(const char *file, int excl_flag); +ZebraLockHandle zebra_lock_create(const char *dir, + const char *file, int excl_flag); void zebra_lock_destroy (ZebraLockHandle h); int zebra_lock (ZebraLockHandle h); int zebra_lock_nb (ZebraLockHandle h); int zebra_unlock (ZebraLockHandle h); int zebra_lock_fd (ZebraLockHandle h); void zebra_lock_prefix (Res res, char *dst); +char *zebra_mk_fname (const char *dir, const char *name); int zebra_lock_w (ZebraLockHandle h); int zebra_lock_r (ZebraLockHandle h); diff --git a/index/lockutil.c b/index/lockutil.c index 325ac4a..db8c148 100644 --- a/index/lockutil.c +++ b/index/lockutil.c @@ -3,7 +3,7 @@ * All rights reserved. * Sebastian Hammer, Adam Dickmeiss * - * $Id: lockutil.c,v 1.13 2002-02-20 17:30:01 adam Exp $ + * $Id: lockutil.c,v 1.14 2002-03-21 10:25:42 adam Exp $ */ #include #include @@ -25,28 +25,68 @@ struct zebra_lock_info { int excl_flag; }; -ZebraLockHandle zebra_lock_create (const char *name, int excl_flag) +char *zebra_mk_fname (const char *dir, const char *name) { + int dlen = dir ? strlen(dir) : 0; + char *fname = xmalloc (dlen + strlen(name) + 3); + +#ifdef WIN32 + if (dlen) + { + int last_one = dir[dlen-1]; + + if (!strchr ("/\\:", last_one)) + sprintf (fname, "%s\\%s", dir, name); + else + sprintf (fname, "%s%s", dir, name); + } + else + sprintf (fname, "%s", name); +#else + if (dlen) + { + int last_one = dir[dlen-1]; + + if (!strchr ("/", last_one)) + sprintf (fname, "%s/%s", dir, name); + else + sprintf (fname, "%s%s", dir, name); + } + else + sprintf (fname, "%s", name); +#endif + return fname; +} + +ZebraLockHandle zebra_lock_create (const char *dir, + const char *name, int excl_flag) +{ + int dlen = dir ? strlen(dir) : 0; + char *fname = zebra_mk_fname(dir, name); ZebraLockHandle h = (ZebraLockHandle) xmalloc (sizeof(*h)); + h->excl_flag = excl_flag; h->fd = -1; + + #ifdef WIN32 if (!h->excl_flag) h->fd = open (name, O_BINARY|O_RDONLY); if (h->fd == -1) - h->fd = open (name, ((h->excl_flag > 1) ? O_EXCL : 0)| + h->fd = open (fname, ((h->excl_flag > 1) ? O_EXCL : 0)| (O_BINARY|O_CREAT|O_RDWR), 0666); #else - h->fd= open (name, ((h->excl_flag > 1) ? O_EXCL : 0)| + h->fd= open (fname, ((h->excl_flag > 1) ? O_EXCL : 0)| (O_BINARY|O_CREAT|O_RDWR|O_SYNC), 0666); #endif if (h->fd == -1) { if (h->excl_flag <= 1) - logf (LOG_WARN|LOG_ERRNO, "open %s", name); + logf (LOG_WARN|LOG_ERRNO, "open %s", fname); xfree (h); - return NULL; + h = 0; } + xfree (fname); return h; } diff --git a/index/zebraapi.c b/index/zebraapi.c index 4875585..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.48 2002-03-20 20:24:29 adam Exp $ + * $Id: zebraapi.c,v 1.49 2002-03-21 10:25:42 adam Exp $ */ #include @@ -68,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; @@ -694,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; @@ -714,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) @@ -731,7 +739,7 @@ static int zebra_begin_read (ZebraHandle zh) return 0; } - zebra_get_state (&val, &seqno); + zebra_get_state (zh, &val, &seqno); if (val == 'd') val = 'o'; if (seqno != zh->seqno) @@ -806,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"); @@ -837,7 +845,7 @@ 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->seqno = seqno; @@ -860,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")); @@ -869,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); @@ -921,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); @@ -937,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 { @@ -960,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) diff --git a/index/zrpn.c b/index/zrpn.c index 4de4914..6bc4537 100644 --- a/index/zrpn.c +++ b/index/zrpn.c @@ -3,7 +3,7 @@ * All rights reserved. * Sebastian Hammer, Adam Dickmeiss * - * $Id: zrpn.c,v 1.110 2002-03-20 20:24:29 adam Exp $ + * $Id: zrpn.c,v 1.111 2002-03-21 10:25:42 adam Exp $ */ #include #include @@ -1397,6 +1397,7 @@ static RSET rpn_search_APT_phrase (ZebraHandle zh, char *termz = normalize_term(zh, zapt, termz_org, stream, reg_type); const char *termp = termz; + *term_dst = 0; if (grep_info_prepare (zh, zapt, &grep_info, reg_type, stream)) return 0; while (1) @@ -1424,7 +1425,7 @@ static RSET rpn_search_APT_phrase (ZebraHandle zh, { rset_null_parms parms; - parms.rset_term = rset_term_create (term_dst, -1, rank_type); + parms.rset_term = rset_term_create (termz, -1, rank_type); return rset_create (rset_kind_null, &parms); } else if (rset_no == 1) @@ -1478,7 +1479,7 @@ static RSET rpn_search_APT_or_list (ZebraHandle zh, { rset_null_parms parms; - parms.rset_term = rset_term_create (term_dst, -1, rank_type); + parms.rset_term = rset_term_create (termz, -1, rank_type); return rset_create (rset_kind_null, &parms); } result = rset[0]; @@ -1538,7 +1539,7 @@ static RSET rpn_search_APT_and_list (ZebraHandle zh, { rset_null_parms parms; - parms.rset_term = rset_term_create (term_dst, -1, rank_type); + parms.rset_term = rset_term_create (termz, -1, rank_type); return rset_create (rset_kind_null, &parms); } result = rset[0]; @@ -1802,6 +1803,7 @@ static RSET rpn_sort_spec (ZebraHandle zh, Z_AttributesPlusTerm *zapt, Z_AttributeElement *ae; int oid[OID_SIZE]; oident oe; + char termz[20]; attr_init (&sort_relation_type, zapt, 7); sort_relation_value = attr_find (&sort_relation_type, &attributeSet); @@ -1825,6 +1827,7 @@ static RSET rpn_sort_spec (ZebraHandle zh, Z_AttributesPlusTerm *zapt, zapt->term->u.general->len); if (i >= sort_sequence->num_specs) i = 0; + sprintf (termz, "%d", i); oe.proto = PROTO_Z3950; oe.oclass = CLASS_ATTSET; @@ -1881,7 +1884,7 @@ static RSET rpn_sort_spec (ZebraHandle zh, Z_AttributesPlusTerm *zapt, sort_sequence->specs[i] = sks; - parms.rset_term = rset_term_create ("", -1, rank_type); + parms.rset_term = rset_term_create (termz, -1, rank_type); return rset_create (rset_kind_null, &parms); } diff --git a/rset/rsnull.c b/rset/rsnull.c index 23d6d49..94d9be8 100644 --- a/rset/rsnull.c +++ b/rset/rsnull.c @@ -4,7 +4,10 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: rsnull.c,v $ - * Revision 1.12 1999-05-26 07:49:14 adam + * Revision 1.13 2002-03-21 10:25:42 adam + * use lockDir. Fixes for searchResult for null/sort sets + * + * Revision 1.12 1999/05/26 07:49:14 adam * C++ compilation. * * Revision 1.11 1999/02/02 14:51:36 adam @@ -86,7 +89,7 @@ static void *r_create(RSET ct, const struct rset_control *sel, void *parms) ct->no_rset_terms = 1; ct->rset_terms = (RSET_TERM *) xmalloc (sizeof(*ct->rset_terms)); - if (parms) + if (parms && null_parms->rset_term) ct->rset_terms[0] = null_parms->rset_term; else ct->rset_terms[0] = rset_term_create ("term", -1, "rank-0"); -- 1.7.10.4