ibragimovrinat

do-aging.php

Sep 9th, 2012
207
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 2.96 KB | None | 0 0
  1. <?php
  2.     // perform filesystem aging by repetitive file creation and deletion.
  3.  
  4.     $generation_count = 2000;
  5.  
  6.     // file categories
  7.     $q = array (
  8.         0 => array ( // small files
  9.             'size' => array (0, 16384),
  10.             'create' => array (0, 70),
  11.             'delete' => array (0, 69)
  12.         ),
  13.         1 => array (
  14.             'size' => array (512*1024, 6*1024*1024),
  15.             'create' => array (1, 10),
  16.             'delete' => array (1, 9)
  17.         ),
  18.         2 => array (  // large files, videos
  19.             'size' => array (500*1024*1024, 700*1024*1024),
  20.             'create' => array (0, 1),
  21.             'delete' => array (0, 1)
  22.         )
  23.  
  24.     );
  25.  
  26.     $buffer = "a";
  27.     for ($k = 0; $k < 20; $k ++) $buffer .= $buffer;       // $buffer is now 1 MiB
  28.  
  29.     $filenames = array();
  30.     for ($k = 0; $k < count ($q); $k ++) $filenames[$k] = array();
  31.     $flag_ran_out_of_space = 0;
  32.  
  33.     for ($generation = 0; $generation < $generation_count; $generation ++) {
  34.         echo "generation ".sprintf("%4d", $generation)."\n";
  35.  
  36.         // creating files
  37.         for ($type = 0; $type < count ($q); $type ++) {
  38.             $count = rand ($q[$type]['create'][0], $q[$type]['create'][1]);
  39.             $count = max ($count, 0);
  40.             echo "   creating $count files of type $type ";
  41.             for ($k = 0; $k < $count; $k ++) {
  42.                 $name = tempnam (".", "aging${type}_");
  43.                 $size = rand ($q[$type]['size'][0], $q[$type]['size'][1]);
  44.                 $fp = fopen ($name, "wb");
  45.                 $written = 0;
  46.                 while ($size > 0) {
  47.                     $block_size = min ($size, 1024*1024);
  48.                     $written = fwrite ($fp, $buffer, $block_size);
  49.                     $size = $size - $written;
  50.                     if (0 == $written) break;
  51.                 }
  52.                 fclose ($fp);
  53.                 $filenames[$type][] = $name;
  54.                 if (0 == $written) {
  55.                     $flag_ran_out_of_space = 1;
  56.                     echo "no space left."; break;
  57.                 }
  58.                 echo ".";
  59.             }
  60.             echo "\n";
  61.         }
  62.  
  63.         // on first generation do not delete files
  64.         if (0 == $generation) continue;
  65.  
  66.         // deleting files
  67.         for ($type = 0; $type < count($q); $type ++) {
  68.             $count = rand ($q[$type]['delete'][0], $q[$type]['delete'][1]);
  69.             $count = max ($count, 0);
  70.             echo "   deleting $count files of type $type ";
  71.             for ($k = 0; $k < $count; $k ++) {
  72.                 if (count ($filenames[$type]) > 0) {
  73.                     $key = array_rand ($filenames[$type]);
  74.                     unlink ($filenames[$type][$key]);
  75.                     unset ($filenames[$type][$key]);
  76.                     echo ".";
  77.                 }
  78.             }
  79.             echo "\n";
  80.         }
  81.     }
  82.  
  83.     if ($flag_ran_out_of_space) {
  84.         echo "Warning: there was time when no space was left.\n";
  85.     }
Advertisement
Add Comment
Please, Sign In to add comment