class Innodb::Page::UndoLog

Constants

SegmentHeader
UNDO_PAGE_TYPES
UNDO_SEGMENT_STATES

Public Instance Methods

dump() click to toggle source

Dump the contents of a page for debugging purposes.

Calls superclass method Innodb::Page#dump
# File lib/innodb/page/undo_log.rb, line 92
def dump
  super

  puts "undo page header:"
  pp undo_page_header
  puts

  puts "undo segment header:"
  pp undo_segment_header
  puts

  puts "last undo log:"
  undo_log(undo_segment_header[:last_log_offset]).dump unless undo_segment_header[:last_log_offset].zero?
  puts
end
next_address() click to toggle source
# File lib/innodb/page/undo_log.rb, line 72
def next_address
  undo_page_header[:page_list_node][:next]
end
pos_undo_logs() click to toggle source
# File lib/innodb/page/undo_log.rb, line 40
def pos_undo_logs
  pos_undo_segment_header + size_undo_segment_header
end
pos_undo_page_header() click to toggle source
# File lib/innodb/page/undo_log.rb, line 24
def pos_undo_page_header
  pos_page_body
end
pos_undo_segment_header() click to toggle source
# File lib/innodb/page/undo_log.rb, line 32
def pos_undo_segment_header
  pos_undo_page_header + size_undo_page_header
end
prev_address() click to toggle source
# File lib/innodb/page/undo_log.rb, line 68
def prev_address
  undo_page_header[:page_list_node][:prev]
end
size_undo_page_header() click to toggle source
# File lib/innodb/page/undo_log.rb, line 28
def size_undo_page_header
  2 + 2 + 2 + Innodb::List::NODE_SIZE
end
size_undo_segment_header() click to toggle source
# File lib/innodb/page/undo_log.rb, line 36
def size_undo_segment_header
  2 + 2 + Innodb::FsegEntry::SIZE + Innodb::List::BASE_NODE_SIZE
end
undo_log(pos) click to toggle source
# File lib/innodb/page/undo_log.rb, line 87
def undo_log(pos)
  Innodb::UndoLog.new(self, pos)
end
undo_page_header() click to toggle source
# File lib/innodb/page/undo_log.rb, line 57
def undo_page_header
  @undo_page_header ||= cursor(pos_undo_page_header).name("undo_page_header") do |c|
    PageHeader.new(
      type: c.name("type") { UNDO_PAGE_TYPES[c.read_uint16] },
      latest_log_record_offset: c.name("latest_log_record_offset") { c.read_uint16 },
      free_offset: c.name("free_offset") { c.read_uint16 },
      page_list_node: c.name("page_list") { Innodb::List.get_node(c) }
    )
  end
end
undo_segment_header() click to toggle source
# File lib/innodb/page/undo_log.rb, line 76
def undo_segment_header
  @undo_segment_header ||= cursor(pos_undo_segment_header).name("undo_segment_header") do |c|
    SegmentHeader.new(
      state: c.name("state") { UNDO_SEGMENT_STATES[c.read_uint16] },
      last_log_offset: c.name("last_log_offset") { c.read_uint16 },
      fseg: c.name("fseg") { Innodb::FsegEntry.get_inode(@space, c) },
      page_list: c.name("page_list") { Innodb::List::UndoPage.new(@space, Innodb::List.get_base_node(c)) }
    )
  end
end