3
#ifndef NO_SYSTEM_INCLUDES
10
#include "dbinc/db_page.h"
11
#include "dbinc/__qam.h"
12
#include "dbinc/log.h"
15
* __qam_incfirst_recover --
16
* Recovery function for incfirst.
18
* PUBLIC: int __qam_incfirst_recover
19
* PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
22
__qam_incfirst_recover(dbenv, dbtp, lsnp, op, info)
29
__qam_incfirst_args *argp;
34
int cmp_n, cmp_p, modified, ret;
36
REC_PRINT(__qam_incfirst_print);
37
REC_INTRO(__qam_incfirst_read, 1);
39
if ((ret = mpf->get(mpf, &argp->pgno, 0, &pagep)) != 0)
41
if ((ret = mpf->get(mpf,
42
&argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0)
45
*lsnp = argp->prev_lsn;
51
cmp_n = log_compare(lsnp, &LSN(pagep));
54
* Use this when there is something like "pagelsn" in the argp
55
* structure. Sometimes, you might need to compare meta-data
58
* cmp_p = log_compare(&LSN(pagep), argp->pagelsn);
60
if (cmp_p == 0 && DB_REDO(op)) {
61
/* Need to redo update described. */
63
} else if (cmp_n == 0 && !DB_REDO(op)) {
64
/* Need to undo update described. */
67
if (ret = mpf->put(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0))
70
*lsnp = argp->prev_lsn;
77
* __qam_mvptr_recover --
78
* Recovery function for mvptr.
80
* PUBLIC: int __qam_mvptr_recover
81
* PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
84
__qam_mvptr_recover(dbenv, dbtp, lsnp, op, info)
91
__qam_mvptr_args *argp;
96
int cmp_n, cmp_p, modified, ret;
98
REC_PRINT(__qam_mvptr_print);
99
REC_INTRO(__qam_mvptr_read, 1);
101
if ((ret = mpf->get(mpf, &argp->pgno, 0, &pagep)) != 0)
103
if ((ret = mpf->get(mpf,
104
&argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0)
107
*lsnp = argp->prev_lsn;
113
cmp_n = log_compare(lsnp, &LSN(pagep));
116
* Use this when there is something like "pagelsn" in the argp
117
* structure. Sometimes, you might need to compare meta-data
120
* cmp_p = log_compare(&LSN(pagep), argp->pagelsn);
122
if (cmp_p == 0 && DB_REDO(op)) {
123
/* Need to redo update described. */
125
} else if (cmp_n == 0 && !DB_REDO(op)) {
126
/* Need to undo update described. */
129
if (ret = mpf->put(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0))
132
*lsnp = argp->prev_lsn;
139
* __qam_del_recover --
140
* Recovery function for del.
142
* PUBLIC: int __qam_del_recover
143
* PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
146
__qam_del_recover(dbenv, dbtp, lsnp, op, info)
153
__qam_del_args *argp;
158
int cmp_n, cmp_p, modified, ret;
160
REC_PRINT(__qam_del_print);
161
REC_INTRO(__qam_del_read, 1);
163
if ((ret = mpf->get(mpf, &argp->pgno, 0, &pagep)) != 0)
165
if ((ret = mpf->get(mpf,
166
&argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0)
169
*lsnp = argp->prev_lsn;
175
cmp_n = log_compare(lsnp, &LSN(pagep));
178
* Use this when there is something like "pagelsn" in the argp
179
* structure. Sometimes, you might need to compare meta-data
182
* cmp_p = log_compare(&LSN(pagep), argp->pagelsn);
184
if (cmp_p == 0 && DB_REDO(op)) {
185
/* Need to redo update described. */
187
} else if (cmp_n == 0 && !DB_REDO(op)) {
188
/* Need to undo update described. */
191
if (ret = mpf->put(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0))
194
*lsnp = argp->prev_lsn;
201
* __qam_add_recover --
202
* Recovery function for add.
204
* PUBLIC: int __qam_add_recover
205
* PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
208
__qam_add_recover(dbenv, dbtp, lsnp, op, info)
215
__qam_add_args *argp;
220
int cmp_n, cmp_p, modified, ret;
222
REC_PRINT(__qam_add_print);
223
REC_INTRO(__qam_add_read, 1);
225
if ((ret = mpf->get(mpf, &argp->pgno, 0, &pagep)) != 0)
227
if ((ret = mpf->get(mpf,
228
&argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0)
231
*lsnp = argp->prev_lsn;
237
cmp_n = log_compare(lsnp, &LSN(pagep));
240
* Use this when there is something like "pagelsn" in the argp
241
* structure. Sometimes, you might need to compare meta-data
244
* cmp_p = log_compare(&LSN(pagep), argp->pagelsn);
246
if (cmp_p == 0 && DB_REDO(op)) {
247
/* Need to redo update described. */
249
} else if (cmp_n == 0 && !DB_REDO(op)) {
250
/* Need to undo update described. */
253
if (ret = mpf->put(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0))
256
*lsnp = argp->prev_lsn;
263
* __qam_delext_recover --
264
* Recovery function for delext.
266
* PUBLIC: int __qam_delext_recover
267
* PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *));
270
__qam_delext_recover(dbenv, dbtp, lsnp, op, info)
277
__qam_delext_args *argp;
282
int cmp_n, cmp_p, modified, ret;
284
REC_PRINT(__qam_delext_print);
285
REC_INTRO(__qam_delext_read, 1);
287
if ((ret = mpf->get(mpf, &argp->pgno, 0, &pagep)) != 0)
289
if ((ret = mpf->get(mpf,
290
&argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0)
293
*lsnp = argp->prev_lsn;
299
cmp_n = log_compare(lsnp, &LSN(pagep));
302
* Use this when there is something like "pagelsn" in the argp
303
* structure. Sometimes, you might need to compare meta-data
306
* cmp_p = log_compare(&LSN(pagep), argp->pagelsn);
308
if (cmp_p == 0 && DB_REDO(op)) {
309
/* Need to redo update described. */
311
} else if (cmp_n == 0 && !DB_REDO(op)) {
312
/* Need to undo update described. */
315
if (ret = mpf->put(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0))
318
*lsnp = argp->prev_lsn;