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
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 0c187c9f0e9bd183d5eb227f83ba9cce6a57ee5b03e4732312470a737f2d8a13
4
+ data.tar.gz: 54797e75f27f2f174ffd0eb07cd6d1fad57a9d16542e5baa0a56cb1130fcd88a
5
+ SHA512:
6
+ metadata.gz: 9f11850e292435adb700695686887945d729ec8ec3b2d4b658fd1d6dd297f198e17711b26f2f1533cca0a58cdcb5f45a87bdbb1741f0cd988b57dfb47bd90d5b
7
+ data.tar.gz: ba2e873e51070ac3658644f90c7f54a1680707e8aa48db2d844fdcbfd2de83a5a96abbc0521eae9e55894d5e93ee399f9327df4c56f6b95945e381894e93ff6a
@@ -0,0 +1,34 @@
1
+ name: Tests
2
+
3
+ on:
4
+ push:
5
+ branches: [ master ]
6
+ pull_request:
7
+ branches: [ master ]
8
+
9
+ jobs:
10
+ test:
11
+ name: Run tests
12
+ runs-on: ubuntu-latest
13
+ steps:
14
+ - uses: actions/checkout@v2
15
+ - name: Set up Ruby
16
+ uses: ruby/setup-ruby@v1
17
+ with:
18
+ ruby-version: 2.5.1
19
+ bundler-cache: true
20
+ - name: Cache MySQL
21
+ uses: actions/cache@v2
22
+ with:
23
+ path: dbdeployer/binaries
24
+ key: ${{ runner.os }}-dbdeployer-${{ hashFiles('**/dbdeployer/install.sh') }}
25
+ - name: Install Ruby packages
26
+ run: bundle install
27
+ - name: Install Ubuntu packages
28
+ run: sudo apt-get install numactl libaio-dev
29
+ - name: Setup MySQL
30
+ run: ./dbdeployer/install.sh
31
+ - name: Run integration tests
32
+ run: bundle exec rake integration
33
+ - name: Run unit tests
34
+ run: bundle exec rake unit
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ .bundle
3
+ gemfiles/*.lock
4
+ pkg/*
5
+ .rvmrc
6
+ .ruby-version
7
+ .ruby-gemset
8
+ bin/rake
9
+ spec/integration/database.yml
10
+ gemfiles/vendor
11
+ omg.ponies
12
+ *~
13
+ coverage
14
+ bin/dbdeployer
15
+ /dbdeployer/sandboxes
16
+ /dbdeployer/binaries
17
+ Gemfile.lock
data/.rubocop.yml ADDED
@@ -0,0 +1,183 @@
1
+ # This configuration was generated by `rubocop --auto-gen-config`
2
+ # on 2015-01-12 14:49:41 +0100 using RuboCop version 0.26.1.
3
+ # The point is for the user to remove these configuration records
4
+ # one by one as the offenses are removed from the code base.
5
+ # Note that changes in the inspected code, or installation of new
6
+ # versions of RuboCop, may require this file to be generated again.
7
+
8
+ AllCops:
9
+ Exclude:
10
+ - 'gemfiles/**/*'
11
+
12
+ # Offense count: 1
13
+ # Configuration parameters: CountComments.
14
+ Metrics/ClassLength:
15
+ Max: 131
16
+
17
+ # Offense count: 3
18
+ Metrics/CyclomaticComplexity:
19
+ Max: 19
20
+
21
+ # Offense count: 77
22
+ # Configuration parameters: AllowURI, URISchemes.
23
+ Metrics/LineLength:
24
+ Max: 197
25
+
26
+ # Offense count: 11
27
+ # Configuration parameters: CountComments.
28
+ Metrics/MethodLength:
29
+ Max: 27
30
+
31
+ # Offense count: 3
32
+ Metrics/PerceivedComplexity:
33
+ Max: 15
34
+
35
+ # Offense count: 5
36
+ # Cop supports --auto-correct.
37
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
38
+ Style/AndOr:
39
+ Enabled: false
40
+
41
+ # Offense count: 13
42
+ # Cop supports --auto-correct.
43
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
44
+ Style/BarePercentLiterals:
45
+ Enabled: false
46
+
47
+ # Offense count: 11
48
+ # Cop supports --auto-correct.
49
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
50
+ Style/BracesAroundHashParameters:
51
+ Enabled: false
52
+
53
+ # Offense count: 5
54
+ Style/ClassVars:
55
+ Enabled: false
56
+
57
+ # Offense count: 3
58
+ # Cop supports --auto-correct.
59
+ # Configuration parameters: PreferredMethods.
60
+ Style/CollectionMethods:
61
+ Enabled: false
62
+
63
+ # Offense count: 24
64
+ Style/Documentation:
65
+ Enabled: false
66
+
67
+ # Offense count: 28
68
+ # Cop supports --auto-correct.
69
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
70
+ Style/DotPosition:
71
+ Enabled: false
72
+
73
+ # Offense count: 4
74
+ Style/DoubleNegation:
75
+ Enabled: false
76
+
77
+ # Offense count: 1
78
+ Style/EachWithObject:
79
+ Enabled: false
80
+
81
+ # Offense count: 1
82
+ # Configuration parameters: Exclude.
83
+ Style/FileName:
84
+ Enabled: false
85
+
86
+ # Offense count: 11
87
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
88
+ Style/FormatString:
89
+ Enabled: false
90
+
91
+ # Offense count: 10
92
+ # Configuration parameters: AllowedVariables.
93
+ Style/GlobalVars:
94
+ Enabled: false
95
+
96
+ # Offense count: 9
97
+ # Configuration parameters: MinBodyLength.
98
+ Style/GuardClause:
99
+ Enabled: false
100
+
101
+ # Offense count: 88
102
+ # Cop supports --auto-correct.
103
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
104
+ Style/HashSyntax:
105
+ Enabled: false
106
+
107
+ # Offense count: 3
108
+ # Configuration parameters: MaxLineLength.
109
+ Style/IfUnlessModifier:
110
+ Enabled: false
111
+
112
+ # Offense count: 14
113
+ # Cop supports --auto-correct.
114
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
115
+ Style/IndentHash:
116
+ Enabled: false
117
+
118
+ # Offense count: 2
119
+ Style/ModuleFunction:
120
+ Enabled: false
121
+
122
+ # Offense count: 2
123
+ Style/MultilineBlockChain:
124
+ Enabled: false
125
+
126
+ # Offense count: 4
127
+ # Cop supports --auto-correct.
128
+ Style/NumericLiterals:
129
+ MinDigits: 8
130
+
131
+ # Offense count: 14
132
+ # Cop supports --auto-correct.
133
+ # Configuration parameters: PreferredDelimiters.
134
+ Style/PercentLiteralDelimiters:
135
+ Enabled: false
136
+
137
+ # Offense count: 3
138
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
139
+ Style/RaiseArgs:
140
+ Enabled: false
141
+
142
+ # Offense count: 1
143
+ Style/RescueModifier:
144
+ Enabled: false
145
+
146
+ # Offense count: 1
147
+ Style/SelfAssignment:
148
+ Enabled: false
149
+
150
+ # Configuration parameters: EnforcedStyle, SupportedStyles.
151
+ Style/SignalException:
152
+ EnforcedStyle: only_raise
153
+ Enabled: true
154
+
155
+ # Cop supports --auto-correct.
156
+ # Configuration parameters: EnforcedStyle, EnforcedStyleForEmptyBraces, SupportedStyles.
157
+ Style/SpaceInsideHashLiteralBraces:
158
+ SupportedStyles: space
159
+
160
+ # Offense count: 2
161
+ # Cop supports --auto-correct.
162
+ Style/SpecialGlobalVars:
163
+ Enabled: false
164
+
165
+ # Offense count: 5
166
+ # Cop supports --auto-correct.
167
+ # Configuration parameters: ExactNameMatch, AllowPredicates, AllowDSLWriters, Whitelist.
168
+ Style/TrivialAccessors:
169
+ Enabled: false
170
+
171
+ # Offense count: 15
172
+ # Cop supports --auto-correct.
173
+ Style/UnneededPercentQ:
174
+ Enabled: false
175
+
176
+ # Offense count: 3
177
+ # Cop supports --auto-correct.
178
+ Style/WordArray:
179
+ MinSize: 2
180
+
181
+ # Offense count: 7
182
+ Metrics/AbcSize:
183
+ Max: 31
data/.travis.yml ADDED
@@ -0,0 +1,21 @@
1
+ language: ruby
2
+ before_script:
3
+ - "mysql -e 'create database lhm;'"
4
+ rvm:
5
+ - 2.0.0
6
+ - 2.1
7
+ - 2.2
8
+ sudo: false
9
+ gemfile:
10
+ - gemfiles/ar-2.3_mysql.gemfile
11
+ - gemfiles/ar-3.2_mysql.gemfile
12
+ - gemfiles/ar-3.2_mysql2.gemfile
13
+ - gemfiles/ar-4.0_mysql2.gemfile
14
+ - gemfiles/ar-4.1_mysql2.gemfile
15
+ - gemfiles/ar-4.2_mysql2.gemfile
16
+ matrix:
17
+ exclude:
18
+ - rvm: 2.2
19
+ gemfile: gemfiles/ar-3.2_mysql.gemfile
20
+ - rvm: 2.2
21
+ gemfile: gemfiles/ar-2.3_mysql.gemfile
data/CHANGELOG.md ADDED
@@ -0,0 +1,216 @@
1
+ # 3.3.5 (Jul 5, 2021)
2
+
3
+ * Add comment and collate copying to rename_column
4
+ * Publish to rubygems
5
+
6
+ # 3.3.4 (Feb 9, 2021)
7
+
8
+ * Run migrations inline in local/CI environment
9
+
10
+ # 3.3.3 (Nov 20, 2020)
11
+
12
+ * Add test for tables with composite primary keys.
13
+ * Add test for migrating to a composite primary key.
14
+ * Tests updated to work on MacOS Catalina
15
+ * LHM will now print exceptions to @printer if @printer responds to :exception
16
+ * New ThreadsRunning throttler uses MySQL Performance Schema to decide whether to throttle
17
+
18
+ # 3.3.2 (not fully released)
19
+
20
+ * Catch _even_ more MySQL errors by default with SqlRetry.
21
+
22
+ # 3.3.1 (Nov 8, 2019)
23
+
24
+ * Ensure that :retriable configuration is correctly passed to all SqlRetry
25
+ instances.
26
+ * Retry `Chunker#upper_id` and `options[:verifier]` on MySQL failure.
27
+ * Catch more MySQL errors by default with SqlRetry.
28
+
29
+ # 3.3.0 (Oct 21, 2019)
30
+
31
+ * Add a :verifier key to the options hash, with a default implementation which aborts the LHM if the triggers are removed.
32
+
33
+ # 3.2.5 (Jun 24, 2019)
34
+
35
+ * Tighten dependency on retriable gem and remove workarounds for old version
36
+
37
+ # 3.2.4 (Oct 16, 2018)
38
+
39
+ * Retry `Cleanup::Current` just like we retry all the other DDLs.
40
+
41
+ # 3.2.3 (Oct 16, 2018)
42
+
43
+ * Add ActiveRecord::QueryTimedout exception class to be retried on "Timeout waiting for a response from the last query" message.
44
+
45
+ # 3.2.2 (Oct 11, 2018)
46
+
47
+ * Try to take a higher lock_wait_timeout value than others (https://github.com/Shopify/lhm/pull/60)
48
+
49
+ # 3.2.1 (Oct 11, 2018)
50
+
51
+ * Retry on `MySQL::Error::Timeout` (https://github.com/Shopify/lhm/pull/57)
52
+ * Retry 20 times by default (https://github.com/Shopify/lhm/pull/58)
53
+
54
+ # 3.2.0 (Sep 4, 2018)
55
+
56
+ * Fix Slave lag throttler database config (https://github.com/Shopify/lhm/pull/55)
57
+ * Loosen dependency on retriable gem (https://github.com/Shopify/lhm/pull/54)
58
+ * Overhaul retries for deadlocks, wait timeouts on Chunker, Entangler, and AtomicSwitcher (https://github.com/Shopify/lhm/pull/51)
59
+
60
+ # 3.1.1
61
+
62
+ * Cleanup tables between tests (https://github.com/Shopify/lhm/pull/48)
63
+ * Ensure all table names are less than 64 characters (https://github.com/Shopify/lhm/pull/49)
64
+
65
+ # 3.1.0
66
+
67
+ * Unify Entangler and AtomicSwitcher retry interface (https://github.com/Shopify/lhm/pull/39)
68
+ * Remove scripts replaced by dbdeployer (https://github.com/Shopify/lhm/pull/40)
69
+ * Rename lhmn_ tables to lhma_ to avoid IBP stalls (https://github.com/Shopify/lhm/pull/41)
70
+
71
+ # 3.0.0
72
+
73
+ * Drop support for throttle and stride options. Use `throttler`, instead:
74
+ ```
75
+ Lhm.change_table :users, throttler: [:time_throttler, {stride: x}] do
76
+ end
77
+ ```
78
+ * #118 - Truncate long trigger names. (@sj26)
79
+ * #114 - Update chunker requirements (@bjk-soundcloud)
80
+ * #98 - Add slave lag throttler. (@camilo, @jasonhl)
81
+ * #92 - Fix check for table requirement before starting a lhm.(@hannestyden)
82
+ * #93 - Makes the atomic switcher retry on metadata locks (@camilo)
83
+ * #63 - Sets the LHM's session lock wait timeout variables (@camilo)
84
+ * #75 - Remove DataMapper and ActiveRecord 2.x support (@camilo)
85
+
86
+ # 2.2.0 (Jan 16, 2015)
87
+
88
+ * #84 - Require index names to be strings or symbols (Thibaut)
89
+ * #39 - Adding the ability to rename columns (erikogan)
90
+ * #67 - Allow for optional time filter on .cleanup (joelr)
91
+
92
+ # 2.1.0 (July 31, 2014)
93
+
94
+ * #48 - Add percentage output for migrations (@arthurnn)
95
+ * #60 - Quote table names (@spickermann)
96
+ * #59 - Escape table name in select_limit and select_start methods (@stevehodgkiss)
97
+ * #57 - Ensure chunking 'where' clause handled separately (@rentalcustard)
98
+ * #54 - Chunker handle stride changes (@rentalcustard)
99
+ * #52 - Implement ability to control timeout and stride from Throttler (@edmundsalvacion)
100
+ * #51 - Ensure Lhm.cleanup removes temporary triggers (@edmundsalvacion)
101
+ * #46 - Allow custom throttler (@arthurnn)
102
+
103
+ # 2.0.0 (July 10, 2013)
104
+
105
+ * #44 - Conditional migrations (@durran)
106
+
107
+ # 1.3.0 (May 28, 2013)
108
+
109
+ * Add Lhm.cleanup method for removing copy tables, thanks @bogdan
110
+ * Limit copy table names to 64 characters, thanks @charliesome
111
+
112
+ # 1.2.0 (February 22, 2013)
113
+
114
+ * Added DataMapper support, no API changes for current users. Refer to the
115
+ README for information.
116
+ * Documentation updates. Thanks @tiegz and @vinbarnes.
117
+
118
+ # 1.1.0 (April 29, 2012)
119
+
120
+ * Add option to specify custom index name
121
+ * Add mysql2 compatibility
122
+ * Add AtomicSwitcher
123
+
124
+ # 1.0.3 (February 23, 2012)
125
+
126
+ * Improve change_column
127
+
128
+ # 1.0.2 (February 17, 2012)
129
+
130
+ * closes https://github.com/soundcloud/large-hadron-migrator/issues/11
131
+ this critical bug could cause data loss. table parser was replaced with
132
+ an implementation that reads directly from information_schema.
133
+
134
+ # 1.0.1 (February 09, 2012)
135
+
136
+ * released to rubygems
137
+
138
+ # 1.0.0 (February 09, 2012)
139
+
140
+ * added change_column
141
+ * final 1.0 release
142
+
143
+ # 1.0.0.rc8 (February 09, 2012)
144
+
145
+ * removed spec binaries from gem bins
146
+
147
+ # 1.0.0.rc7 (January 31, 2012)
148
+
149
+ * added SqlHelper.annotation into the middle of trigger statements. this
150
+ is for the benefit of the killer script which should not kill trigger
151
+ statements.
152
+
153
+ # 1.0.0.rc6 (January 30, 2012)
154
+
155
+ * added --confirm to kill script; fixes to kill script
156
+
157
+ # 1.0.0.rc5 (January 30, 2012)
158
+
159
+ * moved scripts into bin, renamed, added to gem binaries
160
+
161
+ # 1.0.0.rc4 (January 29, 2012)
162
+
163
+ * added '-- lhm' to the end of statements for more visibility
164
+
165
+ # 1.0.0.rc3 (January 19, 2012)
166
+
167
+ * Speedup migrations for tables with large minimum id
168
+ * Add a bit yard documentation
169
+ * Fix issues with index creation on reserved column names
170
+ * Improve error handling
171
+ * Add tests for replication
172
+ * Rename public API method from `hadron_change_table` to `change_table`
173
+ * Add tests for ActiveRecord 2.3 and 3.1 compatibility
174
+
175
+ # 1.0.0.rc2 (January 18, 2012)
176
+
177
+ * Speedup migrations for tables with large ids
178
+ * Fix conversion of milliseconds to seconds
179
+ * Fix handling of sql errors
180
+ * Add helper to create unique index
181
+ * Allow index creation on prefix of column
182
+ * Quote column names on index creation
183
+ * Remove ambiguous method signature
184
+ * Documentation fix
185
+ * 1.8.7 compatibility
186
+
187
+ # 1.0.0.rc1 (January 15, 2012)
188
+
189
+ * rewrite.
190
+
191
+ # 0.2.1 (November 26, 2011)
192
+
193
+ * Include changelog in gem
194
+
195
+ # 0.2.0 (November 26, 2011)
196
+
197
+ * Add Ruby 1.8 compatibility
198
+ * Setup travis continuous integration
199
+ * Fix record lose issue
200
+ * Fix and speed up specs
201
+
202
+ # 0.1.4
203
+
204
+ * Merged [Pullrequest #9](https://github.com/soundcloud/large-hadron-migrator/pull/9)
205
+
206
+ # 0.1.3
207
+
208
+ * code cleanup
209
+ * Merged [Pullrequest #8](https://github.com/soundcloud/large-hadron-migrator/pull/8)
210
+ * Merged [Pullrequest #7](https://github.com/soundcloud/large-hadron-migrator/pull/7)
211
+ * Merged [Pullrequest #4](https://github.com/soundcloud/large-hadron-migrator/pull/4)
212
+ * Merged [Pullrequest #1](https://github.com/soundcloud/large-hadron-migrator/pull/1)
213
+
214
+ # 0.1.2
215
+
216
+ * Initial Release