aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/private/Files/ObjectStore/ObjectStoreStorage.php8
-rw-r--r--tests/lib/Files/ObjectStore/ObjectStoreStorageOverwrite.php4
-rw-r--r--tests/lib/Files/ObjectStore/ObjectStoreStorageTest.php9
3 files changed, 20 insertions, 1 deletions
diff --git a/lib/private/Files/ObjectStore/ObjectStoreStorage.php b/lib/private/Files/ObjectStore/ObjectStoreStorage.php
index b7044c2d894..04dd846abe4 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 @@ class ObjectStoreStorage extends \OC\Files\Storage\Common {
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 @@ class ObjectStoreStorage extends \OC\Files\Storage\Common {
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 5872056e42d..b85f6289c94 100644
--- a/tests/lib/Files/ObjectStore/ObjectStoreStorageOverwrite.php
+++ b/tests/lib/Files/ObjectStore/ObjectStoreStorageOverwrite.php
@@ -37,4 +37,8 @@ class ObjectStoreStorageOverwrite extends ObjectStoreStorage {
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 5ebfd48d1a6..1bebaf6c4ba 100644
--- a/tests/lib/Files/ObjectStore/ObjectStoreStorageTest.php
+++ b/tests/lib/Files/ObjectStore/ObjectStoreStorageTest.php
@@ -181,6 +181,15 @@ class ObjectStoreStorageTest extends Storage {
$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));