lhm-shopify 3.3.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (94) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/test.yml +34 -0
  3. data/.gitignore +17 -0
  4. data/.rubocop.yml +183 -0
  5. data/.travis.yml +21 -0
  6. data/CHANGELOG.md +216 -0
  7. data/Gemfile +5 -0
  8. data/LICENSE +27 -0
  9. data/README.md +284 -0
  10. data/Rakefile +22 -0
  11. data/bin/.gitkeep +0 -0
  12. data/dbdeployer/config.json +32 -0
  13. data/dbdeployer/install.sh +64 -0
  14. data/dev.yml +20 -0
  15. data/gemfiles/ar-2.3_mysql.gemfile +6 -0
  16. data/gemfiles/ar-3.2_mysql.gemfile +5 -0
  17. data/gemfiles/ar-3.2_mysql2.gemfile +5 -0
  18. data/gemfiles/ar-4.0_mysql2.gemfile +5 -0
  19. data/gemfiles/ar-4.1_mysql2.gemfile +5 -0
  20. data/gemfiles/ar-4.2_mysql2.gemfile +5 -0
  21. data/gemfiles/ar-5.0_mysql2.gemfile +5 -0
  22. data/lhm.gemspec +34 -0
  23. data/lib/lhm.rb +131 -0
  24. data/lib/lhm/atomic_switcher.rb +52 -0
  25. data/lib/lhm/chunk_finder.rb +32 -0
  26. data/lib/lhm/chunk_insert.rb +51 -0
  27. data/lib/lhm/chunker.rb +87 -0
  28. data/lib/lhm/cleanup/current.rb +74 -0
  29. data/lib/lhm/command.rb +48 -0
  30. data/lib/lhm/entangler.rb +117 -0
  31. data/lib/lhm/intersection.rb +51 -0
  32. data/lib/lhm/invoker.rb +98 -0
  33. data/lib/lhm/locked_switcher.rb +74 -0
  34. data/lib/lhm/migration.rb +43 -0
  35. data/lib/lhm/migrator.rb +237 -0
  36. data/lib/lhm/printer.rb +59 -0
  37. data/lib/lhm/railtie.rb +9 -0
  38. data/lib/lhm/sql_helper.rb +77 -0
  39. data/lib/lhm/sql_retry.rb +61 -0
  40. data/lib/lhm/table.rb +121 -0
  41. data/lib/lhm/table_name.rb +23 -0
  42. data/lib/lhm/test_support.rb +35 -0
  43. data/lib/lhm/throttler.rb +36 -0
  44. data/lib/lhm/throttler/slave_lag.rb +145 -0
  45. data/lib/lhm/throttler/threads_running.rb +53 -0
  46. data/lib/lhm/throttler/time.rb +29 -0
  47. data/lib/lhm/timestamp.rb +11 -0
  48. data/lib/lhm/version.rb +6 -0
  49. data/shipit.rubygems.yml +0 -0
  50. data/spec/.lhm.example +4 -0
  51. data/spec/README.md +58 -0
  52. data/spec/fixtures/bigint_table.ddl +4 -0
  53. data/spec/fixtures/composite_primary_key.ddl +7 -0
  54. data/spec/fixtures/custom_primary_key.ddl +6 -0
  55. data/spec/fixtures/destination.ddl +6 -0
  56. data/spec/fixtures/lines.ddl +7 -0
  57. data/spec/fixtures/origin.ddl +6 -0
  58. data/spec/fixtures/permissions.ddl +5 -0
  59. data/spec/fixtures/small_table.ddl +4 -0
  60. data/spec/fixtures/tracks.ddl +5 -0
  61. data/spec/fixtures/users.ddl +14 -0
  62. data/spec/fixtures/wo_id_int_column.ddl +6 -0
  63. data/spec/integration/atomic_switcher_spec.rb +93 -0
  64. data/spec/integration/chunk_insert_spec.rb +29 -0
  65. data/spec/integration/chunker_spec.rb +185 -0
  66. data/spec/integration/cleanup_spec.rb +136 -0
  67. data/spec/integration/entangler_spec.rb +66 -0
  68. data/spec/integration/integration_helper.rb +237 -0
  69. data/spec/integration/invoker_spec.rb +33 -0
  70. data/spec/integration/lhm_spec.rb +585 -0
  71. data/spec/integration/lock_wait_timeout_spec.rb +30 -0
  72. data/spec/integration/locked_switcher_spec.rb +50 -0
  73. data/spec/integration/sql_retry/lock_wait_spec.rb +125 -0
  74. data/spec/integration/sql_retry/lock_wait_timeout_test_helper.rb +101 -0
  75. data/spec/integration/table_spec.rb +91 -0
  76. data/spec/test_helper.rb +32 -0
  77. data/spec/unit/atomic_switcher_spec.rb +31 -0
  78. data/spec/unit/chunk_finder_spec.rb +73 -0
  79. data/spec/unit/chunk_insert_spec.rb +44 -0
  80. data/spec/unit/chunker_spec.rb +166 -0
  81. data/spec/unit/entangler_spec.rb +124 -0
  82. data/spec/unit/intersection_spec.rb +51 -0
  83. data/spec/unit/lhm_spec.rb +29 -0
  84. data/spec/unit/locked_switcher_spec.rb +51 -0
  85. data/spec/unit/migrator_spec.rb +146 -0
  86. data/spec/unit/printer_spec.rb +97 -0
  87. data/spec/unit/sql_helper_spec.rb +32 -0
  88. data/spec/unit/table_name_spec.rb +39 -0
  89. data/spec/unit/table_spec.rb +47 -0
  90. data/spec/unit/throttler/slave_lag_spec.rb +317 -0
  91. data/spec/unit/throttler/threads_running_spec.rb +64 -0
  92. data/spec/unit/throttler_spec.rb +124 -0
  93. data/spec/unit/unit_helper.rb +13 -0
  94. metadata +239 -0
@@ -0,0 +1,13 @@
1
+ # Copyright (c) 2011 - 2013, SoundCloud Ltd., Rany Keddo, Tobias Bielohlawek, Tobias
2
+ # Schmidt
3
+ require 'test_helper'
4
+
5
+ module UnitHelper
6
+ def fixture(name)
7
+ File.read $fixtures.join(name)
8
+ end
9
+
10
+ def strip(sql)
11
+ sql.strip.gsub(/\n */, "\n")
12
+ end
13
+ end
metadata ADDED
@@ -0,0 +1,239 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: lhm-shopify
3
+ version: !ruby/object:Gem::Version
4
+ version: 3.3.5
5
+ platform: ruby
6
+ authors:
7
+ - SoundCloud
8
+ - Shopify
9
+ - Rany Keddo
10
+ - Tobias Bielohlawek
11
+ - Tobias Schmidt
12
+ autorequire:
13
+ bindir: bin
14
+ cert_chain: []
15
+ date: 2021-07-06 00:00:00.000000000 Z
16
+ dependencies:
17
+ - !ruby/object:Gem::Dependency
18
+ name: retriable
19
+ requirement: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 3.0.0
24
+ type: :runtime
25
+ prerelease: false
26
+ version_requirements: !ruby/object:Gem::Requirement
27
+ requirements:
28
+ - - ">="
29
+ - !ruby/object:Gem::Version
30
+ version: 3.0.0
31
+ - !ruby/object:Gem::Dependency
32
+ name: minitest
33
+ requirement: !ruby/object:Gem::Requirement
34
+ requirements:
35
+ - - ">="
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
45
+ - !ruby/object:Gem::Dependency
46
+ name: mocha
47
+ requirement: !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ version: '0'
52
+ type: :development
53
+ prerelease: false
54
+ version_requirements: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: '0'
59
+ - !ruby/object:Gem::Dependency
60
+ name: rake
61
+ requirement: !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: '0'
73
+ - !ruby/object:Gem::Dependency
74
+ name: activerecord
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: '0'
80
+ type: :development
81
+ prerelease: false
82
+ version_requirements: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ version: '0'
87
+ - !ruby/object:Gem::Dependency
88
+ name: mysql2
89
+ requirement: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ type: :development
95
+ prerelease: false
96
+ version_requirements: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
101
+ - !ruby/object:Gem::Dependency
102
+ name: simplecov
103
+ requirement: !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - ">="
106
+ - !ruby/object:Gem::Version
107
+ version: '0'
108
+ type: :development
109
+ prerelease: false
110
+ version_requirements: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - ">="
113
+ - !ruby/object:Gem::Version
114
+ version: '0'
115
+ description: Migrate large tables without downtime by copying to a temporary table
116
+ in chunks. The old table is not dropped. Instead, it is moved to timestamp_table_name
117
+ for verification.
118
+ email: database-engineering@shopify.com
119
+ executables: []
120
+ extensions: []
121
+ extra_rdoc_files: []
122
+ files:
123
+ - ".github/workflows/test.yml"
124
+ - ".gitignore"
125
+ - ".rubocop.yml"
126
+ - ".travis.yml"
127
+ - CHANGELOG.md
128
+ - Gemfile
129
+ - LICENSE
130
+ - README.md
131
+ - Rakefile
132
+ - bin/.gitkeep
133
+ - dbdeployer/config.json
134
+ - dbdeployer/install.sh
135
+ - dev.yml
136
+ - gemfiles/ar-2.3_mysql.gemfile
137
+ - gemfiles/ar-3.2_mysql.gemfile
138
+ - gemfiles/ar-3.2_mysql2.gemfile
139
+ - gemfiles/ar-4.0_mysql2.gemfile
140
+ - gemfiles/ar-4.1_mysql2.gemfile
141
+ - gemfiles/ar-4.2_mysql2.gemfile
142
+ - gemfiles/ar-5.0_mysql2.gemfile
143
+ - lhm.gemspec
144
+ - lib/lhm.rb
145
+ - lib/lhm/atomic_switcher.rb
146
+ - lib/lhm/chunk_finder.rb
147
+ - lib/lhm/chunk_insert.rb
148
+ - lib/lhm/chunker.rb
149
+ - lib/lhm/cleanup/current.rb
150
+ - lib/lhm/command.rb
151
+ - lib/lhm/entangler.rb
152
+ - lib/lhm/intersection.rb
153
+ - lib/lhm/invoker.rb
154
+ - lib/lhm/locked_switcher.rb
155
+ - lib/lhm/migration.rb
156
+ - lib/lhm/migrator.rb
157
+ - lib/lhm/printer.rb
158
+ - lib/lhm/railtie.rb
159
+ - lib/lhm/sql_helper.rb
160
+ - lib/lhm/sql_retry.rb
161
+ - lib/lhm/table.rb
162
+ - lib/lhm/table_name.rb
163
+ - lib/lhm/test_support.rb
164
+ - lib/lhm/throttler.rb
165
+ - lib/lhm/throttler/slave_lag.rb
166
+ - lib/lhm/throttler/threads_running.rb
167
+ - lib/lhm/throttler/time.rb
168
+ - lib/lhm/timestamp.rb
169
+ - lib/lhm/version.rb
170
+ - shipit.rubygems.yml
171
+ - spec/.lhm.example
172
+ - spec/README.md
173
+ - spec/fixtures/bigint_table.ddl
174
+ - spec/fixtures/composite_primary_key.ddl
175
+ - spec/fixtures/custom_primary_key.ddl
176
+ - spec/fixtures/destination.ddl
177
+ - spec/fixtures/lines.ddl
178
+ - spec/fixtures/origin.ddl
179
+ - spec/fixtures/permissions.ddl
180
+ - spec/fixtures/small_table.ddl
181
+ - spec/fixtures/tracks.ddl
182
+ - spec/fixtures/users.ddl
183
+ - spec/fixtures/wo_id_int_column.ddl
184
+ - spec/integration/atomic_switcher_spec.rb
185
+ - spec/integration/chunk_insert_spec.rb
186
+ - spec/integration/chunker_spec.rb
187
+ - spec/integration/cleanup_spec.rb
188
+ - spec/integration/entangler_spec.rb
189
+ - spec/integration/integration_helper.rb
190
+ - spec/integration/invoker_spec.rb
191
+ - spec/integration/lhm_spec.rb
192
+ - spec/integration/lock_wait_timeout_spec.rb
193
+ - spec/integration/locked_switcher_spec.rb
194
+ - spec/integration/sql_retry/lock_wait_spec.rb
195
+ - spec/integration/sql_retry/lock_wait_timeout_test_helper.rb
196
+ - spec/integration/table_spec.rb
197
+ - spec/test_helper.rb
198
+ - spec/unit/atomic_switcher_spec.rb
199
+ - spec/unit/chunk_finder_spec.rb
200
+ - spec/unit/chunk_insert_spec.rb
201
+ - spec/unit/chunker_spec.rb
202
+ - spec/unit/entangler_spec.rb
203
+ - spec/unit/intersection_spec.rb
204
+ - spec/unit/lhm_spec.rb
205
+ - spec/unit/locked_switcher_spec.rb
206
+ - spec/unit/migrator_spec.rb
207
+ - spec/unit/printer_spec.rb
208
+ - spec/unit/sql_helper_spec.rb
209
+ - spec/unit/table_name_spec.rb
210
+ - spec/unit/table_spec.rb
211
+ - spec/unit/throttler/slave_lag_spec.rb
212
+ - spec/unit/throttler/threads_running_spec.rb
213
+ - spec/unit/throttler_spec.rb
214
+ - spec/unit/unit_helper.rb
215
+ homepage: http://github.com/shopify/lhm
216
+ licenses:
217
+ - BSD-3-Clause
218
+ metadata:
219
+ allowed_push_host: https://rubygems.org
220
+ post_install_message:
221
+ rdoc_options: []
222
+ require_paths:
223
+ - lib
224
+ required_ruby_version: !ruby/object:Gem::Requirement
225
+ requirements:
226
+ - - ">="
227
+ - !ruby/object:Gem::Version
228
+ version: 2.3.0
229
+ required_rubygems_version: !ruby/object:Gem::Requirement
230
+ requirements:
231
+ - - ">="
232
+ - !ruby/object:Gem::Version
233
+ version: '0'
234
+ requirements: []
235
+ rubygems_version: 3.2.20
236
+ signing_key:
237
+ specification_version: 4
238
+ summary: online schema changer for mysql
239
+ test_files: []