Beispiel #1
0
 public function test_getSecondsSinceCreation()
 {
     sleep(3);
     $seconds = $this->process->getSecondsSinceCreation();
     $this->assertGreaterThanOrEqual(3, $seconds);
     $this->assertLessThanOrEqual(4, $seconds);
 }
 public function test_getSecondsSinceCreation()
 {
     // This is not proper, but it avoids using sleep and stopping the tests for several seconds
     $r = new ReflectionProperty($this->process, 'timeCreation');
     $r->setAccessible(true);
     $r->setValue($this->process, time() - 2);
     $seconds = $this->process->getSecondsSinceCreation();
     $this->assertEquals(2, $seconds);
 }
Beispiel #3
0
 /**
  * If there are multiple archiver running on the same node it makes sure only one of them performs an action and it
  * will wait until another one has finished. Any closure you pass here should be very fast as other processes wait
  * for this closure to finish otherwise. Currently only used for making multiple archivers at the same time work.
  * If a closure takes more than 5 seconds we assume it is dead and simply continue.
  *
  * @param \Closure $closure
  * @return mixed
  * @throws \Exception
  */
 private function runExclusive($closure)
 {
     $process = new Process('archive.sharedsiteids');
     while ($process->isRunning() && $process->getSecondsSinceCreation() < 5) {
         // wait max 5 seconds, such an operation should not take longer
         usleep(25 * 1000);
     }
     $process->startProcess();
     try {
         $result = $closure();
     } catch (Exception $e) {
         $process->finishProcess();
         throw $e;
     }
     $process->finishProcess();
     return $result;
 }