146 friend class sysevent;
165 t_xct_latency_dump = 15,
169 t_append_extent = 19,
170 t_loganalysis_begin = 20,
171 t_loganalysis_end = 21,
174 t_restore_begin = 24,
175 t_restore_segment = 25,
178 t_stnode_format = 27,
179 t_page_img_format = 28,
181 t_btree_norec_alloc = 30,
183 t_btree_insert_nonghost = 32,
185 t_btree_overwrite = 34,
186 t_btree_ghost_mark = 35,
187 t_btree_ghost_reclaim = 36,
188 t_btree_ghost_reserve = 37,
189 t_btree_foster_adopt = 38,
195 t_btree_compress_page = 44,
198 t_benchmark_start = 47,
204 bool is_page_update()
const;
206 bool is_redo()
const;
208 bool is_skip()
const;
210 bool is_undo()
const;
212 bool is_cpsn()
const;
214 bool is_multi_page()
const;
216 bool is_root_page()
const;
218 bool is_logical()
const;
220 bool is_system()
const;
222 bool is_single_sys_xct()
const;
228 template<
class PagePtr>
231 static constexpr u_char get_logrec_cat(
kind_t type);
235 template<
class PagePtr>
240 template<
class PagePtr>
242 header._page_tag = p->tag();
243 header._pid = p->pid();
244 header._stid = p->store();
247 void set_size(
size_t l);
249 void init_xct_info();
259 max_data_sz = max_sz - hdr_non_ssx_sz -
sizeof(
lsn_t)
262 static_assert(hdr_non_ssx_sz == 40,
"Wrong logrec header size");
263 static_assert(hdr_single_sys_xct_sz == 40 - 16,
"Wrong logrec header size");
274 uint16_t tag()
const;
278 const lsn_t& undo_nxt()
const;
284 const lsn_t& page_prev_lsn()
const;
286 const lsn_t& page2_prev_lsn()
const;
292 void set_page_prev_lsn(
const lsn_t& lsn);
294 const lsn_t& xid_prev()
const;
296 void set_xid_prev(
const lsn_t& lsn);
298 void set_undo_nxt(
const lsn_t& lsn);
300 void set_tid(
tid_t tid);
302 void set_clr(
const lsn_t& c);
304 void set_root_page();
306 void set_pid(
const PageID& p);
311 return get_type_str(type());
314 static const char* get_type_str(
kind_t);
316 const char* cat_str()
const;
318 const char* data()
const;
322 const char* data_ssx()
const;
341 lsn_t tmp = *_lsn_ck();
347 lsn_t& where = *_lsn_ck();
353 void remove_info_for_pid(
PageID pid);
389 t_single_sys_xct = 0x80
421 char* this_ptr =
reinterpret_cast<char*
>(
this);
422 return reinterpret_cast<lsn_t*
>(this_ptr + header.
_len -
sizeof(
lsn_t));
427 const char* this_ptr =
reinterpret_cast<const char*
>(
this);
428 return reinterpret_cast<const lsn_t*
>(this_ptr + header.
_len -
sizeof(
lsn_t));
433 void*
operator new(size_t);
435 void operator delete(
void*, size_t);
439 void*
operator new(size_t,
void* p) {
477 _page2_pid(page2_pid) {}
498 if (is_single_sys_xct()) {
499 return hdr_single_sys_xct_sz;
501 return hdr_non_ssx_sz;
516 if (!is_multi_page()) {
536 xidInfo._xid_prv = undo_nxt;
541 return header._page_tag;
561 return header._page_prv;
566 if (!is_multi_page()) {
569 return data_ssx_multi()->_page2_prv;
575 header._page_prv = lsn;
579 if (is_single_sys_xct()) {
588 return xidInfo._xid_prv;
594 xidInfo._xid_prv = lsn;
599 return (
kind_t)header._type;
604 return get_logrec_cat(static_cast<logrec_t::kind_t>(header._type));
610 header._flags |= t_cpsn;
616 xidInfo._xid_prv = c;
621 header._flags |= t_root_page;
626 return (cat() & t_system) != 0;
631 return (cat() & t_redo) != 0;
635 return (cat() & t_multi) != 0;
640 return type() == t_skip;
645 return (cat() & t_undo) != 0;
650 return (header._flags & t_cpsn) != 0;
655 return (header._flags & t_root_page) != 0;
663 return is_redo() && !is_cpsn();
668 return (cat() & t_logical) != 0;
673 return (cat() & t_single_sys_xct) != 0;
694 case t_benchmark_start :
704 case t_loganalysis_begin :
706 case t_loganalysis_end :
714 case t_restore_begin :
716 case t_restore_segment :
720 case t_xct_latency_dump :
737 return t_redo | t_single_sys_xct;
738 case t_stnode_format :
739 return t_redo | t_single_sys_xct;
740 case t_alloc_format :
741 return t_redo | t_single_sys_xct;
742 case t_dealloc_page :
743 return t_redo | t_single_sys_xct;
744 case t_create_store :
745 return t_redo | t_single_sys_xct;
746 case t_append_extent :
747 return t_redo | t_single_sys_xct;
748 case t_page_img_format :
749 return t_redo | t_undo;
750 case t_update_emlsn :
751 return t_redo | t_single_sys_xct;
752 case t_btree_norec_alloc :
753 return t_redo | t_multi | t_single_sys_xct;
754 case t_btree_insert :
755 return t_redo | t_undo | t_logical;
756 case t_btree_insert_nonghost :
757 return t_redo | t_undo | t_logical;
758 case t_btree_update :
759 return t_redo | t_undo | t_logical;
760 case t_btree_overwrite :
761 return t_redo | t_undo | t_logical;
762 case t_btree_ghost_mark :
763 return t_redo | t_undo | t_logical;
764 case t_btree_ghost_reclaim :
765 return t_redo | t_single_sys_xct;
766 case t_btree_ghost_reserve :
767 return t_redo | t_single_sys_xct;
768 case t_btree_foster_adopt :
769 return t_redo | t_multi | t_single_sys_xct;
771 return t_redo | t_multi | t_single_sys_xct;
772 case t_btree_compress_page :
773 return t_redo | t_single_sys_xct;
784 #define LOGREC_ACCOUNTING 0 785 #if LOGREC_ACCOUNTING 786 class logrec_accounting_t {
788 static void account(
logrec_t &l,
bool fwd);
789 static void account_end(
bool fwd);
790 static void print_account_and_clear();
792 #define LOGREC_ACCOUNTING_PRINT logrec_accounting_t::print_account_and_clear(); 793 #define LOGREC_ACCOUNT(x,y) \ 794 if(!smlevel_0::in_recovery()) { \ 795 logrec_accounting_t::account((x),(y)); \ 797 #define LOGREC_ACCOUNT_END_XCT(y) \ 798 if(!smlevel_0::in_recovery()) { \ 799 logrec_accounting_t::account_end((y)); \ 802 #define LOGREC_ACCOUNTING_PRINT 803 #define LOGREC_ACCOUNT(x, y) 804 #define LOGREC_ACCOUNT_END_XCT(y) uint16_t tag() const
Definition: logrec.h:540
multi_page_log_t(PageID page2_pid)
Definition: logrec.h:476
bool is_multi_page() const
Definition: logrec.h:634
multi_page_log_t * data_ssx_multi()
Definition: logrec.h:676
PageID _page2_pid
Definition: logrec.h:471
void set_undo_nxt(const lsn_t &lsn)
Definition: logrec.h:535
Bitmap data structure that controls the progress of restore.
Definition: restore.h:31
const char * data_ssx() const
Definition: logrec.h:489
u_char cat() const
Definition: logrec.h:603
flag_t
Definition: logrec.h:392
#define w_assert1(x)
Level 1 should not add significant extra time.
Definition: w_base.h:198
smsize_t header_size() const
Definition: logrec.h:497
uint32_t smsize_t
Definition: basics.h:41
uint32_t _fill4
Definition: logrec.h:474
const lsn_t & page_prev_lsn() const
Definition: logrec.h:559
bool is_undo() const
Definition: logrec.h:644
const char * data() const
Definition: logrec.h:481
const lsn_t & lsn() const
Definition: logrec.h:336
A transaction. Internal to the storage manager.This class may be used in a limited way for the handli...
Definition: xct.h:185
PageID pid() const
Definition: logrec.h:506
#define w_assert3(x)
Level 3 definitely adds significant time.
Definition: w_base.h:214
bool is_cpsn() const
Definition: logrec.h:649
uint32_t StoreID
Definition: basics.h:47
A generic page view: any Zero page can be viewed as being of this type but it only exposes fields sha...
Definition: generic_page.h:121
void set_page_prev_lsn(const lsn_t &lsn)
Definition: logrec.h:573
#define alignon(p, a)
aligns a pointer p on a size a
Definition: w_base.h:327
Base struct for log records that touch multi-pages.
Definition: logrec.h:463
static const lsn_t null
Definition: lsn.h:371
bool is_redo() const
Definition: logrec.h:630
Represents a transactional log record.
Definition: logrec.h:143
bool is_logical() const
Definition: logrec.h:667
const lsn_t & xid_prev() const
Definition: logrec.h:586
void set_xid_prev(tid_t tid, lsn_t last)
Definition: logrec.cpp:232
uint32_t PageID
Definition: basics.h:45
lsn_t _page2_prv
Definition: logrec.h:468
#define w_assert0(x)
Default assert/debug level is 0.
Definition: w_base.h:175
lsn_t * _lsn_ck()
Definition: logrec.h:419
Log Sequence Number. See Log Sequence Numbers (LSN).
Definition: lsn.h:243
void set_tid(tid_t tid)
Definition: logrec.h:530
tid_t tid() const
Definition: logrec.h:578
category_t
Definition: logrec.h:371
bool is_page_update() const
Definition: logrec.h:659
void init_page_info(const PagePtr p)
Definition: logrec.h:241
const lsn_t & lsn_ck() const
Definition: logrec.h:332
bool is_system() const
Definition: logrec.h:625
const lsn_t * _lsn_ck() const
Definition: logrec.h:425
static constexpr u_char get_logrec_cat(kind_t type)
Definition: logrec.h:686
void set_clr(const lsn_t &c)
Definition: logrec.h:608
bool is_single_sys_xct() const
Definition: logrec.h:672
PageID pid2() const
Definition: logrec.h:515
std::ostream & operator<<(std::ostream &os, const ConfigFile &cf)
Definition: confparser.cpp:83
xidChainLogHeader xidInfo
Definition: logrec.h:406
Definition: xct_logger.h:10
const lsn_t & page2_prev_lsn() const
Definition: logrec.h:565
bool is_skip() const
Definition: logrec.h:639
lsn_t _page_prv
Definition: logrec.h:113
kind_t type() const
Definition: logrec.h:598
void set_pid(const PageID &p)
Definition: logrec.h:525
uint64_t tid_t
Definition: tid_t.h:59
void set_root_page()
Definition: logrec.h:620
const char * type_str() const
Definition: logrec.h:310
bool has_page_img(PageID page_id)
Definition: logrec.h:357
bool is_root_page() const
Definition: logrec.h:654
smsize_t length() const
Definition: logrec.h:545
const lsn_t get_lsn_ck() const
Definition: logrec.h:340
void set_lsn_ck(const lsn_t &lsn_ck)
Definition: logrec.h:345
kind_t
Definition: logrec.h:149
baseLogHeader header
Definition: logrec.h:403
StoreID stid() const
Definition: logrec.h:511
const lsn_t & undo_nxt() const
Definition: logrec.h:550