Skip to content

Commit 0bb1e63

Browse files
committed
make deleteWithObjects() work with empty containers
1) use getObjectCount() to check container size, 2) return early if empty container deleted, 3) conditional syntax changed for PSR-2 compliance, and 4) removed "and all its objects" from container exception message since we can assume objects in container were successfully deleted by deleteAllObjects();
1 parent 4ecf458 commit 0bb1e63

File tree

1 file changed

+27
-28
lines changed

1 file changed

+27
-28
lines changed

lib/OpenCloud/ObjectStore/Resource/Container.php

Lines changed: 27 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -180,37 +180,36 @@ public function delete($deleteObjects = false)
180180
public function deleteWithObjects($secondsToWait = null)
181181
{
182182
// If container is empty, just delete it
183-
$numObjects = (int) $this->retrieveMetadata()->getProperty('Object-Count');
184-
if ($numObjects === 0) $response = $this->delete();
185-
186-
// Else attempt to delete all objects first, then delete container
187-
else {
188-
// If timeout (seconds to wait) is not specified by caller, try to
189-
// estimate it based on number of objects in container
190-
if (null === $secondsToWait) $secondsToWait = round($numObjects / 2);
191-
192-
// Attempt to delete all objects and container
193-
$endTime = time() + $secondsToWait;
194-
$containerDeleted = false;
195-
while ((time() < $endTime) && !$containerDeleted) {
196-
$this->deleteAllObjects();
197-
try {
198-
$response = $this->delete();
183+
$numObjects = $this->getObjectCount();
184+
if ($numObjects === 0) {
185+
return $this->delete();
186+
}
187+
// If timeout ($secondsToWait) is not specified by caller,
188+
// try to estimate it based on number of objects in container
189+
if (null === $secondsToWait) {
190+
$secondsToWait = round($numObjects / 2);
191+
}
192+
// Attempt to delete all objects and container
193+
$endTime = time() + $secondsToWait;
194+
$containerDeleted = false;
195+
while ((time() < $endTime) && !$containerDeleted) {
196+
$this->deleteAllObjects();
197+
try {
198+
$response = $this->delete();
199+
$containerDeleted = true;
200+
} catch (ContainerException $e) {
201+
// Ignore exception and try again
202+
} catch (ClientErrorResponseException $e) {
203+
if ($e->getResponse()->getStatusCode() == 404) {
204+
// Container has been deleted
199205
$containerDeleted = true;
200-
} catch (ContainerException $e) {
201-
// Ignore exception and try again
202-
} catch (ClientErrorResponseException $e) {
203-
if ($e->getResponse()->getStatusCode() == 404) {
204-
// Container has been deleted
205-
$containerDeleted = true;
206-
} else {
207-
throw $e;
208-
}
206+
} else {
207+
throw $e;
209208
}
210209
}
211-
if (!$containerDeleted) {
212-
throw new ContainerException('Container and all its objects could not be deleted.');
213-
}
210+
}
211+
if (!$containerDeleted) {
212+
throw new ContainerException('Container could not be deleted.');
214213
}
215214
return $response;
216215
}

0 commit comments

Comments
 (0)