1
0
Fork 0
mirror of synced 2024-09-28 07:21:35 +12:00

Address comments

This commit is contained in:
Bradley Schofield 2024-06-10 06:02:29 +00:00
parent 2bf291f7fd
commit a5d5d72840
4 changed files with 44 additions and 40 deletions

View file

@ -4018,6 +4018,17 @@ $projectCollections = array_merge([
'array' => false, 'array' => false,
'filters' => [], 'filters' => [],
], ],
[
'$id' => ID::custom('stage'),
'type' => Database::VAR_STRING,
'format' => '',
'size' => Database::LENGTH_KEY,
'signed' => true,
'required' => true,
'default' => null,
'array' => false,
'filters' => [],
],
[ [
'$id' => ID::custom('source'), '$id' => ID::custom('source'),
'type' => Database::VAR_STRING, 'type' => Database::VAR_STRING,
@ -4101,6 +4112,13 @@ $projectCollections = array_merge([
'lengths' => [Database::LENGTH_KEY], 'lengths' => [Database::LENGTH_KEY],
'orders' => [Database::ORDER_ASC], 'orders' => [Database::ORDER_ASC],
], ],
[
'$id' => '_key_stage',
'type' => Database::INDEX_KEY,
'attributes' => ['stage'],
'lengths' => [Database::LENGTH_KEY],
'orders' => [Database::ORDER_ASC],
],
[ [
'$id' => '_key_source', '$id' => '_key_source',
'type' => Database::INDEX_KEY, 'type' => Database::INDEX_KEY,
@ -4117,10 +4135,10 @@ $projectCollections = array_merge([
] ]
], ],
], ],
'groupMigrations' => [ 'migrationsGroup' => [
'$collection' => ID::custom(Database::METADATA), '$collection' => ID::custom(Database::METADATA),
'$id' => ID::custom('groupMigrations'), '$id' => ID::custom('migrationsGroup'),
'name' => 'groupMigrations', 'name' => 'migrationsGroup',
'attributes' => [ 'attributes' => [
[ [
'$id' => ID::custom('migrationId'), '$id' => ID::custom('migrationId'),

View file

@ -41,25 +41,24 @@ $triggerMigration = function (string $migrationId, array $resources, Migration $
]; ];
foreach ($groups as $group => $groupResources) { foreach ($groups as $group => $groupResources) {
if (!empty(array_intersect( $filteredResources = array_intersect(
$groupResources, $groupResources,
$resources $resources
))) { );
if (!empty($filteredResources)) {
$groupDocument = new Document([ $groupDocument = new Document([
'$id' => ID::unique(), '$id' => ID::unique(),
'status' => 'pending', 'status' => 'pending',
'migrationId' => $migrationId, 'migrationId' => $migrationId,
'group' => $group, 'group' => $group,
'resources' => array_intersect( 'resources' => $filteredResources,
$groupResources,
$resources
),
'statusCounters' => '', 'statusCounters' => '',
'resourceData' => '', 'resourceData' => '',
'errors' => [] 'errors' => []
]); ]);
$dbForProject->createDocument('groupMigrations', $groupDocument); $dbForProject->createDocument('migrationsGroup', $groupDocument);
$queueForMigrations $queueForMigrations
->setType($group) ->setType($group)
@ -96,6 +95,7 @@ App::post('/v1/migrations/appwrite')
$migration = $dbForProject->createDocument('migrations', new Document([ $migration = $dbForProject->createDocument('migrations', new Document([
'$id' => ID::unique(), '$id' => ID::unique(),
'status' => 'pending', 'status' => 'pending',
'stage' => 'init',
'source' => Appwrite::getName(), 'source' => Appwrite::getName(),
'credentials' => [ 'credentials' => [
'endpoint' => $endpoint, 'endpoint' => $endpoint,
@ -197,6 +197,7 @@ App::post('/v1/migrations/firebase/oauth')
$migration = $dbForProject->createDocument('migrations', new Document([ $migration = $dbForProject->createDocument('migrations', new Document([
'$id' => ID::unique(), '$id' => ID::unique(),
'status' => 'pending', 'status' => 'pending',
'stage' => 'init',
'source' => Firebase::getName(), 'source' => Firebase::getName(),
'credentials' => [ 'credentials' => [
'serviceAccount' => json_encode($serviceAccount), 'serviceAccount' => json_encode($serviceAccount),
@ -256,6 +257,7 @@ App::post('/v1/migrations/firebase')
$migration = $dbForProject->createDocument('migrations', new Document([ $migration = $dbForProject->createDocument('migrations', new Document([
'$id' => ID::unique(), '$id' => ID::unique(),
'status' => 'pending', 'status' => 'pending',
'stage' => 'init',
'source' => Firebase::getName(), 'source' => Firebase::getName(),
'credentials' => [ 'credentials' => [
'serviceAccount' => $serviceAccount, 'serviceAccount' => $serviceAccount,
@ -310,6 +312,7 @@ App::post('/v1/migrations/supabase')
$migration = $dbForProject->createDocument('migrations', new Document([ $migration = $dbForProject->createDocument('migrations', new Document([
'$id' => ID::unique(), '$id' => ID::unique(),
'status' => 'pending', 'status' => 'pending',
'stage' => 'init',
'source' => Supabase::getName(), 'source' => Supabase::getName(),
'credentials' => [ 'credentials' => [
'endpoint' => $endpoint, 'endpoint' => $endpoint,
@ -370,6 +373,7 @@ App::post('/v1/migrations/nhost')
$migration = $dbForProject->createDocument('migrations', new Document([ $migration = $dbForProject->createDocument('migrations', new Document([
'$id' => ID::unique(), '$id' => ID::unique(),
'status' => 'pending', 'status' => 'pending',
'stage' => 'init',
'source' => NHost::getName(), 'source' => NHost::getName(),
'credentials' => [ 'credentials' => [
'subdomain' => $subdomain, 'subdomain' => $subdomain,

View file

@ -690,7 +690,7 @@ Database::addFilter(
return; return;
}, },
function (mixed $value, Document $document, Database $database) { function (mixed $value, Document $document, Database $database) {
$groups = $database->find('groupMigrations', [ $groups = $database->find('migrationsGroup', [
Query::equal('migrationId', [$document->getId()]), Query::equal('migrationId', [$document->getId()]),
]); ]);
@ -712,7 +712,7 @@ Database::addFilter(
return; return;
}, },
function (mixed $value, Document $document, Database $database) { function (mixed $value, Document $document, Database $database) {
$groups = $database->find('groupMigrations', [ $groups = $database->find('migrationsGroup', [
Query::equal('migrationId', [$document->getId()]), Query::equal('migrationId', [$document->getId()]),
]); ]);
@ -734,7 +734,7 @@ Database::addFilter(
return; return;
}, },
function (mixed $value, Document $document, Database $database) { function (mixed $value, Document $document, Database $database) {
$groups = $database->find('groupMigrations', [ $groups = $database->find('migrationsGroup', [
Query::equal('migrationId', [$document->getId()]), Query::equal('migrationId', [$document->getId()]),
]); ]);

View file

@ -157,7 +157,7 @@ class Migrations extends Action
roles: $target['roles'], roles: $target['roles'],
); );
return $this->dbForProject->updateDocument($migration->getCollection(), $migration->getId(), $migration); return $this->dbForProject->updateDocument('migrations', $migration->getId(), $migration);
} }
/** /**
@ -249,17 +249,16 @@ class Migrations extends Action
$tempAPIKey = $this->generateAPIKey($projectDocument); $tempAPIKey = $this->generateAPIKey($projectDocument);
try { try {
$group = $this->dbForProject->getDocument('groupMigrations', $group->getId()); $group = $this->dbForProject->getDocument('migrationsGroup', $group->getId());
$migration = $this->dbForProject->getDocument('migrations', $group->getAttribute('migrationId', '')); $migration = $this->dbForProject->getDocument('migrations', $group->getAttribute('migrationId', ''));
$migration->setAttribute('status', 'processing'); $migration->setAttribute('status', 'processing');
$log->addBreadcrumb(new Breadcrumb("debug", "migration", "Migration hit stage 'processing'", \microtime(true))); $log->addBreadcrumb(new Breadcrumb("debug", "migration", "Migration hit stage 'processing'", \microtime(true)));
$log->addTag('type', $migration->getAttribute('source'));
$this->updateMigrationDocument($migration, $projectDocument); $this->updateMigrationDocument($migration, $projectDocument);
$log->addTag('type', $migration->getAttribute('source'));
$source = $this->processSource($migration->getAttribute('source'), $migration->getAttribute('credentials')); $source = $this->processSource($migration->getAttribute('source'), $migration->getAttribute('credentials'));
$source->report(); $source->report();
@ -275,26 +274,8 @@ class Migrations extends Action
$destination $destination
); );
// Calculate group resources
$resources = $group->getAttribute('resources'); $resources = $group->getAttribute('resources');
switch ($group->getAttribute('group')) {
case Transfer::GROUP_AUTH:
$resources = array_intersect(Transfer::GROUP_AUTH_RESOURCES, $resources);
break;
case Transfer::GROUP_STORAGE:
$resources = array_intersect(Transfer::GROUP_STORAGE_RESOURCES, $resources);
break;
case Transfer::GROUP_DATABASES:
$resources = array_intersect(Transfer::GROUP_DATABASES_RESOURCES, $resources);
break;
case Transfer::GROUP_FUNCTIONS:
$resources = array_intersect(Transfer::GROUP_FUNCTIONS_RESOURCES, $resources);
break;
default:
throw new Exception('Migration worker was initialized with unknown group');
}
$log->addTag('migrationGroup', $group->getAttribute('group')); $log->addTag('migrationGroup', $group->getAttribute('group'));
$log->addExtra('migrationResources', json_encode($resources)); $log->addExtra('migrationResources', json_encode($resources));
$log->addBreadcrumb(new Breadcrumb("debug", "migration", "Migration hit stage 'migrating'", \microtime(true))); $log->addBreadcrumb(new Breadcrumb("debug", "migration", "Migration hit stage 'migrating'", \microtime(true)));
@ -310,7 +291,6 @@ class Migrations extends Action
$destinationErrors = $destination->getErrors(); $destinationErrors = $destination->getErrors();
if (!empty($sourceErrors) || !empty($destinationErrors)) { if (!empty($sourceErrors) || !empty($destinationErrors)) {
$log->addBreadcrumb(new Breadcrumb("debug", "migration", "Migration hit stage 'finished' and failed", \microtime(true)));
$migration->setAttribute('status', 'failed'); $migration->setAttribute('status', 'failed');
$errorMessages = []; $errorMessages = [];
@ -326,6 +306,7 @@ class Migrations extends Action
$group->setAttribute('errors', $errorMessages); $group->setAttribute('errors', $errorMessages);
$this->updateMigrationDocument($group, $projectDocument); $this->updateMigrationDocument($group, $projectDocument);
$this->updateMigrationDocument($migration, $projectDocument); $this->updateMigrationDocument($migration, $projectDocument);
$log->addBreadcrumb(new Breadcrumb("debug", "migration", "Migration hit stage 'finished' and failed", \microtime(true)));
$log->addExtra('migrationErrors', json_encode($errorMessages)); $log->addExtra('migrationErrors', json_encode($errorMessages));
return; return;
@ -336,7 +317,7 @@ class Migrations extends Action
$this->updateMigrationDocument($group, $project); $this->updateMigrationDocument($group, $project);
// Check if all other groups are finished, if so set parent document to completed aswell. // Check if all other groups are finished, if so set parent document to completed aswell.
$groupDocuments = $this->dbForProject->find('groupMigrations', [Query::equal('migrationId', [$migration->getId()])]); $groupDocuments = $this->dbForProject->find('migrationsGroup', [Query::equal('migrationId', [$migration->getId()])]);
$result = 'completed'; $result = 'completed';
foreach ($groupDocuments as $document) { foreach ($groupDocuments as $document) {
@ -346,13 +327,14 @@ class Migrations extends Action
$status = $document->getAttribute('status', 'processing'); $status = $document->getAttribute('status', 'processing');
if ($status == 'processing' || $status == 'pending') { if ($status === 'processing' || $status === 'pending') {
$result = 'processing'; $result = 'processing';
break; break;
} }
// Only fail parent if all have stopped processing. // Only fail parent if all have stopped processing.
if ($status == 'failed') { if ($status === 'failed') {
$result = 'failed';
break; break;
} }
} }