Class: Innodb::Page::UndoLog

Inherits:
Innodb::Page show all
Defined in:
lib/innodb/page/undo_log.rb

Constant Summary collapse

UNDO_PAGE_TYPES =
{
  1 => :insert,
  2 => :update,
}
UNDO_SEGMENT_STATES =
{
  1 => :active,
  2 => :cached,
  3 => :to_free,
  4 => :to_purge,
  5 => :prepared,
}

Constants inherited from Innodb::Page

PAGE_TYPE, PAGE_TYPE_BY_VALUE, SPECIALIZED_CLASSES

Instance Attribute Summary

Attributes inherited from Innodb::Page

#space

Instance Method Summary collapse

Methods inherited from Innodb::Page

#calculate_checksum, #checksum, #corrupt?, #cursor, #data, #fil_header, handle, #initialize, #inspect, #lsn, maybe_undefined, #next, #offset, parse, #pos_fil_header, #pos_fil_trailer, #pos_page_body, #prev, #size, #size_fil_header, #size_fil_trailer, #type

Constructor Details

This class inherits a constructor from Innodb::Page

Instance Method Details

#dumpObject

Dump the contents of a page for debugging purposes.



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/innodb/page/undo_log.rb', line 76

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:"
  if undo_segment_header[:last_log_offset] != 0
    undo_log(undo_segment_header[:last_log_offset]).dump
  end
  puts
end

#next_addressObject



53
54
55
# File 'lib/innodb/page/undo_log.rb', line 53

def next_address
  undo_page_header[:page_list_node][:next]
end

#pos_undo_logsObject



20
21
22
# File 'lib/innodb/page/undo_log.rb', line 20

def pos_undo_logs
  pos_undo_segment_header + size_undo_segment_header
end

#pos_undo_page_headerObject



4
5
6
# File 'lib/innodb/page/undo_log.rb', line 4

def pos_undo_page_header
  pos_fil_header + size_fil_header
end

#pos_undo_segment_headerObject



12
13
14
# File 'lib/innodb/page/undo_log.rb', line 12

def pos_undo_segment_header
  pos_undo_page_header + size_undo_page_header
end

#prev_addressObject



49
50
51
# File 'lib/innodb/page/undo_log.rb', line 49

def prev_address
  undo_page_header[:page_list_node][:prev]
end

#size_undo_page_headerObject



8
9
10
# File 'lib/innodb/page/undo_log.rb', line 8

def size_undo_page_header
  2 + 2 + 2 + Innodb::List::NODE_SIZE
end

#size_undo_segment_headerObject



16
17
18
# File 'lib/innodb/page/undo_log.rb', line 16

def size_undo_segment_header
  2 + 2 + Innodb::FsegEntry::SIZE + Innodb::List::BASE_NODE_SIZE
end

#undo_log(pos) ⇒ Object



71
72
73
# File 'lib/innodb/page/undo_log.rb', line 71

def undo_log(pos)
  Innodb::UndoLog.new(self, pos)
end

#undo_page_headerObject



37
38
39
40
41
42
43
44
45
46
47
# File 'lib/innodb/page/undo_log.rb', line 37

def undo_page_header
  @undo_page_header ||=
    cursor(pos_undo_page_header).name("undo_page_header") do |c|
    {
      :type => c.name("type") { UNDO_PAGE_TYPES[c.get_uint16] },
      :latest_log_record_offset => c.name("latest_log_record_offset") { c.get_uint16 },
      :free_offset => c.name("free_offset") { c.get_uint16 },
      :page_list_node => c.name("page_list") { Innodb::List.get_node(c) },
    }
  end
end

#undo_segment_headerObject



57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/innodb/page/undo_log.rb', line 57

def undo_segment_header
  @undo_segment_header ||=
    cursor(pos_undo_segment_header).name("undo_segment_header") do |c|
    {
      :state => c.name("state") { UNDO_SEGMENT_STATES[c.get_uint16] },
      :last_log_offset => c.name("last_log_offset") { c.get_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