1 /* Do not edit: automatically built by gen_rec.awk. */
19 * PUBLIC: int __vi_marker_log __P((DB_ENV *, DB_TXN *, DB_LSN *, u_int32_t,
20 * PUBLIC: u_int32_t));
23 __vi_marker_log(dbenv
, txnid
, ret_lsnp
, flags
,
32 DB_LSN
*lsnp
, null_lsn
;
34 u_int32_t rectype
, txn_num
;
38 rectype
= DB_vi_marker
;
40 TAILQ_FIRST(&txnid
->kids
) != NULL
&&
41 (ret
= __txn_activekids(dbenv
, rectype
, txnid
)) != 0)
43 txn_num
= txnid
== NULL
? 0 : txnid
->txnid
;
48 lsnp
= &txnid
->last_lsn
;
49 logrec
.size
= sizeof(rectype
) + sizeof(txn_num
) + sizeof(DB_LSN
)
51 if ((ret
= __os_malloc(dbenv
, logrec
.size
, &logrec
.data
)) != 0)
56 memcpy(bp
, &rectype
, sizeof(rectype
));
57 bp
+= sizeof(rectype
);
59 memcpy(bp
, &txn_num
, sizeof(txn_num
));
60 bp
+= sizeof(txn_num
);
62 memcpy(bp
, lsnp
, sizeof(DB_LSN
));
65 uinttmp
= (u_int32_t
)opcode
;
66 memcpy(bp
, &uinttmp
, sizeof(uinttmp
));
67 bp
+= sizeof(uinttmp
);
69 DB_ASSERT((u_int32_t
)(bp
- (u_int8_t
*)logrec
.data
) == logrec
.size
);
70 ret
= dbenv
->log_put(dbenv
, ret_lsnp
, (DBT
*)&logrec
, flags
);
71 if (txnid
!= NULL
&& ret
== 0)
72 txnid
->last_lsn
= *ret_lsnp
;
75 (void)__vi_marker_print(dbenv
,
76 (DBT
*)&logrec
, ret_lsnp
, NULL
, NULL
);
78 __os_free(dbenv
, logrec
.data
, logrec
.size
);
83 * PUBLIC: int __vi_marker_getpgnos __P((DB_ENV *, DBT *, DB_LSN *, db_recops,
87 __vi_marker_getpgnos(dbenv
, rec
, lsnp
, notused1
, summary
)
97 COMPQUIET(notused1
, DB_TXN_ABORT
);
99 t
= (TXN_RECS
*)summary
;
101 if ((ret
= __rep_check_alloc(dbenv
, t
, 1)) != 0)
104 t
->array
[t
->npages
].flags
= LSN_PAGE_NOLOCK
;
105 t
->array
[t
->npages
].lsn
= *lsnp
;
106 t
->array
[t
->npages
].fid
= DB_LOGFILEID_INVALID
;
107 memset(&t
->array
[t
->npages
].pgdesc
, 0,
108 sizeof(t
->array
[t
->npages
].pgdesc
));
116 * PUBLIC: int __vi_marker_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops,
120 __vi_marker_print(dbenv
, dbtp
, lsnp
, notused2
, notused3
)
127 __vi_marker_args
*argp
;
130 notused2
= DB_TXN_ABORT
;
133 if ((ret
= __vi_marker_read(dbenv
, dbtp
->data
, &argp
)) != 0)
136 "[%lu][%lu]vi_marker: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
138 (u_long
)lsnp
->offset
,
140 (u_long
)argp
->txnid
->txnid
,
141 (u_long
)argp
->prev_lsn
.file
,
142 (u_long
)argp
->prev_lsn
.offset
);
143 (void)printf("\topcode: %lu\n", (u_long
)argp
->opcode
);
145 __os_free(dbenv
, argp
, 0);
150 * PUBLIC: int __vi_marker_read __P((DB_ENV *, void *, __vi_marker_args **));
153 __vi_marker_read(dbenv
, recbuf
, argpp
)
156 __vi_marker_args
**argpp
;
158 __vi_marker_args
*argp
;
163 ret
= __os_malloc(dbenv
, sizeof(__vi_marker_args
) +
164 sizeof(DB_TXN
), &argp
);
167 argp
->txnid
= (DB_TXN
*)&argp
[1];
170 memcpy(&argp
->type
, bp
, sizeof(argp
->type
));
171 bp
+= sizeof(argp
->type
);
173 memcpy(&argp
->txnid
->txnid
, bp
, sizeof(argp
->txnid
->txnid
));
174 bp
+= sizeof(argp
->txnid
->txnid
);
176 memcpy(&argp
->prev_lsn
, bp
, sizeof(DB_LSN
));
177 bp
+= sizeof(DB_LSN
);
179 memcpy(&uinttmp
, bp
, sizeof(uinttmp
));
180 argp
->opcode
= (u_int32_t
)uinttmp
;
181 bp
+= sizeof(uinttmp
);
188 * PUBLIC: int __vi_cursor_log __P((DB_ENV *, DB_TXN *, DB_LSN *, u_int32_t,
189 * PUBLIC: u_int32_t, db_recno_t, size_t));
192 __vi_cursor_log(dbenv
, txnid
, ret_lsnp
, flags
,
203 DB_LSN
*lsnp
, null_lsn
;
205 u_int32_t rectype
, txn_num
;
209 rectype
= DB_vi_cursor
;
211 TAILQ_FIRST(&txnid
->kids
) != NULL
&&
212 (ret
= __txn_activekids(dbenv
, rectype
, txnid
)) != 0)
214 txn_num
= txnid
== NULL
? 0 : txnid
->txnid
;
219 lsnp
= &txnid
->last_lsn
;
220 logrec
.size
= sizeof(rectype
) + sizeof(txn_num
) + sizeof(DB_LSN
)
224 if ((ret
= __os_malloc(dbenv
, logrec
.size
, &logrec
.data
)) != 0)
229 memcpy(bp
, &rectype
, sizeof(rectype
));
230 bp
+= sizeof(rectype
);
232 memcpy(bp
, &txn_num
, sizeof(txn_num
));
233 bp
+= sizeof(txn_num
);
235 memcpy(bp
, lsnp
, sizeof(DB_LSN
));
236 bp
+= sizeof(DB_LSN
);
238 uinttmp
= (u_int32_t
)opcode
;
239 memcpy(bp
, &uinttmp
, sizeof(uinttmp
));
240 bp
+= sizeof(uinttmp
);
242 uinttmp
= (u_int32_t
)lno
;
243 memcpy(bp
, &uinttmp
, sizeof(uinttmp
));
244 bp
+= sizeof(uinttmp
);
246 uinttmp
= (u_int32_t
)cno
;
247 memcpy(bp
, &uinttmp
, sizeof(uinttmp
));
248 bp
+= sizeof(uinttmp
);
250 DB_ASSERT((u_int32_t
)(bp
- (u_int8_t
*)logrec
.data
) == logrec
.size
);
251 ret
= dbenv
->log_put(dbenv
, ret_lsnp
, (DBT
*)&logrec
, flags
);
252 if (txnid
!= NULL
&& ret
== 0)
253 txnid
->last_lsn
= *ret_lsnp
;
254 #ifdef LOG_DIAGNOSTIC
256 (void)__vi_cursor_print(dbenv
,
257 (DBT
*)&logrec
, ret_lsnp
, NULL
, NULL
);
259 __os_free(dbenv
, logrec
.data
, logrec
.size
);
264 * PUBLIC: int __vi_cursor_getpgnos __P((DB_ENV *, DBT *, DB_LSN *, db_recops,
268 __vi_cursor_getpgnos(dbenv
, rec
, lsnp
, notused1
, summary
)
277 COMPQUIET(rec
, NULL
);
278 COMPQUIET(notused1
, DB_TXN_ABORT
);
280 t
= (TXN_RECS
*)summary
;
282 if ((ret
= __rep_check_alloc(dbenv
, t
, 1)) != 0)
285 t
->array
[t
->npages
].flags
= LSN_PAGE_NOLOCK
;
286 t
->array
[t
->npages
].lsn
= *lsnp
;
287 t
->array
[t
->npages
].fid
= DB_LOGFILEID_INVALID
;
288 memset(&t
->array
[t
->npages
].pgdesc
, 0,
289 sizeof(t
->array
[t
->npages
].pgdesc
));
297 * PUBLIC: int __vi_cursor_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops,
301 __vi_cursor_print(dbenv
, dbtp
, lsnp
, notused2
, notused3
)
308 __vi_cursor_args
*argp
;
311 notused2
= DB_TXN_ABORT
;
314 if ((ret
= __vi_cursor_read(dbenv
, dbtp
->data
, &argp
)) != 0)
317 "[%lu][%lu]vi_cursor: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
319 (u_long
)lsnp
->offset
,
321 (u_long
)argp
->txnid
->txnid
,
322 (u_long
)argp
->prev_lsn
.file
,
323 (u_long
)argp
->prev_lsn
.offset
);
324 (void)printf("\topcode: %lu\n", (u_long
)argp
->opcode
);
325 (void)printf("\tlno: %lu\n", (u_long
)argp
->lno
);
326 (void)printf("\tcno: %d\n", argp
->cno
);
328 __os_free(dbenv
, argp
, 0);
333 * PUBLIC: int __vi_cursor_read __P((DB_ENV *, void *, __vi_cursor_args **));
336 __vi_cursor_read(dbenv
, recbuf
, argpp
)
339 __vi_cursor_args
**argpp
;
341 __vi_cursor_args
*argp
;
346 ret
= __os_malloc(dbenv
, sizeof(__vi_cursor_args
) +
347 sizeof(DB_TXN
), &argp
);
350 argp
->txnid
= (DB_TXN
*)&argp
[1];
353 memcpy(&argp
->type
, bp
, sizeof(argp
->type
));
354 bp
+= sizeof(argp
->type
);
356 memcpy(&argp
->txnid
->txnid
, bp
, sizeof(argp
->txnid
->txnid
));
357 bp
+= sizeof(argp
->txnid
->txnid
);
359 memcpy(&argp
->prev_lsn
, bp
, sizeof(DB_LSN
));
360 bp
+= sizeof(DB_LSN
);
362 memcpy(&uinttmp
, bp
, sizeof(uinttmp
));
363 argp
->opcode
= (u_int32_t
)uinttmp
;
364 bp
+= sizeof(uinttmp
);
366 memcpy(&uinttmp
, bp
, sizeof(uinttmp
));
367 argp
->lno
= (db_recno_t
)uinttmp
;
368 bp
+= sizeof(uinttmp
);
370 memcpy(&uinttmp
, bp
, sizeof(uinttmp
));
371 argp
->cno
= (size_t)uinttmp
;
372 bp
+= sizeof(uinttmp
);
379 * PUBLIC: int __vi_mark_log __P((DB_ENV *, DB_TXN *, DB_LSN *, u_int32_t,
383 __vi_mark_log(dbenv
, txnid
, ret_lsnp
, flags
,
392 DB_LSN
*lsnp
, null_lsn
;
393 u_int32_t rectype
, txn_num
;
397 rectype
= DB_vi_mark
;
399 TAILQ_FIRST(&txnid
->kids
) != NULL
&&
400 (ret
= __txn_activekids(dbenv
, rectype
, txnid
)) != 0)
402 txn_num
= txnid
== NULL
? 0 : txnid
->txnid
;
407 lsnp
= &txnid
->last_lsn
;
408 logrec
.size
= sizeof(rectype
) + sizeof(txn_num
) + sizeof(DB_LSN
)
410 if ((ret
= __os_malloc(dbenv
, logrec
.size
, &logrec
.data
)) != 0)
415 memcpy(bp
, &rectype
, sizeof(rectype
));
416 bp
+= sizeof(rectype
);
418 memcpy(bp
, &txn_num
, sizeof(txn_num
));
419 bp
+= sizeof(txn_num
);
421 memcpy(bp
, lsnp
, sizeof(DB_LSN
));
422 bp
+= sizeof(DB_LSN
);
425 memcpy(bp
, lmp
, sizeof(*lmp
));
427 memset(bp
, 0, sizeof(*lmp
));
430 DB_ASSERT((u_int32_t
)(bp
- (u_int8_t
*)logrec
.data
) == logrec
.size
);
431 ret
= dbenv
->log_put(dbenv
, ret_lsnp
, (DBT
*)&logrec
, flags
);
432 if (txnid
!= NULL
&& ret
== 0)
433 txnid
->last_lsn
= *ret_lsnp
;
434 #ifdef LOG_DIAGNOSTIC
436 (void)__vi_mark_print(dbenv
,
437 (DBT
*)&logrec
, ret_lsnp
, NULL
, NULL
);
439 __os_free(dbenv
, logrec
.data
, logrec
.size
);
444 * PUBLIC: int __vi_mark_getpgnos __P((DB_ENV *, DBT *, DB_LSN *, db_recops,
448 __vi_mark_getpgnos(dbenv
, rec
, lsnp
, notused1
, summary
)
457 COMPQUIET(rec
, NULL
);
458 COMPQUIET(notused1
, DB_TXN_ABORT
);
460 t
= (TXN_RECS
*)summary
;
462 if ((ret
= __rep_check_alloc(dbenv
, t
, 1)) != 0)
465 t
->array
[t
->npages
].flags
= LSN_PAGE_NOLOCK
;
466 t
->array
[t
->npages
].lsn
= *lsnp
;
467 t
->array
[t
->npages
].fid
= DB_LOGFILEID_INVALID
;
468 memset(&t
->array
[t
->npages
].pgdesc
, 0,
469 sizeof(t
->array
[t
->npages
].pgdesc
));
477 * PUBLIC: int __vi_mark_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops,
481 __vi_mark_print(dbenv
, dbtp
, lsnp
, notused2
, notused3
)
488 __vi_mark_args
*argp
;
491 notused2
= DB_TXN_ABORT
;
494 if ((ret
= __vi_mark_read(dbenv
, dbtp
->data
, &argp
)) != 0)
497 "[%lu][%lu]vi_mark: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
499 (u_long
)lsnp
->offset
,
501 (u_long
)argp
->txnid
->txnid
,
502 (u_long
)argp
->prev_lsn
.file
,
503 (u_long
)argp
->prev_lsn
.offset
);
504 (void)printf("\tlmp: %%\n", argp
->lmp
);
506 __os_free(dbenv
, argp
, 0);
511 * PUBLIC: int __vi_mark_read __P((DB_ENV *, void *, __vi_mark_args **));
514 __vi_mark_read(dbenv
, recbuf
, argpp
)
517 __vi_mark_args
**argpp
;
519 __vi_mark_args
*argp
;
523 ret
= __os_malloc(dbenv
, sizeof(__vi_mark_args
) +
524 sizeof(DB_TXN
), &argp
);
527 argp
->txnid
= (DB_TXN
*)&argp
[1];
530 memcpy(&argp
->type
, bp
, sizeof(argp
->type
));
531 bp
+= sizeof(argp
->type
);
533 memcpy(&argp
->txnid
->txnid
, bp
, sizeof(argp
->txnid
->txnid
));
534 bp
+= sizeof(argp
->txnid
->txnid
);
536 memcpy(&argp
->prev_lsn
, bp
, sizeof(DB_LSN
));
537 bp
+= sizeof(DB_LSN
);
539 memcpy(&argp
->lmp
, bp
, sizeof(argp
->lmp
));
540 bp
+= sizeof(argp
->lmp
);
547 * PUBLIC: int __vi_change_log __P((DB_ENV *, DB_TXN *, DB_LSN *, u_int32_t,
548 * PUBLIC: u_int32_t, db_recno_t));
551 __vi_change_log(dbenv
, txnid
, ret_lsnp
, flags
,
561 DB_LSN
*lsnp
, null_lsn
;
563 u_int32_t rectype
, txn_num
;
567 rectype
= DB_vi_change
;
569 TAILQ_FIRST(&txnid
->kids
) != NULL
&&
570 (ret
= __txn_activekids(dbenv
, rectype
, txnid
)) != 0)
572 txn_num
= txnid
== NULL
? 0 : txnid
->txnid
;
577 lsnp
= &txnid
->last_lsn
;
578 logrec
.size
= sizeof(rectype
) + sizeof(txn_num
) + sizeof(DB_LSN
)
581 if ((ret
= __os_malloc(dbenv
, logrec
.size
, &logrec
.data
)) != 0)
586 memcpy(bp
, &rectype
, sizeof(rectype
));
587 bp
+= sizeof(rectype
);
589 memcpy(bp
, &txn_num
, sizeof(txn_num
));
590 bp
+= sizeof(txn_num
);
592 memcpy(bp
, lsnp
, sizeof(DB_LSN
));
593 bp
+= sizeof(DB_LSN
);
595 uinttmp
= (u_int32_t
)opcode
;
596 memcpy(bp
, &uinttmp
, sizeof(uinttmp
));
597 bp
+= sizeof(uinttmp
);
599 uinttmp
= (u_int32_t
)lno
;
600 memcpy(bp
, &uinttmp
, sizeof(uinttmp
));
601 bp
+= sizeof(uinttmp
);
603 DB_ASSERT((u_int32_t
)(bp
- (u_int8_t
*)logrec
.data
) == logrec
.size
);
604 ret
= dbenv
->log_put(dbenv
, ret_lsnp
, (DBT
*)&logrec
, flags
);
605 if (txnid
!= NULL
&& ret
== 0)
606 txnid
->last_lsn
= *ret_lsnp
;
607 #ifdef LOG_DIAGNOSTIC
609 (void)__vi_change_print(dbenv
,
610 (DBT
*)&logrec
, ret_lsnp
, NULL
, NULL
);
612 __os_free(dbenv
, logrec
.data
, logrec
.size
);
617 * PUBLIC: int __vi_change_getpgnos __P((DB_ENV *, DBT *, DB_LSN *, db_recops,
621 __vi_change_getpgnos(dbenv
, rec
, lsnp
, notused1
, summary
)
630 COMPQUIET(rec
, NULL
);
631 COMPQUIET(notused1
, DB_TXN_ABORT
);
633 t
= (TXN_RECS
*)summary
;
635 if ((ret
= __rep_check_alloc(dbenv
, t
, 1)) != 0)
638 t
->array
[t
->npages
].flags
= LSN_PAGE_NOLOCK
;
639 t
->array
[t
->npages
].lsn
= *lsnp
;
640 t
->array
[t
->npages
].fid
= DB_LOGFILEID_INVALID
;
641 memset(&t
->array
[t
->npages
].pgdesc
, 0,
642 sizeof(t
->array
[t
->npages
].pgdesc
));
650 * PUBLIC: int __vi_change_print __P((DB_ENV *, DBT *, DB_LSN *, db_recops,
654 __vi_change_print(dbenv
, dbtp
, lsnp
, notused2
, notused3
)
661 __vi_change_args
*argp
;
664 notused2
= DB_TXN_ABORT
;
667 if ((ret
= __vi_change_read(dbenv
, dbtp
->data
, &argp
)) != 0)
670 "[%lu][%lu]vi_change: rec: %lu txnid %lx prevlsn [%lu][%lu]\n",
672 (u_long
)lsnp
->offset
,
674 (u_long
)argp
->txnid
->txnid
,
675 (u_long
)argp
->prev_lsn
.file
,
676 (u_long
)argp
->prev_lsn
.offset
);
677 (void)printf("\topcode: %lu\n", (u_long
)argp
->opcode
);
678 (void)printf("\tlno: %lu\n", (u_long
)argp
->lno
);
680 __os_free(dbenv
, argp
, 0);
685 * PUBLIC: int __vi_change_read __P((DB_ENV *, void *, __vi_change_args **));
688 __vi_change_read(dbenv
, recbuf
, argpp
)
691 __vi_change_args
**argpp
;
693 __vi_change_args
*argp
;
698 ret
= __os_malloc(dbenv
, sizeof(__vi_change_args
) +
699 sizeof(DB_TXN
), &argp
);
702 argp
->txnid
= (DB_TXN
*)&argp
[1];
705 memcpy(&argp
->type
, bp
, sizeof(argp
->type
));
706 bp
+= sizeof(argp
->type
);
708 memcpy(&argp
->txnid
->txnid
, bp
, sizeof(argp
->txnid
->txnid
));
709 bp
+= sizeof(argp
->txnid
->txnid
);
711 memcpy(&argp
->prev_lsn
, bp
, sizeof(DB_LSN
));
712 bp
+= sizeof(DB_LSN
);
714 memcpy(&uinttmp
, bp
, sizeof(uinttmp
));
715 argp
->opcode
= (u_int32_t
)uinttmp
;
716 bp
+= sizeof(uinttmp
);
718 memcpy(&uinttmp
, bp
, sizeof(uinttmp
));
719 argp
->lno
= (db_recno_t
)uinttmp
;
720 bp
+= sizeof(uinttmp
);
727 * PUBLIC: int __vi_init_print __P((DB_ENV *, int (***)(DB_ENV *, DBT *,
728 * PUBLIC: DB_LSN *, db_recops, void *), size_t *));
731 __vi_init_print(dbenv
, dtabp
, dtabsizep
)
733 int (***dtabp
)__P((DB_ENV
*, DBT
*, DB_LSN
*, db_recops
, void *));
738 if ((ret
= __db_add_recovery(dbenv
, dtabp
, dtabsizep
,
739 __vi_marker_print
, DB_vi_marker
)) != 0)
741 if ((ret
= __db_add_recovery(dbenv
, dtabp
, dtabsizep
,
742 __vi_cursor_print
, DB_vi_cursor
)) != 0)
744 if ((ret
= __db_add_recovery(dbenv
, dtabp
, dtabsizep
,
745 __vi_mark_print
, DB_vi_mark
)) != 0)
747 if ((ret
= __db_add_recovery(dbenv
, dtabp
, dtabsizep
,
748 __vi_change_print
, DB_vi_change
)) != 0)
754 * PUBLIC: int __vi_init_getpgnos __P((DB_ENV *, int (***)(DB_ENV *, DBT *,
755 * PUBLIC: DB_LSN *, db_recops, void *), size_t *));
758 __vi_init_getpgnos(dbenv
, dtabp
, dtabsizep
)
760 int (***dtabp
)__P((DB_ENV
*, DBT
*, DB_LSN
*, db_recops
, void *));
765 if ((ret
= __db_add_recovery(dbenv
, dtabp
, dtabsizep
,
766 __vi_marker_getpgnos
, DB_vi_marker
)) != 0)
768 if ((ret
= __db_add_recovery(dbenv
, dtabp
, dtabsizep
,
769 __vi_cursor_getpgnos
, DB_vi_cursor
)) != 0)
771 if ((ret
= __db_add_recovery(dbenv
, dtabp
, dtabsizep
,
772 __vi_mark_getpgnos
, DB_vi_mark
)) != 0)
774 if ((ret
= __db_add_recovery(dbenv
, dtabp
, dtabsizep
,
775 __vi_change_getpgnos
, DB_vi_change
)) != 0)
781 * PUBLIC: int __vi_init_recover __P((DB_ENV *));
784 __vi_init_recover(dbenv
)
789 if ((ret
= __db_add_recovery(dbenv
, &dbenv
->dtab
, &dbenv
->dtab_size
,
790 __vi_marker_recover
, DB_vi_marker
)) != 0)
792 if ((ret
= __db_add_recovery(dbenv
, &dbenv
->dtab
, &dbenv
->dtab_size
,
793 __vi_cursor_recover
, DB_vi_cursor
)) != 0)
795 if ((ret
= __db_add_recovery(dbenv
, &dbenv
->dtab
, &dbenv
->dtab_size
,
796 __vi_mark_recover
, DB_vi_mark
)) != 0)
798 if ((ret
= __db_add_recovery(dbenv
, &dbenv
->dtab
, &dbenv
->dtab_size
,
799 __vi_change_recover
, DB_vi_change
)) != 0)