[
https://issues.apache.org/jira/browse/HADOOP-19161?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17862565#comment-17862565
]
ASF GitHub Bot commented on HADOOP-19161:
-----------------------------------------
virajjasani commented on code in PR #6789:
URL: https://github.com/apache/hadoop/pull/6789#discussion_r1663043431
##########
hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/impl/FlagSet.java:
##########
@@ -0,0 +1,278 @@
+/*
+ * 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.impl;
+
+import java.util.Arrays;
+import java.util.EnumSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.stream.Collectors;
+import javax.annotation.Nullable;
+
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.fs.StreamCapabilities;
+import org.apache.hadoop.util.ConfigurationHelper;
+import org.apache.hadoop.util.Preconditions;
+
+import static org.apache.hadoop.util.ConfigurationHelper.mapEnumNamesToValues;
+
+/**
+ * A set of flags, constructed from a configuration option or from a string,
+ * with the semantics of
+ * {@link ConfigurationHelper#parseEnumSet(String, String, Class, boolean)}
+ * and implementing {@link StreamCapabilities}.
+ * <p>
+ * Thread safety: there is no synchronization on a mutable {@code FlagSet}.
+ * Once declared immutable, flags cannot be changed, so they
+ * becomes implicitly thread-safe.
+ */
+public final class FlagSet<E extends Enum<E>> implements StreamCapabilities {
+
+ /**
+ * Set of flags.
+ */
+ private final Set<E> flags;
+
+ /**
+ * Is the set immutable?
+ */
+ private final AtomicBoolean immutable = new AtomicBoolean(false);
+
+ /**
+ * Mapping of prefixed flag names to enum values.
+ */
+ private final Map<String, E> namesToValues;
+
+ /**
+ * Create a FlagSet.
+ * @param enumClass class of enum
+ * @param prefix prefix (with trailing ".") for path capabilities probe
+ * @param flags flags. A copy of these are made.
+ */
+ private FlagSet(final Class<E> enumClass,
+ final String prefix,
+ @Nullable final EnumSet<E> flags) {
+
+ this.flags = flags != null
+ ? EnumSet.copyOf(flags)
+ : EnumSet.noneOf(enumClass);
+ this.namesToValues = mapEnumNamesToValues(prefix, enumClass);
+ }
+
+ /**
+ * Get a copy of the flags.
+ * <p>
+ * This is immutable.
+ * @return the flags.
+ */
+ public EnumSet<E> flags() {
+ return EnumSet.copyOf(flags);
+ }
+
+ /**
+ * Probe for the FlagSet being empty.
+ * @return true if there are no flags set.
+ */
+ public boolean isEmpty() {
+ return flags.isEmpty();
+ }
+
+ /**
+ * Is a flag enabled?
+ * @param flag flag to check
+ * @return true if it is in the set of enabled flags.
+ */
+ public boolean enabled(final E flag) {
+ return flags.contains(flag);
+ }
Review Comment:
If we need it immutable, probably it's good case for builder or constructor
so maybe keeping the object mutable is also fine?
> 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: [email protected]
For additional commands, e-mail: [email protected]