Parcourir la source

Update packages one by one to avoid deadlocks in big transactions

Jordi Boggiano il y a 10 ans
Parent
commit
30ff3a9e96

+ 6 - 4
src/Packagist/WebBundle/Command/IndexPackagesCommand.php

@@ -155,12 +155,14 @@ class IndexPackagesCommand extends ContainerAwareCommand
                 }
             }
 
-            $doctrine->getManager()->flush();
-            $doctrine->getManager()->clear();
-            unset($packages);
-
             $update->addCommit();
             $solarium->update($update);
+
+            foreach ($packages as $package) {
+                $doctrine->getManager()->flush($package);
+            }
+            $doctrine->getManager()->clear();
+            unset($packages);
         }
 
         $lock->release();

+ 2 - 2
src/Packagist/WebBundle/Package/SymlinkDumper.php

@@ -231,11 +231,11 @@ class SymlinkDumper
                     $this->fs->mkdir(dirname($buildDir.'/'.$name));
                     $this->writeFile($buildDir.'/'.$name.'.files', json_encode(array_keys($affectedFiles)));
 
+                    // update dump date
                     $package->setDumpedAt($dumpTime);
+                    $this->doctrine->getManager()->flush($package);
                 }
 
-                // update dump dates
-                $this->doctrine->getManager()->flush();
                 unset($packages, $package, $version);
                 $this->doctrine->getManager()->clear();