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

ASF GitHub Bot commented on HADOOP-19161:
-----------------------------------------

virajjasani commented on code in PR #6789:
URL: https://github.com/apache/hadoop/pull/6789#discussion_r1588404029


##########
hadoop-tools/hadoop-aws/src/main/java/org/apache/hadoop/fs/s3a/impl/S3APerformanceFlags.java:
##########
@@ -0,0 +1,166 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.fs.s3a.impl;
+
+import java.util.Locale;
+
+import org.apache.hadoop.fs.StreamCapabilities;
+
+import static 
org.apache.hadoop.fs.s3a.Constants.FS_S3A_CREATE_PERFORMANCE_ENABLED;
+import static org.apache.hadoop.fs.s3a.Constants.FS_S3A_PERFORMANCE_FLAGS;
+
+/**
+ * Performance flags.
+ * These are stored as a map of options.
+ */
+public final class S3APerformanceFlags implements StreamCapabilities {
+
+  /**
+   * Flag for create performance: {@value}.
+   */
+  public static final String CREATE = "create";
+
+  /**
+   * Flag for delete performance: {@value}.
+   */
+  public static final String DELETE = "delete";
+
+  /**
+   * Flag for mkdir performance: {@value}.
+   */
+  public static final String MKDIR = "mkdir";
+
+  /**
+   * Enable all performance flags: {@value}.
+   */
+  public static final String ALL = "*";
+
+  /**
+   * Higher performance create operations.
+   */
+  private boolean create;
+
+  /**
+   * Delete operation to skip parent probe.
+   */
+  private boolean delete;
+
+  /**
+   * Mkdir to skip checking for type of parent paths.
+   */
+  private boolean mkdir;
+
+  public S3APerformanceFlags() {
+  }
+
+  public boolean isCreate() {
+    return create;
+  }
+
+  public boolean isDelete() {
+    return delete;
+  }
+
+  public boolean isMkdir() {
+    return mkdir;
+  }
+
+  public S3APerformanceFlags setCreate(final boolean create) {
+    this.create = create;
+    return this;
+  }
+
+  public S3APerformanceFlags setDelete(final boolean delete) {
+    this.delete = delete;
+    return this;
+  }
+
+  public S3APerformanceFlags setMkdir(final boolean mkdir) {
+    this.mkdir = mkdir;
+    return this;
+  }
+
+
+  @Override
+  public boolean hasCapability(final String capability) {
+    switch (capability.toLowerCase(Locale.ROOT)) {
+    case FS_S3A_PERFORMANCE_FLAGS + CREATE:
+    case FS_S3A_CREATE_PERFORMANCE_ENABLED:
+      return isCreate();
+
+    case FS_S3A_PERFORMANCE_FLAGS + MKDIR:
+      return isMkdir();
+
+    case FS_S3A_PERFORMANCE_FLAGS + DELETE:
+      return isDelete();
+
+    default:
+    }
+    return false;
+  }
+
+  @Override
+  public String toString() {
+    return "S3APerformanceFlags{" +
+        "create=" + create +
+        ", delete=" + delete +
+        ", mkdir=" + mkdir +
+        '}';
+  }
+
+  /**
+   * Create a performance flags instance from a list of options.
+   * @param options options from a configuration string.
+   * @return a set of options
+   */
+  public static S3APerformanceFlags build(String... options) {
+    S3APerformanceFlags flags = new S3APerformanceFlags();
+    for (String option : options) {
+      switch (option.trim().toLowerCase(Locale.ROOT)) {
+      case CREATE:
+        flags.create = true;
+        break;
+      case DELETE:
+        flags.delete = true;
+        break;
+      case MKDIR:
+        flags.mkdir = true;
+        break;
+      case ALL:
+        flags.create = true;
+        flags.mkdir = true;
+        flags.delete = true;
+        break;
+
+/*      case "hive":
+      case "impala":
+      case "spark":
+      case "distcp":

Review Comment:
   Should we not let downstreamers decide what flags they want (after extensive 
testing)? And across different releases, they might need different flags to be 
turned on (in case of any regression)? 
   
   We can just recommend the flags (as already commented out here) but not set 
the flags for them. Thoughts?



##########
hadoop-tools/hadoop-aws/src/main/java/org/apache/hadoop/fs/s3a/impl/S3APerformanceFlags.java:
##########
@@ -0,0 +1,166 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.fs.s3a.impl;
+
+import java.util.Locale;
+
+import org.apache.hadoop.fs.StreamCapabilities;
+
+import static 
org.apache.hadoop.fs.s3a.Constants.FS_S3A_CREATE_PERFORMANCE_ENABLED;
+import static org.apache.hadoop.fs.s3a.Constants.FS_S3A_PERFORMANCE_FLAGS;
+
+/**
+ * Performance flags.
+ * These are stored as a map of options.
+ */
+public final class S3APerformanceFlags implements StreamCapabilities {
+
+  /**
+   * Flag for create performance: {@value}.
+   */
+  public static final String CREATE = "create";
+
+  /**
+   * Flag for delete performance: {@value}.
+   */
+  public static final String DELETE = "delete";
+
+  /**
+   * Flag for mkdir performance: {@value}.
+   */
+  public static final String MKDIR = "mkdir";
+
+  /**
+   * Enable all performance flags: {@value}.
+   */
+  public static final String ALL = "*";
+
+  /**
+   * Higher performance create operations.
+   */
+  private boolean create;
+
+  /**
+   * Delete operation to skip parent probe.
+   */
+  private boolean delete;
+
+  /**
+   * Mkdir to skip checking for type of parent paths.
+   */
+  private boolean mkdir;
+
+  public S3APerformanceFlags() {
+  }
+
+  public boolean isCreate() {
+    return create;
+  }
+
+  public boolean isDelete() {
+    return delete;
+  }

Review Comment:
   This one also we want to tackle as separate task (similar to HADOOP-19072), 
correct?





> S3A: option "fs.s3a.performance.flags" to take list of performance flags
> ------------------------------------------------------------------------
>
>                 Key: HADOOP-19161
>                 URL: https://issues.apache.org/jira/browse/HADOOP-19161
>             Project: Hadoop Common
>          Issue Type: Improvement
>          Components: fs/s3
>    Affects Versions: 3.4.1
>            Reporter: Steve Loughran
>            Assignee: Steve Loughran
>            Priority: Major
>              Labels: pull-request-available
>
> HADOOP-19072 shows we want to add more optimisations than that of 
> HADOOP-18930.
> * Extending the new optimisations to the existing option is brittle
> * Adding explicit options for each feature gets complext fast.
> Proposed
> * A new class S3APerformanceFlags keeps all the flags
> * it build this from a string[] of values, which can be extracted from 
> getConf(),
> * and it can also support a "*" option to mean "everything"
> * this class can also be handed off to hasPathCapability() and do the right 
> thing.
> Proposed optimisations
> * create file (we will hook up HADOOP-18930)
> * mkdir (HADOOP-19072)
> * delete (probe for parent path)
> * rename (probe for source path)
> We could think of more, with different names, later.
> The goal is make it possible to strip out every HTTP request we do for 
> safety/posix compliance, so applications have the option of turning off what 
> they don't need.



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

---------------------------------------------------------------------
To unsubscribe, e-mail: common-issues-unsubscr...@hadoop.apache.org
For additional commands, e-mail: common-issues-h...@hadoop.apache.org

Reply via email to