1/*- 2 * See the file LICENSE for redistribution information. 3 * 4 * Copyright (c) 1997,2008 Oracle. All rights reserved. 5 * 6 * $Id: dbreg_stat.c,v 12.17 2008/03/12 20:46:37 mbrey Exp $ 7 */ 8 9#include "db_config.h" 10 11#include "db_int.h" 12#include "dbinc/db_page.h" 13#include "dbinc/db_am.h" 14#include "dbinc/log.h" 15#include "dbinc/txn.h" 16 17#ifdef HAVE_STATISTICS 18static int __dbreg_print_dblist __P((ENV *, u_int32_t)); 19 20/* 21 * __dbreg_stat_print -- 22 * Print the dbreg statistics. 23 * 24 * PUBLIC: int __dbreg_stat_print __P((ENV *, u_int32_t)); 25 */ 26int 27__dbreg_stat_print(env, flags) 28 ENV *env; 29 u_int32_t flags; 30{ 31 int ret; 32 33 if (LF_ISSET(DB_STAT_ALL) && 34 (ret = __dbreg_print_dblist(env, flags)) != 0) 35 return (ret); 36 37 return (0); 38} 39 40/* 41 * __dbreg_print_fname -- 42 * Display the contents of an FNAME structure. 43 * 44 * PUBLIC: void __dbreg_print_fname __P((ENV *, FNAME *)); 45 */ 46void 47__dbreg_print_fname(env, fnp) 48 ENV *env; 49 FNAME *fnp; 50{ 51 static const FN fn[] = { 52 { DB_FNAME_DURABLE, "DB_FNAME_DURABLE" }, 53 { DB_FNAME_NOTLOGGED, "DB_FNAME_NOTLOGGED" }, 54 { 0, NULL } 55 }; 56 57 __db_msg(env, "%s", DB_GLOBAL(db_line)); 58 __db_msg(env, "DB handle FNAME contents:"); 59 STAT_LONG("log ID", fnp->id); 60 STAT_ULONG("Meta pgno", fnp->meta_pgno); 61 __db_print_fileid(env, fnp->ufid, "\tFile ID"); 62 STAT_ULONG("create txn", fnp->create_txnid); 63 __db_prflags(env, NULL, fnp->flags, fn, NULL, "\tFlags"); 64} 65 66/* 67 * __dbreg_print_dblist -- 68 * Display the ENV's list of files. 69 */ 70static int 71__dbreg_print_dblist(env, flags) 72 ENV *env; 73 u_int32_t flags; 74{ 75 DB *dbp; 76 DB_LOG *dblp; 77 FNAME *fnp; 78 LOG *lp; 79 int del, first; 80 81 dblp = env->lg_handle; 82 lp = dblp->reginfo.primary; 83 84 __db_msg(env, "LOG FNAME list:"); 85 __mutex_print_debug_single( 86 env, "File name mutex", lp->mtx_filelist, flags); 87 88 STAT_LONG("Fid max", lp->fid_max); 89 90 MUTEX_LOCK(env, lp->mtx_filelist); 91 first = 1; 92 SH_TAILQ_FOREACH(fnp, &lp->fq, q, __fname) { 93 if (first) { 94 first = 0; 95 __db_msg(env, 96 "ID\tName\t\tType\tPgno\tPid\tTxnid\tFlags\tDBP-info"); 97 } 98 dbp = fnp->id >= dblp->dbentry_cnt ? NULL : 99 dblp->dbentry[fnp->id].dbp; 100 del = fnp->id >= dblp->dbentry_cnt ? 0 : 101 dblp->dbentry[fnp->id].deleted; 102 __db_msg(env, 103 "%ld\t%-8s%s%-8s%s\t%lu\t%lu\t%lx\t%lx\t%s (%d %lx %lx)", 104 (long)fnp->id, 105 fnp->fname_off == INVALID_ROFF ? 106 "" : (char *)R_ADDR(&dblp->reginfo, fnp->fname_off), 107 fnp->dname_off == INVALID_ROFF ? "" : ":", 108 fnp->dname_off == INVALID_ROFF ? 109 "" : (char *)R_ADDR(&dblp->reginfo, fnp->dname_off), 110 __db_dbtype_to_string(fnp->s_type), 111 (u_long)fnp->meta_pgno, (u_long)fnp->pid, 112 (u_long)fnp->create_txnid, (u_long)fnp->flags, 113 dbp == NULL ? "No DBP" : "DBP", del, P_TO_ULONG(dbp), 114 (u_long)(dbp == NULL ? 0 : dbp->flags)); 115 } 116 MUTEX_UNLOCK(env, lp->mtx_filelist); 117 118 return (0); 119} 120#endif 121