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? -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: common-issues-unsubscr...@hadoop.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: common-issues-unsubscr...@hadoop.apache.org For additional commands, e-mail: common-issues-h...@hadoop.apache.org