Zero  0.1.0
Public Types | Public Member Functions | Static Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes | Friends | List of all members
logrec_t Class Reference

Represents a transactional log record. More...

#include <logrec.h>

Inheritance diagram for logrec_t:
add_backup_log alloc_format_log alloc_page_log append_extent_log benchmark_start_log btree_compress_page_log btree_foster_adopt_log btree_ghost_mark_log btree_ghost_reclaim_log btree_ghost_reserve_log btree_insert_log btree_insert_nonghost_log btree_norec_alloc_log btree_overwrite_log btree_split_log btree_update_log chkpt_begin_log comment_log compensate_log create_store_log dealloc_page_log evict_page_log fetch_page_log loganalysis_begin_log loganalysis_end_log page_img_format_log page_read_log page_write_log redo_done_log restore_begin_log restore_end_log restore_segment_log skip_log stnode_format_log tick_msec_log tick_sec_log undo_done_log update_emlsn_log warmup_done_log xct_abort_log xct_end_log xct_latency_dump_log

Public Types

enum  kind_t {
  t_comment = 0, t_compensate = 1, t_skip = 2, t_chkpt_begin = 3,
  t_warmup_done = 7, t_alloc_format = 8, t_evict_page = 9, t_add_backup = 10,
  t_xct_abort = 11, t_fetch_page = 12, t_xct_end = 13, t_xct_latency_dump = 15,
  t_alloc_page = 16, t_dealloc_page = 17, t_create_store = 18, t_append_extent = 19,
  t_loganalysis_begin = 20, t_loganalysis_end = 21, t_redo_done = 22, t_undo_done = 23,
  t_restore_begin = 24, t_restore_segment = 25, t_restore_end = 26, t_stnode_format = 27,
  t_page_img_format = 28, t_update_emlsn = 29, t_btree_norec_alloc = 30, t_btree_insert = 31,
  t_btree_insert_nonghost = 32, t_btree_update = 33, t_btree_overwrite = 34, t_btree_ghost_mark = 35,
  t_btree_ghost_reclaim = 36, t_btree_ghost_reserve = 37, t_btree_foster_adopt = 38, t_btree_split = 43,
  t_btree_compress_page = 44, t_tick_sec = 45, t_tick_msec = 46, t_benchmark_start = 47,
  t_page_write = 48, t_page_read = 49, t_max_logrec = 50
}
 
enum  { max_sz = 3 * sizeof(generic_page), hdr_non_ssx_sz = sizeof(baseLogHeader) + sizeof(xidChainLogHeader), hdr_single_sys_xct_sz = sizeof(baseLogHeader), max_data_sz = max_sz - hdr_non_ssx_sz - sizeof(lsn_t) }
 

Public Member Functions

bool is_page_update () const
 
bool is_redo () const
 
bool is_skip () const
 
bool is_undo () const
 
bool is_cpsn () const
 
bool is_multi_page () const
 
bool is_root_page () const
 
bool is_logical () const
 
bool is_system () const
 
bool is_single_sys_xct () const
 
bool valid_header (const lsn_t &lsn_ck=lsn_t::null) const
 
smsize_t header_size () const
 
template<class PagePtr >
void redo (PagePtr)
 
void redo ()
 
template<class PagePtr >
void undo (PagePtr)
 
void init_header (kind_t)
 
template<class PagePtr >
void init_page_info (const PagePtr p)
 
void set_size (size_t l)
 
void init_xct_info ()
 
void set_xid_prev (tid_t tid, lsn_t last)
 
tid_t tid () const
 
StoreID stid () const
 
PageID pid () const
 
PageID pid2 () const
 
uint16_t tag () const
 
smsize_t length () const
 
const lsn_tundo_nxt () const
 
const lsn_tpage_prev_lsn () const
 
const lsn_tpage2_prev_lsn () const
 
void set_page_prev_lsn (const lsn_t &lsn)
 
const lsn_txid_prev () const
 
void set_xid_prev (const lsn_t &lsn)
 
void set_undo_nxt (const lsn_t &lsn)
 
void set_tid (tid_t tid)
 
void set_clr (const lsn_t &c)
 
void set_root_page ()
 
void set_pid (const PageID &p)
 
kind_t type () const
 
const char * type_str () const
 
const char * cat_str () const
 
const char * data () const
 
char * data ()
 
const char * data_ssx () const
 
char * data_ssx ()
 
multi_page_log_tdata_ssx_multi ()
 
const multi_page_log_tdata_ssx_multi () const
 
const lsn_tlsn_ck () const
 
const lsn_tlsn () const
 
const lsn_t get_lsn_ck () const
 
void set_lsn_ck (const lsn_t &lsn_ck)
 
void corrupt ()
 
void remove_info_for_pid (PageID pid)
 
bool has_page_img (PageID page_id)
 
void * operator new (size_t)
 
void operator delete (void *, size_t)
 
void * operator new (size_t, void *p)
 

Static Public Member Functions

static constexpr u_char get_logrec_cat (kind_t type)
 
static const char * get_type_str (kind_t)
 

Protected Types

enum  category_t {
  t_bad_cat = 0x00, t_system = 0x01, t_undo = 0x02, t_redo = 0x04,
  t_multi = 0x08, t_logical = 0x10, t_single_sys_xct = 0x80
}
 
enum  flag_t { t_cpsn = 0x01, t_root_page = 0x02 }
 

Protected Member Functions

u_char cat () const
 
lsn_t_lsn_ck ()
 
const lsn_t_lsn_ck () const
 

Protected Attributes

baseLogHeader header
 
xidChainLogHeader xidInfo
 
char _data [max_sz - sizeof(baseLogHeader) - sizeof(xidChainLogHeader)]
 

Friends

class XctLogger
 
class sysevent
 
class baseLogHeader
 
ostream & operator<< (ostream &, logrec_t &)
 

Detailed Description

Represents a transactional log record.

A log record's space is divided between a header and data. All log records' headers include the information contained in baseLogHeader. Log records pertaining to transactions that produce multiple log records also persist a transaction id chain (_xid and _xid_prv).

Optimization for single-log system transaction

For single-log system transaction, header items in xidChainLogHeader are not stored. instead, we use these area as data area to save 16 bytes. we do need to keep these 8 bytes aligned. and this is a bit dirty trick. however, we really need it to reduce the volume of log we output for system transactions.

Member Enumeration Documentation

§ anonymous enum

anonymous enum
Enumerator
max_sz 
hdr_non_ssx_sz 
hdr_single_sys_xct_sz 
max_data_sz 

§ category_t

enum logrec_t::category_t
protected
Enumerator
t_bad_cat 

should not happen.

t_system 

System log record: not transaction- or page-related; no undo/redo

t_undo 

log with UNDO action?

t_redo 

log with REDO action?

t_multi 

log for multi pages?

t_logical 

is the UNDO logical? If so, do not fix the page for undo. Irrelevant if not an undoable log record.

t_single_sys_xct 

log by system transaction which is fused with begin/commit record.

§ flag_t

enum logrec_t::flag_t
protected
Enumerator
t_cpsn 
t_root_page 

§ kind_t

Enumerator
t_comment 
t_compensate 
t_skip 
t_chkpt_begin 
t_warmup_done 
t_alloc_format 
t_evict_page 
t_add_backup 
t_xct_abort 
t_fetch_page 
t_xct_end 
t_xct_latency_dump 
t_alloc_page 
t_dealloc_page 
t_create_store 
t_append_extent 
t_loganalysis_begin 
t_loganalysis_end 
t_redo_done 
t_undo_done 
t_restore_begin 
t_restore_segment 
t_restore_end 
t_stnode_format 
t_page_img_format 
t_update_emlsn 
t_btree_norec_alloc 
t_btree_insert 
t_btree_insert_nonghost 
t_btree_update 
t_btree_overwrite 
t_btree_ghost_mark 
t_btree_ghost_reclaim 
t_btree_ghost_reserve 
t_btree_foster_adopt 
t_btree_split 
t_btree_compress_page 
t_tick_sec 
t_tick_msec 
t_benchmark_start 
t_page_write 
t_page_read 
t_max_logrec 

Member Function Documentation

§ _lsn_ck() [1/2]

lsn_t* logrec_t::_lsn_ck ( )
inlineprotected

§ _lsn_ck() [2/2]

const lsn_t* logrec_t::_lsn_ck ( ) const
inlineprotected

§ cat()

u_char logrec_t::cat ( ) const
inlineprotected

§ cat_str()

const char * logrec_t::cat_str ( ) const

§ corrupt()

void logrec_t::corrupt ( )

§ data() [1/2]

const char * logrec_t::data ( ) const
inline

§ data() [2/2]

char * logrec_t::data ( )
inline

§ data_ssx() [1/2]

const char * logrec_t::data_ssx ( ) const
inline

§ data_ssx() [2/2]

char * logrec_t::data_ssx ( )
inline

§ data_ssx_multi() [1/2]

multi_page_log_t * logrec_t::data_ssx_multi ( )
inline

Returns the log record data as a multi-page SSX log.

§ data_ssx_multi() [2/2]

const multi_page_log_t * logrec_t::data_ssx_multi ( ) const
inline

Const version

§ get_logrec_cat()

constexpr u_char logrec_t::get_logrec_cat ( kind_t  type)
static

§ get_lsn_ck()

const lsn_t logrec_t::get_lsn_ck ( ) const
inline

§ get_type_str()

const char * logrec_t::get_type_str ( kind_t  type)
static

§ has_page_img()

bool logrec_t::has_page_img ( PageID  page_id)
inline

§ header_size()

smsize_t logrec_t::header_size ( ) const
inline

§ init_header()

void logrec_t::init_header ( kind_t  type)

§ init_page_info()

template<class PagePtr >
void logrec_t::init_page_info ( const PagePtr  p)
inline

§ init_xct_info()

void logrec_t::init_xct_info ( )

§ is_cpsn()

bool logrec_t::is_cpsn ( ) const
inline

§ is_logical()

bool logrec_t::is_logical ( ) const
inline

§ is_multi_page()

bool logrec_t::is_multi_page ( ) const
inline

§ is_page_update()

bool logrec_t::is_page_update ( ) const
inline

§ is_redo()

bool logrec_t::is_redo ( ) const
inline

§ is_root_page()

bool logrec_t::is_root_page ( ) const
inline

§ is_single_sys_xct()

bool logrec_t::is_single_sys_xct ( ) const
inline

§ is_skip()

bool logrec_t::is_skip ( ) const
inline

§ is_system()

bool logrec_t::is_system ( ) const
inline

§ is_undo()

bool logrec_t::is_undo ( ) const
inline

§ length()

smsize_t logrec_t::length ( ) const
inline

§ lsn()

const lsn_t& logrec_t::lsn ( ) const
inline

§ lsn_ck()

const lsn_t& logrec_t::lsn_ck ( ) const
inline

§ operator delete()

void logrec_t::operator delete ( void *  ,
size_t   
)

§ operator new() [1/2]

void* logrec_t::operator new ( size_t  )

§ operator new() [2/2]

void* logrec_t::operator new ( size_t  ,
void *  p 
)
inline

§ page2_prev_lsn()

const lsn_t & logrec_t::page2_prev_lsn ( ) const
inline

§ pid()

PageID logrec_t::pid ( ) const
inline

§ pid2()

PageID logrec_t::pid2 ( ) const
inline

§ redo() [1/2]

template<class PagePtr >
void logrec_t::redo ( PagePtr  page)

§ redo() [2/2]

void logrec_t::redo ( )

§ remove_info_for_pid()

void logrec_t::remove_info_for_pid ( PageID  pid)

§ set_clr()

void logrec_t::set_clr ( const lsn_t c)
inline

§ set_lsn_ck()

void logrec_t::set_lsn_ck ( const lsn_t lsn_ck)
inline

§ set_pid()

void logrec_t::set_pid ( const PageID p)
inline

§ set_root_page()

void logrec_t::set_root_page ( )
inline

§ set_size()

void logrec_t::set_size ( size_t  l)

§ set_tid()

void logrec_t::set_tid ( tid_t  tid)
inline

§ set_undo_nxt()

void logrec_t::set_undo_nxt ( const lsn_t lsn)
inline

§ set_xid_prev() [1/2]

void logrec_t::set_xid_prev ( tid_t  tid,
lsn_t  last 
)

§ set_xid_prev() [2/2]

void logrec_t::set_xid_prev ( const lsn_t lsn)
inline

§ stid()

StoreID logrec_t::stid ( ) const
inline

§ tag()

uint16_t logrec_t::tag ( ) const
inline

§ tid()

tid_t logrec_t::tid ( ) const
inline

§ type()

logrec_t::kind_t logrec_t::type ( ) const
inline

§ type_str()

const char* logrec_t::type_str ( ) const
inline

§ undo()

template<class PagePtr >
void logrec_t::undo ( PagePtr  page)

§ undo_nxt()

const lsn_t & logrec_t::undo_nxt ( ) const
inline

§ valid_header()

bool logrec_t::valid_header ( const lsn_t lsn_ck = lsn_t::null) const

§ xid_prev()

const lsn_t & logrec_t::xid_prev ( ) const
inline

Friends And Related Function Documentation

§ baseLogHeader

friend class baseLogHeader
friend

§ operator<<

ostream& operator<< ( ostream &  o,
logrec_t l 
)
friend

§ sysevent

friend class sysevent
friend

§ XctLogger

friend class XctLogger
friend

Member Data Documentation

§ _data

char logrec_t::_data[max_sz - sizeof(baseLogHeader) - sizeof(xidChainLogHeader)]
protected

§ header

baseLogHeader logrec_t::header
protected

§ xidInfo

xidChainLogHeader logrec_t::xidInfo
protected

The documentation for this class was generated from the following files: