activerecord-sharding 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +11 -0
  3. data/.hound.yml +2 -0
  4. data/.rspec +3 -0
  5. data/.rubocop.yml +50 -0
  6. data/.ruby-version +1 -0
  7. data/.travis.yml +10 -0
  8. data/Gemfile +4 -0
  9. data/README.md +184 -0
  10. data/Rakefile +6 -0
  11. data/activerecord-sharding.gemspec +35 -0
  12. data/bin/benchmark_sequencer.rb +71 -0
  13. data/bin/console +10 -0
  14. data/bin/setup +7 -0
  15. data/lib/active_record/sharding.rb +0 -0
  16. data/lib/active_record/sharding/abstract_repository.rb +29 -0
  17. data/lib/active_record/sharding/cluster_config.rb +32 -0
  18. data/lib/active_record/sharding/config.rb +34 -0
  19. data/lib/active_record/sharding/database_tasks.rb +234 -0
  20. data/lib/active_record/sharding/errors.rb +9 -0
  21. data/lib/active_record/sharding/model.rb +59 -0
  22. data/lib/active_record/sharding/modulo_router.rb +14 -0
  23. data/lib/active_record/sharding/railtie.rb +9 -0
  24. data/lib/active_record/sharding/sequencer.rb +40 -0
  25. data/lib/active_record/sharding/sequencer_config.rb +26 -0
  26. data/lib/active_record/sharding/sequencer_repository.rb +22 -0
  27. data/lib/active_record/sharding/shard_repository.rb +31 -0
  28. data/lib/active_record/sharding/version.rb +5 -0
  29. data/lib/activerecord-sharding.rb +30 -0
  30. data/lib/tasks/activerecord-sharding.rake +88 -0
  31. data/spec/active_record/sharding/abstract_repository_spec.rb +15 -0
  32. data/spec/active_record/sharding/cluster_config_spec.rb +41 -0
  33. data/spec/active_record/sharding/errors_spec.rb +9 -0
  34. data/spec/active_record/sharding/model_spec.rb +90 -0
  35. data/spec/active_record/sharding/modulo_router_spec.rb +22 -0
  36. data/spec/active_record/sharding/sequencer_spec.rb +31 -0
  37. data/spec/active_record/sharding/shard_repository_spec.rb +21 -0
  38. data/spec/active_record_sharding_spec.rb +15 -0
  39. data/spec/models.rb +51 -0
  40. data/spec/schema.rb +17 -0
  41. data/spec/spec_helper.rb +63 -0
  42. data/spec/tasks/activerecord-sharding_spec.rb +74 -0
  43. metadata +254 -0
@@ -0,0 +1,17 @@
1
+ ActiveRecord::Schema.define(version: 0) do
2
+ create_table "users", force: :cascade do |t|
3
+ t.string "name", null: false
4
+ t.datetime "created_at", null: false
5
+ t.datetime "updated_at", null: false
6
+ end
7
+ end
8
+
9
+ ActiveRecord::Schema.define(version: 1) do
10
+ create_table "items", force: :cascade do |t|
11
+ t.integer "user_id", null: false
12
+ t.string "name", null: false
13
+ t.integer "count", null: false
14
+ t.datetime "created_at", null: false
15
+ t.datetime "updated_at", null: false
16
+ end
17
+ end
@@ -0,0 +1,63 @@
1
+ require "simplecov"
2
+ require "coveralls"
3
+ require "codeclimate-test-reporter"
4
+ Coveralls.wear!
5
+ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
6
+ SimpleCov::Formatter::HTMLFormatter,
7
+ Coveralls::SimpleCov::Formatter,
8
+ CodeClimate::TestReporter::Formatter
9
+ ]
10
+ SimpleCov.start do
11
+ add_filter "/spec"
12
+ add_filter "/vendor"
13
+ end
14
+
15
+ $LOAD_PATH.unshift File.expand_path("../../lib", __FILE__)
16
+ require "activerecord-sharding"
17
+ require "pry"
18
+ require "pry-byebug"
19
+ require "awesome_print"
20
+
21
+ require_relative "models"
22
+
23
+ log_directry = File.expand_path("../../log/", __FILE__)
24
+ Dir.mkdir log_directry unless Dir.exist? log_directry
25
+ ActiveRecord::Base.logger = Logger.new("#{log_directry}/test.log")
26
+
27
+ RSpec.configure do |config|
28
+ config.before(:suite) do
29
+ ActiveRecord::Tasks::DatabaseTasks.db_dir = File.expand_path "..", __FILE__
30
+ ActiveRecord::Tasks::DatabaseTasks.root = File.expand_path "../..", __FILE__
31
+ ActiveRecord::Tasks::DatabaseTasks.env = "test"
32
+
33
+ back, $stdout = $stdout, StringIO.new
34
+ args = { cluster_name: "user" }
35
+ ActiveRecord::Sharding::DatabaseTasks.drop_all_databases args
36
+ ActiveRecord::Sharding::DatabaseTasks.create_all_databases args
37
+ ActiveRecord::Sharding::DatabaseTasks.load_schema_all_databases args
38
+
39
+ sequencer_args = { sequencer_name: "user" }
40
+ ActiveRecord::Sharding::DatabaseTasks.drop_sequencer_database sequencer_args
41
+ ActiveRecord::Sharding::DatabaseTasks.create_sequencer_database sequencer_args
42
+ ActiveRecord::Sharding::DatabaseTasks.create_table_sequencer_database sequencer_args
43
+ ActiveRecord::Sharding::DatabaseTasks.insert_initial_record_sequencer_database sequencer_args
44
+
45
+ $stdout = back
46
+
47
+ ActiveRecord::Base.establish_connection(:test)
48
+ end
49
+
50
+ config.after(:each) do
51
+ User.all_shards.each(&:delete_all)
52
+ end
53
+
54
+ config.after(:suite) do
55
+ ActiveRecord::Sharding::DatabaseTasks.drop_all_databases cluster_name: "user"
56
+
57
+ sequencer_args = { sequencer_name: "user" }
58
+ ActiveRecord::Sharding::DatabaseTasks.drop_sequencer_database sequencer_args
59
+ end
60
+
61
+ config.order = :random
62
+ Kernel.srand config.seed
63
+ end
@@ -0,0 +1,74 @@
1
+ require "rake"
2
+
3
+ describe "Tasks :active_record_sharding" do
4
+ before(:all) do
5
+ @rake = Rake::Application.new
6
+ Rake.application = @rake
7
+ Rake.application.rake_require "./../lib/tasks/activerecord-sharding"
8
+ Rake::Task.define_task(:environment)
9
+ end
10
+
11
+ before(:each) do
12
+ @rake[task].reenable
13
+ end
14
+
15
+ context "for sharding clusters" do
16
+ describe "info" do
17
+ let(:task) { "active_record:sharding:info" }
18
+
19
+ it "show cluster infomation to STDOUT" do
20
+ expect { @rake[task].invoke }.to output(/test_user_001/).to_stdout
21
+ end
22
+ end
23
+
24
+ describe "setup" do
25
+ let(:task) { "active_record:sharding:setup" }
26
+
27
+ before do
28
+ allow(ActiveRecord::Tasks::DatabaseTasks).to receive(:create).and_return(nil)
29
+ allow(ActiveRecord::Tasks::DatabaseTasks).to receive(:load_schema).and_return(nil)
30
+ end
31
+
32
+ it "Setup all cluster databases" do
33
+ expect(@rake[task].invoke[0]).to be_a Proc
34
+ end
35
+ end
36
+
37
+ describe "drop_all" do
38
+ let(:task) { "active_record:sharding:drop_all" }
39
+
40
+ before do
41
+ allow(ActiveRecord::Tasks::DatabaseTasks).to receive(:drop).and_return(nil)
42
+ end
43
+
44
+ it "Drop all cluster databases" do
45
+ expect(@rake[task].invoke[0]).to be_a Proc
46
+ end
47
+ end
48
+ end
49
+ context "for sequencers" do
50
+ describe "setup" do
51
+ let(:task) { "active_record:sharding:sequencer:setup" }
52
+
53
+ before do
54
+ allow(ActiveRecord::Sharding::DatabaseTasks).to receive(:execute).and_return(nil)
55
+ end
56
+
57
+ it "Setup all sequencers databases" do
58
+ expect(@rake[task].invoke[0]).to be_a Proc
59
+ end
60
+ end
61
+
62
+ describe "drop_all" do
63
+ let(:task) { "active_record:sharding:sequencer:drop_all" }
64
+
65
+ before do
66
+ allow(ActiveRecord::Tasks::DatabaseTasks).to receive(:drop).and_return(nil)
67
+ end
68
+
69
+ it "Drop all sequencers databases" do
70
+ expect(@rake[task].invoke[0]).to be_a Proc
71
+ end
72
+ end
73
+ end
74
+ end
metadata ADDED
@@ -0,0 +1,254 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: activerecord-sharding
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - hirocaster
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-08-28 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activerecord
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 4.1.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 4.1.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.5'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.5'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: mysql2
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: pry
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: pry-byebug
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: awesome_print
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: simplecov
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: coveralls
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: codeclimate-test-reporter
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ description: Sharding library for ActiveRecord(MySQL)
168
+ email:
169
+ - hohtsuka@gmail.com
170
+ executables:
171
+ - benchmark_sequencer.rb
172
+ - console
173
+ - setup
174
+ extensions: []
175
+ extra_rdoc_files: []
176
+ files:
177
+ - ".gitignore"
178
+ - ".hound.yml"
179
+ - ".rspec"
180
+ - ".rubocop.yml"
181
+ - ".ruby-version"
182
+ - ".travis.yml"
183
+ - Gemfile
184
+ - README.md
185
+ - Rakefile
186
+ - activerecord-sharding.gemspec
187
+ - bin/benchmark_sequencer.rb
188
+ - bin/console
189
+ - bin/setup
190
+ - lib/active_record/sharding.rb
191
+ - lib/active_record/sharding/abstract_repository.rb
192
+ - lib/active_record/sharding/cluster_config.rb
193
+ - lib/active_record/sharding/config.rb
194
+ - lib/active_record/sharding/database_tasks.rb
195
+ - lib/active_record/sharding/errors.rb
196
+ - lib/active_record/sharding/model.rb
197
+ - lib/active_record/sharding/modulo_router.rb
198
+ - lib/active_record/sharding/railtie.rb
199
+ - lib/active_record/sharding/sequencer.rb
200
+ - lib/active_record/sharding/sequencer_config.rb
201
+ - lib/active_record/sharding/sequencer_repository.rb
202
+ - lib/active_record/sharding/shard_repository.rb
203
+ - lib/active_record/sharding/version.rb
204
+ - lib/activerecord-sharding.rb
205
+ - lib/tasks/activerecord-sharding.rake
206
+ - spec/active_record/sharding/abstract_repository_spec.rb
207
+ - spec/active_record/sharding/cluster_config_spec.rb
208
+ - spec/active_record/sharding/errors_spec.rb
209
+ - spec/active_record/sharding/model_spec.rb
210
+ - spec/active_record/sharding/modulo_router_spec.rb
211
+ - spec/active_record/sharding/sequencer_spec.rb
212
+ - spec/active_record/sharding/shard_repository_spec.rb
213
+ - spec/active_record_sharding_spec.rb
214
+ - spec/models.rb
215
+ - spec/schema.rb
216
+ - spec/spec_helper.rb
217
+ - spec/tasks/activerecord-sharding_spec.rb
218
+ homepage: https://github.com/hirocaster/activerecord-sharding
219
+ licenses:
220
+ - MIT
221
+ metadata: {}
222
+ post_install_message:
223
+ rdoc_options: []
224
+ require_paths:
225
+ - lib
226
+ required_ruby_version: !ruby/object:Gem::Requirement
227
+ requirements:
228
+ - - ">="
229
+ - !ruby/object:Gem::Version
230
+ version: '2.0'
231
+ required_rubygems_version: !ruby/object:Gem::Requirement
232
+ requirements:
233
+ - - ">="
234
+ - !ruby/object:Gem::Version
235
+ version: '0'
236
+ requirements: []
237
+ rubyforge_project:
238
+ rubygems_version: 2.4.5.1
239
+ signing_key:
240
+ specification_version: 4
241
+ summary: Sharding library for ActiveRecord(MySQL)
242
+ test_files:
243
+ - spec/active_record/sharding/abstract_repository_spec.rb
244
+ - spec/active_record/sharding/cluster_config_spec.rb
245
+ - spec/active_record/sharding/errors_spec.rb
246
+ - spec/active_record/sharding/model_spec.rb
247
+ - spec/active_record/sharding/modulo_router_spec.rb
248
+ - spec/active_record/sharding/sequencer_spec.rb
249
+ - spec/active_record/sharding/shard_repository_spec.rb
250
+ - spec/active_record_sharding_spec.rb
251
+ - spec/models.rb
252
+ - spec/schema.rb
253
+ - spec/spec_helper.rb
254
+ - spec/tasks/activerecord-sharding_spec.rb