lhm-shopify 3.3.5

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 (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