Class: Innodb::Page::Inode
- Inherits:
-
Innodb::Page
- Object
- Innodb::Page
- Innodb::Page::Inode
- Defined in:
- lib/innodb/page/inode.rb
Overview
A specialized class for handling INODE pages, which contain index FSEG (file segment) information. This allows all extents and individual pages assigned to each index to be found.
Constant Summary
Constants inherited from Innodb::Page
PAGE_TYPE, PAGE_TYPE_BY_VALUE, SPECIALIZED_CLASSES
Instance Attribute Summary
Attributes inherited from Innodb::Page
Instance Method Summary collapse
-
#dump ⇒ Object
Dump the contents of a page for debugging purposes.
-
#each_allocated_inode ⇒ Object
Iterate through all allocated inodes in the inode array.
-
#each_inode ⇒ Object
Iterate through all Inodes in the inode array.
- #each_region {|{ :offset => pos_list_entry, :length => size_list_entry, :name => :list_entry, :info => "Inode List Entry", }| ... } ⇒ Object
-
#inode_at(cursor) ⇒ Object
Read a single Inode entry from the provided byte offset by creating a cursor and reading the inode using the inode method.
-
#inodes_per_page ⇒ Object
The number of Inode entries that fit on a page.
-
#list_entry ⇒ Object
Return the list entry.
-
#next_address ⇒ Object
Return the “next” address pointer from the list entry.
-
#pos_inode_array ⇒ Object
Return the byte offset of the Inode array in the page, which immediately follows the list entry.
-
#pos_list_entry ⇒ Object
Return the byte offset of the list node, which immediately follows the FIL header.
-
#prev_address ⇒ Object
Return the “previous” address pointer from the list entry.
- #size_inode_array ⇒ Object
-
#size_list_entry ⇒ Object
Return the size of the list node.
Methods inherited from Innodb::Page
#calculate_checksum, #checksum, #corrupt?, #cursor, #fil_header, handle, #initialize, #inspect, #lsn, maybe_undefined, #name, #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
#dump ⇒ Object
Dump the contents of a page for debugging purposes.
124 125 126 127 128 129 130 131 132 133 134 135 136 |
# File 'lib/innodb/page/inode.rb', line 124 def dump super puts "list entry:" pp list_entry puts puts "inodes:" each_inode do |inode| inode.dump end puts end |
#each_allocated_inode ⇒ Object
Iterate through all allocated inodes in the inode array.
76 77 78 79 80 81 82 83 84 |
# File 'lib/innodb/page/inode.rb', line 76 def each_allocated_inode unless block_given? return enum_for(:each_allocated_inode) end each_inode do |this_inode| yield this_inode if this_inode.allocated? end end |
#each_inode ⇒ Object
Iterate through all Inodes in the inode array.
61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/innodb/page/inode.rb', line 61 def each_inode unless block_given? return enum_for(:each_inode) end inode_cursor = cursor(pos_inode_array) inodes_per_page.times do |n| inode_cursor.name("inode[#{n}]") do |c| this_inode = Innodb::Inode.new_from_cursor(@space, c) yield this_inode end end end |
#each_region {|{ :offset => pos_list_entry, :length => size_list_entry, :name => :list_entry, :info => "Inode List Entry", }| ... } ⇒ Object
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
# File 'lib/innodb/page/inode.rb', line 86 def each_region unless block_given? return enum_for(:each_region) end super do |region| yield region end yield({ :offset => pos_list_entry, :length => size_list_entry, :name => :list_entry, :info => "Inode List Entry", }) each_inode do |inode| if inode.allocated? yield({ :offset => inode.offset, :length => Innodb::Inode::SIZE, :name => :inode_used, :info => "Inode (used)", }) else yield({ :offset => inode.offset, :length => Innodb::Inode::SIZE, :name => :inode_free, :info => "Inode (free)", }) end end nil end |
#inode_at(cursor) ⇒ Object
Read a single Inode entry from the provided byte offset by creating a cursor and reading the inode using the inode method.
56 57 58 |
# File 'lib/innodb/page/inode.rb', line 56 def inode_at(cursor) cursor.name("inode[#{cursor.position}]") { |c| Innodb::Inode.new_from_cursor(@space, c) } end |
#inodes_per_page ⇒ Object
The number of Inode entries that fit on a page.
27 28 29 |
# File 'lib/innodb/page/inode.rb', line 27 def inodes_per_page (size - pos_inode_array - 10) / Innodb::Inode::SIZE end |
#list_entry ⇒ Object
Return the list entry.
36 37 38 39 40 |
# File 'lib/innodb/page/inode.rb', line 36 def list_entry cursor(pos_list_entry).name("list") do |c| Innodb::List.get_node(c) end end |
#next_address ⇒ Object
Return the “next” address pointer from the list entry. This is used by Innodb::List::Inode to iterate through Inode lists.
50 51 52 |
# File 'lib/innodb/page/inode.rb', line 50 def next_address list_entry[:next] end |
#pos_inode_array ⇒ Object
Return the byte offset of the Inode array in the page, which immediately follows the list entry.
22 23 24 |
# File 'lib/innodb/page/inode.rb', line 22 def pos_inode_array pos_list_entry + size_list_entry end |
#pos_list_entry ⇒ Object
Return the byte offset of the list node, which immediately follows the FIL header.
11 12 13 |
# File 'lib/innodb/page/inode.rb', line 11 def pos_list_entry pos_fil_header + size_fil_header end |
#prev_address ⇒ Object
Return the “previous” address pointer from the list entry. This is used by Innodb::List::Inode to iterate through Inode lists.
44 45 46 |
# File 'lib/innodb/page/inode.rb', line 44 def prev_address list_entry[:prev] end |