From 7aab67d59bb920293bb6c49e60aaa00a30f78673 Mon Sep 17 00:00:00 2001 From: Gaitholabi <24876890+Gaitholabi@users.noreply.github.com> Date: Tue, 18 Apr 2023 21:18:06 +0300 Subject: [PATCH] [10.x] Allow separate directory for locks on filestore (#46811) * allow separate directory for locks on filestore * fix style * fix method signature * Update src/Illuminate/Cache/FileStore.php Co-authored-by: Dries Vints * apply styleci * formatting --------- Co-authored-by: Dries Vints Co-authored-by: Taylor Otwell --- src/Illuminate/Cache/CacheManager.php | 5 ++++- src/Illuminate/Cache/FileStore.php | 29 ++++++++++++++++++++++++++- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/Illuminate/Cache/CacheManager.php b/src/Illuminate/Cache/CacheManager.php index 98babebf91fb..a821f9261e13 100755 --- a/src/Illuminate/Cache/CacheManager.php +++ b/src/Illuminate/Cache/CacheManager.php @@ -144,7 +144,10 @@ protected function createArrayDriver(array $config) */ protected function createFileDriver(array $config) { - return $this->repository(new FileStore($this->app['files'], $config['path'], $config['permission'] ?? null)); + return $this->repository( + (new FileStore($this->app['files'], $config['path'], $config['permission'] ?? null)) + ->setLockDirectory($config['lock_path'] ?? null) + ); } /** diff --git a/src/Illuminate/Cache/FileStore.php b/src/Illuminate/Cache/FileStore.php index 7202ee63bc6a..424ca63d43c6 100755 --- a/src/Illuminate/Cache/FileStore.php +++ b/src/Illuminate/Cache/FileStore.php @@ -28,6 +28,13 @@ class FileStore implements Store, LockProvider */ protected $directory; + /** + * The file cache lock directory. + * + * @var string|null + */ + protected $lockDirectory; + /** * Octal representation of the cache file permissions. * @@ -210,7 +217,14 @@ public function forever($key, $value) */ public function lock($name, $seconds = 0, $owner = null) { - return new FileLock($this, $name, $seconds, $owner); + $this->ensureCacheDirectoryExists($this->lockDirectory ?? $this->directory); + + return new FileLock( + new static($this->files, $this->lockDirectory ?? $this->directory, $this->filePermission), + $name, + $seconds, + $owner + ); } /** @@ -364,6 +378,19 @@ public function getDirectory() return $this->directory; } + /** + * Set the cache directory where locks should be stored. + * + * @param string|null $lockDirectory + * @return $this + */ + public function setLockDirectory($lockDirectory) + { + $this->lockDirectory = $lockDirectory; + + return $this; + } + /** * Get the cache key prefix. *