class Wyrm::Hole
This bypasses the need to marshal objects between two pumps. It uses a queue of the record arrays instead.
Attributes
dst_db[R]
options[R]
queue_size[R]
src_db[R]
Public Class Methods
new( src_db, dst_db, drop_tables: true, queue_size: Mouth::DEFAULT_QUEUE_SIZE )
click to toggle source
# File lib/wyrm/hole.rb, line 78 def initialize( src_db, dst_db, drop_tables: true, queue_size: Mouth::DEFAULT_QUEUE_SIZE ) # called only once per run, so not really a performance issue @drop_tables = drop_tables @queue_size = queue_size @src_db = maybe_deebe src_db @dst_db = maybe_deebe dst_db @src_db.extension :schema_dumper end
Public Instance Methods
call()
click to toggle source
# File lib/wyrm/hole.rb, line 140 def call if drop_tables? logger.info "dropping tables" drop_tables src_db.tables end transfer_schema { transfer_tables } end
drop_tables?()
click to toggle source
# File lib/wyrm/hole.rb, line 90 def drop_tables?; @drop_tables end
dst_pump()
click to toggle source
# File lib/wyrm/hole.rb, line 104 def dst_pump @dst_pump ||= Pump.new db: dst_db, **pump_options end
mouth()
click to toggle source
# File lib/wyrm/hole.rb, line 92 def mouth @mouth ||= Mouth.new queue_size: queue_size end
pump_options()
click to toggle source
# File lib/wyrm/hole.rb, line 96 def pump_options {io: mouth, codec: QueueCodec, logger: logger} end
src_pump()
click to toggle source
# File lib/wyrm/hole.rb, line 100 def src_pump @src_pump ||= Pump.new db: src_db, **pump_options end
transfer_schema( ) { |self| ... }
click to toggle source
# File lib/wyrm/hole.rb, line 129 def transfer_schema( &transfer_table_block ) create_tables yield self if block_given? # transfer tables here create_indexes end
transfer_table( table_name )
click to toggle source
# File lib/wyrm/hole.rb, line 108 def transfer_table( table_name ) src_pump.table_name = dst_pump.table_name = table_name if src_pump.table_dataset.empty? logger.info "No records in #{table_name}" return end # Use threads so the db read/writes aren't waiting for one another. recv_thread = Thread.new{ dst_pump.restore } send_thread = Thread.new{ src_pump.dump } send_thread.join recv_thread.join ensure mouth.reset src_pump.table_name = dst_pump.table_name = nil end
transfer_tables()
click to toggle source
# File lib/wyrm/hole.rb, line 135 def transfer_tables logger.info "transferring tables" src_db.tables.each {|table_name| transfer_table table_name } end