From e107519295fc11defbee37777adbdfba49faa7aa Mon Sep 17 00:00:00 2001 From: Adrian Brzezinski Date: Fri, 17 Jan 2020 11:18:23 +0100 Subject: Large Object support for OpenStack Swift. Until now, you wouldn't be able to create objects larger that 5GB. It's somewhat related with pull #18883 Signed-off-by: Adrian Brzezinski --- lib/private/Files/ObjectStore/Swift.php | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) (limited to 'lib') diff --git a/lib/private/Files/ObjectStore/Swift.php b/lib/private/Files/ObjectStore/Swift.php index 9a2aa82295e..33a8310fc9f 100644 --- a/lib/private/Files/ObjectStore/Swift.php +++ b/lib/private/Files/ObjectStore/Swift.php @@ -32,6 +32,8 @@ use OCP\Files\ObjectStore\IObjectStore; use OCP\Files\StorageAuthException; use OpenStack\Common\Error\BadResponseError; +const SWIFT_SEGMENT_SIZE = 1073741824; // 1GB + class Swift implements IObjectStore { /** * @var array @@ -80,10 +82,18 @@ class Swift implements IObjectStore { file_put_contents($tmpFile, $stream); $handle = fopen($tmpFile, 'rb'); - $this->getContainer()->createObject([ - 'name' => $urn, - 'stream' => stream_for($handle) - ]); + if (filesize($tmpFile) < SWIFT_SEGMENT_SIZE) { + $this->getContainer()->createObject([ + 'name' => $urn, + 'stream' => stream_for($handle) + ]); + } else { + $this->getContainer()->createLargeObject([ + 'name' => $urn, + 'stream' => stream_for($handle), + 'segmentSize' => SWIFT_SEGMENT_SIZE + ]); + } } /** -- cgit v1.2.3