ar-octopus 0.8.5 → 0.10.2
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.
- 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'
|