Commit graph

81 commits

Author SHA1 Message Date
aschmitz
04fde500e6 Make IdsToBigints (mostly!) non-blocking (#5088)
* Make IdsToBigints (mostly!) non-blocking

This pulls in GitLab's MigrationHelpers, which include code to make
column changes in ways that Postgres can do without locking. In general,
this involves creating a new column, adding an index and any foreign
keys as appropriate, adding a trigger to keep it populated alongside
the old column, and then progressively copying data over to the new
column, before removing the old column and replacing it with the new
one.

A few changes to GitLab's MigrationHelpers were necessary:

* Some changes were made to remove dependencies on other GitLab code.
* We explicitly wait for index creation before forging ahead on column
  replacements.
* We use different temporary column names, to avoid running into index
  name length limits.
* We rename the generated indices back to what they "should" be after
  replacing columns.
* We rename the generated foreign keys to use the new column names when
  we had to create them. (This allows the migration to be rolled back
  without incident.)

# Big Scary Warning

There are two things here that may trip up large instances:

1. The change for tables' "id" columns is not concurrent. In
   particular, the stream_entries table may be big, and does not
   concurrently migrate its id column. (On the other hand, x_id type
   columns are all concurrent.)
2. This migration will take a long time to run, *but it should not
   lock tables during that time* (with the exception of the "id"
   columns as described above). That means this should probably be run
   in `screen` or some other session that can be run for a long time.
   Notably, the migration will take *longer* than it would without
   these changes, but the website will still be responsive during that
   time.

These changes were tested on a relatively large statuses table (256k
entries), and the service remained responsive during the migration.
Migrations both forward and backward were tested.

* Rubocop fixes

* MigrationHelpers: Support ID columns in some cases

This doesn't work in cases where the ID column is referred to as a
foreign key by another table.

* MigrationHelpers: support foreign keys for ID cols

Note that this does not yet support foreign keys on non-primary-key
columns, but Mastodon also doesn't yet have any that we've needed to
migrate.

This means we can perform fully "concurrent" migrations to change ID
column types, and the IdsToBigints migration can happen with effectively
no downtime. (A few operations require a transaction, such as renaming
columns or deleting them, but these transactions should not block for
noticeable amounts of time.)

The algorithm for generating foreign key names has changed with this,
and therefore all of those changed in schema.rb.

* Provide status, allow for interruptions

The MigrationHelpers now allow restarting the rename of a column if it
was interrupted, by removing the old "new column" and re-starting the
process.

Along with this, they now provide status updates on the changes which
are happening, as well as indications about when the changes can be
safely interrupted (when there are at least 10 seconds estimated to be
left before copying data is complete).

The IdsToBigints migration now also sorts the columns it migrates by
size, starting with the largest tables. This should provide
administrators a worst-case scenario estimate for the length of
migrations: each successive change will get faster, giving admins a
chance to abort early on if they need to run the migration later. The
idea is that this does not force them to try to time interruptions
between smaller migrations.

* Fix column sorting in IdsToBigints

Not a significant change, but it impacts the order of columns in the
database and db/schema.rb.

* Actually pause before IdsToBigints
2017-10-02 21:28:59 +02:00
Eugen Rochko
f3c22d480e Bump to 1.6.1 2017-09-16 03:08:29 +02:00
abcang
579a7c2654 Revert unique retry job (#4937)
* Revert "Enable UniqueRetryJobMiddleware even when called from sidekiq worker (#4836)"

This reverts commit 0080804f44.

* Revert "Do not execute the job with the same arguments as the retry job (#4814)"

This reverts commit 892aeb7ffe.
2017-09-14 15:12:43 +02:00
Eugen Rochko
6d13a61ea8 Bump to 1.6.0 2017-09-10 15:10:03 +02:00
Eugen Rochko
0e213d4b1a Bump version to 1.6.0rc5 2017-09-10 10:26:51 +02:00
Eugen Rochko
fafd9d8bae Bump version to 1.6.0rc4 2017-09-09 14:53:49 +02:00
Eugen Rochko
3b88fcd18b Bump version to 1.6.0rc2 2017-09-06 19:02:03 +02:00
abcang
892aeb7ffe Do not execute the job with the same arguments as the retry job (#4814) 2017-09-05 20:56:20 +02:00
Eugen Rochko
c2cb70fe34 Bump version to 1.6.0rc1 (#4768) 2017-09-03 01:12:05 +02:00
Daigo 3 Dango
fd9d66dfd4 Add Mastodon::Source.url (#4643)
* Add Mastodon::Source.url

* Update spec

* Refactor

Move things frmo Mastodon::Source to Mastodon::Version
2017-08-22 22:54:19 +02:00
Eugen Rochko
1a8295b5ca Bump to 1.5.1 2017-08-06 23:53:25 +02:00
Eugen Rochko
ace8b7cb1a Bump to 1.5.0 2017-08-01 15:12:07 +02:00
Eugen Rochko
2c1fbae0b8 Bump to 1.5.0rc3 2017-07-31 15:28:36 +02:00
Eugen Rochko
52f32d5592 Bump to 1.5.0rc2 2017-07-28 17:22:41 +02:00
Eugen Rochko
6bfadd0390 Bump to 1.5.0rc1 (#4318) 2017-07-24 16:21:08 +02:00
Eugen Rochko
b5c4671c76 Bump version to 1.4.7 2017-06-28 17:44:17 +02:00
Eugen Rochko
81a2d672a7 Bump version to 1.4.6 2017-06-23 17:02:14 +02:00
Eugen Rochko
bd6bee29de Bump version to 1.4.4 2017-06-20 21:32:37 +02:00
Eugen Rochko
1f042e5b43 Bump version to 1.4.3 2017-06-15 03:03:42 +02:00
Eugen Rochko
cd5c9d67e8 Bump version to 1.4.2 2017-06-08 15:30:43 +02:00
Eugen Rochko
abd41858a9 Bump version to 1.4.1 2017-05-28 19:30:38 +02:00
Eugen Rochko
b3479fa629 Bump version to 1.4.0.6 2017-05-28 16:32:53 +02:00
Eugen Rochko
ff78d90621 Bump version to 1.4.0.5 2017-05-27 16:56:47 +02:00
Eugen Rochko
a41a509a93 Bump version to 1.4.0.4 2017-05-26 14:16:04 +02:00
Eugen Rochko
664eef3527 Bump version 2017-05-22 21:38:19 +02:00
Clworld
2214d1ecd7 Set config.cache_store in environments file. (#3219)
* Set config.cache_store in application.rb

* Set config.cache_store in environments.

* fix code format.
2017-05-22 15:01:02 +02:00
Eugen Rochko
662d103f6e Bump version to 1.4.0.2 (#3190) 2017-05-20 23:30:20 +02:00
Eugen Rochko
f9efdccb97 Bump version to 1.3.2 (#2623) 2017-04-29 19:26:32 +02:00
Ash Furrow
f4093cdfe7 Update version to 1.3.1 (#2571) 2017-04-28 09:07:48 -04:00
Eugen Rochko
e21b9c875e Bump version, improve how version is stored for better commit history (#2526) 2017-04-27 15:22:19 +02:00
Ash Furrow
c229532144 Adds version to about/more and API (#2181)
* Adds version.

* Cleans up code.

* Removes standalone endpoint and adds version to instance endpoint.

* Addresses feedback from #2181.
2017-04-21 03:30:59 +02:00