Fixed possible race condition in LocalFileMoveBatch
authorAaron Schulz <aschulz@wikimedia.org>
Mon, 19 May 2014 22:18:01 +0000 (15:18 -0700)
committerAaron Schulz <aschulz@wikimedia.org>
Mon, 19 May 2014 22:18:05 +0000 (15:18 -0700)
* If a move is blocked by a re-upload and the TRX started outside of
  LocalFile::lock, then the move did not see the new row in the oldimage
  table and so it will not move that version of the file in storage. Use
  the latest DB data to avoid that.

Change-Id: I7ec46941170293c96b99a449cb396517108e8b3d

includes/filerepo/file/LocalFile.php

index a8fa8bd..6315fdc 100644 (file)
@@ -2758,7 +2758,8 @@ class LocalFileMoveBatch {
                $result = $this->db->select( 'oldimage',
                        array( 'oi_archive_name', 'oi_deleted' ),
                        array( 'oi_name' => $this->oldName ),
-                       __METHOD__
+                       __METHOD__,
+                       array( 'FOR UPDATE' ) // ignore snapshot
                );
 
                foreach ( $result as $row ) {