Unverified Commit 402dd052 authored by Alex Pott's avatar Alex Pott
Browse files

Issue #2802803 by Berdir, AdamPS, Darren Oh, alexpott, Munavijayalakshmi,...

Issue #2802803 by Berdir, AdamPS, Darren Oh, alexpott, Munavijayalakshmi, jackbravo, slashrsm, mmbk, Dane Powell, larowlan, LittleCoding, gapple, catch, wiifm, quantumized, acbramley: Temporary files whose files are missing on the disk result in never-ending error log messages

(cherry picked from commit 00b3590a)
parent 6b619221
Loading
Loading
Loading
Loading
+10 −5
Original line number Diff line number Diff line
@@ -728,12 +728,17 @@ function file_cron() {
    foreach ($files as $file) {
      $references = \Drupal::service('file.usage')->listUsage($file);
      if (empty($references)) {
        if (file_exists($file->getFileUri())) {
          $file->delete();
        if (!file_exists($file->getFileUri())) {
          if (!file_valid_uri($file->getFileUri())) {
            \Drupal::logger('file system')->warning('Temporary file "%path" that was deleted during garbage collection did not exist on the filesystem. This could be caused by a missing stream wrapper.', ['%path' => $file->getFileUri()]);
          }
          else {
          \Drupal::logger('file system')->error('Could not delete temporary file "%path" during garbage collection', ['%path' => $file->getFileUri()]);
            \Drupal::logger('file system')->warning('Temporary file "%path" that was deleted during garbage collection did not exist on the filesystem.', ['%path' => $file->getFileUri()]);
          }
        }
        // Delete the file entity. If the file does not exist, this will
        // generate a second notice in the watchdog.
        $file->delete();
      }
      else {
        \Drupal::logger('file system')->info('Did not delete temporary file "%path" during garbage collection because it is in use by the following modules: %modules.', ['%path' => $file->getFileUri(), '%modules' => implode(', ', array_keys($references))]);
+24 −0
Original line number Diff line number Diff line
@@ -77,4 +77,28 @@ public function testInUse() {
    $this->assertFalse(File::load($file->id()), 'File was removed from the database.');
  }

  /**
   * Tries to run cron deletion on file deleted from the file-system.
   */
  public function testCronDeleteNonExistingTemporary() {
    $file = $this->createFile();
    // Delete the file, but leave it in the file_managed table.
    \Drupal::service('file_system')->delete($file->getFileUri());
    $this->assertFalse(file_exists($file->getFileUri()), 'File is deleted from the filesystem.');
    $this->assertTrue(File::load($file->id()), 'File exist in file_managed table');

    // Call file_cron() to clean up the file. Make sure the changed timestamp
    // of the file is older than the system.file.temporary_maximum_age
    // configuration value.
    \Drupal::database()->update('file_managed')
      ->fields([
        'changed' => REQUEST_TIME - ($this->config('system.file')->get('temporary_maximum_age') + 1),
      ])
      ->condition('fid', $file->id())
      ->execute();
    \Drupal::service('cron')->run();

    $this->assertFalse(File::load($file->id()), 'File was removed from the database.');
  }

}