Class: Innodb::LogGroup
- Inherits:
-
Object
- Object
- Innodb::LogGroup
- Defined in:
- lib/innodb/log_group.rb
Instance Method Summary collapse
- #add_log(file) ⇒ Object
- #block(file_number, block_number) ⇒ Object
- #block_if_newer(old_block, new_block) ⇒ Object
- #current_tail_position ⇒ Object
- #each_block ⇒ Object
-
#initialize ⇒ LogGroup
constructor
A new instance of LogGroup.
- #successor_position(position) ⇒ Object
- #tail_blocks ⇒ Object
Constructor Details
#initialize ⇒ LogGroup
Returns a new instance of LogGroup.
4 5 6 |
# File 'lib/innodb/log_group.rb', line 4 def initialize @files = [] end |
Instance Method Details
#add_log(file) ⇒ Object
8 9 10 11 12 13 14 |
# File 'lib/innodb/log_group.rb', line 8 def add_log(file) if file = Innodb::Log.new(file) @files.push file else raise "Couldn't open #{file}" end end |
#block(file_number, block_number) ⇒ Object
54 55 56 |
# File 'lib/innodb/log_group.rb', line 54 def block(file_number, block_number) @files[file_number].block(block_number) end |
#block_if_newer(old_block, new_block) ⇒ Object
58 59 60 61 62 63 64 |
# File 'lib/innodb/log_group.rb', line 58 def block_if_newer(old_block, new_block) return new_block if old_block.nil? #puts "old: #{old_block.header[:block]} new: #{new_block.header[:block]}" if new_block.header[:block] >= old_block.header[:block] new_block end end |
#current_tail_position ⇒ Object
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/innodb/log_group.rb', line 24 def current_tail_position max = 0 max_file = nil max_block = nil @files.each_with_index do |file, file_number| file.each_block do |block_number, block| if block.header[:block] > max max = block.header[:block] max_file = file_number max_block = block_number end end end { :file => max_file, :block => max_block } end |
#each_block ⇒ Object
16 17 18 19 20 21 22 |
# File 'lib/innodb/log_group.rb', line 16 def each_block @files.each do |file| file.each_block do |block_number, block| yield block_number, block end end end |
#successor_position(position) ⇒ Object
42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/innodb/log_group.rb', line 42 def successor_position(position) if position[:block] == @files[position[:file]].blocks if position[:file] == @files.size { :file => 0, :block => 0 } else { :file => position[:file] + 1, :block => 0 } end else { :file => position[:file], :block => position[:block] + 1 } end end |
#tail_blocks ⇒ Object
66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/innodb/log_group.rb', line 66 def tail_blocks position = current_tail_position current_block = nil while true until block_if_newer(current_block, new_block = block(position[:file], position[:block])) #puts "Waiting at the tail: #{position[:file]} #{position[:block]}" sleep 0.1 end yield new_block position = successor_position(position) current_block = new_block end end |