switchman 1.2.2 → 1.2.3
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.
- checksums.yaml +8 -8
- data/app/models/switchman/shard.rb +8 -1
- data/lib/switchman/active_record/abstract_adapter.rb +9 -0
- data/lib/switchman/active_record/connection_handler.rb +5 -0
- data/lib/switchman/active_record/connection_pool.rb +28 -0
- data/lib/switchman/connection_pool_proxy.rb +10 -1
- data/lib/switchman/engine.rb +1 -1
- data/lib/switchman/version.rb +1 -1
- data/spec/dummy/db/shard_4521.sqlite3 +0 -0
- data/spec/dummy/db/shard_4549.sqlite3 +0 -0
- data/spec/dummy/db/shard_4573.sqlite3 +0 -0
- data/spec/dummy/log/development.log +31 -0
- data/spec/dummy/log/test.log +10232 -0
- data/spec/dummy/tmp/cache/37F/680/shard%2F4524 +1 -0
- data/spec/dummy/tmp/cache/37F/6C0/shard%2F4560 +1 -0
- data/spec/dummy/tmp/cache/382/6A0/shard%2F4518 +0 -0
- data/spec/dummy/tmp/cache/383/6B0/shard%2F4519 +0 -0
- data/spec/dummy/tmp/cache/383/6D0/shard%2F4537 +1 -0
- data/spec/dummy/tmp/cache/384/700/shard%2F4556 +0 -0
- data/spec/dummy/tmp/cache/385/710/shard%2F4557 +0 -0
- data/spec/dummy/tmp/cache/3B1/0F0/shard%2F14534 +1 -0
- data/spec/dummy/tmp/cache/3B4/100/shard%2F14519 +1 -0
- data/spec/dummy/tmp/cache/3B6/160/shard%2F14557 +1 -0
- data/spec/lib/active_record/abstract_adapter_spec.rb +16 -0
- data/spec/lib/active_record/connection_pool_spec.rb +58 -0
- data/spec/lib/connection_pool_proxy_spec.rb +7 -0
- metadata +31 -3
@@ -0,0 +1 @@
|
|
1
|
+
o: ActiveSupport::Cache::Entry :@compressedF:@expires_in0:@created_atf1402521655.235334:@value":nil
|
@@ -0,0 +1 @@
|
|
1
|
+
o: ActiveSupport::Cache::Entry :@compressedF:@expires_in0:@created_atf1402521681.65534:@value":nil
|
Binary file
|
Binary file
|
@@ -0,0 +1 @@
|
|
1
|
+
o: ActiveSupport::Cache::Entry :@compressedF:@expires_in0:@created_atf1402521664.86255:@value":nil
|
Binary file
|
Binary file
|
@@ -0,0 +1 @@
|
|
1
|
+
o: ActiveSupport::Cache::Entry :@compressedF:@expires_in0:@created_atf1402521665.039567:@value":nil
|
@@ -0,0 +1 @@
|
|
1
|
+
o: ActiveSupport::Cache::Entry :@compressedF:@expires_in0:@created_atf1402521654.980878:@value":nil
|
@@ -0,0 +1 @@
|
|
1
|
+
o: ActiveSupport::Cache::Entry :@compressedF:@expires_in0:@created_atf1402521681.713449:@value":nil
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
module Switchman
|
4
|
+
module ActiveRecord
|
5
|
+
describe AbstractAdapter do
|
6
|
+
include RSpecHelper
|
7
|
+
|
8
|
+
it "should update the connection's last_query_at on query" do
|
9
|
+
conn = @shard1.activate{ User.connection }
|
10
|
+
Time.stubs(:now).returns(conn.last_query_at + 1.minute)
|
11
|
+
@shard1.activate{ User.create! }
|
12
|
+
conn.last_query_at.should == Time.now
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -18,6 +18,64 @@ module Switchman
|
|
18
18
|
lambda { User.count }.should_not raise_exception
|
19
19
|
end
|
20
20
|
end
|
21
|
+
|
22
|
+
describe "clear_idle_connections!" do
|
23
|
+
before do
|
24
|
+
pending 'A "real" database"' unless Shard.default.database_server.shareable?
|
25
|
+
@server = DatabaseServer.create(:config => Shard.default.database_server.config.dup)
|
26
|
+
@shard = @server.shards.create!
|
27
|
+
@conn, @pool = @shard.activate{ [User.connection, User.connection_pool.current_pool] }
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should disconnect idle connections" do
|
31
|
+
@pool.checkin(@conn)
|
32
|
+
@conn.expects(:disconnect!).once
|
33
|
+
@pool.clear_idle_connections!(@conn.last_query_at + 1)
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should remove idle connections" do
|
37
|
+
@pool.checkin(@conn)
|
38
|
+
@pool.clear_idle_connections!(@conn.last_query_at + 1)
|
39
|
+
@pool.connections.should be_empty
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should not affect idle but checked out connections" do
|
43
|
+
@conn.expects(:disconnect!).never
|
44
|
+
@pool.clear_idle_connections!(@conn.last_query_at + 1)
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should not affect checked in but recently active connections" do
|
48
|
+
@pool.checkin(@conn)
|
49
|
+
@conn.expects(:disconnect!).never
|
50
|
+
@pool.clear_idle_connections!(@conn.last_query_at - 1)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe "release_connection" do
|
55
|
+
before do
|
56
|
+
pending 'A "real" database"' unless Shard.default.database_server.shareable?
|
57
|
+
@server = DatabaseServer.create(:config => Shard.default.database_server.config.dup)
|
58
|
+
@shard = @server.shards.create!
|
59
|
+
@pool = @shard.activate{ User.connection_pool.current_pool }
|
60
|
+
@timeout_was = @pool.spec.config[:idle_timeout]
|
61
|
+
end
|
62
|
+
|
63
|
+
after do
|
64
|
+
@pool.spec.config[:idle_timeout] = @timeout_was
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should clear idle connections if idle timeout is configured" do
|
68
|
+
@pool.spec.config[:idle_timeout] = 1.minute
|
69
|
+
@pool.expects(:clear_idle_connections!).at_least_once
|
70
|
+
@pool.release_connection
|
71
|
+
end
|
72
|
+
|
73
|
+
it "should still work if idle timeout is not configured" do
|
74
|
+
@pool.spec.config[:idle_timeout] = nil
|
75
|
+
@pool.expects(:clear_idle_connections!).never
|
76
|
+
lambda { @pool.release_connection }.should_not raise_exception
|
77
|
+
end
|
78
|
+
end
|
21
79
|
end
|
22
80
|
end
|
23
81
|
end
|
@@ -11,5 +11,12 @@ module Switchman
|
|
11
11
|
::ActiveRecord::Base.connection.should_not == @sqlite_shard2.activate { ::ActiveRecord::Base.connection }
|
12
12
|
@sqlite_shard1.activate { ::ActiveRecord::Base.connection }.should_not == @sqlite_shard2.activate { ::ActiveRecord::Base.connection }
|
13
13
|
end
|
14
|
+
|
15
|
+
it "should forward clear_idle_connections! to each of its pools" do
|
16
|
+
proxy = User.connection_pool
|
17
|
+
@shard1.activate{ proxy.current_pool.expects(:clear_idle_connections!).once }
|
18
|
+
@shard2.activate{ proxy.current_pool.expects(:clear_idle_connections!).once }
|
19
|
+
proxy.clear_idle_connections!(Time.now)
|
20
|
+
end
|
14
21
|
end
|
15
22
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: switchman
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cody Cutrer
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2014-
|
13
|
+
date: 2014-06-12 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: railties
|
@@ -204,6 +204,9 @@ files:
|
|
204
204
|
- spec/dummy/db/migrate/20140219183820_create_roots.rb
|
205
205
|
- spec/dummy/db/schema.rb
|
206
206
|
- spec/dummy/db/shard_4377.sqlite3
|
207
|
+
- spec/dummy/db/shard_4521.sqlite3
|
208
|
+
- spec/dummy/db/shard_4549.sqlite3
|
209
|
+
- spec/dummy/db/shard_4573.sqlite3
|
207
210
|
- spec/dummy/db/switchman_test.sqlite3
|
208
211
|
- spec/dummy/log/development.log
|
209
212
|
- spec/dummy/log/test.log
|
@@ -629,7 +632,9 @@ files:
|
|
629
632
|
- spec/dummy/tmp/cache/37F/650/shard%2F2634
|
630
633
|
- spec/dummy/tmp/cache/37F/660/shard%2F3372
|
631
634
|
- spec/dummy/tmp/cache/37F/670/shard%2F4353
|
635
|
+
- spec/dummy/tmp/cache/37F/680/shard%2F4524
|
632
636
|
- spec/dummy/tmp/cache/37F/690/shard%2F4290
|
637
|
+
- spec/dummy/tmp/cache/37F/6C0/shard%2F4560
|
633
638
|
- spec/dummy/tmp/cache/380/5C0/shard%2F1168
|
634
639
|
- spec/dummy/tmp/cache/380/5E0/shard%2F1429
|
635
640
|
- spec/dummy/tmp/cache/380/5F0/shard%2F1195
|
@@ -720,6 +725,7 @@ files:
|
|
720
725
|
- spec/dummy/tmp/cache/382/690/shard%2F1674
|
721
726
|
- spec/dummy/tmp/cache/382/6A0/shard%2F1845
|
722
727
|
- spec/dummy/tmp/cache/382/6A0/shard%2F2493
|
728
|
+
- spec/dummy/tmp/cache/382/6A0/shard%2F4518
|
723
729
|
- spec/dummy/tmp/cache/382/6B0/shard%2F3636
|
724
730
|
- spec/dummy/tmp/cache/382/6B0/shard%2F4284
|
725
731
|
- spec/dummy/tmp/cache/382/6C0/shard%2F2592
|
@@ -745,9 +751,11 @@ files:
|
|
745
751
|
- spec/dummy/tmp/cache/383/690/shard%2F4177
|
746
752
|
- spec/dummy/tmp/cache/383/6A0/shard%2F2809
|
747
753
|
- spec/dummy/tmp/cache/383/6A0/shard%2F3376
|
754
|
+
- spec/dummy/tmp/cache/383/6B0/shard%2F4519
|
748
755
|
- spec/dummy/tmp/cache/383/6C0/shard%2F1774
|
749
756
|
- spec/dummy/tmp/cache/383/6C0/shard%2F2746
|
750
757
|
- spec/dummy/tmp/cache/383/6D0/shard%2F2755
|
758
|
+
- spec/dummy/tmp/cache/383/6D0/shard%2F4537
|
751
759
|
- spec/dummy/tmp/cache/383/6E0/shard%2F2764
|
752
760
|
- spec/dummy/tmp/cache/383/6F0/shard%2F3907
|
753
761
|
- spec/dummy/tmp/cache/383/6F0/shard%2F4393
|
@@ -768,6 +776,7 @@ files:
|
|
768
776
|
- spec/dummy/tmp/cache/384/6F0/shard%2F2765
|
769
777
|
- spec/dummy/tmp/cache/384/700/shard%2F1883
|
770
778
|
- spec/dummy/tmp/cache/384/700/shard%2F3827
|
779
|
+
- spec/dummy/tmp/cache/384/700/shard%2F4556
|
771
780
|
- spec/dummy/tmp/cache/384/710/shard%2F1892
|
772
781
|
- spec/dummy/tmp/cache/384/710/shard%2F2864
|
773
782
|
- spec/dummy/tmp/cache/384/720/shard%2F2873
|
@@ -781,6 +790,7 @@ files:
|
|
781
790
|
- spec/dummy/tmp/cache/385/6F0/shard%2F2595
|
782
791
|
- spec/dummy/tmp/cache/385/710/shard%2F2694
|
783
792
|
- spec/dummy/tmp/cache/385/710/shard%2F3828
|
793
|
+
- spec/dummy/tmp/cache/385/710/shard%2F4557
|
784
794
|
- spec/dummy/tmp/cache/386/690/shard%2F1399
|
785
795
|
- spec/dummy/tmp/cache/386/6B0/shard%2F3199
|
786
796
|
- spec/dummy/tmp/cache/386/6C0/shard%2F2479
|
@@ -909,6 +919,7 @@ files:
|
|
909
919
|
- spec/dummy/tmp/cache/3B1/0E0/shard%2F13472
|
910
920
|
- spec/dummy/tmp/cache/3B1/0F0/shard%2F12833
|
911
921
|
- spec/dummy/tmp/cache/3B1/0F0/shard%2F14291
|
922
|
+
- spec/dummy/tmp/cache/3B1/0F0/shard%2F14534
|
912
923
|
- spec/dummy/tmp/cache/3B2/000/shard%2F10179
|
913
924
|
- spec/dummy/tmp/cache/3B2/050/shard%2F10386
|
914
925
|
- spec/dummy/tmp/cache/3B2/060/shard%2F13149
|
@@ -932,6 +943,7 @@ files:
|
|
932
943
|
- spec/dummy/tmp/cache/3B4/0B0/shard%2F11558
|
933
944
|
- spec/dummy/tmp/cache/3B4/0E0/shard%2F10775
|
934
945
|
- spec/dummy/tmp/cache/3B4/0E0/shard%2F12719
|
946
|
+
- spec/dummy/tmp/cache/3B4/100/shard%2F14519
|
935
947
|
- spec/dummy/tmp/cache/3B4/110/shard%2F13394
|
936
948
|
- spec/dummy/tmp/cache/3B4/130/shard%2F11873
|
937
949
|
- spec/dummy/tmp/cache/3B4/160/shard%2F11981
|
@@ -950,6 +962,7 @@ files:
|
|
950
962
|
- spec/dummy/tmp/cache/3B6/120/shard%2F11686
|
951
963
|
- spec/dummy/tmp/cache/3B6/150/shard%2F12685
|
952
964
|
- spec/dummy/tmp/cache/3B6/160/shard%2F13828
|
965
|
+
- spec/dummy/tmp/cache/3B6/160/shard%2F14557
|
953
966
|
- spec/dummy/tmp/cache/3B7/100/shard%2F10688
|
954
967
|
- spec/dummy/tmp/cache/3B7/110/shard%2F11669
|
955
968
|
- spec/dummy/tmp/cache/3B7/140/shard%2F12668
|
@@ -1093,6 +1106,7 @@ files:
|
|
1093
1106
|
- spec/dummy/tmp/cache/52E/CC0/shard_1898%3Akey
|
1094
1107
|
- spec/dummy/tmp/cache/52F/D30/shard_1899%3Akey
|
1095
1108
|
- spec/lib/action_controller/caching_spec.rb
|
1109
|
+
- spec/lib/active_record/abstract_adapter_spec.rb
|
1096
1110
|
- spec/lib/active_record/association_spec.rb
|
1097
1111
|
- spec/lib/active_record/attribute_methods_spec.rb
|
1098
1112
|
- spec/lib/active_record/base_spec.rb
|
@@ -1132,7 +1146,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
1132
1146
|
version: '0'
|
1133
1147
|
requirements: []
|
1134
1148
|
rubyforge_project:
|
1135
|
-
rubygems_version: 2.
|
1149
|
+
rubygems_version: 2.3.0
|
1136
1150
|
signing_key:
|
1137
1151
|
specification_version: 4
|
1138
1152
|
summary: Rails 3 sharding magic
|
@@ -1166,6 +1180,9 @@ test_files:
|
|
1166
1180
|
- spec/dummy/db/migrate/20140219183820_create_roots.rb
|
1167
1181
|
- spec/dummy/db/schema.rb
|
1168
1182
|
- spec/dummy/db/shard_4377.sqlite3
|
1183
|
+
- spec/dummy/db/shard_4521.sqlite3
|
1184
|
+
- spec/dummy/db/shard_4549.sqlite3
|
1185
|
+
- spec/dummy/db/shard_4573.sqlite3
|
1169
1186
|
- spec/dummy/db/switchman_test.sqlite3
|
1170
1187
|
- spec/dummy/log/development.log
|
1171
1188
|
- spec/dummy/log/test.log
|
@@ -1592,7 +1609,9 @@ test_files:
|
|
1592
1609
|
- spec/dummy/tmp/cache/37F/650/shard%2F2634
|
1593
1610
|
- spec/dummy/tmp/cache/37F/660/shard%2F3372
|
1594
1611
|
- spec/dummy/tmp/cache/37F/670/shard%2F4353
|
1612
|
+
- spec/dummy/tmp/cache/37F/680/shard%2F4524
|
1595
1613
|
- spec/dummy/tmp/cache/37F/690/shard%2F4290
|
1614
|
+
- spec/dummy/tmp/cache/37F/6C0/shard%2F4560
|
1596
1615
|
- spec/dummy/tmp/cache/380/5C0/shard%2F1168
|
1597
1616
|
- spec/dummy/tmp/cache/380/5E0/shard%2F1429
|
1598
1617
|
- spec/dummy/tmp/cache/380/5F0/shard%2F1195
|
@@ -1683,6 +1702,7 @@ test_files:
|
|
1683
1702
|
- spec/dummy/tmp/cache/382/690/shard%2F1674
|
1684
1703
|
- spec/dummy/tmp/cache/382/6A0/shard%2F1845
|
1685
1704
|
- spec/dummy/tmp/cache/382/6A0/shard%2F2493
|
1705
|
+
- spec/dummy/tmp/cache/382/6A0/shard%2F4518
|
1686
1706
|
- spec/dummy/tmp/cache/382/6B0/shard%2F3636
|
1687
1707
|
- spec/dummy/tmp/cache/382/6B0/shard%2F4284
|
1688
1708
|
- spec/dummy/tmp/cache/382/6C0/shard%2F2592
|
@@ -1708,9 +1728,11 @@ test_files:
|
|
1708
1728
|
- spec/dummy/tmp/cache/383/690/shard%2F4177
|
1709
1729
|
- spec/dummy/tmp/cache/383/6A0/shard%2F2809
|
1710
1730
|
- spec/dummy/tmp/cache/383/6A0/shard%2F3376
|
1731
|
+
- spec/dummy/tmp/cache/383/6B0/shard%2F4519
|
1711
1732
|
- spec/dummy/tmp/cache/383/6C0/shard%2F1774
|
1712
1733
|
- spec/dummy/tmp/cache/383/6C0/shard%2F2746
|
1713
1734
|
- spec/dummy/tmp/cache/383/6D0/shard%2F2755
|
1735
|
+
- spec/dummy/tmp/cache/383/6D0/shard%2F4537
|
1714
1736
|
- spec/dummy/tmp/cache/383/6E0/shard%2F2764
|
1715
1737
|
- spec/dummy/tmp/cache/383/6F0/shard%2F3907
|
1716
1738
|
- spec/dummy/tmp/cache/383/6F0/shard%2F4393
|
@@ -1731,6 +1753,7 @@ test_files:
|
|
1731
1753
|
- spec/dummy/tmp/cache/384/6F0/shard%2F2765
|
1732
1754
|
- spec/dummy/tmp/cache/384/700/shard%2F1883
|
1733
1755
|
- spec/dummy/tmp/cache/384/700/shard%2F3827
|
1756
|
+
- spec/dummy/tmp/cache/384/700/shard%2F4556
|
1734
1757
|
- spec/dummy/tmp/cache/384/710/shard%2F1892
|
1735
1758
|
- spec/dummy/tmp/cache/384/710/shard%2F2864
|
1736
1759
|
- spec/dummy/tmp/cache/384/720/shard%2F2873
|
@@ -1744,6 +1767,7 @@ test_files:
|
|
1744
1767
|
- spec/dummy/tmp/cache/385/6F0/shard%2F2595
|
1745
1768
|
- spec/dummy/tmp/cache/385/710/shard%2F2694
|
1746
1769
|
- spec/dummy/tmp/cache/385/710/shard%2F3828
|
1770
|
+
- spec/dummy/tmp/cache/385/710/shard%2F4557
|
1747
1771
|
- spec/dummy/tmp/cache/386/690/shard%2F1399
|
1748
1772
|
- spec/dummy/tmp/cache/386/6B0/shard%2F3199
|
1749
1773
|
- spec/dummy/tmp/cache/386/6C0/shard%2F2479
|
@@ -1872,6 +1896,7 @@ test_files:
|
|
1872
1896
|
- spec/dummy/tmp/cache/3B1/0E0/shard%2F13472
|
1873
1897
|
- spec/dummy/tmp/cache/3B1/0F0/shard%2F12833
|
1874
1898
|
- spec/dummy/tmp/cache/3B1/0F0/shard%2F14291
|
1899
|
+
- spec/dummy/tmp/cache/3B1/0F0/shard%2F14534
|
1875
1900
|
- spec/dummy/tmp/cache/3B2/000/shard%2F10179
|
1876
1901
|
- spec/dummy/tmp/cache/3B2/050/shard%2F10386
|
1877
1902
|
- spec/dummy/tmp/cache/3B2/060/shard%2F13149
|
@@ -1895,6 +1920,7 @@ test_files:
|
|
1895
1920
|
- spec/dummy/tmp/cache/3B4/0B0/shard%2F11558
|
1896
1921
|
- spec/dummy/tmp/cache/3B4/0E0/shard%2F10775
|
1897
1922
|
- spec/dummy/tmp/cache/3B4/0E0/shard%2F12719
|
1923
|
+
- spec/dummy/tmp/cache/3B4/100/shard%2F14519
|
1898
1924
|
- spec/dummy/tmp/cache/3B4/110/shard%2F13394
|
1899
1925
|
- spec/dummy/tmp/cache/3B4/130/shard%2F11873
|
1900
1926
|
- spec/dummy/tmp/cache/3B4/160/shard%2F11981
|
@@ -1913,6 +1939,7 @@ test_files:
|
|
1913
1939
|
- spec/dummy/tmp/cache/3B6/120/shard%2F11686
|
1914
1940
|
- spec/dummy/tmp/cache/3B6/150/shard%2F12685
|
1915
1941
|
- spec/dummy/tmp/cache/3B6/160/shard%2F13828
|
1942
|
+
- spec/dummy/tmp/cache/3B6/160/shard%2F14557
|
1916
1943
|
- spec/dummy/tmp/cache/3B7/100/shard%2F10688
|
1917
1944
|
- spec/dummy/tmp/cache/3B7/110/shard%2F11669
|
1918
1945
|
- spec/dummy/tmp/cache/3B7/140/shard%2F12668
|
@@ -2056,6 +2083,7 @@ test_files:
|
|
2056
2083
|
- spec/dummy/tmp/cache/52E/CC0/shard_1898%3Akey
|
2057
2084
|
- spec/dummy/tmp/cache/52F/D30/shard_1899%3Akey
|
2058
2085
|
- spec/lib/action_controller/caching_spec.rb
|
2086
|
+
- spec/lib/active_record/abstract_adapter_spec.rb
|
2059
2087
|
- spec/lib/active_record/association_spec.rb
|
2060
2088
|
- spec/lib/active_record/attribute_methods_spec.rb
|
2061
2089
|
- spec/lib/active_record/base_spec.rb
|