-/* $Id: mfile.c,v 1.71 2006-11-14 08:12:06 adam Exp $
- Copyright (C) 1995-2006
- Index Data ApS
-
-This file is part of the Zebra server.
+/* This file is part of the Zebra server.
+ Copyright (C) 1994-2011 Index Data
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
*/
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
#include <sys/types.h>
#include <fcntl.h>
#ifdef WIN32
return 0;
}
-MFile_area mf_init(const char *name, const char *spec, const char *base)
+MFile_area mf_init(const char *name, const char *spec, const char *base,
+ int only_shadow_files)
{
MFile_area ma = (MFile_area) xmalloc(sizeof(*ma));
mf_dir *dirp;
memcpy(metaname, dent->d_name, cp - dent->d_name);
metaname[ cp - dent->d_name] = '\0';
+ /* only files such as file-i-0.mf and file-i-b-0.mf, bug #739 */
+ if (only_shadow_files && cp[-2] != '-')
+ continue;
+ if (!only_shadow_files && cp[-2] == '-')
+ continue;
for (meta_f = ma->mfiles; meta_f; meta_f = meta_f->next)
{
/* known metafile */
mf_destroy(ma);
return 0;
}
-#ifndef WIN32
- fsync(fd);
-#endif
close(fd);
if (dirp->max_bytes >= 0)
dirp->avail_bytes -= part_f->bytes;
yaz_log(YLOG_WARN, "metafile %s already open", name);
return 0;
}
+ break;
}
if (!mnew)
{
if (mf->files[i].fd >= 0)
{
#ifndef WIN32
- fsync(mf->files[i].fd);
+ if (mf->wr)
+ fsync(mf->files[i].fd);
#endif
close(mf->files[i].fd);
mf->files[i].fd = -1;
{
yaz_log(YLOG_FATAL, "mf_write: %s error (4) no more space",
mf->name);
+ for (dp = mf->ma->dirs; dp ; dp = dp->next) {
+ yaz_log(YLOG_FATAL,"%s: max=" ZINT_FORMAT
+ " used=" ZINT_FORMAT " available=" ZINT_FORMAT,
+ dp->name, (zint)dp->max_bytes,
+ (zint)(dp->max_bytes - dp->avail_bytes), (zint)dp->avail_bytes );
+ }
+ yaz_log(YLOG_FATAL,"Adjust the limits in your zebra.cfg");
ret = -1;
goto out;
}
/*
* Local variables:
* c-basic-offset: 4
+ * c-file-style: "Stroustrup"
* indent-tabs-mode: nil
* End:
* vim: shiftwidth=4 tabstop=8 expandtab