alterity 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/alterity.rb +6 -2
- data/lib/alterity/configuration.rb +0 -3
- data/lib/alterity/version.rb +1 -1
- data/spec/bin/custom_config.rb +6 -1
- data/spec/bin/rails_app_migration_test.sh +4 -1
- data/spec/bin/test_custom_config_result.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1e235d55d20337f7ff9bf2b4eed178c3585c4ff682bda637a34339c507644438
|
4
|
+
data.tar.gz: b41b2d051afdbb66a42f5ce00e2daff2b8e9b4f8935fa3c9f01e64ab0148d9e4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 749cd02d5f7b2b6feb3e5e3b63c52274f701946cc03fd067b51f5c4214d7a2c73fab365ca329323058d1fb7c09999d3c1c7a8608bcb9574faa406bc244ad08cd
|
7
|
+
data.tar.gz: a0234815613fe77cf4db1950b8ef72de5c0def70b6abe45394c4efa1d5c7b1154d99454f81d9babcd8f00f58cbdf63edcd2f9cb181c22102e08cbaf7aa15691e
|
data/lib/alterity.rb
CHANGED
@@ -54,6 +54,10 @@ class Alterity
|
|
54
54
|
def prepare_replicas_dsns_table
|
55
55
|
return if config.replicas_dsns_table.blank?
|
56
56
|
|
57
|
+
dsns = config.replicas_dsns.dup
|
58
|
+
# Automatically remove master
|
59
|
+
dsns.reject! { |dsn| dsn.split(",").include?("h=#{config.host}") }
|
60
|
+
|
57
61
|
database = config.replicas_dsns_database
|
58
62
|
table = "#{database}.#{config.replicas_dsns_table}"
|
59
63
|
connection = ActiveRecord::Base.connection
|
@@ -67,11 +71,11 @@ class Alterity
|
|
67
71
|
) ENGINE=InnoDB
|
68
72
|
SQL
|
69
73
|
connection.execute "TRUNCATE #{table}"
|
70
|
-
return if
|
74
|
+
return if dsns.empty?
|
71
75
|
|
72
76
|
connection.execute <<~SQL
|
73
77
|
INSERT INTO #{table} (dsn) VALUES
|
74
|
-
#{
|
78
|
+
#{dsns.map { |dsn| "('#{dsn}')" }.join(',')}
|
75
79
|
SQL
|
76
80
|
end
|
77
81
|
end
|
@@ -23,9 +23,6 @@ class Alterity
|
|
23
23
|
parts = dsn.split(",")
|
24
24
|
# automatically add default port
|
25
25
|
parts << "P=3306" unless parts.any? { |part| part.start_with?("P=") }
|
26
|
-
# automatically remove master
|
27
|
-
next if parts.include?("h=#{host}") && parts.include?("P=#{port}")
|
28
|
-
|
29
26
|
parts.join(",")
|
30
27
|
end.compact
|
31
28
|
end
|
data/lib/alterity/version.rb
CHANGED
data/spec/bin/custom_config.rb
CHANGED
@@ -15,7 +15,12 @@ Alterity.configure do |config|
|
|
15
15
|
table: "replicas_dsns",
|
16
16
|
dsns: [
|
17
17
|
"h=host1",
|
18
|
-
"h=host2"
|
18
|
+
"h=host2",
|
19
|
+
# we may encounter an app where the replica host is actually pointing to master;
|
20
|
+
# pt-osc doesn't deal well with this and will wait forever.
|
21
|
+
# So we're testing here that Alterity will detect that this is master (same as config.host),
|
22
|
+
# and will not insert it into the `replicas_dsns` table.
|
23
|
+
"h=#{ENV['MYSQL_HOST']}"
|
19
24
|
]
|
20
25
|
)
|
21
26
|
end
|
@@ -56,7 +56,7 @@ bundle e rails g migration add_color_to_shirts color:string
|
|
56
56
|
|
57
57
|
# Test default configuration works as expected
|
58
58
|
bundle e rails db:migrate --trace
|
59
|
-
rails runner 'Shirt.columns.map(&:name).include?("color") || exit(1)'
|
59
|
+
bundle e rails runner 'Shirt.columns.map(&:name).include?("color") || exit(1)'
|
60
60
|
|
61
61
|
# Now test custom command and replication setup
|
62
62
|
cp ../spec/bin/custom_config.rb config/initializers/alterity.rb
|
@@ -66,3 +66,6 @@ bundle e rails g migration add_color2_to_shirts color2:string
|
|
66
66
|
bundle e rails db:migrate --trace
|
67
67
|
|
68
68
|
ruby ../spec/bin/test_custom_config_result.rb
|
69
|
+
|
70
|
+
# Also testing what's in replicas_dsns, also checking that master was detected and removed.
|
71
|
+
bundle e rails runner 'res=ActiveRecord::Base.connection.execute("select dsn from percona.replicas_dsns").to_a.flatten;p(res); res == ["h=host1,P=3306", "h=host2,P=3306"] || exit(1)'
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
result = File.read("/tmp/custom_command_result.txt").downcase.strip
|
4
4
|
|
5
|
-
expected_result = %({:host=>"127.0.0.1", :port=>nil, :username=>"root", :database=>"alterity_test", :replicas_dsns_database=>"percona", :replicas_dsns_table=>"replicas_dsns", :replicas_dsns=>["h=host1,P=3306", "h=host2,P=3306"]}
|
5
|
+
expected_result = %({:host=>"127.0.0.1", :port=>nil, :username=>"root", :database=>"alterity_test", :replicas_dsns_database=>"percona", :replicas_dsns_table=>"replicas_dsns", :replicas_dsns=>["h=host1,P=3306", "h=host2,P=3306", "h=127.0.0.1,P=3306"]}
|
6
6
|
shirts
|
7
7
|
"ADD \\`color2\\` VARCHAR(255)").downcase.strip
|
8
8
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: alterity
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Maximin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-04-
|
11
|
+
date: 2021-04-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mysql2
|