resourceConnection = $resourceConnection; $this->indexNameResolver = $indexNameResolver; } /** * @inheritdoc */ public function switch(IndexName $indexName, string $connectionName): void { $connection = $this->resourceConnection->getConnection($connectionName); $tableName = $this->indexNameResolver->resolveName($indexName); $this->switchTable($connection, [$tableName]); } /** * Switch index tables from replica to active * * @param AdapterInterface $connection * @param array $tableNames * @return void */ private function switchTable(AdapterInterface $connection, array $tableNames) { $toRename = []; foreach ($tableNames as $tableName) { $outdatedTableName = $tableName . $this->outdatedTableSuffix; $replicaTableName = $tableName . $this->replicaTableSuffix; $renameBatch = [ [ 'oldName' => $tableName, 'newName' => $outdatedTableName, ], [ 'oldName' => $replicaTableName, 'newName' => $tableName, ], [ 'oldName' => $outdatedTableName, 'newName' => $replicaTableName, ] ]; $toRename = array_merge($toRename, $renameBatch); } if (!empty($toRename)) { $connection->renameTablesBatch($toRename); } } }