ar-octopus 0.8.5 → 0.10.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.gitignore +1 -0
- data/.travis.yml +6 -9
- data/Appraisals +8 -8
- data/README.mkdn +47 -15
- data/Rakefile +1 -0
- data/ar-octopus.gemspec +9 -12
- data/gemfiles/rails42.gemfile +2 -2
- data/gemfiles/{rails32.gemfile → rails5.gemfile} +2 -2
- data/gemfiles/{rails4.gemfile → rails51.gemfile} +2 -2
- data/gemfiles/{rails41.gemfile → rails52.gemfile} +2 -2
- data/lib/octopus/abstract_adapter.rb +4 -10
- data/lib/octopus/association.rb +1 -0
- data/lib/octopus/association_shard_tracking.rb +41 -71
- data/lib/octopus/collection_association.rb +9 -3
- data/lib/octopus/exception.rb +4 -0
- data/lib/octopus/finder_methods.rb +8 -0
- data/lib/octopus/load_balancing/round_robin.rb +2 -1
- data/lib/octopus/log_subscriber.rb +6 -2
- data/lib/octopus/migration.rb +123 -55
- data/lib/octopus/model.rb +42 -27
- data/lib/octopus/persistence.rb +33 -27
- data/lib/octopus/proxy.rb +147 -272
- data/lib/octopus/proxy_config.rb +251 -0
- data/lib/octopus/query_cache_for_shards.rb +24 -0
- data/lib/octopus/railtie.rb +0 -2
- data/lib/octopus/relation_proxy.rb +36 -1
- data/lib/octopus/result_patch.rb +19 -0
- data/lib/octopus/scope_proxy.rb +12 -5
- data/lib/octopus/shard_tracking.rb +8 -3
- data/lib/octopus/slave_group.rb +3 -3
- data/lib/octopus/version.rb +1 -1
- data/lib/octopus.rb +71 -18
- data/spec/config/shards.yml +12 -0
- data/spec/migrations/10_create_users_using_replication.rb +1 -1
- data/spec/migrations/11_add_field_in_all_slaves.rb +1 -1
- data/spec/migrations/12_create_users_using_block.rb +1 -1
- data/spec/migrations/13_create_users_using_block_and_using.rb +1 -1
- data/spec/migrations/14_create_users_on_shards_of_a_group_with_versions.rb +1 -1
- data/spec/migrations/15_create_user_on_shards_of_default_group_with_versions.rb +1 -1
- data/spec/migrations/1_create_users_on_master.rb +1 -1
- data/spec/migrations/2_create_users_on_canada.rb +1 -1
- data/spec/migrations/3_create_users_on_both_shards.rb +1 -1
- data/spec/migrations/4_create_users_on_shards_of_a_group.rb +1 -1
- data/spec/migrations/5_create_users_on_multiples_groups.rb +1 -1
- data/spec/migrations/6_raise_exception_with_invalid_shard_name.rb +1 -1
- data/spec/migrations/7_raise_exception_with_invalid_multiple_shard_names.rb +1 -1
- data/spec/migrations/8_raise_exception_with_invalid_group_name.rb +1 -1
- data/spec/migrations/9_raise_exception_with_multiple_invalid_group_names.rb +1 -1
- data/spec/octopus/association_shard_tracking_spec.rb +344 -16
- data/spec/octopus/load_balancing/round_robin_spec.rb +15 -0
- data/spec/octopus/log_subscriber_spec.rb +1 -1
- data/spec/octopus/migration_spec.rb +45 -11
- data/spec/octopus/model_spec.rb +204 -16
- data/spec/octopus/octopus_spec.rb +2 -2
- data/spec/octopus/proxy_spec.rb +44 -40
- data/spec/octopus/query_cache_for_shards_spec.rb +40 -0
- data/spec/octopus/relation_proxy_spec.rb +71 -23
- data/spec/octopus/replicated_slave_grouped_spec.rb +27 -0
- data/spec/octopus/replication_spec.rb +72 -2
- data/spec/octopus/scope_proxy_spec.rb +41 -7
- data/spec/spec_helper.rb +2 -0
- data/spec/support/database_connection.rb +1 -1
- data/spec/support/database_models.rb +1 -1
- data/spec/support/octopus_helper.rb +14 -6
- data/spec/tasks/octopus.rake_spec.rb +1 -1
- metadata +40 -30
- data/.ruby-version +0 -1
- data/init.rb +0 -1
- data/lib/octopus/has_and_belongs_to_many_association.rb +0 -9
- data/rails/init.rb +0 -1
@@ -61,4 +61,31 @@ describe 'when the database is replicated and has slave groups' do
|
|
61
61
|
expect(Cat.count).to eq(2)
|
62
62
|
end
|
63
63
|
end
|
64
|
+
|
65
|
+
it 'should keep sending to slaves in a using block' do
|
66
|
+
OctopusHelper.using_environment :replicated_slave_grouped do
|
67
|
+
Cat.create!(:name => 'Thiago1')
|
68
|
+
Cat.create!(:name => 'Thiago2')
|
69
|
+
|
70
|
+
expect(Cat.count).to eq(2)
|
71
|
+
Octopus.using(:slave_group => :slaves1) do
|
72
|
+
expect(Cat.count).to eq(0)
|
73
|
+
expect(Cat.count).to eq(0)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
it 'should restore previous slave group after a using block' do
|
79
|
+
OctopusHelper.using_environment :replicated_slave_grouped do
|
80
|
+
Cat.create!(:name => 'Thiago1')
|
81
|
+
Cat.create!(:name => 'Thiago2')
|
82
|
+
|
83
|
+
Octopus.using(:slave_group => :slaves1) do
|
84
|
+
Octopus.using(:slave_group => :slaves2) do
|
85
|
+
expect(Cat.count).to eq(2)
|
86
|
+
end
|
87
|
+
expect(Cat.count).to eq(0)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
64
91
|
end
|
@@ -1,6 +1,22 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe 'when the database is replicated' do
|
4
|
+
let(:slave_pool) do
|
5
|
+
ActiveRecord::Base.connection_proxy.shards['slave1']
|
6
|
+
end
|
7
|
+
|
8
|
+
let(:slave_connection) do
|
9
|
+
slave_pool.connection
|
10
|
+
end
|
11
|
+
|
12
|
+
let(:master_pool) do
|
13
|
+
ActiveRecord::Base.connection_proxy.shards['master']
|
14
|
+
end
|
15
|
+
|
16
|
+
let(:master_connection) do
|
17
|
+
master_pool.connection
|
18
|
+
end
|
19
|
+
|
4
20
|
it 'should send all writes/reads queries to master when you have a non replicated model' do
|
5
21
|
OctopusHelper.using_environment :production_replicated do
|
6
22
|
u = User.create!(:name => 'Replicated')
|
@@ -26,10 +42,49 @@ describe 'when the database is replicated' do
|
|
26
42
|
end
|
27
43
|
end
|
28
44
|
|
45
|
+
context 'when updating model' do
|
46
|
+
it 'should send writes to master' do
|
47
|
+
OctopusHelper.using_environment :replicated_with_one_slave do
|
48
|
+
Cat.using(:slave1).create!(:name => 'Cat')
|
49
|
+
cat = Cat.find_by_name('Cat')
|
50
|
+
cat.name = 'New name'
|
51
|
+
|
52
|
+
expect(master_connection).to receive(:update).and_call_original
|
53
|
+
|
54
|
+
cat.save!
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
context 'when querying' do
|
60
|
+
it 'Reads from slave' do
|
61
|
+
OctopusHelper.using_environment :replicated_with_one_slave do
|
62
|
+
expect(master_connection).not_to receive(:select)
|
63
|
+
|
64
|
+
Cat.where(:name => 'Catman2').first
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
context 'When record is read from slave' do
|
70
|
+
it 'Should write associations to master' do
|
71
|
+
OctopusHelper.using_environment :replicated_with_one_slave do
|
72
|
+
client = Client.using(:slave1).create!(:name => 'Client')
|
73
|
+
|
74
|
+
client = Client.find(client.id)
|
75
|
+
|
76
|
+
expect(master_connection).to receive(:insert).and_call_original
|
77
|
+
|
78
|
+
client.items.create!(:name => 'Item')
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
|
29
84
|
describe 'When enabling the query cache' do
|
30
85
|
include_context 'with query cache enabled' do
|
31
86
|
it 'should do the queries with cache' do
|
32
|
-
OctopusHelper.using_environment :replicated_with_one_slave
|
87
|
+
OctopusHelper.using_environment :replicated_with_one_slave do
|
33
88
|
cat1 = Cat.using(:master).create!(:name => 'Master Cat 1')
|
34
89
|
_ct2 = Cat.using(:master).create!(:name => 'Master Cat 2')
|
35
90
|
expect(Cat.using(:master).find(cat1.id)).to eq(cat1)
|
@@ -42,7 +97,11 @@ describe 'when the database is replicated' do
|
|
42
97
|
expect(Cat.find(cat3.id).id).to eq(cat3.id)
|
43
98
|
expect(Cat.find(cat3.id).id).to eq(cat3.id)
|
44
99
|
|
45
|
-
|
100
|
+
# Rails 5.1 count the cached queries as regular queries.
|
101
|
+
# TODO: How we can verify if the queries are using cache on Rails 5.1? - @thiagopradi
|
102
|
+
expected_records = Octopus.rails51? || Octopus.rails52? ? 19 : 14
|
103
|
+
|
104
|
+
expect(counter.query_count).to eq(expected_records)
|
46
105
|
end
|
47
106
|
end
|
48
107
|
end
|
@@ -123,4 +182,15 @@ describe 'when the database is replicated and the entire application is replicat
|
|
123
182
|
expect(Cat.connection.current_shard).to eql(:master)
|
124
183
|
end
|
125
184
|
end
|
185
|
+
|
186
|
+
it 'should reset current shard if slave throws an exception with custom master' do
|
187
|
+
OctopusHelper.using_environment :production_fully_replicated do
|
188
|
+
Octopus.config[:master_shard] = :slave2
|
189
|
+
Cat.create!(:name => 'Slave Cat')
|
190
|
+
expect(Cat.connection.current_shard).to eql(:slave2)
|
191
|
+
Cat.where(:rubbish => true)
|
192
|
+
expect(Cat.connection.current_shard).to eql(:slave2)
|
193
|
+
Octopus.config[:master_shard] = nil
|
194
|
+
end
|
195
|
+
end
|
126
196
|
end
|
@@ -46,18 +46,52 @@ describe Octopus::ScopeProxy do
|
|
46
46
|
expect(@evan.select(%w(id name)).first.id).to be_a(Fixnum)
|
47
47
|
end
|
48
48
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
end
|
49
|
+
it 'allows multiple selection by symbol' do
|
50
|
+
expect(@evan.select(:id, :name).first.id).to be_a(Fixnum)
|
51
|
+
end
|
53
52
|
|
54
|
-
|
55
|
-
|
56
|
-
end
|
53
|
+
it 'allows multiple selection by string and symbol' do
|
54
|
+
expect(@evan.select(:id, 'name').first.id).to be_a(Fixnum)
|
57
55
|
end
|
58
56
|
end
|
59
57
|
|
60
58
|
it "should raise a exception when trying to send a query to a shard that don't exists" do
|
61
59
|
expect { User.using(:dont_exists).all }.to raise_exception('Nonexistent Shard Name: dont_exists')
|
62
60
|
end
|
61
|
+
|
62
|
+
context "dup / clone" do
|
63
|
+
before(:each) do
|
64
|
+
User.using(:brazil).create!(:name => 'Thiago', :number => 1)
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should change it's object id" do
|
68
|
+
user = User.using(:brazil).where(id: 1)
|
69
|
+
dupped_object = user.dup
|
70
|
+
cloned_object = user.clone
|
71
|
+
|
72
|
+
expect(dupped_object.object_id).not_to eq(user.object_id)
|
73
|
+
expect(cloned_object.object_id).not_to eq(user.object_id)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
context 'When iterated with Enumerable methods' do
|
78
|
+
before(:each) do
|
79
|
+
User.using(:brazil).create!(:name => 'Evan', :number => 1)
|
80
|
+
User.using(:brazil).create!(:name => 'Evan', :number => 2)
|
81
|
+
User.using(:brazil).create!(:name => 'Evan', :number => 3)
|
82
|
+
@evans = User.using(:brazil).where(:name => 'Evan')
|
83
|
+
end
|
84
|
+
|
85
|
+
it 'allows each method' do
|
86
|
+
expect(@evans.each.count).to eq(3)
|
87
|
+
end
|
88
|
+
|
89
|
+
it 'allows each_with_index method' do
|
90
|
+
expect(@evans.each_with_index.to_a.flatten.count).to eq(6)
|
91
|
+
end
|
92
|
+
|
93
|
+
it 'allows map method' do
|
94
|
+
expect(@evans.map(&:number)).to eq([1, 2, 3])
|
95
|
+
end
|
96
|
+
end
|
63
97
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -5,6 +5,8 @@ require 'octopus'
|
|
5
5
|
|
6
6
|
Octopus.instance_variable_set(:@directory, File.dirname(__FILE__))
|
7
7
|
|
8
|
+
BaseOctopusMigrationClass = (Octopus.rails4? ? ActiveRecord::Migration : ActiveRecord::Migration[ActiveRecord::VERSION::STRING[0..2]])
|
9
|
+
|
8
10
|
# Requires supporting files with custom matchers and macros, etc,
|
9
11
|
# in ./support/ and its subdirectories.
|
10
12
|
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
|
@@ -1,4 +1,4 @@
|
|
1
1
|
require 'logger'
|
2
2
|
|
3
|
-
ActiveRecord::Base.establish_connection(:adapter => 'mysql2', :database => 'octopus_shard_1', :username => 'root', :password => '')
|
3
|
+
ActiveRecord::Base.establish_connection(:adapter => 'mysql2', :database => 'octopus_shard_1', :username => "#{ENV['MYSQL_USER'] || 'root'}", :password => '')
|
4
4
|
ActiveRecord::Base.logger = Logger.new(File.open('database.log', 'a'))
|
@@ -28,7 +28,7 @@ end
|
|
28
28
|
# This class sets its own connection
|
29
29
|
class CustomConnection < ActiveRecord::Base
|
30
30
|
self.table_name = 'custom'
|
31
|
-
octopus_establish_connection(:adapter => 'mysql2', :database => 'octopus_shard_2', :username => 'root', :password => '')
|
31
|
+
octopus_establish_connection(:adapter => 'mysql2', :database => 'octopus_shard_2', :username => "#{ENV['MYSQL_USER'] || 'root'}", :password => '')
|
32
32
|
end
|
33
33
|
|
34
34
|
# This items belongs to a client
|
@@ -1,19 +1,19 @@
|
|
1
1
|
module OctopusHelper
|
2
2
|
def self.clean_all_shards(shards)
|
3
3
|
if shards.nil?
|
4
|
-
shards = BlankModel.using(:master).connection.
|
4
|
+
shards = BlankModel.using(:master).connection.shards.keys
|
5
5
|
end
|
6
6
|
|
7
7
|
shards.each do |shard_symbol|
|
8
8
|
%w(schema_migrations users clients cats items keyboards computers permissions_roles roles permissions assignments projects programmers yummy adverts).each do |tables|
|
9
9
|
BlankModel.using(shard_symbol).connection.execute("DELETE FROM #{tables}")
|
10
10
|
end
|
11
|
-
|
12
11
|
if shard_symbol == 'alone_shard'
|
13
12
|
%w(mmorpg_players weapons skills).each do |table|
|
14
13
|
BlankModel.using(shard_symbol).connection.execute("DELETE FROM #{table}")
|
15
14
|
end
|
16
15
|
end
|
16
|
+
BlankModel.using(:master).connection.shards[shard_symbol].disconnect if Octopus.atleast_rails50?
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
@@ -23,19 +23,27 @@ module OctopusHelper
|
|
23
23
|
Thread.current['octopus.current_group'] = nil
|
24
24
|
Thread.current['octopus.current_slave_group'] = nil
|
25
25
|
Thread.current['octopus.block'] = nil
|
26
|
-
Thread.current['octopus.last_current_shard'] = nil
|
27
26
|
|
28
27
|
ActiveRecord::Base.class_variable_set(:@@connection_proxy, nil)
|
29
28
|
end
|
30
29
|
|
31
30
|
def self.migrating_to_version(version, &_block)
|
32
31
|
migrations_root = File.expand_path(File.join(File.dirname(__FILE__), '..', 'migrations'))
|
33
|
-
|
32
|
+
|
34
33
|
begin
|
35
|
-
|
34
|
+
migrate_to_version(:up, migrations_root, version)
|
36
35
|
yield
|
37
36
|
ensure
|
38
|
-
|
37
|
+
migrate_to_version(:down, migrations_root, version)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.migrate_to_version(direction, root, version)
|
42
|
+
if Octopus.atleast_rails52?
|
43
|
+
migrations = ActiveRecord::MigrationContext.new(root).migrations.select {|mig| version == mig.version }
|
44
|
+
ActiveRecord::Migrator.new(direction, migrations, version).run
|
45
|
+
else
|
46
|
+
ActiveRecord::Migrator.run(direction, root, version)
|
39
47
|
end
|
40
48
|
end
|
41
49
|
|
@@ -25,7 +25,7 @@ describe 'octopus.rake' do
|
|
25
25
|
Rake::Task['octopus:copy_schema_versions'].invoke
|
26
26
|
|
27
27
|
ActiveRecord::Base.connection.shard_names.each do |shard_name|
|
28
|
-
expect(Octopus.using(shard_name) { ActiveRecord::
|
28
|
+
expect(Octopus.using(shard_name) { ActiveRecord::SchemaMigration.all.pluck(:version).map(&:to_i).sort }).to eq([1, 2, 3])
|
29
29
|
end
|
30
30
|
end
|
31
31
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ar-octopus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.10.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thiago Pradi
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2019-03-11 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activerecord
|
@@ -18,28 +18,28 @@ dependencies:
|
|
18
18
|
requirements:
|
19
19
|
- - ">="
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
21
|
+
version: 4.2.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
requirements:
|
26
26
|
- - ">="
|
27
27
|
- !ruby/object:Gem::Version
|
28
|
-
version:
|
28
|
+
version: 4.2.0
|
29
29
|
- !ruby/object:Gem::Dependency
|
30
30
|
name: activesupport
|
31
31
|
requirement: !ruby/object:Gem::Requirement
|
32
32
|
requirements:
|
33
33
|
- - ">="
|
34
34
|
- !ruby/object:Gem::Version
|
35
|
-
version:
|
35
|
+
version: 4.2.0
|
36
36
|
type: :runtime
|
37
37
|
prerelease: false
|
38
38
|
version_requirements: !ruby/object:Gem::Requirement
|
39
39
|
requirements:
|
40
40
|
- - ">="
|
41
41
|
- !ruby/object:Gem::Version
|
42
|
-
version:
|
42
|
+
version: 4.2.0
|
43
43
|
- !ruby/object:Gem::Dependency
|
44
44
|
name: appraisal
|
45
45
|
requirement: !ruby/object:Gem::Requirement
|
@@ -58,44 +58,50 @@ dependencies:
|
|
58
58
|
name: mysql2
|
59
59
|
requirement: !ruby/object:Gem::Requirement
|
60
60
|
requirements:
|
61
|
-
- - "
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: 0.3.18
|
64
|
+
- - "<"
|
62
65
|
- !ruby/object:Gem::Version
|
63
|
-
version: '0.
|
66
|
+
version: '0.5'
|
64
67
|
type: :development
|
65
68
|
prerelease: false
|
66
69
|
version_requirements: !ruby/object:Gem::Requirement
|
67
70
|
requirements:
|
68
|
-
- - "
|
71
|
+
- - ">="
|
69
72
|
- !ruby/object:Gem::Version
|
70
|
-
version:
|
73
|
+
version: 0.3.18
|
74
|
+
- - "<"
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0.5'
|
71
77
|
- !ruby/object:Gem::Dependency
|
72
78
|
name: pg
|
73
79
|
requirement: !ruby/object:Gem::Requirement
|
74
80
|
requirements:
|
75
|
-
- - "
|
81
|
+
- - "~>"
|
76
82
|
- !ruby/object:Gem::Version
|
77
|
-
version: 0.
|
83
|
+
version: '0.18'
|
78
84
|
type: :development
|
79
85
|
prerelease: false
|
80
86
|
version_requirements: !ruby/object:Gem::Requirement
|
81
87
|
requirements:
|
82
|
-
- - "
|
88
|
+
- - "~>"
|
83
89
|
- !ruby/object:Gem::Version
|
84
|
-
version: 0.
|
90
|
+
version: '0.18'
|
85
91
|
- !ruby/object:Gem::Dependency
|
86
92
|
name: rake
|
87
93
|
requirement: !ruby/object:Gem::Requirement
|
88
94
|
requirements:
|
89
95
|
- - ">="
|
90
96
|
- !ruby/object:Gem::Version
|
91
|
-
version: 0
|
97
|
+
version: '0'
|
92
98
|
type: :development
|
93
99
|
prerelease: false
|
94
100
|
version_requirements: !ruby/object:Gem::Requirement
|
95
101
|
requirements:
|
96
102
|
- - ">="
|
97
103
|
- !ruby/object:Gem::Version
|
98
|
-
version: 0
|
104
|
+
version: '0'
|
99
105
|
- !ruby/object:Gem::Dependency
|
100
106
|
name: rspec
|
101
107
|
requirement: !ruby/object:Gem::Requirement
|
@@ -128,16 +134,16 @@ dependencies:
|
|
128
134
|
name: sqlite3
|
129
135
|
requirement: !ruby/object:Gem::Requirement
|
130
136
|
requirements:
|
131
|
-
- - "
|
137
|
+
- - "~>"
|
132
138
|
- !ruby/object:Gem::Version
|
133
|
-
version: 1.3.
|
139
|
+
version: 1.3.6
|
134
140
|
type: :development
|
135
141
|
prerelease: false
|
136
142
|
version_requirements: !ruby/object:Gem::Requirement
|
137
143
|
requirements:
|
138
|
-
- - "
|
144
|
+
- - "~>"
|
139
145
|
- !ruby/object:Gem::Version
|
140
|
-
version: 1.3.
|
146
|
+
version: 1.3.6
|
141
147
|
- !ruby/object:Gem::Dependency
|
142
148
|
name: pry-byebug
|
143
149
|
requirement: !ruby/object:Gem::Requirement
|
@@ -167,7 +173,6 @@ files:
|
|
167
173
|
- ".rspec"
|
168
174
|
- ".rubocop.yml"
|
169
175
|
- ".rubocop_todo.yml"
|
170
|
-
- ".ruby-version"
|
171
176
|
- ".travis.yml"
|
172
177
|
- Appraisals
|
173
178
|
- Gemfile
|
@@ -175,11 +180,10 @@ files:
|
|
175
180
|
- Rakefile
|
176
181
|
- TODO.txt
|
177
182
|
- ar-octopus.gemspec
|
178
|
-
- gemfiles/rails32.gemfile
|
179
|
-
- gemfiles/rails4.gemfile
|
180
|
-
- gemfiles/rails41.gemfile
|
181
183
|
- gemfiles/rails42.gemfile
|
182
|
-
-
|
184
|
+
- gemfiles/rails5.gemfile
|
185
|
+
- gemfiles/rails51.gemfile
|
186
|
+
- gemfiles/rails52.gemfile
|
183
187
|
- lib/ar-octopus.rb
|
184
188
|
- lib/octopus.rb
|
185
189
|
- lib/octopus/abstract_adapter.rb
|
@@ -187,7 +191,8 @@ files:
|
|
187
191
|
- lib/octopus/association_shard_tracking.rb
|
188
192
|
- lib/octopus/collection_association.rb
|
189
193
|
- lib/octopus/collection_proxy.rb
|
190
|
-
- lib/octopus/
|
194
|
+
- lib/octopus/exception.rb
|
195
|
+
- lib/octopus/finder_methods.rb
|
191
196
|
- lib/octopus/load_balancing.rb
|
192
197
|
- lib/octopus/load_balancing/round_robin.rb
|
193
198
|
- lib/octopus/log_subscriber.rb
|
@@ -195,8 +200,11 @@ files:
|
|
195
200
|
- lib/octopus/model.rb
|
196
201
|
- lib/octopus/persistence.rb
|
197
202
|
- lib/octopus/proxy.rb
|
203
|
+
- lib/octopus/proxy_config.rb
|
204
|
+
- lib/octopus/query_cache_for_shards.rb
|
198
205
|
- lib/octopus/railtie.rb
|
199
206
|
- lib/octopus/relation_proxy.rb
|
207
|
+
- lib/octopus/result_patch.rb
|
200
208
|
- lib/octopus/scope_proxy.rb
|
201
209
|
- lib/octopus/shard_tracking.rb
|
202
210
|
- lib/octopus/shard_tracking/attribute.rb
|
@@ -205,7 +213,6 @@ files:
|
|
205
213
|
- lib/octopus/slave_group.rb
|
206
214
|
- lib/octopus/version.rb
|
207
215
|
- lib/tasks/octopus.rake
|
208
|
-
- rails/init.rb
|
209
216
|
- sample_app/.gitignore
|
210
217
|
- sample_app/.rspec
|
211
218
|
- sample_app/Gemfile
|
@@ -299,11 +306,13 @@ files:
|
|
299
306
|
- spec/migrations/9_raise_exception_with_multiple_invalid_group_names.rb
|
300
307
|
- spec/octopus/association_shard_tracking_spec.rb
|
301
308
|
- spec/octopus/collection_proxy_spec.rb
|
309
|
+
- spec/octopus/load_balancing/round_robin_spec.rb
|
302
310
|
- spec/octopus/log_subscriber_spec.rb
|
303
311
|
- spec/octopus/migration_spec.rb
|
304
312
|
- spec/octopus/model_spec.rb
|
305
313
|
- spec/octopus/octopus_spec.rb
|
306
314
|
- spec/octopus/proxy_spec.rb
|
315
|
+
- spec/octopus/query_cache_for_shards_spec.rb
|
307
316
|
- spec/octopus/relation_proxy_spec.rb
|
308
317
|
- spec/octopus/replicated_slave_grouped_spec.rb
|
309
318
|
- spec/octopus/replication_spec.rb
|
@@ -334,15 +343,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
334
343
|
requirements:
|
335
344
|
- - ">="
|
336
345
|
- !ruby/object:Gem::Version
|
337
|
-
version:
|
346
|
+
version: 2.2.0
|
338
347
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
339
348
|
requirements:
|
340
349
|
- - ">="
|
341
350
|
- !ruby/object:Gem::Version
|
342
351
|
version: '0'
|
343
352
|
requirements: []
|
344
|
-
|
345
|
-
rubygems_version: 2.4.4
|
353
|
+
rubygems_version: 3.0.1
|
346
354
|
signing_key:
|
347
355
|
specification_version: 4
|
348
356
|
summary: Easy Database Sharding for ActiveRecord
|
@@ -365,11 +373,13 @@ test_files:
|
|
365
373
|
- spec/migrations/9_raise_exception_with_multiple_invalid_group_names.rb
|
366
374
|
- spec/octopus/association_shard_tracking_spec.rb
|
367
375
|
- spec/octopus/collection_proxy_spec.rb
|
376
|
+
- spec/octopus/load_balancing/round_robin_spec.rb
|
368
377
|
- spec/octopus/log_subscriber_spec.rb
|
369
378
|
- spec/octopus/migration_spec.rb
|
370
379
|
- spec/octopus/model_spec.rb
|
371
380
|
- spec/octopus/octopus_spec.rb
|
372
381
|
- spec/octopus/proxy_spec.rb
|
382
|
+
- spec/octopus/query_cache_for_shards_spec.rb
|
373
383
|
- spec/octopus/relation_proxy_spec.rb
|
374
384
|
- spec/octopus/replicated_slave_grouped_spec.rb
|
375
385
|
- spec/octopus/replication_spec.rb
|
data/.ruby-version
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
2.1.5
|
data/init.rb
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), 'rails', 'init')
|
data/rails/init.rb
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
require 'octopus'
|