@@ -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