Module: Octopus::Migration

Defined in:
lib/octopus/migration.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.extended(base) ⇒ Object



2
3
4
5
6
7
8
9
10
11
12
# File 'lib/octopus/migration.rb', line 2

def self.extended(base)
  class << base
    def announce_with_octopus(message)
      announce_without_octopus("#{message} - #{get_current_shard}")
    end
    
    alias_method_chain :migrate, :octopus
    alias_method_chain :announce, :octopus
    attr_accessor :current_shard
  end
end

Instance Method Details

#get_current_shardObject



45
46
47
# File 'lib/octopus/migration.rb', line 45

def get_current_shard
  "Shard: #{ActiveRecord::Base.connection.current_shard()}" if ActiveRecord::Base.connection.respond_to?(:current_shard)
end

#migrate_with_octopus(direction) ⇒ Object



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/octopus/migration.rb', line 50

def migrate_with_octopus(direction)
  conn = ActiveRecord::Base.connection
  return migrate_without_octopus(direction) unless conn.is_a?(Octopus::Proxy)
  self.connection().current_shard = self.current_shard if self.current_shard != nil
  
  groups = conn.instance_variable_get(:@groups)
  
  begin
    if conn.current_group.is_a?(Array)
      conn.current_group.each { |group| conn.send_queries_to_multiple_shards(groups[group]) { migrate_without_octopus(direction) } } 
    elsif conn.current_group.is_a?(Symbol)       
      conn.send_queries_to_multiple_shards(groups[conn.current_group]) { migrate_without_octopus(direction) }     
    elsif conn.current_shard.is_a?(Array)
      conn.send_queries_to_multiple_shards(conn.current_shard) { migrate_without_octopus(direction) }     
    else
      migrate_without_octopus(direction)
    end
  ensure
    conn.clean_proxy()
  end
end

#using(*args) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/octopus/migration.rb', line 14

def using(*args)
  if self.connection().is_a?(Octopus::Proxy)
    args.each do |shard|
      self.connection().check_schema_migrations(shard)
    end

    self.connection().block = true
    self.current_shard = args
    self.connection().current_shard = args        
  end

  return self
end

#using_group(*args) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/octopus/migration.rb', line 28

def using_group(*args)
  if self.connection().is_a?(Octopus::Proxy)
    args.each do |group_shard|
      shards = self.connection().instance_variable_get(:@groups)[group_shard] || []

      shards.each do |shard|
        self.connection().check_schema_migrations(shard)
      end
    end

    self.connection().block = true
    self.connection().current_group = args
  end
  
  return self
end