Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/text.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorJulius Härtl <jus@bitgrid.net>2020-02-04 22:34:29 +0300
committerJulius Härtl <jus@bitgrid.net>2020-02-04 22:34:29 +0300
commit2ae22bba5032ce95cef0e3313a853da14c8bd5a8 (patch)
treea4f5615a345d6a7282fda261c7de2350f68a1250 /lib
parent478760aaeb0c143cac4dea35289d818de062c279 (diff)
Use ILockingProvider
Signed-off-by: Julius Härtl <jus@bitgrid.net>
Diffstat (limited to 'lib')
-rw-r--r--lib/Service/DocumentService.php19
1 files changed, 10 insertions, 9 deletions
diff --git a/lib/Service/DocumentService.php b/lib/Service/DocumentService.php
index d2b9bfcb0..467dc4c80 100644
--- a/lib/Service/DocumentService.php
+++ b/lib/Service/DocumentService.php
@@ -29,6 +29,7 @@ use \InvalidArgumentException;
use OCA\Text\Db\Session;
use OCP\DirectEditing\IManager;
use OCP\IRequest;
+use OCP\Lock\ILockingProvider;
use function json_encode;
use OC\Files\Node\File;
use OCA\Text\Db\Document;
@@ -97,7 +98,7 @@ class DocumentService {
*/
private $appData;
- public function __construct(DocumentMapper $documentMapper, StepMapper $stepMapper, IAppData $appData, $userId, IRootFolder $rootFolder, ICacheFactory $cacheFactory, ILogger $logger, ShareManager $shareManager, IRequest $request, IManager $directManager) {
+ public function __construct(DocumentMapper $documentMapper, StepMapper $stepMapper, IAppData $appData, $userId, IRootFolder $rootFolder, ICacheFactory $cacheFactory, ILogger $logger, ShareManager $shareManager, IRequest $request, IManager $directManager, ILockingProvider $lockingProvider) {
$this->documentMapper = $documentMapper;
$this->stepMapper = $stepMapper;
$this->userId = $userId;
@@ -106,6 +107,7 @@ class DocumentService {
$this->cache = $cacheFactory->createDistributed('text');
$this->logger = $logger;
$this->shareManager = $shareManager;
+ $this->lockingProvider = $lockingProvider;
try {
$this->appData->getFolder('documents');
} catch (NotFoundException $e) {
@@ -192,10 +194,11 @@ class DocumentService {
$document = null;
$oldVersion = null;
- if ($this->cache->get('document-push-lock-' . $documentId)) {
+ try {
+ $this->lockingProvider->acquireLock('document-push-lock-' . $documentId, ILockingProvider::LOCK_EXCLUSIVE);
+ } catch (LockedException $e) {
throw new VersionMismatchException('Version does not match');
}
- $this->cache->set('document-save-lock-' . $documentId, true, 10);
try {
$document = $this->documentMapper->find($documentId);
@@ -223,23 +226,21 @@ class DocumentService {
$step->setDocumentId($documentId);
$step->setVersion($version + 1);
$this->stepMapper->insert($step);
- // TODO restore old version for document if adding steps has failed
// TODO write steps to cache for quicker reading
- $this->cache->remove('document-push-lock-' . $documentId);
+ $this->lockingProvider->releaseLock('document-push-lock-' . $documentId, ILockingProvider::LOCK_EXCLUSIVE);
return $steps;
} catch (DoesNotExistException $e) {
- $this->cache->remove('document-push-lock-' . $documentId);
+ $this->lockingProvider->releaseLock('document-push-lock-' . $documentId, ILockingProvider::LOCK_EXCLUSIVE);
throw $e;
} catch (\Throwable $e) {
if ($document !== null && $oldVersion !== null) {
- $this->logger->error('This should never happen. An error occured when storing the version, trying to recover the last stable one');
- $this->logger->logException($e);
+ $this->logger->logException($e, ['message' => 'This should never happen. An error occured when storing the version, trying to recover the last stable one']);
$document->setCurrentVersion($oldVersion);
$this->documentMapper->update($document);
$this->cache->set('document-version-' . $document->getId(), $oldVersion);
$this->stepMapper->deleteAfterVersion($documentId, $oldVersion);
}
- $this->cache->remove('document-push-lock-' . $documentId);
+ $this->lockingProvider->releaseLock('document-push-lock-' . $documentId, ILockingProvider::LOCK_EXCLUSIVE);
throw $e;
}
}