Details
-
Type:
Bug
-
Status:
Open
-
Priority:
Major
-
Resolution: Unresolved
-
Labels:None
Description
When iterating migration versions, a call to SchemaManager::createSchema() is done for every versions. Four our schema, this call take about 1 second to execute. With already 30 migrations, this begin to be a problem.
$versions = $configuration->registerMigrationsFromDirectory($this->_migration_folder); foreach($versions as $version){ if(!$version->isMigrated()){ $version->markMigrated(); } }
The problem is in Migrations\Configuration\Configuration::createMigrationTable() which does not set the migrationTableCreated flag when the table already exists.
public function createMigrationTable() { $this->validate(); if ($this->migrationTableCreated) { return false; } $schema = $this->connection->getSchemaManager()->createSchema(); if ( ! $schema->hasTable($this->migrationsTableName)) { $columns = array( 'version' => new Column('version', Type::getType('string'), array('length' => 14)), ); $table = new Table($this->migrationsTableName, $columns); $table->setPrimaryKey(array('version')); $this->connection->getSchemaManager()->createTable($table); $this->migrationTableCreated = true; return true; } return false; }
Activity
Eric Durand-Tremblay
made changes -
| Field | Original Value | New Value |
|---|---|---|
| Description |
When iterating migration versions, a call to SchemaManager::createSchema() is done for every versions. Four our schema, this call take about 1 second to execute. With already 30 migrations, this begin to be a problem.
{code} $versions = $configuration->registerMigrationsFromDirectory($this->_migration_folder); foreach($versions as $version){ if(!$version->isMigrated()){ $version->markMigrated(); } } {code} The problem is in Migrations\Configuration\Configuration::createMigrationTable() which does not set the migrationTableCreated flag when the table already exists. {code} public function createMigrationTable() { $this->validate(); if ($this->migrationTableCreated) { return false; } $schema = $this->connection->getSchemaManager()->createSchema(); if ( ! $schema->hasTable($this->migrationsTableName)) { $columns = array( 'version' => new Column('version', Type::getType('string'), array('length' => 14)), ); $table = new Table($this->migrationsTableName, $columns); $table->setPrimaryKey(array('version')); $this->connection->getSchemaManager()->createTable($table); $this->migrationTableCreated = true; return true; } return false; } {code} |
When iterating migration versions, a call to SchemaManager::createSchema() is done for every versions. Four our schema, this call take about 1 second to execute. With already 30 migrations, this begin to be a problem.
{code} $versions = $configuration->registerMigrationsFromDirectory($this->_migration_folder); foreach($versions as $version){ if(!$version->isMigrated()){ $version->markMigrated(); } } {code} The problem is in Migrations\Configuration\Configuration::createMigrationTable() which does not set the migrationTableCreated flag when the table already exists. {code} public function createMigrationTable() { $this->validate(); if ($this->migrationTableCreated) { return false; } $schema = $this->connection->getSchemaManager()->createSchema(); if ( ! $schema->hasTable($this->migrationsTableName)) { $columns = array( 'version' => new Column('version', Type::getType('string'), array('length' => 14)), ); $table = new Table($this->migrationsTableName, $columns); $table->setPrimaryKey(array('version')); $this->connection->getSchemaManager()->createTable($table); $this->migrationTableCreated = true; return true; } return false; } {code} |
This list may be incomplete, as errors occurred whilst retrieving source from linked applications:
- Request to http://www.doctrine-project.org/fisheye/ failed: Error in remote call to 'FishEye 0 (http://www.doctrine-project.org/fisheye/)' (http://www.doctrine-project.org/fisheye) [AbstractRestCommand{path='/rest-service-fe/search-v1/crossRepositoryQuery', params={query=DMIG-36, expand=changesets[-21:-1].revisions[0:29],reviews}, methodType=GET}] : Received status code 503 (Service Temporarily Unavailable)