use lockDir. Fixes for searchResult for null/sort sets
authorAdam Dickmeiss <adam@indexdata.dk>
Thu, 21 Mar 2002 10:25:42 +0000 (10:25 +0000)
committerAdam Dickmeiss <adam@indexdata.dk>
Thu, 21 Mar 2002 10:25:42 +0000 (10:25 +0000)
index/index.h
index/lockutil.c
index/zebraapi.c
index/zrpn.c
rset/rsnull.c

index 6064462..7a78de2 100644 (file)
@@ -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);
index 325ac4a..db8c148 100644 (file)
@@ -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 <stdio.h>
 #include <assert.h>
@@ -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;
 }
 
index 4875585..b57ed8a 100644 (file)
@@ -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 <assert.h>
@@ -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)
index 4de4914..6bc4537 100644 (file)
@@ -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 <stdio.h>
 #include <assert.h>
@@ -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);
 }
 
index 23d6d49..94d9be8 100644 (file)
@@ -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");