ILIAS  trunk Revision v12.0_alpha-377-g3641b37b9db
class.ilAssQuestionProcessLockerFile.php
Go to the documentation of this file.
1<?php
2
20
28{
29 public const PROCESS_NAME_QUESTION_WORKING_STATE_UPDATE = 'questionWorkingStateUpdate';
30
34 protected $lockFileHandles = [];
35
39 public function __construct(
40 private ilAssQuestionProcessLockFileStorage $lockFileStorage,
41 private ilLogger|TestLogger $logger
42 ) {
43 }
44
49 {
50 $this->requestLock(self::PROCESS_NAME_QUESTION_WORKING_STATE_UPDATE);
51 }
52
57 {
58 $this->releaseLock(self::PROCESS_NAME_QUESTION_WORKING_STATE_UPDATE);
59 }
60
65 {
66 $this->requestLock(self::PROCESS_NAME_QUESTION_WORKING_STATE_UPDATE);
67 }
68
73 {
74 $this->releaseLock(self::PROCESS_NAME_QUESTION_WORKING_STATE_UPDATE);
75 }
76
80 private function requestLock($processName): void
81 {
82 $lockFilePath = $this->getLockFilePath($processName);
83 $this->lockFileHandles[$processName] = fopen($lockFilePath, 'w');
84 if (!flock($this->lockFileHandles[$processName], LOCK_EX)) {
85 $this->logger->error("Flock failed for {$lockFilePath}.");
86 }
87 }
88
93 private function getLockFilePath($processName): string
94 {
95 $path = $this->lockFileStorage->getAbsolutePath();
96 return $path . '/' . $processName . '.lock';
97 }
98
102 private function releaseLock($processName): void
103 {
104 flock($this->lockFileHandles[$processName], LOCK_UN);
105 fclose($this->lockFileHandles[$processName]);
106 }
107}
__construct(private ilAssQuestionProcessLockFileStorage $lockFileStorage, private ilLogger|TestLogger $logger)
Component logger with individual log levels by component id.
$path
Definition: ltiservices.php:30