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 <adrian.brzezinski@eo.pl>
This commit is contained in:
Adrian Brzezinski 2020-01-17 11:18:23 +01:00
parent 2d7f71faca
commit e107519295

View file

@ -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
]);
}
}
/**