Page MenuHomePhabricator

Migrating Repository Shards
Updated 1,063 Days AgoPublic

High-Level Method

core/ $ PHABRICATOR_INSTANCE=admin ./lib/instances/bin/instances move \
  --instance turtle \
  --to repox-abcd1234.phacility.net

See also T13630. This script wraps the low-level steps below.

NOTE: This will move all instance repositories and disable all old repository services.

Low-Level Method

  • Create the new shard (repo123.phacility.net) and service (repox123.phacility.net) following Adding Hardware.
  • Add the new service (repox123.phacility.net) to the instance.
  • Disable allocations on the old service (repox000.phacility.net).
admin/ $ PHABRICATOR_INSTANCE=admin /core/lib/instances/bin/instances set-service-property \
  --instance turtle --service repox000.phacility.net --key disable-allocations --value true
  • Review service configuration in web UI.
  • Sync services.

The instance is now running with two repository service shards, and only the new shard accepts new allocations. This is a stable state. From here, we'd like to migrate existing repositories to the new shard.

Migrate Repositories (General)

Each repository should be migrated individually. There is a general workflow (here) which can migrate any repository, and a simplified workflow (below) which can only migrate observed repositories.

To use the general workflow: for each repository (from bin/repository list), save the state:

src/ $ PHABRICATOR_INSTANCE=turtle /core/lib/services/bin/services save-repository \
  --repository rXYZ --maintenance <message>

...then load it on the destination shard:

dst/ $ PHABRICATOR_INSTANCE=turtle /core/lib/services/bin/services load-repository \
  --repository rXYZ --file <phid> --activate-device repo123.phacility.net

Migrating Repositories (Observed)

In the specific case where a repository is observed (rather than hosted), it can be migrated more simply, by running a single command on the destination host:

dst/ $ PHABRICATOR_INSTANCE=turtle /core/lib/services/bin/services load-repository \
  --repository rXYZ --observe --activate-device repo123.phacility.net

This will fetch the local working copy from the remote instead of uploading and downloading it.

Finishing Up

Once this is finished:

  • Disable daemons on the old shard.
admin/ $ PHABRICATOR_INSTANCE=admin /core/lib/instances/bin/instances set-service-property \
  --instance turtle --service repox000.phacility.net --key disable-daemons --value true
  • Synchronize services.

For historical context, see T13393.
For improvements to observed repositories, see T13600.

Last Author
epriestley
Last Edited
Dec 8 2021, 9:39 PM