db-charmer 1.6.11 → 1.6.12
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 +9 -0
- data/VERSION +1 -1
- data/db-charmer.gemspec +2 -2
- data/lib/db_charmer/connection_proxy.rb +4 -0
- data/lib/db_charmer/connection_switch.rb +2 -2
- data/lib/db_charmer/db_magic.rb +1 -1
- data/lib/db_charmer/multi_db_migrations.rb +1 -1
- data/lib/db_charmer/sharding/method/db_block_map.rb +22 -4
- metadata +3 -3
data/CHANGES
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
1.6.12 (2010-05-09):
|
2
|
+
|
3
|
+
Starting with this version we use Rails.cache (memcache or whatever you use in your project)
|
4
|
+
to cache sharding blocks information.
|
5
|
+
|
6
|
+
Bugfixes: Thanks to Allen Madsen (github user blatyo) we've fixed a few minor issues in
|
7
|
+
database connections handling.
|
8
|
+
|
9
|
+
----------------------------------------------------------------------------------------
|
1
10
|
1.6.11 (2010-04-16):
|
2
11
|
|
3
12
|
Bugfix: Change the way we allocate sharding blocks in block map sharding method to
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.6.
|
1
|
+
1.6.12
|
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.
|
8
|
+
s.version = "1.6.12"
|
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-
|
12
|
+
s.date = %q{2010-05-09}
|
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 = [
|
@@ -10,8 +10,8 @@ module DbCharmer
|
|
10
10
|
|
11
11
|
if conn.kind_of?(Hash)
|
12
12
|
conn = conn.symbolize_keys
|
13
|
-
raise ArgumentError, "Missing required :
|
14
|
-
return DbCharmer::ConnectionFactory.connect_to_db(conn[:
|
13
|
+
raise ArgumentError, "Missing required :connection_name parameter" unless conn[:connection_name]
|
14
|
+
return DbCharmer::ConnectionFactory.connect_to_db(conn[:connection_name], conn)
|
15
15
|
end
|
16
16
|
|
17
17
|
if conn.respond_to?(:db_charmer_connection_proxy)
|
data/lib/db_charmer/db_magic.rb
CHANGED
@@ -6,7 +6,7 @@ module DbCharmer
|
|
6
6
|
hijack_connection!
|
7
7
|
|
8
8
|
# Should requested connections exist in the config?
|
9
|
-
should_exist = opt[:should_exist]
|
9
|
+
should_exist = opt.has_key?(:should_exist) ? opt[:should_exist] : DbCharmer.connections_should_exist?
|
10
10
|
|
11
11
|
# Main connection management
|
12
12
|
setup_connection_magic(opt[:connection], should_exist)
|
@@ -30,7 +30,7 @@ module DbCharmer
|
|
30
30
|
end
|
31
31
|
|
32
32
|
def on_db(db_name)
|
33
|
-
name = db_name.is_a?(Hash) ? db_name[:
|
33
|
+
name = db_name.is_a?(Hash) ? db_name[:connection_name] : db_name.inspect
|
34
34
|
announce "Switching connection to #{name}"
|
35
35
|
# Switch connection
|
36
36
|
old_proxy = ActiveRecord::Base.db_charmer_connection_proxy
|
@@ -31,7 +31,9 @@ module DbCharmer
|
|
31
31
|
|
32
32
|
# Local caches
|
33
33
|
@shard_info_cache = {}
|
34
|
-
|
34
|
+
|
35
|
+
@blocks_cache = Rails.cache
|
36
|
+
@blocks_cache_prefix = config[:blocks_cache_prefix] || "#{@name}_block:"
|
35
37
|
end
|
36
38
|
|
37
39
|
def shard_for_key(key)
|
@@ -69,13 +71,29 @@ module DbCharmer
|
|
69
71
|
# Cleanup the cache if asked to
|
70
72
|
key_range = [ block_start_for_key(key), block_end_for_key(key) ]
|
71
73
|
block_cache_key = "%d-%d" % key_range
|
72
|
-
|
74
|
+
|
75
|
+
if cache
|
76
|
+
cached_block = get_cached_block(block_cache_key)
|
77
|
+
return cached_block if cached_block
|
78
|
+
end
|
73
79
|
|
74
80
|
# Fetch cached value or load from db
|
75
|
-
|
81
|
+
block = begin
|
76
82
|
sql = "SELECT * FROM #{map_table} WHERE start_id = #{key_range.first} AND end_id = #{key_range.last} LIMIT 1"
|
77
83
|
connection.select_one(sql, 'Find a shard block')
|
78
84
|
end
|
85
|
+
|
86
|
+
set_cached_block(block_cache_key, block)
|
87
|
+
|
88
|
+
return block
|
89
|
+
end
|
90
|
+
|
91
|
+
def get_cached_block(block_cache_key)
|
92
|
+
@blocks_cache.read("#{@blocks_cache_prefix}#{block_cache_key}")
|
93
|
+
end
|
94
|
+
|
95
|
+
def set_cached_block(block_cache_key, block)
|
96
|
+
@blocks_cache.write("#{@blocks_cache_prefix}#{block_cache_key}", block)
|
79
97
|
end
|
80
98
|
|
81
99
|
# Load shard info
|
@@ -144,7 +162,7 @@ module DbCharmer
|
|
144
162
|
# FIXME: Find a better way, maybe move config method to our ar extenstions
|
145
163
|
connection.instance_variable_get(:@config).clone.merge(
|
146
164
|
# Name for the connection factory
|
147
|
-
:
|
165
|
+
:connection_name => shard_name,
|
148
166
|
# Connection params
|
149
167
|
:host => shard.db_host,
|
150
168
|
:port => shard.db_port,
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 1
|
7
7
|
- 6
|
8
|
-
-
|
9
|
-
version: 1.6.
|
8
|
+
- 12
|
9
|
+
version: 1.6.12
|
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-
|
17
|
+
date: 2010-05-09 00:00:00 -04:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|