Skip to content

Extremely slow performance of "Extension Manager" when custom repo added to composer.json #23242

Closed
@vovayatsyuk

Description

@vovayatsyuk

Summary

When some repo is added to the repositories section of composer.json file "Extension Manager" page start working extremely slow.

(I don't recommend to test it - magento has near 200 composer packages. An example below will trigger Magento to call composer show PACKAGE --available for every installed module.)

Examples

  1. Open composer.json file in magento root.

  2. Add or modify "repositories" section as follows:

    "repositories": {
        "swissup": {
            "type": "composer",
            "url": "https://docs.swissuplabs.com/packages/"
        },
        "magento": {
            "type": "composer",
            "url": "https://repo.magento.com/packages.json"
        }
    }
    
  3. Navigate to backend System > Web Setup Wizard

  4. The page will load extremely slow.

Proposed solution

I propose to do the following things in Magento/Setup/Model/PackagesData.php:

  1. Don't call composer show for modules found in the marketplace:
@@ -476,21 +476,14 @@
      */
     private function getPackageAvailableVersions($package)
     {
-        $magentoRepositories = $this->composerInformation->getRootRepositories();
-
-        // Check we have only one repo.magento.com repository
-        if (count($magentoRepositories) === 1
-            && strpos($magentoRepositories[0], $this->packagesAuth->getCredentialBaseUrl()) !== false
-        ) {
-            $packagesJson = $this->getPackagesJson();
-
-            if (isset($packagesJson[$package])) {
-                $packageVersions = $packagesJson[$package];
-                uksort($packageVersions, 'version_compare');
-                $packageVersions = array_reverse($packageVersions);
-
-                return array_keys($packageVersions);
-            }
+        $packagesJson = $this->getPackagesJson();
+
+        if (isset($packagesJson[$package])) {
+            $packageVersions = $packagesJson[$package];
+            uksort($packageVersions, 'version_compare');
+            $packageVersions = array_reverse($packageVersions);
+
+            return array_keys($packageVersions);
         }
 
         return $this->getAvailableVersionsFromAllRepositories($package);
  1. Don't process modules that are not from the marketplace:
@@ -486,7 +486,7 @@
             return array_keys($packageVersions);
         }
 
-        return $this->getAvailableVersionsFromAllRepositories($package);
+        return [];
     }
 
     /**

These changes intentionally remove support of the modules from packagist.org to prevent totally unusable "Extenstion Manager"

Metadata

Metadata

Assignees

Labels

Issue: Cannot ReproduceCannot reproduce the issue on the latest `2.4-develop` branchIssue: Format is validGate 1 Passed. Automatic verification of issue format passed

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions