activerecord-turntable 2.0.0.rc1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2d2ed24b4fc25e1ec4752797494ce5f7e01aba00
4
- data.tar.gz: e9686336be4cac05c60c3d129d3b94c3d562674c
3
+ metadata.gz: 5ed732d4f5ce27c8ec309d715a01e33bc4e287f2
4
+ data.tar.gz: e026370254d526d21205b9a72cd0a05e8df5d355
5
5
  SHA512:
6
- metadata.gz: 948dc1c9c05cedd33df32a763b79a587ec7e748ef03e96b8b763b7e991716b82f619c2bfbb4e4980136ae507c78dda9e06b733768613ecca2468ce8bd33042f3
7
- data.tar.gz: 887ec36800641c5f632acdc83cc8abcb22f428ee196743e1d64b8b371d93e99fedc776d4c4151b91b57fc8586da80f91692f75c5249a354b076a90060e423f6e
6
+ metadata.gz: 77aa461ca4b2c0ce44589ffb756f8c49cfa263040b435235cfd9afd38d0469086c8a6e33ee2b1d82badbefbede00d640cdae145581f4cae9363eac271ee16cbc
7
+ data.tar.gz: f78bc87da3c3e41717f2a2cbd797a96fd7a07dc12daa274b7b8ff30c03055950f78c0b083b788d107e5744379acafea0cdde7d5f80e2cbe896d8b0c89db0fba5
data/CHANGELOG.md CHANGED
@@ -1,4 +1,4 @@
1
- ## activerecord-turntable 2.0.0 (not released yet) ##
1
+ ## activerecord-turntable 2.0.0 ##
2
2
 
3
3
  First release for ActiveRecord 4.x
4
4
 
@@ -6,6 +6,7 @@ module ActiveRecord::Turntable
6
6
  included do
7
7
  protected
8
8
 
9
+ # @note override for logging current shard name
9
10
  def log(sql, name = "SQL", binds = [])
10
11
  @instrumenter.instrument(
11
12
  "sql.active_record",
@@ -1,5 +1,6 @@
1
1
  module ActiveRecord::Turntable
2
2
  module ActiveRecordExt
3
+ # activerecord-import extension
3
4
  module ActiverecordImportExt
4
5
  extend ActiveSupport::Concern
5
6
 
@@ -9,6 +10,7 @@ module ActiveRecord::Turntable
9
10
 
10
11
  private
11
12
 
13
+ # @note override for sequencer injection
12
14
  def values_sql_for_columns_and_attributes_with_turntable(columns, array_of_attributes)
13
15
  connection_memo = connection
14
16
  array_of_attributes.map do |arr|
@@ -1,8 +1,9 @@
1
1
  begin
2
2
  require 'acts_as_archive'
3
-
3
+ # acts_as_archive extension
4
4
  class ActsAsArchive
5
5
  class << self
6
+ # @note use the same shard which `from` shard using
6
7
  def move_with_turntable(config, where, merge_options={})
7
8
  if [config[:to], config[:from]].all? { |k| k.try(:turntable_enabled?) }
8
9
  current_shard = config[:from].connection.current_shard.name.to_sym
@@ -20,6 +20,7 @@ module ActiveRecord::Turntable
20
20
 
21
21
  private
22
22
 
23
+ # @note Override to add sharding condition for singular association
23
24
  if ActiveRecord::Turntable.rails41_later?
24
25
  def find_target_with_turntable
25
26
  current_scope = scope
@@ -50,6 +51,7 @@ module ActiveRecord::Turntable
50
51
 
51
52
  private
52
53
 
54
+ # @note Override to add sharding condition for collection association
53
55
  def find_target_with_turntable
54
56
  records =
55
57
  if options[:finder_sql]
@@ -9,6 +9,7 @@ module ActiveRecord::Turntable
9
9
  alias_method_chain :records_for, :turntable
10
10
  end
11
11
 
12
+ # @note Override to add sharding condition on preload
12
13
  def records_for_with_turntable(ids)
13
14
  returning_scope = records_for_without_turntable(ids)
14
15
  if should_use_shard_key?
@@ -9,6 +9,7 @@ module ActiveRecord::Turntable
9
9
 
10
10
  private
11
11
 
12
+ # @note Override not to establish_connection destroy existing connection pool proxy object
12
13
  def pool_for_with_turntable(owner)
13
14
  owner_to_pool.fetch(owner.name) {
14
15
  if ancestor_pool = pool_from_any_process_for(owner)
@@ -1,6 +1,6 @@
1
1
  module ActiveRecord::Turntable::ActiveRecordExt
2
2
  module LockingOptimistic
3
-
3
+ # @note Override to add sharding condition on optimistic locking
4
4
  ::ActiveRecord::Locking::Optimistic.class_eval do
5
5
 
6
6
  ar_version = ActiveRecord::VERSION::STRING
@@ -11,6 +11,7 @@ module ActiveRecord::Turntable
11
11
 
12
12
  protected
13
13
 
14
+ # @note Override to add shard name logging
14
15
  def sql_with_turntable(event)
15
16
  self.class.runtime += event.duration
16
17
  return unless logger.debug?
@@ -1,6 +1,7 @@
1
1
  module ActiveRecord::Turntable::ActiveRecordExt
2
2
  module Persistence
3
3
  ::ActiveRecord::Persistence.class_eval do
4
+ # @note Override to add sharding scope on reloading
4
5
  def reload(options = nil)
5
6
  clear_aggregation_cache
6
7
  clear_association_cache
@@ -26,6 +27,7 @@ module ActiveRecord::Turntable::ActiveRecordExt
26
27
  self
27
28
  end
28
29
 
30
+ # @note Override to add sharding scope on `touch`
29
31
  def touch(name = nil)
30
32
  raise ActiveRecordError, "can not touch on a new record object" unless persisted?
31
33
 
@@ -58,6 +60,7 @@ module ActiveRecord::Turntable::ActiveRecordExt
58
60
 
59
61
  private
60
62
 
63
+ # @note Override to add sharding scope on destroying
61
64
  def relation_for_destroy
62
65
  pk = self.class.primary_key
63
66
  column = self.class.columns_hash[pk]
@@ -74,6 +77,8 @@ module ActiveRecord::Turntable::ActiveRecordExt
74
77
  relation
75
78
  end
76
79
 
80
+
81
+ # @note Override to add sharding scope on updating
77
82
  ar_version = ActiveRecord::VERSION::STRING
78
83
  if ar_version < "4.1"
79
84
  method_name = ar_version =~ /\A4\.0\.[0-5]\z/ ? "update_record" : "_update_record"
@@ -15,6 +15,7 @@ module ActiveRecord::Turntable
15
15
  end
16
16
  end
17
17
 
18
+ # @note Override to add sharding scope on updating
18
19
  def _update_record_with_turntable(values, id, id_was, turntable_scope = nil) # :nodoc:
19
20
  substitutes, binds = substitute_values values
20
21
  condition_scope = @klass.unscoped.where(@klass.arel_table[@klass.primary_key].eq(id_was || id))
@@ -10,6 +10,7 @@ module ActiveRecord::Turntable
10
10
 
11
11
  private
12
12
 
13
+ # @note Override to dump database sequencer method
13
14
  def table_with_turntable(table, stream)
14
15
  columns = @connection.columns(table)
15
16
  begin
@@ -1,6 +1,7 @@
1
1
  module ActiveRecord::Turntable
2
2
  module ActiveRecordExt
3
3
  module Transactions
4
+ # @note Override to start transaction on current shard
4
5
  def with_transaction_returning_status
5
6
  if self.class.turntable_enabled?
6
7
  status = nil
@@ -16,6 +16,9 @@ module ActiveRecord::Turntable
16
16
  end
17
17
 
18
18
  module ClassMethods
19
+ # @param [Symbol] cluster_name cluster name for this class
20
+ # @param [Symbol] shard_key_name shard key attribute name
21
+ # @param [Hash] options
19
22
  def turntable(cluster_name, shard_key_name, options = {})
20
23
  class_attribute :turntable_shard_key,
21
24
  :turntable_cluster, :turntable_cluster_name
@@ -34,6 +37,7 @@ module ActiveRecord::Turntable
34
37
  turntable_define_cluster_methods(cluster_name)
35
38
  end
36
39
 
40
+ #
37
41
  def force_transaction_all_shards!(options={}, &block)
38
42
  force_connect_all_shards!
39
43
  shards = turntable_connections.values
@@ -172,10 +176,12 @@ module ActiveRecord::Turntable
172
176
  self.class.shards_transaction(options, &block)
173
177
  end
174
178
 
179
+ # @return [ActiveRecord::Turntable::Shard] current shard for self
175
180
  def turntable_shard
176
181
  turntable_cluster.shard_for(self.send(turntable_shard_key))
177
182
  end
178
183
 
184
+ # @see ActiveRecord::Turntable::ConnectionProxy#with_shard
179
185
  def with_shard(shard)
180
186
  self.class.connection.with_shard(shard) { yield }
181
187
  end
@@ -111,14 +111,22 @@ module ActiveRecord::Turntable
111
111
  current_shard_entry[object_id] = shard
112
112
  end
113
113
 
114
+ # @return connection of current shard
114
115
  def connection
115
116
  current_shard.connection
116
117
  end
117
118
 
119
+ # @return connection_pool of current shard
118
120
  def connection_pool
119
121
  current_shard.connection_pool
120
122
  end
121
123
 
124
+ # Fix connection to given shard in block
125
+ # @param [ActiveRecord::Base, Symbol, ActiveRecord::Turntable::Shard, Numeric, String] shard which you want to fix
126
+ # @param shard [ActiveRecord::Base] AR Object
127
+ # @param shard [Symbol] shard name symbol that defined in turntable.yml
128
+ # @param shard [ActiveRecord::Turntable::Shard] Shard object
129
+ # @param shard [String, Numeric] Raw sharding id
122
130
  def with_shard(shard)
123
131
  shard = cluster.to_shard(shard)
124
132
 
@@ -142,6 +150,8 @@ module ActiveRecord::Turntable
142
150
  end
143
151
  end
144
152
 
153
+ # Send queries to all shards in this cluster
154
+ # @param [Boolean] continue_on_error when a shard raises error, ignore exception and continue
145
155
  def with_all(continue_on_error = false)
146
156
  @cluster.shards.values.map do |shard|
147
157
  begin
@@ -157,6 +167,8 @@ module ActiveRecord::Turntable
157
167
  end
158
168
  end
159
169
 
170
+ # Send queries to master connection and all shards in this cluster
171
+ # @param [Boolean] continue_on_error when a shard raises error, ignore exception and continue
160
172
  def with_master_and_all(continue_on_error = false)
161
173
  ([@cluster.master] + @cluster.shards.values).map do |shard|
162
174
  begin
@@ -1,5 +1,5 @@
1
1
  module ActiveRecord
2
2
  module Turntable
3
- VERSION = "2.0.0.rc1"
3
+ VERSION = "2.0.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-turntable
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.rc1
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - gussan
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-11-09 00:00:00.000000000 Z
12
+ date: 2014-11-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord
@@ -430,9 +430,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
430
430
  version: '0'
431
431
  required_rubygems_version: !ruby/object:Gem::Requirement
432
432
  requirements:
433
- - - ">"
433
+ - - ">="
434
434
  - !ruby/object:Gem::Version
435
- version: 1.3.1
435
+ version: '0'
436
436
  requirements: []
437
437
  rubyforge_project: activerecord-turntable
438
438
  rubygems_version: 2.2.2
@@ -480,3 +480,4 @@ test_files:
480
480
  - spec/spec_helper.rb
481
481
  - spec/support/matchers/be_saved_to.rb
482
482
  - spec/support/turntable_helper.rb
483
+ has_rdoc: