active_record_shards 3.0.0.beta1 → 3.0.0.beta2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,8 +0,0 @@
1
- class CowardlyMigration < ActiveRecord::Migration
2
- def self.up
3
- # shouldn't get here. must fail.
4
- end
5
-
6
- def self.down
7
- end
8
- end
data/test/database.yml DELETED
@@ -1,73 +0,0 @@
1
- test:
2
- adapter: mysql2
3
- encoding: utf8
4
- database: ars_test
5
- username: root
6
- password:
7
- host: 127.0.0.1
8
- shard_names: ['0', '1']
9
-
10
- test_slave:
11
- adapter: mysql2
12
- encoding: utf8
13
- database: ars_test_slave
14
- username: root
15
- password:
16
- host: 127.0.0.1
17
-
18
- test_shard_0:
19
- adapter: mysql2
20
- encoding: utf8
21
- database: ars_test_shard0
22
- username: root
23
- password:
24
- host: 127.0.0.1
25
-
26
- test_shard_0_slave:
27
- adapter: mysql2
28
- encoding: utf8
29
- database: ars_test_shard0_slave
30
- username: root
31
- password:
32
- host: 127.0.0.1
33
-
34
- test_shard_1:
35
- adapter: mysql2
36
- encoding: utf8
37
- database: ars_test_shard1
38
- username: root
39
- password:
40
- host: 127.0.0.1
41
-
42
- test_shard_1_slave:
43
- adapter: mysql2
44
- encoding: utf8
45
- database: ars_test_shard1_slave
46
- username: root
47
- password:
48
- host: 127.0.0.1
49
-
50
- test2:
51
- adapter: mysql2
52
- encoding: utf8
53
- database: ars_test2
54
- username: root
55
- password:
56
- host: 127.0.0.1
57
-
58
- test2_slave:
59
- adapter: mysql2
60
- encoding: utf8
61
- database: ars_test2_slave
62
- username: root
63
- password:
64
- host: 127.0.0.1
65
-
66
- alternative:
67
- adapter: mysql2
68
- encoding: utf8
69
- database: ars_test_alternative
70
- username: root
71
- password:
72
- host: 127.0.0.1
73
- shard_names: ['0', '1']
@@ -1,21 +0,0 @@
1
- test:
2
- adapter: mysql
3
- encoding: utf8
4
- database: ars_test
5
- port: 123
6
- username: root
7
- password:
8
- host: main_host
9
- slave:
10
- host: main_slave_host
11
- shards:
12
- a:
13
- database: ars_test_shard_a
14
- host: shard_a_host
15
- slave:
16
- host: shard_a_slave_host
17
- b:
18
- database: ars_test_shard_b
19
- host: shard_b_host
20
- slave:
21
- database: ars_test_shard_b_slave
@@ -1,14 +0,0 @@
1
- class FailureMigration < ActiveRecord::Migration
2
- shard :all
3
-
4
- def self.up
5
- $fail_at_two ||= 0
6
- $fail_at_two += 1
7
- raise "FAIL FAIL FAIL" if $fail_at_two == 2
8
- add_column :tickets, :sharded_column, :integer
9
- end
10
-
11
- def self.down
12
- remove_column :tickets, :sharded_column
13
- end
14
- end
data/test/helper.rb DELETED
@@ -1,57 +0,0 @@
1
- require 'bundler/setup'
2
- Bundler.require
3
-
4
- require 'minitest/autorun'
5
- MiniTest::Reporters.use! MiniTest::Reporters::DefaultReporter.new
6
-
7
- if defined?(Debugger)
8
- ::Debugger.start
9
- ::Debugger.settings[:autoeval] = true if ::Debugger.respond_to?(:settings)
10
- end
11
-
12
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
13
- $LOAD_PATH.unshift(File.dirname(__FILE__))
14
- require 'active_record_shards'
15
- require 'logger'
16
-
17
- RAILS_ENV = "test"
18
-
19
- ActiveRecord::Base.logger = Logger.new(File.dirname(__FILE__) + "/test.log")
20
- ActiveRecord::Base.configurations = YAML::load(IO.read(File.dirname(__FILE__) + '/database.yml'))
21
-
22
- def init_schema
23
- ActiveRecord::Base.configurations.each do |name, conf|
24
- `echo "drop DATABASE if exists #{conf['database']}" | mysql --user=#{conf['username']}`
25
- `echo "create DATABASE #{conf['database']}" | mysql --user=#{conf['username']}`
26
- ActiveRecord::Base.establish_connection(name)
27
- load(File.dirname(__FILE__) + "/schema.rb")
28
- end
29
- end
30
- init_schema
31
-
32
- require 'models'
33
-
34
- require 'active_support/test_case'
35
- class Minitest::Spec
36
- def clear_databases
37
- ActiveRecord::Base.configurations.each do |name, conf|
38
- ActiveRecord::Base.establish_connection(name)
39
- ActiveRecord::Base.connection.execute("DELETE FROM accounts")
40
- ActiveRecord::Base.connection.execute("DELETE FROM tickets")
41
- end
42
- ActiveRecord::Base.establish_connection(RAILS_ENV)
43
- end
44
- before { clear_databases }
45
-
46
- def assert_using_master_db
47
- assert_using_database('ars_test')
48
- end
49
-
50
- def assert_using_slave_db
51
- assert_using_database('ars_test_slave')
52
- end
53
-
54
- def assert_using_database(db_name, model = ActiveRecord::Base)
55
- assert_equal(db_name, model.connection.current_database)
56
- end
57
- end
@@ -1,12 +0,0 @@
1
- #This is to recreate the deleted onetime payment for DealFish
2
- class ShardMigration < ActiveRecord::Migration
3
- shard :all
4
-
5
- def self.up
6
- add_column :emails, :sharded_column, :integer
7
- end
8
-
9
- def self.down
10
- remove_column :emails, :sharded_column
11
- end
12
- end
@@ -1,13 +0,0 @@
1
- # See ticket 130214
2
- # Setting up an odd initial three year term for box.net to be paid by credit card by the normal means
3
- class AccountMigration < ActiveRecord::Migration
4
- shard :none
5
-
6
- def self.up
7
- add_column :accounts, :non_sharded_column, :integer
8
- end
9
-
10
- def self.down
11
- remove_column :accounts, :non_sharded_column
12
- end
13
- end
@@ -1,113 +0,0 @@
1
- require_relative 'helper'
2
-
3
- class CowardlyMigration < ActiveRecord::Migration
4
- def self.up
5
- "not gonna happen"
6
- end
7
-
8
- def self.down
9
- "uh uh"
10
- end
11
- end
12
-
13
- describe ActiveRecord::Migrator do
14
- before do
15
- init_schema
16
- end
17
-
18
- it "migrates" do
19
- migration_path = File.join(File.dirname(__FILE__), "/migrations")
20
- ActiveRecord::Migrator.migrate(migration_path)
21
- ActiveRecord::Base.on_all_shards do
22
- assert ActiveRecord::Base.connection.table_exists?(:schema_migrations), "Schema Migrations doesn't exist"
23
- assert ActiveRecord::Base.connection.table_exists?(:accounts)
24
- assert ActiveRecord::Base.connection.select_value("select version from schema_migrations where version = '20110824010216'")
25
- assert ActiveRecord::Base.connection.select_value("select version from schema_migrations where version = '20110829215912'")
26
- end
27
-
28
- ActiveRecord::Base.on_all_shards do
29
- assert table_has_column?("emails", "sharded_column")
30
- assert !table_has_column?("accounts", "non_sharded_column")
31
- end
32
-
33
- ActiveRecord::Base.on_shard(nil) do
34
- assert !table_has_column?("emails", "sharded_column")
35
- assert table_has_column?("accounts", "non_sharded_column")
36
- end
37
-
38
- # now test down/ up
39
- ActiveRecord::Migrator.run(:down, migration_path, 20110824010216)
40
- ActiveRecord::Base.on_all_shards do
41
- assert !table_has_column?("emails", "sharded_column")
42
- end
43
-
44
- ActiveRecord::Migrator.run(:down, migration_path, 20110829215912)
45
- ActiveRecord::Base.on_shard(nil) do
46
- assert !table_has_column?("accounts", "non_sharded_column")
47
- end
48
-
49
- ActiveRecord::Migrator.run(:up, migration_path, 20110824010216)
50
- ActiveRecord::Base.on_all_shards do
51
- assert table_has_column?("emails", "sharded_column")
52
- end
53
-
54
- ActiveRecord::Migrator.run(:up, migration_path, 20110829215912)
55
- ActiveRecord::Base.on_shard(nil) do
56
- assert table_has_column?("accounts", "non_sharded_column")
57
- end
58
- end
59
-
60
- it "does not migrate bad migrations" do
61
- migration_path = File.join(File.dirname(__FILE__), "/cowardly_migration")
62
- exception = nil
63
- begin
64
- ActiveRecord::Migrator.migrate(migration_path)
65
- rescue Exception => e
66
- exception = e
67
- end
68
- assert e
69
- end
70
-
71
- it "fails with failing migrations" do
72
- # like, if you have to break a migration in the middle somewhere.
73
- migration_path = File.join(File.dirname(__FILE__), "/failure_migration")
74
-
75
- assert failure_migration_pending?(migration_path)
76
- begin
77
- ActiveRecord::Migrator.migrate(migration_path)
78
- rescue
79
- # after first fail, should still be pending
80
- assert failure_migration_pending?(migration_path)
81
- retry
82
- end
83
-
84
- assert !failure_migration_pending?(migration_path)
85
- ActiveRecord::Base.on_all_shards do
86
- assert table_has_column?("tickets", "sharded_column")
87
- end
88
- end
89
-
90
- describe "#shard_status" do
91
- it "shows nothing if everything is ok" do
92
- ActiveRecord::Migrator.shard_status([1]).must_equal([{}, {}])
93
- end
94
-
95
- it "shows missing migrations" do
96
- ActiveRecord::Migrator.shard_status([]).must_equal([{}, {nil => [1], "0" => [1], "1" => [1]}])
97
- end
98
-
99
- it "shows pending migrations" do
100
- ActiveRecord::Migrator.shard_status([1, 2]).must_equal([{nil => [2], "0" => [2], "1" => [2]}, {}])
101
- end
102
- end
103
-
104
- private
105
-
106
- def failure_migration_pending?(migration_path)
107
- ActiveRecord::Migrator.new(:up, migration_path).pending_migrations.detect { |f| f.name == "FailureMigration" }
108
- end
109
-
110
- def table_has_column?(table, column)
111
- !ActiveRecord::Base.connection.select_values("desc #{table}").grep(column).empty?
112
- end
113
- end
data/test/models.rb DELETED
@@ -1,38 +0,0 @@
1
- class Account < ActiveRecord::Base
2
- # attributes: id, name, updated_at, created_at
3
- not_sharded
4
-
5
- has_many :tickets
6
- has_many :account_things
7
- end
8
-
9
- class AccountThing < ActiveRecord::Base
10
- not_sharded
11
-
12
- if respond_to?(:where)
13
- scope :enabled, where(:enabled => true)
14
- else
15
- named_scope :enabled, :conditions => {:enabled => true}
16
- end
17
- end
18
-
19
- class Email < ActiveRecord::Base
20
- not_sharded
21
- establish_connection_override :alternative
22
- end
23
-
24
- class AccountInherited < Account
25
- end
26
-
27
- class Ticket < ActiveRecord::Base
28
- # attributes: id, title, account_id, updated_at, created_at
29
- belongs_to :account
30
- end
31
-
32
- class Person < ActiveRecord::Base
33
- not_sharded
34
- end
35
-
36
- class User < Person
37
- end
38
-
data/test/schema.rb DELETED
@@ -1,36 +0,0 @@
1
- ActiveRecord::Migration.verbose = false
2
-
3
- ActiveRecord::Schema.define(:version => 1) do
4
- create_table "accounts", :force => true do |t|
5
- t.string "name"
6
- t.datetime "created_at"
7
- t.datetime "updated_at"
8
- end
9
-
10
- create_table "account_things", :force => true do |t|
11
- t.integer "account_id"
12
- t.boolean "enabled", :default => true
13
- end
14
-
15
- create_table "emails", :force => true do |t|
16
- t.string "from"
17
- t.string "to"
18
- t.text "mail"
19
- t.datetime "created_at"
20
- t.datetime "updated_at"
21
- end
22
-
23
- create_table "tickets", :force => true do |t|
24
- t.string "title"
25
- t.integer "account_id"
26
- t.datetime "created_at"
27
- t.datetime "updated_at"
28
- end
29
-
30
- create_table "people", :force => true do |t|
31
- t.string "name"
32
- t.string "type"
33
- t.datetime "created_at"
34
- t.datetime "updated_at"
35
- end
36
- end