sounds good to me

On Tue, Jul 27, 2021 at 7:50 AM Zach Hoffman <zrhoff...@apache.org> wrote:

> Hi ATC,
>
> All good things eventually come to an end, but so does Goose. I have a PR
> out there that gets us using Migrate <
> https://github.com/golang-migrate/migrate> instead of Goose:
> https://github.com/apache/trafficcontrol/pull/6057
>
> The big improvement is that Migrate is compiled into `db/admin` as a
> library. It does not need to be installed after installing Traffic Ops, you
> already have it because the Traffic Ops RPM includes the `db/admin` tool.
> Benefits of this:
> • Traffic Ops no longer requires an Internet connection to run
> `postinstall` script.
> • Golang has been removed as a dependency from Traffic Ops. Although it was
> not listed in the RPM spec, building Goose also required Git, which is also
> no longer needed.
> • Goose required CGO, which precluded building a Traffic Ops RPM targeting
> x86_64 Linux from other platforms like macOS and Windows if we ever ended
> up including the `goose` binary in the Traffic Ops RPM. This is no longer
> an issue.
>
> Compatibility features:
> • The database config file stays the same, you can keep using your existing
> `dbconf.yml` as-is.
> • With the exception of `db/admin status`, all `db/admin` commands work
> like they used to (`db/admin status` explained below in the Differences
> section). For example, the command to run the migrations is still `db/admin
> -env production migrate`.
> • Although the "up" and "down" migrations are split into separate files
> now, the contents of each existing migration are otherwise unmodified,
> other than removing Goose annotations like `+goose Up` and `+goose
> StatementBegin`.
> • No extra migration steps should be necessary, you can run `db/admin -env
> production migrate` to migrate from Goose (which uses the
> `goose_db_version` table) to Migrate (which uses the `schema_migrations`
> table), meaning that Migrate will start at the migration version that Goose
> used. The `goose_db_version` table is renamed to `goose_db_version_unused`
> to preserve the Goose migration history while ensuring that only Migrate is
> used going forward. If for any reason you do want to go back to Goose, you
> can run the `00000000000000_init.down.sql` migration to rename the Goose
> table back to `goose_db_version`, so this is a non-destructive change.
> • The `install_goose.sh` script still exists in the repo, it just does not
> do anything. It will be removed in a future ATC release.
>
> As a new feature, you can now create migrations directly from `db/admin`
> using `db_admin create_migration NAME`. Migrations created this way have
> 16-digit timestamps (as opposed to the 14-digit timestamps that `goose
> create` produced) and contain the Apache License 2.0.
>
> Differences:
> • Migrate keeps track of the migration version and "dirty" status (true or
> false) in the `schema_migrations` table. If "dirty" is `true`, that means
> that the last migration to run failed. If it is set, the "dirty" flag needs
> to be cleared manually.
> • Other than storing the version of the last migration to have run, Migrate
> does *not* keep track of which migrations in the past have run. If a new
> migration is created with a timestamp before the current migration version,
> Migrate will ignore that migration.
> • `db/admin status` is now an alias for `db/admin dbversion`. This is
> because `db/admin status` was a wrapper for `goose status`, which printed
> the status of each migration. `db/admin status` has been deprecated,
> pending removal in a future ATC release.
> • Because each "up" migration and its corresponding "down" migration are
> split into separate files, and because there are no longer any Goose
> annotations, Goose cannot use the new Migrate migrations.
>
> That's it! Thoughts and suggestions are welcome both in the PR and here on
> the mailing list.
>
> -Zach
>

Reply via email to