[ 
https://issues.apache.org/jira/browse/HDDS-16282?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18108368#comment-18108368
 ] 

Huang Kuan Hao commented on HDDS-16282:
---------------------------------------

[~rjgoyln] yes, just take it

> Avoid O(n^2) key removal in S3 DeleteObjects
> --------------------------------------------
>
>                 Key: HDDS-16282
>                 URL: https://issues.apache.org/jira/browse/HDDS-16282
>             Project: Apache Ozone
>          Issue Type: Improvement
>            Reporter: Huang Kuan Hao
>            Priority: Major
>
> The S3 multi-object DELETE handler (up to 1000 keys/request) removes each 
> successfully-deleted key from the deleteKeys ArrayList inside the per-object 
> loop — O remove x n = O(n^2):
> for (DeleteObject d : request.getObjects()) {
>   ...
>   if (deleted)
> {     deleteKeys.remove(d.getKey());   // O(n) on ArrayList     ...   }
> }
> ...
> message.getParams().put("failedDeletes", deleteKeys.toString());
> The removals are how the failedDeletes audit set is computed, so they can't 
> just be dropped. Fix: collect failed keys in a separate list and build the 
> audit string from it:
> List<String> failedKeys = new ArrayList<>();
> for (DeleteObject d : request.getObjects())
> {   ...   if (deleted) \\{ if (!request.isQuiet()) result.addDeleted(new 
> DeletedObject(d.getKey())); }
>   else \{ failedKeys.add(d.getKey()); result.addError(...); }
> }
> ...
> message.getParams().put("failedDeletes", failedKeys.toString());
> Behavior unchanged (same failedDeletes content, same response).
> File: hadoop-ozone/s3gateway/.../endpoint/BucketEndpoint.java:361



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to