Class: Innodb::Page::Inode
- Inherits:
-
Innodb::Page
- Object
- Innodb::Page
- Innodb::Page::Inode
- Defined in:
- lib/innodb/page/inode.rb
Constant Summary
Constants inherited from Innodb::Page
PAGE_TYPE, PAGE_TYPE_BY_VALUE, UNDEFINED_PAGE_NUMBER
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 {|Region.new( 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
#checksum_crc32, #checksum_crc32?, #checksum_innodb, #checksum_innodb?, #checksum_invalid?, #checksum_type, #checksum_valid?, #corrupt?, #cursor, #default_page_size?, #each_page_body_byte_as_uint8, #each_page_header_byte_as_uint8, #extent_descriptor?, #fil_header, #fil_trailer, handle, #in_doublewrite_buffer?, #initialize, #inspect, #inspect_header_fields, maybe_undefined, #misplaced?, #misplaced_offset?, #misplaced_space?, #name, page_type_by_value, parse, #pos_fil_header, #pos_fil_trailer, #pos_page_body, #pos_partial_page_header, register_specialization, #size, #size_fil_header, #size_fil_trailer, #size_page_body, #size_partial_page_header, specialization_for, specialization_for?, #torn?, undefined?
Constructor Details
This class inherits a constructor from Innodb::Page
Instance Method Details
#dump ⇒ Object
Dump the contents of a page for debugging purposes.
117 118 119 120 121 122 123 124 125 126 127 |
# File 'lib/innodb/page/inode.rb', line 117 def dump super puts "list entry:" pp list_entry puts puts "inodes:" each_inode(&:dump) puts end |
#each_allocated_inode ⇒ Object
Iterate through all allocated inodes in the inode array.
75 76 77 78 79 80 81 |
# File 'lib/innodb/page/inode.rb', line 75 def each_allocated_inode return enum_for(:each_allocated_inode) unless block_given? 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.
63 64 65 66 67 68 69 70 71 72 |
# File 'lib/innodb/page/inode.rb', line 63 def each_inode return enum_for(:each_inode) unless block_given? inode_cursor = cursor(pos_inode_array) inodes_per_page.times do |n| inode_cursor.name("inode[#{n}]") do |c| yield Innodb::Inode.new_from_cursor(@space, c) end end end |
#each_region {|Region.new( offset: pos_list_entry, length: size_list_entry, name: :list_entry, info: "Inode List Entry" )| ... } ⇒ Object
83 84 85 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 |
# File 'lib/innodb/page/inode.rb', line 83 def each_region(&block) return enum_for(:each_region) unless block_given? super yield Region.new( offset: pos_list_entry, length: size_list_entry, name: :list_entry, info: "Inode List Entry" ) each_inode do |inode| if inode.allocated? yield Region.new( offset: inode.offset, length: Innodb::Inode::SIZE, name: :inode_used, info: "Inode (used)" ) else yield Region.new( 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.
58 59 60 |
# File 'lib/innodb/page/inode.rb', line 58 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.
31 32 33 |
# File 'lib/innodb/page/inode.rb', line 31 def inodes_per_page (size - pos_inode_array - 10) / Innodb::Inode::SIZE end |
#list_entry ⇒ Object
Return the list entry.
40 41 42 |
# File 'lib/innodb/page/inode.rb', line 40 def list_entry cursor(pos_list_entry).name("list") { |c| Innodb::List.get_node(c) } 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.
52 53 54 |
# File 'lib/innodb/page/inode.rb', line 52 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.
26 27 28 |
# File 'lib/innodb/page/inode.rb', line 26 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.
15 16 17 |
# File 'lib/innodb/page/inode.rb', line 15 def pos_list_entry pos_page_body 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.
46 47 48 |
# File 'lib/innodb/page/inode.rb', line 46 def prev_address list_entry.prev end |