Exemplo n.º 1
0
 public function test_finishProcess_ShouldNotThrowError_IfNotStartedBefore()
 {
     $this->process->finishProcess();
     $this->assertFalse($this->process->isRunning());
     $this->assertTrue($this->process->hasStarted());
     $this->assertTrue($this->process->hasFinished());
 }
Exemplo n.º 2
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;
 }