arrival 0.1.0

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 (53) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +8 -0
  3. data/.github/ISSUE_TEMPLATE/bug_report.md +31 -0
  4. data/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
  5. data/.gitignore +13 -0
  6. data/.rspec +2 -0
  7. data/.rubocop.yml +59 -0
  8. data/.travis.yml +20 -0
  9. data/CHANGELOG.md +184 -0
  10. data/CODE_OF_CONDUCT.md +50 -0
  11. data/Dockerfile +39 -0
  12. data/Gemfile +6 -0
  13. data/LICENSE.txt +22 -0
  14. data/README.md +209 -0
  15. data/RELEASING.md +17 -0
  16. data/Rakefile +17 -0
  17. data/arrival.gemspec +29 -0
  18. data/bin/console +14 -0
  19. data/bin/rspec +16 -0
  20. data/bin/setup +7 -0
  21. data/config.yml.erb +4 -0
  22. data/configuration.rb +16 -0
  23. data/docker-compose-inspiration.yml +44 -0
  24. data/docker-compose.yml +40 -0
  25. data/lib/active_record/connection_adapters/for_alter.rb +91 -0
  26. data/lib/active_record/connection_adapters/percona_adapter.rb +158 -0
  27. data/lib/arrival.rb +68 -0
  28. data/lib/arrival/alter_argument.rb +43 -0
  29. data/lib/arrival/cli_generator.rb +85 -0
  30. data/lib/arrival/command.rb +96 -0
  31. data/lib/arrival/configuration.rb +19 -0
  32. data/lib/arrival/connection_details.rb +96 -0
  33. data/lib/arrival/dsn.rb +24 -0
  34. data/lib/arrival/errors.rb +39 -0
  35. data/lib/arrival/log_sanitizers/password_sanitizer.rb +22 -0
  36. data/lib/arrival/logger.rb +42 -0
  37. data/lib/arrival/logger_factory.rb +16 -0
  38. data/lib/arrival/null_logger.rb +15 -0
  39. data/lib/arrival/option.rb +75 -0
  40. data/lib/arrival/railtie.rb +28 -0
  41. data/lib/arrival/runner.rb +62 -0
  42. data/lib/arrival/user_options.rb +44 -0
  43. data/lib/arrival/version.rb +3 -0
  44. data/lib/lhm.rb +23 -0
  45. data/lib/lhm/adapter.rb +107 -0
  46. data/lib/lhm/column_with_sql.rb +96 -0
  47. data/lib/lhm/column_with_type.rb +29 -0
  48. data/main/conf/mysql.conf.cnf +9 -0
  49. data/main/mysql_main.env +7 -0
  50. data/replica/conf/mysql.conf.cnf +10 -0
  51. data/replica/mysql_replica.env +7 -0
  52. data/test_database.rb +80 -0
  53. metadata +220 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: c332dc7b7c51a5b6618708a6eb86048150299eb763768f14f0e16c1c3ddd4edb
4
+ data.tar.gz: cd107ee392065839636c80f6c03884d5e137d1d974f7af98a3354f1d939c946f
5
+ SHA512:
6
+ metadata.gz: 810977503202add1a717f2ef5a63eebaeac5fadda9cbe46a7f1bc0817e42f28957b425dd4bf4ca5e182ec6e92c009ace7b188780efc85bf28c7cc6e1fd1c3e23
7
+ data.tar.gz: 64cc923ed13acfad1f6259be3b268e15f69501a4beed5d59c737c978b1f29da6a6a0d8f32fd213a6611db10451670cf4ff6aeab68f36d8b7aededc4918a0a50b
@@ -0,0 +1,8 @@
1
+ ---
2
+ engines:
3
+ rubocop:
4
+ enabled: true
5
+ channel: rubocop-0-49
6
+ ratings:
7
+ paths:
8
+ - "**.rb"
@@ -0,0 +1,31 @@
1
+ ---
2
+ name: Bug report
3
+ about: Create a report to help us improve
4
+ title: "[BUG] "
5
+ labels: ''
6
+ assignees: ''
7
+
8
+ ---
9
+
10
+ **Describe the bug**
11
+ <!-- A clear and concise description of what the bug is. -->
12
+
13
+ **To Reproduce**
14
+ Steps to reproduce the behavior:
15
+ 1. Configure like '...'
16
+ 2. Run '...'
17
+ 3. See error
18
+
19
+ **Expected behavior**
20
+ A clear and concise description of what you expected to happen.
21
+
22
+ **Back traces, screenshots, errors **
23
+ If applicable, add anything that helps explaining your problem.
24
+
25
+ **Setup**
26
+ - OS: name, version
27
+ - gh-ost version:
28
+ - arrival version:
29
+
30
+ **Additional context**
31
+ Add any other context about the problem here.
@@ -0,0 +1,20 @@
1
+ ---
2
+ name: Feature request
3
+ about: Suggest an idea for this project
4
+ title: "[IMPROVEMENT]"
5
+ labels: ''
6
+ assignees: ''
7
+
8
+ ---
9
+
10
+ **Is your feature request related to a problem? Please describe.**
11
+ A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
12
+
13
+ **Describe the solution you'd like**
14
+ A clear and concise description of what you want to happen.
15
+
16
+ **Describe alternatives you've considered**
17
+ A clear and concise description of any alternative solutions or features you've considered.
18
+
19
+ **Additional context**
20
+ Add any other context or screenshots about the feature request here.
@@ -0,0 +1,13 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ data
11
+ .byebug_history
12
+ tags
13
+ arrival_error.log
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
@@ -0,0 +1,59 @@
1
+ ---
2
+ Metrics/AbcSize:
3
+ Enabled: false
4
+
5
+ Metrics/BlockLength:
6
+ Max: 20
7
+ Exclude:
8
+ - 'spec/*'
9
+ - 'spec/**/*'
10
+
11
+ Metrics/BlockNesting:
12
+ Max: 4
13
+
14
+ Metrics/ClassLength:
15
+ Max: 250
16
+
17
+ Metrics/LineLength:
18
+ Max: 120
19
+ Exclude:
20
+ - 'arrival.gemspec'
21
+ - 'test_database.rb'
22
+
23
+ Metrics/MethodLength:
24
+ Max: 30
25
+
26
+ Metrics/ModuleLength:
27
+ Max: 250
28
+
29
+ Metrics/ParameterLists:
30
+ Max: 5
31
+
32
+ Performance/Casecmp:
33
+ Enabled: false
34
+
35
+ Style/BracesAroundHashParameters:
36
+ Exclude:
37
+ - 'spec/fixtures/migrate/**.rb'
38
+ - 'spec/integration/**.rb'
39
+
40
+ Style/CommandLiteral:
41
+ Exclude:
42
+ - 'test_database.rb'
43
+
44
+ Style/Documentation:
45
+ Enabled: false
46
+
47
+ Style/MultilineBlockChain:
48
+ Exclude:
49
+ - 'spec/integration_spec.rb'
50
+
51
+ Layout/MultilineMethodCallIndentation:
52
+ Enabled: false
53
+
54
+ Style/SymbolArray:
55
+ Enabled: false
56
+
57
+ Style/UnneededPercentQ:
58
+ Exclude:
59
+ - 'arrival.gemspec'
@@ -0,0 +1,20 @@
1
+ language: ruby
2
+ services:
3
+ - mysql
4
+ rvm:
5
+ - 2.2
6
+ - 2.3
7
+ - 2.4
8
+ - 2.5
9
+ - 2.6
10
+ before_install:
11
+ - sudo apt-key adv --keyserver keys.gnupg.net --recv-keys 8507EFA5
12
+ - echo "deb http://repo.percona.com/apt `lsb_release -cs` main" | sudo tee -a /etc/apt/sources.list
13
+ - sudo apt-get update -qq
14
+ - sudo apt-get install percona-toolkit
15
+ - gem update bundler
16
+
17
+ install: bin/setup
18
+
19
+ after_success:
20
+ - codeclimate-test-reporter
@@ -0,0 +1,184 @@
1
+ # Change Log
2
+ All notable changes to this project will be documented in this file.
3
+ This project adheres to [Semantic Versioning](http://semver.org/).
4
+
5
+ Please follow the format in [Keep a Changelog](http://keepachangelog.com/)
6
+
7
+ ## [Unreleased]
8
+
9
+ ### Added
10
+
11
+ - Support for ActiveRecord 5.2
12
+ - Support to batch multiple changes at once with #change_table
13
+ - Support for connection to MySQL server over SSL
14
+
15
+ ### Changed
16
+
17
+ - Depend only in railties and activerecord instead of rails gem
18
+
19
+ ### Deprecated
20
+ ### Removed
21
+ ### Fixed
22
+
23
+ - Fix support for removing foreign keys
24
+
25
+ ## [6.1.0] - 2018-02-27
26
+
27
+ ### Added
28
+ ### Changed
29
+
30
+ - Permit PERCONA_ARGS to be applied to db:migrate tasks
31
+
32
+ ### Deprecated
33
+ ### Removed
34
+ ### Fixed
35
+
36
+ - Output lines are no longer wrapped at 8 chars
37
+
38
+ ## [6.0.0] - 2017-09-25
39
+
40
+ ### Added
41
+
42
+ - Support for ActiveRecord 5.1
43
+
44
+ ### Changed
45
+ ### Deprecated
46
+ ### Removed
47
+ ### Fixed
48
+
49
+ ## [5.0.0] - 2017-09-19
50
+
51
+ ### Added
52
+
53
+ - Support for ActiveRecord 5.0
54
+ - Docker setup to run the spec suite
55
+
56
+ ### Changed
57
+ ### Deprecated
58
+ ### Removed
59
+ ### Fixed
60
+
61
+ - Allow using bash special characters in passwords
62
+
63
+ ## [4.0.1] - 2017-08-01
64
+
65
+ ### Added
66
+
67
+ - Support for all pt-osc command-line options, including short forms and array
68
+ arguments
69
+
70
+ ### Changed
71
+ ### Deprecated
72
+ ### Removed
73
+ ### Fixed
74
+
75
+ ## [4.0.0] - 2017-06-12
76
+
77
+ ### Added
78
+ ### Changed
79
+
80
+ - Rename the gem from percona_migrator to arrival.
81
+
82
+ ### Deprecated
83
+ ### Removed
84
+
85
+ - Percona_migrator's deprecation warnings when installing and running the gem.
86
+
87
+ ### Fixed
88
+
89
+ ## [3.0.0] - 2016-04-07
90
+
91
+ ### Added
92
+
93
+ - Support for ActiveRecord 4.2.x
94
+ - Support for Mysql2 4.x
95
+ - Allow passing any `pt-online-schema-change`'s arguments through the
96
+ `PERCONA_ARGS` env var when executing a migration with `rake db:migrate:up`
97
+ or `db:migrate:down`.
98
+ - Allow setting global percona arguments via gem configuration
99
+ - Filter MySQL's password from logs
100
+
101
+ ### Changed
102
+
103
+ - Enable default pt-online-schema-change replicas discovering mechanism.
104
+ So far, this was purposely set to `none`. To keep this same behaviour
105
+ provide the `PERCONA_ARGS=--recursion-method=none` env var when running the
106
+ migration.
107
+
108
+ ## [1.0.0] - 2016-11-30
109
+
110
+ ### Added
111
+
112
+ - Show pt-online-schema-change's stdout while the migration is running instead
113
+ of at then and all at once.
114
+ - Store pt-online-schema-change's stderr to percona_migrator_error.log in the
115
+ default Rails tmp folder.
116
+ - Allow configuring the tmp directory where the error log gets written into,
117
+ with the `tmp_path` configuration setting.
118
+ - Support for ActiveRecord 4.0. Adds the following migration methods:
119
+ - #rename_index, #change_column_null, #add_reference, #remove_reference,
120
+ #set_field_encoding, #add_timestamps, #remove_timestamps, #rename_table,
121
+ #rename_column
122
+
123
+ ## [0.1.0.rc.7] - 2016-09-15
124
+
125
+ ### Added
126
+
127
+ - Toggle pt-online-schema-change's output as well when toggling the migration's
128
+ verbose option.
129
+
130
+ ### Changed
131
+
132
+ - Enabled pt-online-schema-change's output while running the migration, that got
133
+ broken in v0.1.0.rc.2
134
+
135
+ ## [0.1.0.rc.6] - 2016-04-07
136
+
137
+ ### Added
138
+
139
+ - Support non-ddl migrations by implementing the methods for the ActiveRecord
140
+ quering to work.
141
+
142
+ ### Changed
143
+
144
+ - Refactor the PerconaAdapter to use the Runner as connection client, as all the
145
+ other adapters.
146
+
147
+ ## [0.1.0.rc.5] - 2016-03-29
148
+
149
+ ### Changed
150
+
151
+ - Raise a ActiveRecord::StatementInvalid on failed migration. It also provides
152
+ more detailed error message when possible such as pt-onlin-schema-change
153
+ being missing.
154
+
155
+ ## [0.1.0.rc.4] - 2016-03-15
156
+
157
+ ### Added
158
+
159
+ - Support #drop_table
160
+ - Support for foreing keys in db/schema.rb when using [Foreigner
161
+ gem](https://github.com/matthuhiggins/foreigner) in Rails 3 apps. This allows to
162
+ define foreign keys with #execute, but does not provide support for
163
+ add_foreign_key yet.
164
+
165
+ ## [0.1.0.rc.3] - 2016-03-10
166
+
167
+ ### Added
168
+
169
+ - Support #execute. Allows to execute raw SQL from the migration
170
+
171
+ ## [0.1.0.rc.2] - 2016-03-09
172
+
173
+ ### Added
174
+
175
+ - VERBOSE env var in tests. Specially useful for integration tests.
176
+ - Fix #create_table migration method. Now it does create the table.
177
+
178
+ ### Changed
179
+
180
+ - Use ActiveRecord's logger instead of specifying one in the connection data.
181
+
182
+ ## [0.1.0.rc.1] - 2016-03-01
183
+
184
+ - Initial gem version
@@ -0,0 +1,50 @@
1
+ # Contributor Code of Conduct
2
+
3
+ As contributors and maintainers of this project, and in the interest of
4
+ fostering an open and welcoming community, we pledge to respect all people who
5
+ contribute through reporting issues, posting feature requests, updating
6
+ documentation, submitting pull requests or patches, and other activities.
7
+
8
+ We are committed to making participation in this project a harassment-free
9
+ experience for everyone, regardless of level of experience, gender, gender
10
+ identity and expression, sexual orientation, disability, personal appearance,
11
+ body size, race, ethnicity, age, religion, or nationality.
12
+
13
+ Examples of unacceptable behavior by participants include:
14
+
15
+ * The use of sexualized language or imagery
16
+ * Personal attacks
17
+ * Trolling or insulting/derogatory comments
18
+ * Public or private harassment
19
+ * Publishing other's private information, such as physical or electronic
20
+ addresses, without explicit permission
21
+ * Other unethical or unprofessional conduct
22
+
23
+ Project maintainers have the right and responsibility to remove, edit, or
24
+ reject comments, commits, code, wiki edits, issues, and other contributions
25
+ that are not aligned to this Code of Conduct, or to ban temporarily or
26
+ permanently any contributor for other behaviors that they deem inappropriate,
27
+ threatening, offensive, or harmful.
28
+
29
+ By adopting this Code of Conduct, project maintainers commit themselves to
30
+ fairly and consistently applying these principles to every aspect of managing
31
+ this project. Project maintainers who do not follow or enforce the Code of
32
+ Conduct may be permanently removed from the project team.
33
+
34
+ This Code of Conduct applies both within project spaces and in public spaces
35
+ when an individual is representing the project or its community.
36
+
37
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be
38
+ reported by contacting a project maintainer at accounts@redbooth.com. All
39
+ complaints will be reviewed and investigated and will result in a response that
40
+ is deemed necessary and appropriate to the circumstances. Maintainers are
41
+ obligated to maintain confidentiality with regard to the reporter of an
42
+ incident.
43
+
44
+
45
+ This Code of Conduct is adapted from the [Contributor Covenant][homepage],
46
+ version 1.3.0, available at
47
+ [http://contributor-covenant.org/version/1/3/0/][version]
48
+
49
+ [homepage]: http://contributor-covenant.org
50
+ [version]: http://contributor-covenant.org/version/1/3/0/
@@ -0,0 +1,39 @@
1
+ FROM ruby:2.6
2
+ ENV GHOST_VERSION=1.0.48
3
+
4
+ # Install apt based dependencies required to run Rails as
5
+ # well as RubyGems. As the Ruby image itself is based on a
6
+ # Debian image, we use apt-get to install those.
7
+ RUN apt-get update && \
8
+ apt-get install -y \
9
+ build-essential \
10
+ percona-toolkit && \
11
+ apt-get clean && \
12
+ apt-get remove
13
+
14
+ # Download gh-ost and install the binary
15
+ WORKDIR /usr/bin
16
+ RUN wget https://github.com/github/gh-ost/releases/download/v$GHOST_VERSION/gh-ost-binary-linux-20190214020851.tar.gz && \
17
+ tar -xvf gh-ost-binary-linux-20190214020851.tar.gz
18
+
19
+ RUN mkdir -p /app /app/lib/arrival
20
+ WORKDIR /app
21
+
22
+ # Copy the Gemfile as well as the Gemfile.lock and install
23
+ # the RubyGems. This is a separate step so the dependencies
24
+ # will be cached unless changes to one of those two files
25
+ # are made.
26
+ COPY arrival.gemspec Gemfile ./
27
+ COPY lib/arrival/version.rb ./lib/arrival/
28
+
29
+ RUN gem update --system && \
30
+ gem install bundler -v 1.17.3 && \
31
+ bundle install --jobs $(nproc) --retry 5
32
+
33
+ # Copy the main application.
34
+ COPY . ./
35
+
36
+ # The main command to run when the container starts. Also
37
+ # tell the Rails dev server to bind to all interfaces by
38
+ # default.
39
+ #CMD ["bundle", "exec", "rails", "server", "-b", "0.0.0.0"]