db-charmer 1.6.1 → 1.6.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.
data/CHANGES CHANGED
@@ -1,3 +1,10 @@
1
+ 1.6.2 (2010-04-03):
2
+
3
+ Bugfix release: Modified our stub connection used on sharded models to fail on db-calling
4
+ methods only. Proxy the rest to a real shard connection. Another bug fixed in db_block_map
5
+ sharding method: we didn't increment block counters when assigning blocks to shards.
6
+
7
+ ----------------------------------------------------------------------------------------
1
8
  1.6.1 (2010-03-31):
2
9
 
3
10
  Breaking change from now on all connection-switching methods (both in migrations and in
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.6.1
1
+ 1.6.2
data/db-charmer.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{db-charmer}
8
- s.version = "1.6.1"
8
+ s.version = "1.6.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Alexey Kovyrin"]
12
- s.date = %q{2010-03-31}
12
+ s.date = %q{2010-04-03}
13
13
  s.description = %q{ActiveRecord Connections Magic (slaves, multiple connections, etc)}
14
14
  s.email = %q{alexey@kovyrin.net}
15
15
  s.extra_rdoc_files = [
@@ -69,11 +69,12 @@ module DbCharmer
69
69
  @@db_charmer_database_remappings = Hash.new
70
70
  def db_charmer_remapped_connection
71
71
  return nil if (db_charmer_connection_level || 0) > 0
72
- name = db_charmer_connection_proxy.db_charmer_connection_name if db_charmer_connection_proxy
73
- name = (name || :master).to_sym
72
+ name = :master
73
+ proxy = db_charmer_connection_proxy
74
+ name = proxy.db_charmer_connection_name.to_sym if proxy
74
75
 
75
76
  remapped = @@db_charmer_database_remappings[name]
76
- return DbCharmer::ConnectionFactory.connect(remapped, true) if remapped
77
+ remapped ? DbCharmer::ConnectionFactory.connect(remapped, true) : nil
77
78
  end
78
79
 
79
80
  def db_charmer_database_remappings
@@ -18,7 +18,7 @@ module DbCharmer
18
18
  return conn.db_charmer_connection_proxy
19
19
  end
20
20
 
21
- if conn.kind_of?(ActiveRecord::ConnectionAdapters::AbstractAdapter)
21
+ if conn.kind_of?(ActiveRecord::ConnectionAdapters::AbstractAdapter) || conn.kind_of?(DbCharmer::StubConnection)
22
22
  return conn
23
23
  end
24
24
 
@@ -26,7 +26,13 @@ module DbCharmer
26
26
  end
27
27
 
28
28
  def switch_connection_to(conn, require_config_to_exist = true)
29
- self.db_charmer_connection_proxy = coerce_to_connection_proxy(conn, require_config_to_exist)
29
+ new_conn = coerce_to_connection_proxy(conn, require_config_to_exist)
30
+
31
+ if db_charmer_connection_proxy.is_a?(DbCharmer::StubConnection)
32
+ db_charmer_connection_proxy.set_real_connection(new_conn)
33
+ end
34
+
35
+ self.db_charmer_connection_proxy = new_conn
30
36
  self.hijack_connection!
31
37
  end
32
38
  end
@@ -104,6 +104,9 @@ module DbCharmer
104
104
  SQL
105
105
  connection.execute(sql, "Allocate new block")
106
106
 
107
+ # Increment the blocks counter on the shard
108
+ ShardInfo.update_counters(shard.id, :blocks_count => +1)
109
+
107
110
  # Retry block search after creation
108
111
  block_for_key(key)
109
112
  end
@@ -1,9 +1,28 @@
1
+ # This is a simple proxy class used as a default connection on sharded models
2
+ #
3
+ # The idea is to proxy all utility method calls to a real connection (set by
4
+ # the +set_real_connection+ method when we switch shards) and fail on real
5
+ # database querying calls forcing users to switch shard connections.
6
+ #
1
7
  module DbCharmer
2
- class StubConnection < ActiveRecord::ConnectionAdapters::AbstractAdapter
3
- def initialize; end
8
+ class StubConnection
9
+ def set_real_connection(real_conn)
10
+ @real_conn = real_conn
11
+ end
12
+
13
+ def method_missing(meth, *args, &block)
14
+ # Fail on database statements
15
+ if ActiveRecord::ConnectionAdapters::DatabaseStatements.instance_methods.member?(meth.to_s)
16
+ raise ActiveRecord::ConnectionNotEstablished, "You have to switch connection on your model before using it!"
17
+ end
18
+
19
+ # Fail if no connection has been established yet
20
+ unless @real_conn
21
+ raise ActiveRecord::ConnectionNotEstablished, "No real connection to proxy this method to!"
22
+ end
4
23
 
5
- def method_missing(*arg)
6
- raise ActiveRecord::ConnectionNotEstablished, "You have to switch connection on your model before using it"
24
+ # Proxy the call to our real connection target
25
+ @real_conn.__send__(meth, *args, &block)
7
26
  end
8
27
  end
9
28
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 1
7
7
  - 6
8
- - 1
9
- version: 1.6.1
8
+ - 2
9
+ version: 1.6.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - Alexey Kovyrin
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-03-31 00:00:00 -04:00
17
+ date: 2010-04-03 00:00:00 -04:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency