📄 rec_btree
字号:
#include "db_config.h"#ifndef NO_SYSTEM_INCLUDES#include <sys/types.h>#include <string.h>#endif#include "db_int.h"#include "db_page.h"#include "bam.h"#include "log.h"/* * __bam_pg_alloc_recover -- * Recovery function for pg_alloc. * * PUBLIC: int __bam_pg_alloc_recover * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); */int__bam_pg_alloc_recover(dbenv, dbtp, lsnp, op, info) DB_ENV *dbenv; DBT *dbtp; DB_LSN *lsnp; db_recops op; void *info;{ __bam_pg_alloc_args *argp; DB *file_dbp; DBC *dbc; DB_MPOOLFILE *mpf; PAGE *pagep; int cmp_n, cmp_p, modified, ret; REC_PRINT(__bam_pg_alloc_print); REC_INTRO(__bam_pg_alloc_read); if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) if (DB_REDO(op)) { if ((ret = memp_fget(mpf, &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) goto out; } else { *lsnp = argp->prev_lsn; ret = 0; goto out; } modified = 0; cmp_n = log_compare(lsnp, &LSN(pagep)); /* * Use this when there is something like "pagelsn" in the argp * structure. Sometimes, you might need to compare meta-data * lsn's instead. * * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); */ if (cmp_p == 0 && DB_REDO(op)) { /* Need to redo update described. */ modified = 1; } else if (cmp_n == 0 && !DB_REDO(op)) { /* Need to undo update described. */ modified = 1; } if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) goto out; *lsnp = argp->prev_lsn; ret = 0;out: REC_CLOSE;}/* * __bam_pg_alloc1_recover -- * Recovery function for pg_alloc1. * * PUBLIC: int __bam_pg_alloc1_recover * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); */int__bam_pg_alloc1_recover(dbenv, dbtp, lsnp, op, info) DB_ENV *dbenv; DBT *dbtp; DB_LSN *lsnp; db_recops op; void *info;{ __bam_pg_alloc1_args *argp; DB *file_dbp; DBC *dbc; DB_MPOOLFILE *mpf; PAGE *pagep; int cmp_n, cmp_p, modified, ret; REC_PRINT(__bam_pg_alloc1_print); REC_INTRO(__bam_pg_alloc1_read); if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) if (DB_REDO(op)) { if ((ret = memp_fget(mpf, &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) goto out; } else { *lsnp = argp->prev_lsn; ret = 0; goto out; } modified = 0; cmp_n = log_compare(lsnp, &LSN(pagep)); /* * Use this when there is something like "pagelsn" in the argp * structure. Sometimes, you might need to compare meta-data * lsn's instead. * * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); */ if (cmp_p == 0 && DB_REDO(op)) { /* Need to redo update described. */ modified = 1; } else if (cmp_n == 0 && !DB_REDO(op)) { /* Need to undo update described. */ modified = 1; } if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) goto out; *lsnp = argp->prev_lsn; ret = 0;out: REC_CLOSE;}/* * __bam_pg_free_recover -- * Recovery function for pg_free. * * PUBLIC: int __bam_pg_free_recover * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); */int__bam_pg_free_recover(dbenv, dbtp, lsnp, op, info) DB_ENV *dbenv; DBT *dbtp; DB_LSN *lsnp; db_recops op; void *info;{ __bam_pg_free_args *argp; DB *file_dbp; DBC *dbc; DB_MPOOLFILE *mpf; PAGE *pagep; int cmp_n, cmp_p, modified, ret; REC_PRINT(__bam_pg_free_print); REC_INTRO(__bam_pg_free_read); if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) if (DB_REDO(op)) { if ((ret = memp_fget(mpf, &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) goto out; } else { *lsnp = argp->prev_lsn; ret = 0; goto out; } modified = 0; cmp_n = log_compare(lsnp, &LSN(pagep)); /* * Use this when there is something like "pagelsn" in the argp * structure. Sometimes, you might need to compare meta-data * lsn's instead. * * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); */ if (cmp_p == 0 && DB_REDO(op)) { /* Need to redo update described. */ modified = 1; } else if (cmp_n == 0 && !DB_REDO(op)) { /* Need to undo update described. */ modified = 1; } if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) goto out; *lsnp = argp->prev_lsn; ret = 0;out: REC_CLOSE;}/* * __bam_pg_free1_recover -- * Recovery function for pg_free1. * * PUBLIC: int __bam_pg_free1_recover * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); */int__bam_pg_free1_recover(dbenv, dbtp, lsnp, op, info) DB_ENV *dbenv; DBT *dbtp; DB_LSN *lsnp; db_recops op; void *info;{ __bam_pg_free1_args *argp; DB *file_dbp; DBC *dbc; DB_MPOOLFILE *mpf; PAGE *pagep; int cmp_n, cmp_p, modified, ret; REC_PRINT(__bam_pg_free1_print); REC_INTRO(__bam_pg_free1_read); if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) if (DB_REDO(op)) { if ((ret = memp_fget(mpf, &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) goto out; } else { *lsnp = argp->prev_lsn; ret = 0; goto out; } modified = 0; cmp_n = log_compare(lsnp, &LSN(pagep)); /* * Use this when there is something like "pagelsn" in the argp * structure. Sometimes, you might need to compare meta-data * lsn's instead. * * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); */ if (cmp_p == 0 && DB_REDO(op)) { /* Need to redo update described. */ modified = 1; } else if (cmp_n == 0 && !DB_REDO(op)) { /* Need to undo update described. */ modified = 1; } if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) goto out; *lsnp = argp->prev_lsn; ret = 0;out: REC_CLOSE;}/* * __bam_split1_recover -- * Recovery function for split1. * * PUBLIC: int __bam_split1_recover * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); */int__bam_split1_recover(dbenv, dbtp, lsnp, op, info) DB_ENV *dbenv; DBT *dbtp; DB_LSN *lsnp; db_recops op; void *info;{ __bam_split1_args *argp; DB *file_dbp; DBC *dbc; DB_MPOOLFILE *mpf; PAGE *pagep; int cmp_n, cmp_p, modified, ret; REC_PRINT(__bam_split1_print); REC_INTRO(__bam_split1_read); if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) if (DB_REDO(op)) { if ((ret = memp_fget(mpf, &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) goto out; } else { *lsnp = argp->prev_lsn; ret = 0; goto out; } modified = 0; cmp_n = log_compare(lsnp, &LSN(pagep)); /* * Use this when there is something like "pagelsn" in the argp * structure. Sometimes, you might need to compare meta-data * lsn's instead. * * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); */ if (cmp_p == 0 && DB_REDO(op)) { /* Need to redo update described. */ modified = 1; } else if (cmp_n == 0 && !DB_REDO(op)) { /* Need to undo update described. */ modified = 1; } if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) goto out; *lsnp = argp->prev_lsn; ret = 0;out: REC_CLOSE;}/* * __bam_split_recover -- * Recovery function for split. * * PUBLIC: int __bam_split_recover * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); */int__bam_split_recover(dbenv, dbtp, lsnp, op, info) DB_ENV *dbenv; DBT *dbtp; DB_LSN *lsnp; db_recops op; void *info;{ __bam_split_args *argp; DB *file_dbp; DBC *dbc; DB_MPOOLFILE *mpf; PAGE *pagep; int cmp_n, cmp_p, modified, ret; REC_PRINT(__bam_split_print); REC_INTRO(__bam_split_read); if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) if (DB_REDO(op)) { if ((ret = memp_fget(mpf, &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) goto out; } else { *lsnp = argp->prev_lsn; ret = 0; goto out; } modified = 0; cmp_n = log_compare(lsnp, &LSN(pagep)); /* * Use this when there is something like "pagelsn" in the argp * structure. Sometimes, you might need to compare meta-data * lsn's instead. * * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); */ if (cmp_p == 0 && DB_REDO(op)) { /* Need to redo update described. */ modified = 1; } else if (cmp_n == 0 && !DB_REDO(op)) { /* Need to undo update described. */ modified = 1; } if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) goto out; *lsnp = argp->prev_lsn; ret = 0;out: REC_CLOSE;}/* * __bam_rsplit1_recover -- * Recovery function for rsplit1. * * PUBLIC: int __bam_rsplit1_recover * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); */int__bam_rsplit1_recover(dbenv, dbtp, lsnp, op, info) DB_ENV *dbenv; DBT *dbtp; DB_LSN *lsnp; db_recops op; void *info;{ __bam_rsplit1_args *argp; DB *file_dbp; DBC *dbc; DB_MPOOLFILE *mpf; PAGE *pagep; int cmp_n, cmp_p, modified, ret; REC_PRINT(__bam_rsplit1_print); REC_INTRO(__bam_rsplit1_read); if ((ret = memp_fget(mpf, &argp->pgno, 0, &pagep)) != 0) if (DB_REDO(op)) { if ((ret = memp_fget(mpf, &argp->pgno, DB_MPOOL_CREATE, &pagep)) != 0) goto out; } else { *lsnp = argp->prev_lsn; ret = 0; goto out; } modified = 0; cmp_n = log_compare(lsnp, &LSN(pagep)); /* * Use this when there is something like "pagelsn" in the argp * structure. Sometimes, you might need to compare meta-data * lsn's instead. * * cmp_p = log_compare(&LSN(pagep), argp->pagelsn); */ if (cmp_p == 0 && DB_REDO(op)) { /* Need to redo update described. */ modified = 1; } else if (cmp_n == 0 && !DB_REDO(op)) { /* Need to undo update described. */ modified = 1; } if (ret = memp_fput(mpf, pagep, modified ? DB_MPOOL_DIRTY : 0)) goto out; *lsnp = argp->prev_lsn; ret = 0;out: REC_CLOSE;}/* * __bam_rsplit_recover -- * Recovery function for rsplit. * * PUBLIC: int __bam_rsplit_recover * PUBLIC: __P((DB_ENV *, DBT *, DB_LSN *, db_recops, void *)); */int__bam_rsplit_recover(dbenv, dbtp, lsnp, op, info) DB_ENV *dbenv; DBT *dbtp; DB_LSN *lsnp; db_recops op; void *info;{ __bam_rsplit_args *argp; DB *file_dbp; DBC *dbc; DB_MPOOLFILE *mpf; PAGE *pagep; int cmp_n, cmp_p, modified, ret; REC_PRINT(__bam_rsplit_print); REC_INTRO(__bam_rsplit_read);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -