diff --git a/lib/private/Files/ObjectStore/ObjectStoreStorage.php b/lib/private/Files/ObjectStore/ObjectStoreStorage.php index b7044c2d8949c..04dd846abe40f 100644 --- a/lib/private/Files/ObjectStore/ObjectStoreStorage.php +++ b/lib/private/Files/ObjectStore/ObjectStoreStorage.php @@ -61,6 +61,9 @@ class ObjectStoreStorage extends \OC\Files\Storage\Common { private $logger; + /** @var bool */ + protected $validateWrites = true; + public function __construct($params) { if (isset($params['objectstore']) && $params['objectstore'] instanceof IObjectStore) { $this->objectStore = $params['objectstore']; @@ -75,6 +78,9 @@ public function __construct($params) { if (isset($params['objectPrefix'])) { $this->objectPrefix = $params['objectPrefix']; } + if (isset($params['validateWrites'])) { + $this->validateWrites = (bool)$params['validateWrites']; + } //initialize cache with root directory in cache if (!$this->is_dir('/')) { $this->mkdir('/'); @@ -522,7 +528,7 @@ public function writeStream(string $path, $stream, int $size = null): int { if ($exists) { $this->getCache()->update($fileId, $stat); } else { - if ($this->objectStore->objectExists($urn)) { + if (!$this->validateWrites || $this->objectStore->objectExists($urn)) { $this->getCache()->move($uploadPath, $path); } else { $this->getCache()->remove($uploadPath); diff --git a/tests/lib/Files/ObjectStore/ObjectStoreStorageOverwrite.php b/tests/lib/Files/ObjectStore/ObjectStoreStorageOverwrite.php index 5872056e42d25..b85f6289c9485 100644 --- a/tests/lib/Files/ObjectStore/ObjectStoreStorageOverwrite.php +++ b/tests/lib/Files/ObjectStore/ObjectStoreStorageOverwrite.php @@ -37,4 +37,8 @@ public function setObjectStore(IObjectStore $objectStore) { public function getObjectStore(): IObjectStore { return $this->objectStore; } + + public function setValidateWrites(bool $validate) { + $this->validateWrites = $validate; + } } diff --git a/tests/lib/Files/ObjectStore/ObjectStoreStorageTest.php b/tests/lib/Files/ObjectStore/ObjectStoreStorageTest.php index 5ebfd48d1a62b..1bebaf6c4ba7b 100644 --- a/tests/lib/Files/ObjectStore/ObjectStoreStorageTest.php +++ b/tests/lib/Files/ObjectStore/ObjectStoreStorageTest.php @@ -181,6 +181,15 @@ public function testWriteObjectSilentFailure() { $this->assertFalse($this->instance->file_exists('test.txt')); } + public function testWriteObjectSilentFailureNoCheck() { + $objectStore = $this->instance->getObjectStore(); + $this->instance->setObjectStore(new FailWriteObjectStore($objectStore)); + $this->instance->setValidateWrites(false); + + $this->instance->file_put_contents('test.txt', 'foo'); + $this->assertTrue($this->instance->file_exists('test.txt')); + } + public function testDeleteObjectFailureKeepCache() { $objectStore = $this->instance->getObjectStore(); $this->instance->setObjectStore(new FailDeleteObjectStore($objectStore));