Skip to content

Commit d5b509b

Browse files
authored
Ignore NoSuchVersion error in removeObjects() API (#1128)
1 parent de9ca1c commit d5b509b

File tree

1 file changed

+35
-25
lines changed

1 file changed

+35
-25
lines changed

api/src/main/java/io/minio/MinioClient.java

Lines changed: 35 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1719,34 +1719,43 @@ public Iterator<Result<DeleteError>> iterator() {
17191719
private boolean completed = false;
17201720
private Iterator<DeleteObject> objectIter = args.objects().iterator();
17211721

1722+
private void setError() {
1723+
error = null;
1724+
while (errorIterator.hasNext()) {
1725+
DeleteError deleteError = errorIterator.next();
1726+
if (!"NoSuchVersion".equals(deleteError.code())) {
1727+
error = new Result<>(deleteError);
1728+
break;
1729+
}
1730+
}
1731+
}
1732+
17221733
private synchronized void populate() {
17231734
if (completed) {
17241735
return;
17251736
}
17261737

17271738
try {
17281739
List<DeleteObject> objectList = new LinkedList<>();
1729-
int i = 0;
1730-
while (objectIter.hasNext() && i < 1000) {
1740+
while (objectIter.hasNext() && objectList.size() < 1000) {
17311741
objectList.add(objectIter.next());
1732-
i++;
17331742
}
17341743

1735-
completed = objectList.size() == 0;
1736-
if (!completed) {
1737-
DeleteObjectsResponse response =
1738-
deleteObjects(
1739-
args.bucket(),
1740-
args.region(),
1741-
objectList,
1742-
true,
1743-
args.bypassGovernanceMode(),
1744-
args.extraHeaders(),
1745-
args.extraQueryParams());
1746-
if (response.result().errorList().size() > 0) {
1747-
errorIterator = response.result().errorList().iterator();
1748-
completed = true;
1749-
}
1744+
completed = objectList.isEmpty();
1745+
if (completed) return;
1746+
DeleteObjectsResponse response =
1747+
deleteObjects(
1748+
args.bucket(),
1749+
args.region(),
1750+
objectList,
1751+
true,
1752+
args.bypassGovernanceMode(),
1753+
args.extraHeaders(),
1754+
args.extraQueryParams());
1755+
if (!response.result().errorList().isEmpty()) {
1756+
errorIterator = response.result().errorList().iterator();
1757+
setError();
1758+
completed = true;
17501759
}
17511760
} catch (ErrorResponseException
17521761
| InsufficientDataException
@@ -1768,21 +1777,22 @@ public boolean hasNext() {
17681777
populate();
17691778
}
17701779

1771-
if (error != null || (errorIterator != null && errorIterator.hasNext())) {
1772-
return true;
1773-
}
1780+
if (error == null && errorIterator != null) setError();
1781+
if (error != null) return true;
1782+
if (completed) return false;
17741783

1775-
return !completed;
1784+
errorIterator = null;
1785+
return hasNext();
17761786
}
17771787

17781788
@Override
17791789
public Result<DeleteError> next() {
17801790
if (!hasNext()) throw new NoSuchElementException();
17811791

1782-
if (error != null) {
1792+
if (this.error != null) {
1793+
Result<DeleteError> error = this.error;
1794+
this.error = null;
17831795
return error;
1784-
} else if (errorIterator != null && errorIterator.hasNext()) {
1785-
return new Result<>(errorIterator.next());
17861796
}
17871797

17881798
// This never happens.

0 commit comments

Comments
 (0)