X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Flockidx.c;h=423ca72d110cc2c17b31daebf2e7dcb786ea46e3;hb=6c9fcd3b5d3108702fa1ffc92dab4ab6060f9a19;hp=4904de47d10e9e610d4194952a1381aa7b1ee69c;hpb=7e75317bed8eecabcb57e59b16093a32238738e2;p=idzebra-moved-to-github.git diff --git a/index/lockidx.c b/index/lockidx.c index 4904de4..423ca72 100644 --- a/index/lockidx.c +++ b/index/lockidx.c @@ -1,82 +1,26 @@ -/* - * Copyright (C) 1994-1999, Index Data - * All rights reserved. - * Sebastian Hammer, Adam Dickmeiss - * - * $Log: lockidx.c,v $ - * Revision 1.21 2002-02-20 17:30:01 adam - * Work on new API. Locking system re-implemented - * - * Revision 1.20 2000/10/16 20:16:00 adam - * Fixed problem with close of lock file for WIN32. - * - * Revision 1.19 2000/09/05 14:04:05 adam - * Updates for prefix 'yaz_' for YAZ log functions. - * - * Revision 1.18 2000/02/24 11:00:07 adam - * Fixed bug: indexer would run forever when lock dir was non-existant. - * - * Revision 1.17 1999/12/08 15:03:11 adam - * Implemented bf_reset. - * - * Revision 1.16 1999/02/02 14:50:57 adam - * Updated WIN32 code specific sections. Changed header. - * - * Revision 1.15 1998/02/17 10:31:33 adam - * Fixed bug in zebraIndexUnlock. On NT, the lock files wasn't removed. - * - * Revision 1.14 1998/01/12 15:04:08 adam - * The test option (-s) only uses read-lock (and not write lock). - * - * Revision 1.13 1997/09/29 09:08:36 adam - * Revised locking system to be thread safe for the server. - * - * Revision 1.12 1997/09/25 14:54:43 adam - * WIN32 files lock support. - * - * Revision 1.11 1997/09/17 12:19:15 adam - * Zebra version corresponds to YAZ version 1.4. - * Changed Zebra server so that it doesn't depend on global common_resource. - * - * Revision 1.10 1997/09/09 13:38:07 adam - * Partial port to WIN95/NT. - * - * Revision 1.9 1997/09/04 13:58:04 adam - * Added O_BINARY for open calls. - * - * Revision 1.8 1997/02/12 20:39:46 adam - * Implemented options -f that limits the log to the first - * records. - * Changed some log messages also. - * - * Revision 1.7 1996/10/29 14:08:13 adam - * Uses resource lockDir instead of lockPath. - * - * Revision 1.6 1996/03/26 16:01:13 adam - * New setting lockPath: directory of various lock files. - * - * Revision 1.5 1995/12/13 08:46:09 adam - * Locking uses F_WRLCK and F_RDLCK again! - * - * Revision 1.4 1995/12/12 16:00:57 adam - * System call sync(2) used after update/commit. - * Locking (based on fcntl) uses F_EXLCK and F_SHLCK instead of F_WRLCK - * and F_RDLCK. - * - * Revision 1.3 1995/12/11 11:43:29 adam - * Locking based on fcntl instead of flock. - * Setting commitEnable removed. Command line option -n can be used to - * prevent commit if commit setting is defined in the configuration file. - * - * Revision 1.2 1995/12/08 16:22:54 adam - * Work on update while servers are running. Three lock files introduced. - * The servers reload their registers when necessary, but they don't - * reestablish result sets yet. - * - * Revision 1.1 1995/12/07 17:38:47 adam - * Work locking mechanisms for concurrent updates/commit. - * - */ +/* $Id: lockidx.c,v 1.24 2005-01-15 19:38:26 adam Exp $ + Copyright (C) 1995-2005 + Index Data ApS + +This file is part of the Zebra server. + +Zebra is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free +Software Foundation; either version 2, or (at your option) any later +version. + +Zebra is distributed in the hope that it will be useful, but WITHOUT ANY +WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with Zebra; see the file LICENSE.zebra. If not, write to the +Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA +02111-1307, USA. +*/ + + #include #include #ifdef WIN32 @@ -110,7 +54,7 @@ int zebraIndexWait (ZebraHandle zh, int commitPhase) server_lock_cmt = zebra_lock_create (path, 1); if (!server_lock_cmt) { - logf (LOG_WARN|LOG_ERRNO, "cannot create lock %s", path); + yaz_log (YLOG_WARN|YLOG_ERRNO, "cannot create lock %s", path); return -1; } } @@ -125,7 +69,7 @@ int zebraIndexWait (ZebraHandle zh, int commitPhase) server_lock_org = zebra_lock_create (path, 1); if (!server_lock_org) { - logf (LOG_WARN|LOG_ERRNO, "cannot create lock %s", path); + yaz_log (YLOG_WARN|YLOG_ERRNO, "cannot create lock %s", path); return -1; } } @@ -138,17 +82,17 @@ int zebraIndexWait (ZebraHandle zh, int commitPhase) #ifndef WIN32 if (errno != EWOULDBLOCK) { - logf (LOG_FATAL|LOG_ERRNO, "flock"); + yaz_log (YLOG_FATAL|YLOG_ERRNO, "flock"); exit (1); } #endif if (commitPhase) - logf (LOG_LOG, "Waiting for lock cmt"); + yaz_log (YLOG_LOG, "Waiting for lock cmt"); else - logf (LOG_LOG, "Waiting for lock org"); + yaz_log (YLOG_LOG, "Waiting for lock org"); if (zebra_lock (h) == -1) { - logf (LOG_FATAL, "flock"); + yaz_log (YLOG_FATAL, "flock"); exit (1); } } @@ -169,7 +113,7 @@ void zebraIndexLockMsg (ZebraHandle zh, const char *str) r = write (fd, str, l); if (r != l) { - logf (LOG_FATAL|LOG_ERRNO, "write lock file"); + yaz_log (YLOG_FATAL|YLOG_ERRNO, "write lock file"); exit (1); } zebra_lock_prefix (zh->service->res, path); @@ -187,10 +131,10 @@ void zebraIndexUnlock (ZebraHandle zh) #ifdef WIN32 zebra_lock_destroy (server_lock_main); if (unlink (path) && errno != ENOENT) - logf (LOG_WARN|LOG_ERRNO, "unlink %s failed", path); + yaz_log (YLOG_WARN|YLOG_ERRNO, "unlink %s failed", path); #else if (unlink (path) && errno != ENOENT) - logf (LOG_WARN|LOG_ERRNO, "unlink %s failed", path); + yaz_log (YLOG_WARN|YLOG_ERRNO, "unlink %s failed", path); zebra_lock_destroy (server_lock_main); #endif server_lock_main = 0; @@ -216,13 +160,13 @@ int zebraIndexLock (BFiles bfs, ZebraHandle zh, int commitNow, server_lock_main = zebra_lock_create (path, 1); if (!server_lock_main) { - logf (LOG_FATAL, "couldn't obtain indexer lock"); + yaz_log (YLOG_FATAL, "couldn't obtain indexer lock"); exit (1); } if (zebra_lock_nb (server_lock_main) == -1) { #ifdef WIN32 - logf (LOG_LOG, "waiting for other index process"); + yaz_log (YLOG_LOG, "waiting for other index process"); zebra_lock (server_lock_main); zebra_unlock (server_lock_main); zebra_lock_destroy (server_lock_main); @@ -230,7 +174,7 @@ int zebraIndexLock (BFiles bfs, ZebraHandle zh, int commitNow, #else if (errno == EWOULDBLOCK) { - logf (LOG_LOG, "waiting for other index process"); + yaz_log (YLOG_LOG, "waiting for other index process"); zebra_lock (server_lock_main); zebra_unlock (server_lock_main); zebra_lock_destroy (server_lock_main); @@ -238,7 +182,7 @@ int zebraIndexLock (BFiles bfs, ZebraHandle zh, int commitNow, } else { - logf (LOG_FATAL|LOG_ERRNO, "flock %s", path); + yaz_log (YLOG_FATAL|YLOG_ERRNO, "flock %s", path); exit (1); } #endif @@ -247,23 +191,23 @@ int zebraIndexLock (BFiles bfs, ZebraHandle zh, int commitNow, { int fd = zebra_lock_fd (server_lock_main); - logf (LOG_WARN, "unlocked %s", path); + yaz_log (YLOG_WARN, "unlocked %s", path); r = read (fd, buf, 256); if (r == 0) { - logf (LOG_WARN, "zero length %s", path); + yaz_log (YLOG_WARN, "zero length %s", path); zebra_lock_destroy (server_lock_main); unlink (path); continue; } else if (r == -1) { - logf (LOG_FATAL|LOG_ERRNO, "read %s", path); + yaz_log (YLOG_FATAL|YLOG_ERRNO, "read %s", path); exit (1); } if (*buf == 'r') { - logf (LOG_WARN, "previous transaction didn't" + yaz_log (YLOG_WARN, "previous transaction didn't" " reach commit"); zebra_lock_destroy (server_lock_main); bf_commitClean (bfs, rval); @@ -272,7 +216,7 @@ int zebraIndexLock (BFiles bfs, ZebraHandle zh, int commitNow, } else if (*buf == 'd') { - logf (LOG_WARN, "commit file wan't deleted after commit"); + yaz_log (YLOG_WARN, "commit file wan't deleted after commit"); zebra_lock_destroy (server_lock_main); bf_commitClean (bfs, rval); unlink (path); @@ -280,12 +224,12 @@ int zebraIndexLock (BFiles bfs, ZebraHandle zh, int commitNow, } else if (*buf == 'w') { - logf (LOG_WARN, + yaz_log (YLOG_WARN, "The lock file indicates that your index is"); - logf (LOG_WARN, "inconsistent. Perhaps the indexer"); - logf (LOG_WARN, "terminated abnormally in the previous"); - logf (LOG_WARN, "run. You can try to proceed by"); - logf (LOG_WARN, "deleting the file %s", path); + yaz_log (YLOG_WARN, "inconsistent. Perhaps the indexer"); + yaz_log (YLOG_WARN, "terminated abnormally in the previous"); + yaz_log (YLOG_WARN, "run. You can try to proceed by"); + yaz_log (YLOG_WARN, "deleting the file %s", path); exit (1); } else if (*buf == 'c') @@ -296,13 +240,13 @@ int zebraIndexLock (BFiles bfs, ZebraHandle zh, int commitNow, zebra_lock_destroy (server_lock_main); continue; } - logf (LOG_FATAL, "previous transaction didn't" + yaz_log (YLOG_FATAL, "previous transaction didn't" " finish commit. Commit now!"); exit (1); } else { - logf (LOG_FATAL, "unknown id 0x%02x in %s", *buf, + yaz_log (YLOG_FATAL, "unknown id 0x%02x in %s", *buf, path); exit (1); }