From 3d096fe1ef8190bf8bdf615932745d4f72468d59 Mon Sep 17 00:00:00 2001 From: Christopher Lorke Date: Sun, 21 Oct 2018 19:30:43 +0200 Subject: [PATCH] Added public function to start a single migration step. --- README.md | 1 - src/Business/Service/MigrationSteps.php | 42 ++++++++++++++----- .../ElasticsearchMigrationContract.php | 12 ++++++ src/ElasticsearchMigration.php | 39 ++++++++++++++--- src/Exception/MigrationStepNotFound.php | 7 ++++ .../ElasticsearchMigrationTest.php | 11 +++++ 6 files changed, 95 insertions(+), 17 deletions(-) create mode 100644 src/Exception/MigrationStepNotFound.php diff --git a/README.md b/README.md index 835eab3..bb7b11f 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,6 @@ Namespace: Triadev\EsMigration\Business\Events ## Roadmap - stop migration -- restart migration step - audit logs - create/delete templates - shrink index diff --git a/src/Business/Service/MigrationSteps.php b/src/Business/Service/MigrationSteps.php index c8e8fdd..575f6c0 100644 --- a/src/Business/Service/MigrationSteps.php +++ b/src/Business/Service/MigrationSteps.php @@ -47,20 +47,40 @@ public function getMigrationSteps(string $migration, bool $withoutDoneSteps = tr continue; } - $migrations[] = new MigrationStep( - $migrationStepEntity->id, - $migrationStepEntity->type, - $migrationStepEntity->status, - $migrationStepEntity->error, - json_decode($migrationStepEntity->params, true), - $migrationStepEntity->priority, - $migrationStepEntity->stop_on_failure, - new \DateTime($migrationStepEntity->created_at), - new \DateTime($migrationStepEntity->updated_at) - ); + $migrations[] = $this->buildMigrationStep($migrationStepEntity); } } return $migrations; } + + /** + * Get migration step + * + * @param int $migrationStepId + * @return null|MigrationStep + */ + public function getMigrationStep(int $migrationStepId) : ?MigrationStep + { + if ($migrationStepEntity = $this->migrationStepRepository->find($migrationStepId)) { + return $this->buildMigrationStep($migrationStepEntity); + } + + return null; + } + + private function buildMigrationStep(ElasticsearchMigrationStep $elasticsearchMigrationStepEntity) : MigrationStep + { + return new MigrationStep( + $elasticsearchMigrationStepEntity->id, + $elasticsearchMigrationStepEntity->type, + $elasticsearchMigrationStepEntity->status, + $elasticsearchMigrationStepEntity->error, + json_decode($elasticsearchMigrationStepEntity->params, true), + $elasticsearchMigrationStepEntity->priority, + $elasticsearchMigrationStepEntity->stop_on_failure, + new \DateTime($elasticsearchMigrationStepEntity->created_at), + new \DateTime($elasticsearchMigrationStepEntity->updated_at) + ); + } } diff --git a/src/Contract/ElasticsearchMigrationContract.php b/src/Contract/ElasticsearchMigrationContract.php index cc70dd5..590acca 100644 --- a/src/Contract/ElasticsearchMigrationContract.php +++ b/src/Contract/ElasticsearchMigrationContract.php @@ -3,6 +3,7 @@ use Triadev\EsMigration\Business\Repository\ElasticsearchClients; use Triadev\EsMigration\Exception\MigrationAlreadyDone; +use Triadev\EsMigration\Exception\MigrationStepNotFound; interface ElasticsearchMigrationContract { @@ -48,6 +49,17 @@ public function addMigrationStep( */ public function deleteMigrationStep(int $migrationStepId) : bool; + /** + * Start single migration step + * + * @param int $migrationStepId + * @param ElasticsearchClients $elasticsearchClients + * + * @throws MigrationStepNotFound + * @throws \Throwable + */ + public function startSingleMigrationStep(int $migrationStepId, ElasticsearchClients $elasticsearchClients); + /** * Get migration status * diff --git a/src/ElasticsearchMigration.php b/src/ElasticsearchMigration.php index 9a51942..dc20d46 100644 --- a/src/ElasticsearchMigration.php +++ b/src/ElasticsearchMigration.php @@ -8,6 +8,7 @@ use Triadev\EsMigration\Business\Mapper\MigrationTypes; use Triadev\EsMigration\Business\Mapper\MigrationStatus; use Triadev\EsMigration\Exception\MigrationAlreadyRunning; +use Triadev\EsMigration\Exception\MigrationStepNotFound; use Triadev\EsMigration\Models\Entity\ElasticsearchMigration as ElasticsearchMigrationEntity; use Triadev\EsMigration\Models\Entity\ElasticsearchMigrationStep; use Triadev\EsMigration\Contract\Repository\ElasticsearchMigrationContract as EsMigrationRepositoryInterface; @@ -97,10 +98,7 @@ public function addMigrationStep( } /** - * Delete migration step - * - * @param int $migrationStepId - * @return bool + * @inheritdoc */ public function deleteMigrationStep(int $migrationStepId) : bool { @@ -113,6 +111,18 @@ public function deleteMigrationStep(int $migrationStepId) : bool return true; } + /** + * @inheritdoc + */ + public function startSingleMigrationStep(int $migrationStepId, ElasticsearchClients $elasticsearchClients) + { + if ($migrationStep = $this->migrationStepService->getMigrationStep($migrationStepId)) { + $this->startMigrationStep($migrationStep, $elasticsearchClients); + } else { + throw new MigrationStepNotFound(); + } + } + /** * @inheritdoc */ @@ -172,6 +182,11 @@ public function restartMigration(string $migration, ElasticsearchClients $elasti $this->migrate($migration, $elasticsearchClients); } + /** + * @param string $migration + * @param ElasticsearchClients $elasticsearchClients + * @throws \Throwable + */ private function migrate(string $migration, ElasticsearchClients $elasticsearchClients) { try { @@ -195,6 +210,10 @@ private function migrate(string $migration, ElasticsearchClients $elasticsearchC } } + /** + * @param string $migration + * @throws MigrationAlreadyDone + */ private function checkIfMigrationAlreadyDone(string $migration) { $migrationEntity = $this->migrationRepository->find($migration); @@ -205,6 +224,10 @@ private function checkIfMigrationAlreadyDone(string $migration) } } + /** + * @param string $migration + * @throws MigrationAlreadyRunning + */ private function checkIfMigrationAlreadyRunning(string $migration) { $migrationEntity = $this->migrationRepository->find($migration); @@ -215,6 +238,12 @@ private function checkIfMigrationAlreadyRunning(string $migration) } } + /** + * @param MigrationStep $migrationStep + * @param ElasticsearchClients $elasticsearchClients + * @throws Exception\MigrationsNotExist + * @throws \Throwable + */ private function startMigrationStep( MigrationStep $migrationStep, ElasticsearchClients $elasticsearchClients @@ -229,7 +258,7 @@ private function startMigrationStep( } $this->migrationStepRepository->update($migrationStep->getId(), MigrationStatus::MIGRATION_STATUS_DONE); - } catch (\Exception $e) { + } catch (\Throwable $e) { $this->migrationStepRepository->update( $migrationStep->getId(), MigrationStatus::MIGRATION_STATUS_ERROR, diff --git a/src/Exception/MigrationStepNotFound.php b/src/Exception/MigrationStepNotFound.php new file mode 100644 index 0000000..0032324 --- /dev/null +++ b/src/Exception/MigrationStepNotFound.php @@ -0,0 +1,7 @@ +assertTrue($this->migrationService->createMigration('phpunit')); + + $this->migrationService->startSingleMigrationStep(1, $this->elasticsearchClients); + } + /** * @test */