예제 #1
0
	/**
	 * Helper function: do the actual database query to fetch file metadata.
	 *
	 * @param string $key key
	 * @param $readFromDB: constant (default: DB_SLAVE)
	 * @return boolean
	 */
	protected function fetchFileMetadata( $key, $readFromDB = DB_SLAVE ) {
		// populate $fileMetadata[$key]
		$dbr = null;
		if ( $readFromDB === DB_MASTER ) {
			// sometimes reading from the master is necessary, if there's replication lag.
			$dbr = $this->repo->getMasterDb();
		} else {
			$dbr = $this->repo->getSlaveDb();
		}

		$row = $dbr->selectRow(
			'uploadstash',
			'*',
			array( 'us_key' => $key ),
			__METHOD__
		);

		if ( !is_object( $row ) ) {
			// key wasn't present in the database. this will happen sometimes.
			return false;
		}

		$this->fileMetadata[$key] = (array)$row;

		return true;
	}
예제 #2
0
 /**
  * Get the chunk db state and populate update relevant local values
  */
 private function getChunkStatus()
 {
     // get Master db to avoid race conditions.
     // Otherwise, if chunk upload time < replag there will be spurious errors
     $dbw = $this->repo->getMasterDb();
     $row = $dbw->selectRow('uploadstash', array('us_chunk_inx', 'us_size', 'us_path'), array('us_key' => $this->mFileKey), __METHOD__);
     // Handle result:
     if ($row) {
         $this->mChunkIndex = $row->us_chunk_inx;
         $this->mOffset = $row->us_size;
         $this->mVirtualTempPath = $row->us_path;
     }
 }
 /**
  * Remove a file (see removeFile), but doesn't check ownership first.
  *
  * @return boolean: success
  */
 public function removeFileNoAuth($key)
 {
     wfDebug(__METHOD__ . " clearing row {$key}\n");
     $dbw = $this->repo->getMasterDb();
     // this gets its own transaction since it's called serially by the cleanupUploadStash maintenance script
     $dbw->begin();
     $dbw->delete('uploadstash', array('us_key' => $key), __METHOD__);
     $dbw->commit();
     // TODO: look into UnregisteredLocalFile and find out why the rv here is sometimes wrong (false when file was removed)
     // for now, ignore.
     $this->files[$key]->remove();
     unset($this->files[$key]);
     unset($this->fileMetadata[$key]);
     return true;
 }