active_record_shards 2.4.2 → 2.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/active_record_shards/migration.rb +24 -0
- data/test/migrator_test.rb +10 -1
- data/test/test.log +8369 -3875
- metadata +22 -24
@@ -31,6 +31,30 @@ module ActiveRecord
|
|
31
31
|
end
|
32
32
|
end
|
33
33
|
end
|
34
|
+
|
35
|
+
# don't allow Migrator class to cache versions
|
36
|
+
def migrated
|
37
|
+
self.class.get_all_versions
|
38
|
+
end
|
39
|
+
|
40
|
+
# list of pending migrations is any migrations that haven't run on all shards.
|
41
|
+
def pending_migrations
|
42
|
+
migration_counts = Hash.new(0)
|
43
|
+
ActiveRecord::Base.on_shard(nil) do
|
44
|
+
migrated.each { |v| migration_counts[v] += 1 }
|
45
|
+
end
|
46
|
+
|
47
|
+
shard_count = 1
|
48
|
+
ActiveRecord::Base.on_all_shards do
|
49
|
+
migrated.each { |v| migration_counts[v] += 1 }
|
50
|
+
shard_count += 1
|
51
|
+
end
|
52
|
+
|
53
|
+
migrations.select do |m|
|
54
|
+
count = migration_counts[m.version]
|
55
|
+
count.nil? || count < shard_count
|
56
|
+
end
|
57
|
+
end
|
34
58
|
end
|
35
59
|
end
|
36
60
|
|
data/test/migrator_test.rb
CHANGED
@@ -75,19 +75,28 @@ class MigratorTest < ActiveSupport::TestCase
|
|
75
75
|
|
76
76
|
def test_failing_migration
|
77
77
|
# like, if you have to break a migration in the middle somewhere.
|
78
|
+
migration_path = File.join(File.dirname(__FILE__), "/failure_migration")
|
79
|
+
|
80
|
+
assert failure_migration_pending?(migration_path)
|
78
81
|
begin
|
79
|
-
migration_path = File.join(File.dirname(__FILE__), "/failure_migration")
|
80
82
|
ActiveRecord::Migrator.migrate(migration_path)
|
81
83
|
rescue
|
84
|
+
# after first fail, should still be pending
|
85
|
+
assert failure_migration_pending?(migration_path)
|
82
86
|
retry
|
83
87
|
end
|
84
88
|
|
89
|
+
assert !failure_migration_pending?(migration_path)
|
85
90
|
ActiveRecord::Base.on_all_shards do
|
86
91
|
assert table_has_column?("tickets", "sharded_column")
|
87
92
|
end
|
88
93
|
end
|
89
94
|
|
90
95
|
private
|
96
|
+
def failure_migration_pending?(migration_path)
|
97
|
+
ActiveRecord::Migrator.new(:up, migration_path).pending_migrations.detect { |f| f.name == "FailureMigration" }
|
98
|
+
end
|
99
|
+
|
91
100
|
def table_has_column?(table, column)
|
92
101
|
ActiveRecord::Base.connection.select_value("show create table #{table}") =~ /#{column}/
|
93
102
|
end
|