Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/external/bsd/nvi/dist/common Fix recovery mode, there were m...
details: https://anonhg.NetBSD.org/src/rev/045e5d97df90
branches: trunk
changeset: 325014:045e5d97df90
user: christos <christos%NetBSD.org@localhost>
date: Sat Nov 30 14:54:29 2013 +0000
description:
Fix recovery mode, there were multiple issues:
1. the btree filename was not set so that we always used a transient
in-memory db for the data
2. we did not call sync after creation with R_RECNOSYNC so that the header
of the btree was never written
3. we did not call the right flavor of sync before copying the tree to the
preserved files
diffstat:
external/bsd/nvi/dist/common/recover.c | 12 ++++++++++--
external/bsd/nvi/dist/common/vi_db1.c | 23 +++++++++++++++++++----
2 files changed, 29 insertions(+), 6 deletions(-)
diffs (66 lines):
diff -r 2134219ff3c7 -r 045e5d97df90 external/bsd/nvi/dist/common/recover.c
--- a/external/bsd/nvi/dist/common/recover.c Sat Nov 30 14:52:40 2013 +0000
+++ b/external/bsd/nvi/dist/common/recover.c Sat Nov 30 14:54:29 2013 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: recover.c,v 1.3 2013/11/27 21:17:36 christos Exp $ */
+/* $NetBSD: recover.c,v 1.4 2013/11/30 14:54:29 christos Exp $ */
/*-
* Copyright (c) 1993, 1994
* The Regents of the University of California. All rights reserved.
@@ -260,7 +260,15 @@
/* Sync the file if it's been modified. */
if (F_ISSET(ep, F_MODIFIED)) {
- if (ep->db->sync(ep->db, 0)) {
+ /*
+ * If we are using a db1 version of the database,
+ * we want to sync the underlying btree not the
+ * recno tree which is transient anyway.
+ */
+#ifndef R_RECNOSYNC
+#define R_RECNOSYNC 0
+#endif
+ if (ep->db->sync(ep->db, R_RECNOSYNC)) {
F_CLR(ep, F_RCV_ON | F_RCV_NORM);
msgq_str(sp, M_SYSERR,
ep->rcv_path, "060|File backup failed: %s");
diff -r 2134219ff3c7 -r 045e5d97df90 external/bsd/nvi/dist/common/vi_db1.c
--- a/external/bsd/nvi/dist/common/vi_db1.c Sat Nov 30 14:52:40 2013 +0000
+++ b/external/bsd/nvi/dist/common/vi_db1.c Sat Nov 30 14:54:29 2013 +0000
@@ -685,10 +685,19 @@
memset(&oinfo, 0, sizeof(RECNOINFO));
oinfo.bval = '\n'; /* Always set. */
- oinfo.psize = psize;
- oinfo.flags = R_SNAPSHOT;
- if (rcv_name)
- oinfo.bfname = ep->rcv_path;
+ /*
+ * If we are not recovering, set the pagesize and arrange to
+ * first get a snapshot of the file.
+ */
+ if (rcv_name == NULL) {
+ oinfo.psize = psize;
+ oinfo.flags = R_SNAPSHOT;
+ }
+ /*
+ * Always set the btree name, otherwise we are going to be using
+ * an in-memory database for the btree.
+ */
+ oinfo.bfname = ep->rcv_path;
#define _DB_OPEN_MODE S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH
@@ -709,6 +718,12 @@
*open_err = 1;
return 1;
+ } else {
+ /*
+ * We always sync the underlying btree so that the header
+ * is written first
+ */
+ ep->db->sync(ep->db, R_RECNOSYNC);
}
return 0;
Home |
Main Index |
Thread Index |
Old Index