makara 0.3.8 → 0.5.0

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.
Files changed (64) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/gem-publish-public.yml +36 -0
  3. data/.travis.yml +71 -9
  4. data/CHANGELOG.md +84 -25
  5. data/Gemfile +4 -3
  6. data/README.md +37 -34
  7. data/gemfiles/ar-head.gemfile +9 -0
  8. data/gemfiles/ar30.gemfile +7 -1
  9. data/gemfiles/ar31.gemfile +8 -1
  10. data/gemfiles/ar32.gemfile +8 -1
  11. data/gemfiles/ar40.gemfile +10 -1
  12. data/gemfiles/ar41.gemfile +10 -1
  13. data/gemfiles/ar42.gemfile +10 -1
  14. data/gemfiles/ar50.gemfile +11 -2
  15. data/gemfiles/ar51.gemfile +11 -2
  16. data/gemfiles/ar52.gemfile +24 -0
  17. data/gemfiles/ar60.gemfile +24 -0
  18. data/lib/active_record/connection_adapters/makara_abstract_adapter.rb +109 -3
  19. data/lib/active_record/connection_adapters/makara_postgis_adapter.rb +41 -0
  20. data/lib/makara.rb +15 -4
  21. data/lib/makara/cache.rb +4 -40
  22. data/lib/makara/config_parser.rb +14 -3
  23. data/lib/makara/connection_wrapper.rb +26 -2
  24. data/lib/makara/context.rb +108 -38
  25. data/lib/makara/cookie.rb +52 -0
  26. data/lib/makara/error_handler.rb +2 -2
  27. data/lib/makara/errors/blacklisted_while_in_transaction.rb +14 -0
  28. data/lib/makara/errors/invalid_shard.rb +16 -0
  29. data/lib/makara/logging/logger.rb +1 -1
  30. data/lib/makara/middleware.rb +12 -75
  31. data/lib/makara/pool.rb +53 -40
  32. data/lib/makara/proxy.rb +52 -30
  33. data/lib/makara/railtie.rb +0 -6
  34. data/lib/makara/strategies/round_robin.rb +6 -0
  35. data/lib/makara/strategies/shard_aware.rb +47 -0
  36. data/lib/makara/version.rb +2 -2
  37. data/makara.gemspec +5 -1
  38. data/spec/active_record/connection_adapters/makara_abstract_adapter_spec.rb +10 -5
  39. data/spec/active_record/connection_adapters/makara_mysql2_adapter_spec.rb +17 -2
  40. data/spec/active_record/connection_adapters/makara_postgis_adapter_spec.rb +155 -0
  41. data/spec/active_record/connection_adapters/makara_postgresql_adapter_spec.rb +76 -3
  42. data/spec/cache_spec.rb +2 -52
  43. data/spec/config_parser_spec.rb +27 -13
  44. data/spec/connection_wrapper_spec.rb +5 -2
  45. data/spec/context_spec.rb +163 -100
  46. data/spec/cookie_spec.rb +72 -0
  47. data/spec/middleware_spec.rb +26 -55
  48. data/spec/pool_spec.rb +24 -0
  49. data/spec/proxy_spec.rb +51 -36
  50. data/spec/spec_helper.rb +5 -9
  51. data/spec/strategies/shard_aware_spec.rb +219 -0
  52. data/spec/support/helpers.rb +6 -2
  53. data/spec/support/mock_objects.rb +5 -1
  54. data/spec/support/mysql2_database.yml +1 -0
  55. data/spec/support/mysql2_database_with_custom_errors.yml +5 -0
  56. data/spec/support/postgis_database.yml +15 -0
  57. data/spec/support/postgis_schema.rb +11 -0
  58. data/spec/support/postgresql_database.yml +2 -0
  59. data/spec/support/proxy_extensions.rb +1 -1
  60. data/spec/support/schema.rb +5 -5
  61. data/spec/support/user.rb +5 -0
  62. metadata +28 -9
  63. data/lib/makara/cache/memory_store.rb +0 -28
  64. data/lib/makara/cache/noop_store.rb +0 -15
@@ -4,6 +4,7 @@ test:
4
4
  username: 'root'
5
5
  password: ''
6
6
 
7
+ timeout: 5000
7
8
  connect_timeout: 1
8
9
  read_timeout: 1
9
10
  write_timeout: 2
@@ -4,6 +4,11 @@ test:
4
4
  username: 'root'
5
5
  password: ''
6
6
 
7
+ timeout: 5000
8
+ connect_timeout: 1
9
+ read_timeout: 1
10
+ write_timeout: 2
11
+
7
12
  makara:
8
13
  blacklist_duration: 2
9
14
  master_ttl: 5
@@ -0,0 +1,15 @@
1
+ test:
2
+ adapter: 'makara_postgis'
3
+ database: 'makara_test'
4
+ username: 'root'
5
+ password: ''
6
+
7
+ timeout: 5000
8
+
9
+ makara:
10
+ blacklist_duration: 2
11
+ master_ttl: 5
12
+ connections:
13
+ - role: master
14
+ - role: slave
15
+ - role: slave
@@ -0,0 +1,11 @@
1
+ conn = ActiveRecord::Base.connection
2
+
3
+ conn.execute "create extension if not exists postgis"
4
+
5
+ if conn.table_exists? "towns"
6
+ conn.execute("TRUNCATE TABLE towns")
7
+ else
8
+ conn.create_table "towns", :force => true do |t|
9
+ t.st_point "location"
10
+ end
11
+ end
@@ -4,6 +4,8 @@ test:
4
4
  username: 'root'
5
5
  password: ''
6
6
 
7
+ timeout: 5000
8
+
7
9
  makara:
8
10
  blacklist_duration: 2
9
11
  master_ttl: 5
@@ -1,6 +1,6 @@
1
1
  module ProxyExtensions
2
2
 
3
- attr_reader :master_pool, :slave_pool, :master_context, :id
3
+ attr_reader :master_pool, :slave_pool, :id
4
4
 
5
5
  def master_for?(sql)
6
6
  pool_for(sql) == master_pool
@@ -1,9 +1,9 @@
1
- ActiveRecord::Schema.define(:version => 20130628161227) do
1
+ conn = ActiveRecord::Base.connection
2
2
 
3
- drop_table "users" if table_exists? "users"
4
-
5
- create_table "users" do |t|
3
+ if conn.table_exists? "users"
4
+ conn.execute("TRUNCATE TABLE users")
5
+ else
6
+ conn.create_table "users" do |t|
6
7
  t.string "name"
7
8
  end
8
-
9
9
  end
@@ -0,0 +1,5 @@
1
+ module Test
2
+ class User < ::ActiveRecord::Base
3
+
4
+ end
5
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: makara
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.8
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Nelson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-07-11 00:00:00.000000000 Z
11
+ date: 2021-01-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -31,6 +31,7 @@ executables: []
31
31
  extensions: []
32
32
  extra_rdoc_files: []
33
33
  files:
34
+ - ".github/workflows/gem-publish-public.yml"
34
35
  - ".gitignore"
35
36
  - ".rspec"
36
37
  - ".ruby-gemset"
@@ -49,25 +50,29 @@ files:
49
50
  - gemfiles/ar42.gemfile
50
51
  - gemfiles/ar50.gemfile
51
52
  - gemfiles/ar51.gemfile
53
+ - gemfiles/ar52.gemfile
54
+ - gemfiles/ar60.gemfile
52
55
  - lib/active_record/connection_adapters/jdbcmysql_makara_adapter.rb
53
56
  - lib/active_record/connection_adapters/jdbcpostgresql_makara_adapter.rb
54
57
  - lib/active_record/connection_adapters/makara_abstract_adapter.rb
55
58
  - lib/active_record/connection_adapters/makara_jdbcmysql_adapter.rb
56
59
  - lib/active_record/connection_adapters/makara_jdbcpostgresql_adapter.rb
57
60
  - lib/active_record/connection_adapters/makara_mysql2_adapter.rb
61
+ - lib/active_record/connection_adapters/makara_postgis_adapter.rb
58
62
  - lib/active_record/connection_adapters/makara_postgresql_adapter.rb
59
63
  - lib/active_record/connection_adapters/mysql2_makara_adapter.rb
60
64
  - lib/active_record/connection_adapters/postgresql_makara_adapter.rb
61
65
  - lib/makara.rb
62
66
  - lib/makara/cache.rb
63
- - lib/makara/cache/memory_store.rb
64
- - lib/makara/cache/noop_store.rb
65
67
  - lib/makara/config_parser.rb
66
68
  - lib/makara/connection_wrapper.rb
67
69
  - lib/makara/context.rb
70
+ - lib/makara/cookie.rb
68
71
  - lib/makara/error_handler.rb
69
72
  - lib/makara/errors/all_connections_blacklisted.rb
70
73
  - lib/makara/errors/blacklist_connection.rb
74
+ - lib/makara/errors/blacklisted_while_in_transaction.rb
75
+ - lib/makara/errors/invalid_shard.rb
71
76
  - lib/makara/errors/makara_error.rb
72
77
  - lib/makara/errors/no_connections_available.rb
73
78
  - lib/makara/logging/logger.rb
@@ -79,34 +84,43 @@ files:
79
84
  - lib/makara/strategies/abstract.rb
80
85
  - lib/makara/strategies/priority_failover.rb
81
86
  - lib/makara/strategies/round_robin.rb
87
+ - lib/makara/strategies/shard_aware.rb
82
88
  - lib/makara/version.rb
83
89
  - makara.gemspec
84
90
  - spec/active_record/connection_adapters/makara_abstract_adapter_error_handling_spec.rb
85
91
  - spec/active_record/connection_adapters/makara_abstract_adapter_spec.rb
86
92
  - spec/active_record/connection_adapters/makara_mysql2_adapter_spec.rb
93
+ - spec/active_record/connection_adapters/makara_postgis_adapter_spec.rb
87
94
  - spec/active_record/connection_adapters/makara_postgresql_adapter_spec.rb
88
95
  - spec/cache_spec.rb
89
96
  - spec/config_parser_spec.rb
90
97
  - spec/connection_wrapper_spec.rb
91
98
  - spec/context_spec.rb
99
+ - spec/cookie_spec.rb
92
100
  - spec/middleware_spec.rb
93
101
  - spec/pool_spec.rb
94
102
  - spec/proxy_spec.rb
95
103
  - spec/spec_helper.rb
96
104
  - spec/strategies/priority_failover_spec.rb
97
105
  - spec/strategies/round_robin_spec.rb
106
+ - spec/strategies/shard_aware_spec.rb
98
107
  - spec/support/deep_dup.rb
99
108
  - spec/support/helpers.rb
100
109
  - spec/support/mock_objects.rb
101
110
  - spec/support/mysql2_database.yml
102
111
  - spec/support/mysql2_database_with_custom_errors.yml
103
112
  - spec/support/pool_extensions.rb
113
+ - spec/support/postgis_database.yml
114
+ - spec/support/postgis_schema.rb
104
115
  - spec/support/postgresql_database.yml
105
116
  - spec/support/proxy_extensions.rb
106
117
  - spec/support/schema.rb
107
- homepage: ''
108
- licenses: []
109
- metadata: {}
118
+ - spec/support/user.rb
119
+ homepage: https://github.com/taskrabbit/makara
120
+ licenses:
121
+ - MIT
122
+ metadata:
123
+ source_code_uri: https://github.com/taskrabbit/makara
110
124
  post_install_message:
111
125
  rdoc_options: []
112
126
  require_paths:
@@ -122,8 +136,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
122
136
  - !ruby/object:Gem::Version
123
137
  version: '0'
124
138
  requirements: []
125
- rubyforge_project:
126
- rubygems_version: 2.5.2
139
+ rubygems_version: 3.1.4
127
140
  signing_key:
128
141
  specification_version: 4
129
142
  summary: Read-write split your DB yo
@@ -131,23 +144,29 @@ test_files:
131
144
  - spec/active_record/connection_adapters/makara_abstract_adapter_error_handling_spec.rb
132
145
  - spec/active_record/connection_adapters/makara_abstract_adapter_spec.rb
133
146
  - spec/active_record/connection_adapters/makara_mysql2_adapter_spec.rb
147
+ - spec/active_record/connection_adapters/makara_postgis_adapter_spec.rb
134
148
  - spec/active_record/connection_adapters/makara_postgresql_adapter_spec.rb
135
149
  - spec/cache_spec.rb
136
150
  - spec/config_parser_spec.rb
137
151
  - spec/connection_wrapper_spec.rb
138
152
  - spec/context_spec.rb
153
+ - spec/cookie_spec.rb
139
154
  - spec/middleware_spec.rb
140
155
  - spec/pool_spec.rb
141
156
  - spec/proxy_spec.rb
142
157
  - spec/spec_helper.rb
143
158
  - spec/strategies/priority_failover_spec.rb
144
159
  - spec/strategies/round_robin_spec.rb
160
+ - spec/strategies/shard_aware_spec.rb
145
161
  - spec/support/deep_dup.rb
146
162
  - spec/support/helpers.rb
147
163
  - spec/support/mock_objects.rb
148
164
  - spec/support/mysql2_database.yml
149
165
  - spec/support/mysql2_database_with_custom_errors.yml
150
166
  - spec/support/pool_extensions.rb
167
+ - spec/support/postgis_database.yml
168
+ - spec/support/postgis_schema.rb
151
169
  - spec/support/postgresql_database.yml
152
170
  - spec/support/proxy_extensions.rb
153
171
  - spec/support/schema.rb
172
+ - spec/support/user.rb
@@ -1,28 +0,0 @@
1
- module Makara
2
- module Cache
3
- class MemoryStore
4
-
5
- def initialize
6
- @data = {}
7
- end
8
-
9
- def read(key)
10
- clean
11
- @data[key].try(:[], 0)
12
- end
13
-
14
- def write(key, value, options = {})
15
- clean
16
- @data[key] = [value, Time.now.to_i + (options[:expires_in] || 5).to_i]
17
- true
18
- end
19
-
20
- protected
21
-
22
- def clean
23
- @data.delete_if{|k,v| v[1] <= Time.now.to_i }
24
- end
25
-
26
- end
27
- end
28
- end
@@ -1,15 +0,0 @@
1
- module Makara
2
- module Cache
3
- class NoopStore
4
-
5
- def read(key)
6
- nil
7
- end
8
-
9
- def write(key, value, options = {})
10
- nil
11
- end
12
-
13
- end
14
- end
15
- end