Skip to content

Commit

Permalink
Merge pull request #15 from triadev/start_single_migration_step
Browse files Browse the repository at this point in the history
Added public function to start a single migration step.
  • Loading branch information
triadev committed Oct 21, 2018
2 parents 1b7f205 + 3d096fe commit 65c982b
Show file tree
Hide file tree
Showing 6 changed files with 95 additions and 17 deletions.
1 change: 0 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,6 @@ Namespace: Triadev\EsMigration\Business\Events

## Roadmap
- stop migration
- restart migration step
- audit logs
- create/delete templates
- shrink index
Expand Down
42 changes: 31 additions & 11 deletions src/Business/Service/MigrationSteps.php
Original file line number Diff line number Diff line change
Expand Up @@ -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)
);
}
}
12 changes: 12 additions & 0 deletions src/Contract/ElasticsearchMigrationContract.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

use Triadev\EsMigration\Business\Repository\ElasticsearchClients;
use Triadev\EsMigration\Exception\MigrationAlreadyDone;
use Triadev\EsMigration\Exception\MigrationStepNotFound;

interface ElasticsearchMigrationContract
{
Expand Down Expand Up @@ -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
*
Expand Down
39 changes: 34 additions & 5 deletions src/ElasticsearchMigration.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -97,10 +98,7 @@ public function addMigrationStep(
}

/**
* Delete migration step
*
* @param int $migrationStepId
* @return bool
* @inheritdoc
*/
public function deleteMigrationStep(int $migrationStepId) : bool
{
Expand All @@ -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
*/
Expand Down Expand Up @@ -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 {
Expand All @@ -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);
Expand All @@ -205,6 +224,10 @@ private function checkIfMigrationAlreadyDone(string $migration)
}
}

/**
* @param string $migration
* @throws MigrationAlreadyRunning
*/
private function checkIfMigrationAlreadyRunning(string $migration)
{
$migrationEntity = $this->migrationRepository->find($migration);
Expand All @@ -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
Expand All @@ -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,
Expand Down
7 changes: 7 additions & 0 deletions src/Exception/MigrationStepNotFound.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<?php
namespace Triadev\EsMigration\Exception;

class MigrationStepNotFound extends \Exception
{

}
11 changes: 11 additions & 0 deletions tests/integration/ElasticsearchMigrationTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,17 @@ public function it_returns_false_if_migration_not_exist()
));
}

/**
* @test
* @expectedException \Triadev\EsMigration\Exception\MigrationStepNotFound
*/
public function it_starts_a_single_migration_step()
{
$this->assertTrue($this->migrationService->createMigration('phpunit'));

$this->migrationService->startSingleMigrationStep(1, $this->elasticsearchClients);
}

/**
* @test
*/
Expand Down

0 comments on commit 65c982b

Please sign in to comment.