Skip to content

Commit

Permalink
use in objectstore copy
Browse files Browse the repository at this point in the history
Signed-off-by: Robin Appelman <robin@icewind.nl>
  • Loading branch information
icewind1991 committed Nov 5, 2020
1 parent ecbe8cb commit b38ff39
Show file tree
Hide file tree
Showing 9 changed files with 68 additions and 3 deletions.
4 changes: 4 additions & 0 deletions lib/private/Files/ObjectStore/Azure.php
Original file line number Diff line number Diff line change
Expand Up @@ -130,4 +130,8 @@ public function objectExists($urn) {
}
}
}

public function copyObject($from, $to) {
$this->getBlobClient()->copyBlob($this->containerName, $to, $this->containerName, $from);
}
}
15 changes: 15 additions & 0 deletions lib/private/Files/ObjectStore/ObjectStoreStorage.php
Original file line number Diff line number Diff line change
Expand Up @@ -523,4 +523,19 @@ public function writeStream(string $path, $stream, int $size = null): int {
public function getObjectStore(): IObjectStore {
return $this->objectStore;
}

public function copy($from, $to) {
$from = $this->normalizePath($from);
$to = $this->normalizePath($to);

$cache = $this->getCache();
$sourceEntry = $cache->get($from);
if (!$sourceEntry) {
throw new NotFoundException('Source object not found');
}

$this->objectStore->copyObject($from, $to);;

$cache->copyFromCache($cache, $sourceEntry, $to);
}
}
4 changes: 4 additions & 0 deletions lib/private/Files/ObjectStore/S3ObjectTrait.php
Original file line number Diff line number Diff line change
Expand Up @@ -124,4 +124,8 @@ public function deleteObject($urn) {
public function objectExists($urn) {
return $this->getConnection()->doesObjectExist($this->bucket, $urn);
}

public function copyObject($from, $to) {
$this->getConnection()->copy($this->getBucket(), $from, $this->getBucket(), $to);
}
}
4 changes: 4 additions & 0 deletions lib/private/Files/ObjectStore/StorageObjectStore.php
Original file line number Diff line number Diff line change
Expand Up @@ -93,4 +93,8 @@ public function deleteObject($urn) {
public function objectExists($urn) {
return $this->storage->file_exists($urn);
}

public function copyObject($from, $to) {
$this->storage->copy($from, $to);
}
}
12 changes: 9 additions & 3 deletions lib/private/Files/ObjectStore/Swift.php
Original file line number Diff line number Diff line change
Expand Up @@ -87,13 +87,13 @@ public function writeObject($urn, $stream) {
if (filesize($tmpFile) < SWIFT_SEGMENT_SIZE) {
$this->getContainer()->createObject([
'name' => $urn,
'stream' => stream_for($handle)
'stream' => stream_for($handle),
]);
} else {
$this->getContainer()->createLargeObject([
'name' => $urn,
'stream' => stream_for($handle),
'segmentSize' => SWIFT_SEGMENT_SIZE
'segmentSize' => SWIFT_SEGMENT_SIZE,
]);
}
}
Expand All @@ -114,7 +114,7 @@ public function readObject($urn) {
'stream' => true,
'headers' => [
'X-Auth-Token' => $tokenId,
'Cache-Control' => 'no-cache'
'Cache-Control' => 'no-cache',
],
]
);
Expand Down Expand Up @@ -149,4 +149,10 @@ public function deleteContainer() {
public function objectExists($urn) {
return $this->getContainer()->objectExists($urn);
}

public function copyObject($from, $to) {
$this->getContainer()->getObject($from)->copy([
'destination' => $this->getContainer()->name . '/' . $to
]);
}
}
8 changes: 8 additions & 0 deletions lib/public/Files/ObjectStore/IObjectStore.php
Original file line number Diff line number Diff line change
Expand Up @@ -73,4 +73,12 @@ public function deleteObject($urn);
* @since 16.0.0
*/
public function objectExists($urn);

/**
* @param string $from the unified resource name used to identify the source object
* @param string $to the unified resource name used to identify the target object
* @return void
* @since 21.0.0
*/
public function copyObject($from, $to);
}
4 changes: 4 additions & 0 deletions tests/lib/Files/ObjectStore/FailDeleteObjectStore.php
Original file line number Diff line number Diff line change
Expand Up @@ -51,4 +51,8 @@ public function deleteObject($urn) {
public function objectExists($urn) {
return $this->objectStore->objectExists($urn);
}

public function copyObject($from, $to) {
$this->objectStore->copyObject($from, $to);
}
}
4 changes: 4 additions & 0 deletions tests/lib/Files/ObjectStore/FailWriteObjectStore.php
Original file line number Diff line number Diff line change
Expand Up @@ -52,4 +52,8 @@ public function deleteObject($urn) {
public function objectExists($urn) {
return $this->objectStore->objectExists($urn);
}

public function copyObject($from, $to) {
$this->objectStore->copyObject($from, $to);
}
}
16 changes: 16 additions & 0 deletions tests/lib/Files/ObjectStore/ObjectStoreTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -108,4 +108,20 @@ public function testExists() {

$this->assertFalse($instance->objectExists('2'));
}

public function testCopy() {
$stream = $this->stringToStream('foobar');

$instance = $this->getInstance();

$instance->writeObject('source', $stream);

$this->assertFalse($instance->objectExists('target'));

$instance->copyObject('source', 'target');

$this->assertTrue($instance->objectExists('target'));

$this->assertEquals('foobar', stream_get_contents($instance->readObject('target')));
}
}

0 comments on commit b38ff39

Please sign in to comment.