lib/lhm/invoker.rb in lhm-1.0.3 vs lib/lhm/invoker.rb in lhm-1.1.0

- old
+ new

@@ -1,32 +1,49 @@ # Copyright (c) 2011, SoundCloud Ltd., Rany Keddo, Tobias Bielohlawek, Tobias # Schmidt require 'lhm/chunker' require 'lhm/entangler' +require 'lhm/atomic_switcher' require 'lhm/locked_switcher' require 'lhm/migrator' module Lhm # Copies an origin table to an altered destination table. Live activity is # synchronized into the destination table using triggers. # # Once the origin and destination tables have converged, origin is archived # and replaced by destination. class Invoker - attr_reader :migrator + include SqlHelper + attr_reader :migrator, :connection + def initialize(origin, connection) @connection = connection @migrator = Migrator.new(origin, connection) end - def run(chunk_options = {}) + def run(options = {}) + if !options.include?(:atomic_switch) + if supports_atomic_switch? + options[:atomic_switch] = true + else + raise Error.new( + "Using mysql #{version_string}. You must explicitly set " + + "options[:atomic_switch] (re SqlHelper#supports_atomic_switch?)") + end + end + migration = @migrator.run Entangler.new(migration, @connection).run do - Chunker.new(migration, @connection, chunk_options).run - LockedSwitcher.new(migration, @connection).run + Chunker.new(migration, @connection, options).run + if options[:atomic_switch] + AtomicSwitcher.new(migration, @connection).run + else + LockedSwitcher.new(migration, @connection).run + end end end end end