You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by su...@apache.org on 2018/10/05 12:56:13 UTC
[18/51] [partial] hadoop git commit: HADOOP-15791. Remove Ozone
related sources from the 3.2 branch. Contributed by Elek, Marton.
http://git-wip-us.apache.org/repos/asf/hadoop/blob/2c392da8/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/placement/metrics/ContainerStat.java
----------------------------------------------------------------------
diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/placement/metrics/ContainerStat.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/placement/metrics/ContainerStat.java
deleted file mode 100644
index b8e8998..0000000
--- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/placement/metrics/ContainerStat.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/**
- * 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.hdds.scm.container.placement.metrics;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.google.common.base.Preconditions;
-import org.apache.hadoop.ozone.web.utils.JsonUtils;
-
-import java.io.IOException;
-
-/**
- * This class represents the SCM container stat.
- */
-public class ContainerStat {
- /**
- * The maximum container size.
- */
- @JsonProperty("Size")
- private LongMetric size;
-
- /**
- * The number of bytes used by the container.
- */
- @JsonProperty("Used")
- private LongMetric used;
-
- /**
- * The number of keys in the container.
- */
- @JsonProperty("KeyCount")
- private LongMetric keyCount;
-
- /**
- * The number of bytes read from the container.
- */
- @JsonProperty("ReadBytes")
- private LongMetric readBytes;
-
- /**
- * The number of bytes write into the container.
- */
- @JsonProperty("WriteBytes")
- private LongMetric writeBytes;
-
- /**
- * The number of times the container is read.
- */
- @JsonProperty("ReadCount")
- private LongMetric readCount;
-
- /**
- * The number of times the container is written into.
- */
- @JsonProperty("WriteCount")
- private LongMetric writeCount;
-
- public ContainerStat() {
- this(0L, 0L, 0L, 0L, 0L, 0L, 0L);
- }
-
- public ContainerStat(long size, long used, long keyCount, long readBytes,
- long writeBytes, long readCount, long writeCount) {
- Preconditions.checkArgument(size >= 0,
- "Container size cannot be " + "negative.");
- Preconditions.checkArgument(used >= 0,
- "Used space cannot be " + "negative.");
- Preconditions.checkArgument(keyCount >= 0,
- "Key count cannot be " + "negative");
- Preconditions.checkArgument(readBytes >= 0,
- "Read bytes read cannot be " + "negative.");
- Preconditions.checkArgument(readBytes >= 0,
- "Write bytes cannot be " + "negative.");
- Preconditions.checkArgument(readCount >= 0,
- "Read count cannot be " + "negative.");
- Preconditions.checkArgument(writeCount >= 0,
- "Write count cannot be " + "negative");
-
- this.size = new LongMetric(size);
- this.used = new LongMetric(used);
- this.keyCount = new LongMetric(keyCount);
- this.readBytes = new LongMetric(readBytes);
- this.writeBytes = new LongMetric(writeBytes);
- this.readCount = new LongMetric(readCount);
- this.writeCount = new LongMetric(writeCount);
- }
-
- public LongMetric getSize() {
- return size;
- }
-
- public LongMetric getUsed() {
- return used;
- }
-
- public LongMetric getKeyCount() {
- return keyCount;
- }
-
- public LongMetric getReadBytes() {
- return readBytes;
- }
-
- public LongMetric getWriteBytes() {
- return writeBytes;
- }
-
- public LongMetric getReadCount() {
- return readCount;
- }
-
- public LongMetric getWriteCount() {
- return writeCount;
- }
-
- public void add(ContainerStat stat) {
- if (stat == null) {
- return;
- }
-
- this.size.add(stat.getSize().get());
- this.used.add(stat.getUsed().get());
- this.keyCount.add(stat.getKeyCount().get());
- this.readBytes.add(stat.getReadBytes().get());
- this.writeBytes.add(stat.getWriteBytes().get());
- this.readCount.add(stat.getReadCount().get());
- this.writeCount.add(stat.getWriteCount().get());
- }
-
- public void subtract(ContainerStat stat) {
- if (stat == null) {
- return;
- }
-
- this.size.subtract(stat.getSize().get());
- this.used.subtract(stat.getUsed().get());
- this.keyCount.subtract(stat.getKeyCount().get());
- this.readBytes.subtract(stat.getReadBytes().get());
- this.writeBytes.subtract(stat.getWriteBytes().get());
- this.readCount.subtract(stat.getReadCount().get());
- this.writeCount.subtract(stat.getWriteCount().get());
- }
-
- public String toJsonString() {
- try {
- return JsonUtils.toJsonString(this);
- } catch (IOException ignored) {
- return null;
- }
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/hadoop/blob/2c392da8/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/placement/metrics/DatanodeMetric.java
----------------------------------------------------------------------
diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/placement/metrics/DatanodeMetric.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/placement/metrics/DatanodeMetric.java
deleted file mode 100644
index a6e732c..0000000
--- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/placement/metrics/DatanodeMetric.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/**
- * 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
- * <p>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p>
- * 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.hdds.scm.container.placement.metrics;
-
-import org.apache.hadoop.hdds.scm.exceptions.SCMException;
-
-/**
- * DatanodeMetric acts as the basis for all the metric that is used in
- * comparing 2 datanodes.
- */
-public interface DatanodeMetric<T, S> extends Comparable<T> {
-
- /**
- * Some syntactic sugar over Comparable interface. This makes code easier to
- * read.
- *
- * @param o - Other Object
- * @return - True if *this* object is greater than argument.
- */
- boolean isGreater(T o);
-
- /**
- * Inverse of isGreater.
- *
- * @param o - other object.
- * @return True if *this* object is Lesser than argument.
- */
- boolean isLess(T o);
-
- /**
- * Returns true if the object has same values. Because of issues with
- * equals, and loss of type information this interface supports isEqual.
- *
- * @param o object to compare.
- * @return True, if the values match.
- */
- boolean isEqual(T o);
-
- /**
- * A resourceCheck, defined by resourceNeeded.
- * For example, S could be bytes required
- * and DatanodeMetric can reply by saying it can be met or not.
- *
- * @param resourceNeeded - ResourceNeeded in its own metric.
- * @return boolean, True if this resource requirement can be met.
- */
- boolean hasResources(S resourceNeeded) throws SCMException;
-
- /**
- * Returns the metric.
- *
- * @return T, the object that represents this metric.
- */
- T get();
-
- /**
- * Sets the value of this metric.
- *
- * @param value - value of the metric.
- */
- void set(T value);
-
- /**
- * Adds a value of to the base.
- * @param value - value
- */
- void add(T value);
-
- /**
- * subtract a value.
- * @param value value
- */
- void subtract(T value);
-
-
-}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/2c392da8/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/placement/metrics/LongMetric.java
----------------------------------------------------------------------
diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/placement/metrics/LongMetric.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/placement/metrics/LongMetric.java
deleted file mode 100644
index 050d26b..0000000
--- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/placement/metrics/LongMetric.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/**
- * 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
- * <p>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p>
- * 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.hdds.scm.container.placement.metrics;
-
-import com.fasterxml.jackson.annotation.JsonAutoDetect;
-import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
-
-/**
- * An helper class for all metrics based on Longs.
- */
-@JsonAutoDetect(fieldVisibility = Visibility.ANY)
-public class LongMetric implements DatanodeMetric<Long, Long> {
- private Long value;
-
- /**
- * Constructs a long Metric.
- *
- * @param value Value for this metric.
- */
- public LongMetric(Long value) {
- this.value = value;
- }
-
- /**
- * Some syntactic sugar over Comparable interface. This makes code easier to
- * read.
- *
- * @param o - Other Object
- * @return - True if *this* object is greater than argument.
- */
- @Override
- public boolean isGreater(Long o) {
- return compareTo(o) > 0;
- }
-
- /**
- * Inverse of isGreater.
- *
- * @param o - other object.
- * @return True if *this* object is Lesser than argument.
- */
- @Override
- public boolean isLess(Long o) {
- return compareTo(o) < 0;
- }
-
- /**
- * Returns true if the object has same values. Because of issues with
- * equals, and loss of type information this interface supports isEqual.
- *
- * @param o object to compare.
- * @return True, if the values match.
- */
- @Override
- public boolean isEqual(Long o) {
- return compareTo(o) == 0;
- }
-
- /**
- * A resourceCheck, defined by resourceNeeded.
- * For example, S could be bytes required
- * and DatanodeMetric can reply by saying it can be met or not.
- *
- * @param resourceNeeded - ResourceNeeded in its own metric.
- * @return boolean, True if this resource requirement can be met.
- */
- @Override
- public boolean hasResources(Long resourceNeeded) {
- return isGreater(resourceNeeded);
- }
-
- /**
- * Returns the metric.
- *
- * @return T, the object that represents this metric.
- */
- @Override
- public Long get() {
- return this.value;
- }
-
- /**
- * Sets the value of this metric.
- *
- * @param setValue - value of the metric.
- */
- @Override
- public void set(Long setValue) {
- this.value = setValue;
-
- }
-
- /**
- * Adds a value of to the base.
- *
- * @param addValue - value
- */
- @Override
- public void add(Long addValue) {
- this.value += addValue;
- }
-
- /**
- * subtract a value.
- *
- * @param subValue value
- */
- @Override
- public void subtract(Long subValue) {
- this.value -= subValue;
- }
-
- /**
- * Compares this object with the specified object for order. Returns a
- * negative integer, zero, or a positive integer as this object is less
- * than, equal to, or greater than the specified object.
- *
- * @param o the object to be compared.
- * @return a negative integer, zero, or a positive integer as this object is
- * less than, equal to, or greater than the specified object.
- * @throws NullPointerException if the specified object is null
- * @throws ClassCastException if the specified object's type prevents it
- * from being compared to this object.
- */
- @Override
- public int compareTo(Long o) {
- return Long.compare(this.value, o);
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- }
- if (o == null || getClass() != o.getClass()) {
- return false;
- }
-
- LongMetric that = (LongMetric) o;
-
- return value != null ? value.equals(that.value) : that.value == null;
- }
-
- @Override
- public int hashCode() {
- return value != null ? value.hashCode() : 0;
- }
-}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/2c392da8/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/placement/metrics/NodeStat.java
----------------------------------------------------------------------
diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/placement/metrics/NodeStat.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/placement/metrics/NodeStat.java
deleted file mode 100644
index d6857d3..0000000
--- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/placement/metrics/NodeStat.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/**
- * 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.hdds.scm.container.placement.metrics;
-
-import com.google.common.annotations.VisibleForTesting;
-
-/**
- * Interface that defines Node Stats.
- */
-interface NodeStat {
- /**
- * Get capacity of the node.
- * @return capacity of the node.
- */
- LongMetric getCapacity();
-
- /**
- * Get the used space of the node.
- * @return the used space of the node.
- */
- LongMetric getScmUsed();
-
- /**
- * Get the remaining space of the node.
- * @return the remaining space of the node.
- */
- LongMetric getRemaining();
-
- /**
- * Set the total/used/remaining space.
- * @param capacity - total space.
- * @param used - used space.
- * @param remain - remaining space.
- */
- @VisibleForTesting
- void set(long capacity, long used, long remain);
-
- /**
- * Adding of the stat.
- * @param stat - stat to be added.
- * @return updated node stat.
- */
- NodeStat add(NodeStat stat);
-
- /**
- * Subtract of the stat.
- * @param stat - stat to be subtracted.
- * @return updated nodestat.
- */
- NodeStat subtract(NodeStat stat);
-}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/2c392da8/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/placement/metrics/SCMMetrics.java
----------------------------------------------------------------------
diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/placement/metrics/SCMMetrics.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/placement/metrics/SCMMetrics.java
deleted file mode 100644
index e4dd9aa..0000000
--- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/placement/metrics/SCMMetrics.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/**
- * 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.hdds.scm.container.placement.metrics;
-
-import org.apache.hadoop.metrics2.MetricsSystem;
-import org.apache.hadoop.metrics2.annotation.Metric;
-import org.apache.hadoop.metrics2.annotation.Metrics;
-import org.apache.hadoop.metrics2.lib.DefaultMetricsSystem;
-import org.apache.hadoop.metrics2.lib.MutableCounterLong;
-import org.apache.hadoop.metrics2.lib.MutableGaugeLong;
-
-/**
- * This class is for maintaining StorageContainerManager statistics.
- */
-@Metrics(about="Storage Container Manager Metrics", context="dfs")
-public class SCMMetrics {
- public static final String SOURCE_NAME =
- SCMMetrics.class.getSimpleName();
-
- /**
- * Container stat metrics, the meaning of following metrics
- * can be found in {@link ContainerStat}.
- */
- @Metric private MutableGaugeLong lastContainerReportSize;
- @Metric private MutableGaugeLong lastContainerReportUsed;
- @Metric private MutableGaugeLong lastContainerReportKeyCount;
- @Metric private MutableGaugeLong lastContainerReportReadBytes;
- @Metric private MutableGaugeLong lastContainerReportWriteBytes;
- @Metric private MutableGaugeLong lastContainerReportReadCount;
- @Metric private MutableGaugeLong lastContainerReportWriteCount;
-
- @Metric private MutableCounterLong containerReportSize;
- @Metric private MutableCounterLong containerReportUsed;
- @Metric private MutableCounterLong containerReportKeyCount;
- @Metric private MutableCounterLong containerReportReadBytes;
- @Metric private MutableCounterLong containerReportWriteBytes;
- @Metric private MutableCounterLong containerReportReadCount;
- @Metric private MutableCounterLong containerReportWriteCount;
-
- public SCMMetrics() {
- }
-
- public static SCMMetrics create() {
- MetricsSystem ms = DefaultMetricsSystem.instance();
- return ms.register(SOURCE_NAME, "Storage Container Manager Metrics",
- new SCMMetrics());
- }
-
- public void setLastContainerReportSize(long size) {
- this.lastContainerReportSize.set(size);
- }
-
- public void setLastContainerReportUsed(long used) {
- this.lastContainerReportUsed.set(used);
- }
-
- public void setLastContainerReportKeyCount(long keyCount) {
- this.lastContainerReportKeyCount.set(keyCount);
- }
-
- public void setLastContainerReportReadBytes(long readBytes) {
- this.lastContainerReportReadBytes.set(readBytes);
- }
-
- public void setLastContainerReportWriteBytes(long writeBytes) {
- this.lastContainerReportWriteBytes.set(writeBytes);
- }
-
- public void setLastContainerReportReadCount(long readCount) {
- this.lastContainerReportReadCount.set(readCount);
- }
-
- public void setLastContainerReportWriteCount(long writeCount) {
- this.lastContainerReportWriteCount.set(writeCount);
- }
-
- public void incrContainerReportSize(long size) {
- this.containerReportSize.incr(size);
- }
-
- public void incrContainerReportUsed(long used) {
- this.containerReportUsed.incr(used);
- }
-
- public void incrContainerReportKeyCount(long keyCount) {
- this.containerReportKeyCount.incr(keyCount);
- }
-
- public void incrContainerReportReadBytes(long readBytes) {
- this.containerReportReadBytes.incr(readBytes);
- }
-
- public void incrContainerReportWriteBytes(long writeBytes) {
- this.containerReportWriteBytes.incr(writeBytes);
- }
-
- public void incrContainerReportReadCount(long readCount) {
- this.containerReportReadCount.incr(readCount);
- }
-
- public void incrContainerReportWriteCount(long writeCount) {
- this.containerReportWriteCount.incr(writeCount);
- }
-
- public void setLastContainerStat(ContainerStat newStat) {
- this.lastContainerReportSize.set(newStat.getSize().get());
- this.lastContainerReportUsed.set(newStat.getUsed().get());
- this.lastContainerReportKeyCount.set(newStat.getKeyCount().get());
- this.lastContainerReportReadBytes.set(newStat.getReadBytes().get());
- this.lastContainerReportWriteBytes.set(newStat.getWriteBytes().get());
- this.lastContainerReportReadCount.set(newStat.getReadCount().get());
- this.lastContainerReportWriteCount.set(newStat.getWriteCount().get());
- }
-
- public void incrContainerStat(ContainerStat deltaStat) {
- this.containerReportSize.incr(deltaStat.getSize().get());
- this.containerReportUsed.incr(deltaStat.getUsed().get());
- this.containerReportKeyCount.incr(deltaStat.getKeyCount().get());
- this.containerReportReadBytes.incr(deltaStat.getReadBytes().get());
- this.containerReportWriteBytes.incr(deltaStat.getWriteBytes().get());
- this.containerReportReadCount.incr(deltaStat.getReadCount().get());
- this.containerReportWriteCount.incr(deltaStat.getWriteCount().get());
- }
-
- public void decrContainerStat(ContainerStat deltaStat) {
- this.containerReportSize.incr(-1 * deltaStat.getSize().get());
- this.containerReportUsed.incr(-1 * deltaStat.getUsed().get());
- this.containerReportKeyCount.incr(-1 * deltaStat.getKeyCount().get());
- this.containerReportReadBytes.incr(-1 * deltaStat.getReadBytes().get());
- this.containerReportWriteBytes.incr(-1 * deltaStat.getWriteBytes().get());
- this.containerReportReadCount.incr(-1 * deltaStat.getReadCount().get());
- this.containerReportWriteCount.incr(-1 * deltaStat.getWriteCount().get());
- }
-
- public void unRegister() {
- MetricsSystem ms = DefaultMetricsSystem.instance();
- ms.unregisterSource(SOURCE_NAME);
- }
-}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/2c392da8/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/placement/metrics/SCMNodeMetric.java
----------------------------------------------------------------------
diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/placement/metrics/SCMNodeMetric.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/placement/metrics/SCMNodeMetric.java
deleted file mode 100644
index efd5fd6..0000000
--- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/placement/metrics/SCMNodeMetric.java
+++ /dev/null
@@ -1,224 +0,0 @@
-/**
- * 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
- * <p>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p>
- * 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.hdds.scm.container.placement.metrics;
-
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Preconditions;
-
-/**
- * SCM Node Metric that is used in the placement classes.
- */
-public class SCMNodeMetric implements DatanodeMetric<SCMNodeStat, Long> {
- private SCMNodeStat stat;
-
- /**
- * Constructs an SCMNode Metric.
- *
- * @param stat - SCMNodeStat.
- */
- public SCMNodeMetric(SCMNodeStat stat) {
- this.stat = stat;
- }
-
- /**
- * Set the capacity, used and remaining space on a datanode.
- *
- * @param capacity in bytes
- * @param used in bytes
- * @param remaining in bytes
- */
- @VisibleForTesting
- public SCMNodeMetric(long capacity, long used, long remaining) {
- this.stat = new SCMNodeStat();
- this.stat.set(capacity, used, remaining);
- }
-
- /**
- *
- * @param o - Other Object
- * @return - True if *this* object is greater than argument.
- */
- @Override
- public boolean isGreater(SCMNodeStat o) {
- Preconditions.checkNotNull(this.stat, "Argument cannot be null");
- Preconditions.checkNotNull(o, "Argument cannot be null");
-
- // if zero, replace with 1 for the division to work.
- long thisDenominator = (this.stat.getCapacity().get() == 0)
- ? 1 : this.stat.getCapacity().get();
- long otherDenominator = (o.getCapacity().get() == 0)
- ? 1 : o.getCapacity().get();
-
- float thisNodeWeight =
- stat.getScmUsed().get() / (float) thisDenominator;
-
- float oNodeWeight =
- o.getScmUsed().get() / (float) otherDenominator;
-
- if (Math.abs(thisNodeWeight - oNodeWeight) > 0.000001) {
- return thisNodeWeight > oNodeWeight;
- }
- // if these nodes are have similar weight then return the node with more
- // free space as the greater node.
- return stat.getRemaining().isGreater(o.getRemaining().get());
- }
-
- /**
- * Inverse of isGreater.
- *
- * @param o - other object.
- * @return True if *this* object is Lesser than argument.
- */
- @Override
- public boolean isLess(SCMNodeStat o) {
- Preconditions.checkNotNull(o, "Argument cannot be null");
-
- // if zero, replace with 1 for the division to work.
- long thisDenominator = (this.stat.getCapacity().get() == 0)
- ? 1 : this.stat.getCapacity().get();
- long otherDenominator = (o.getCapacity().get() == 0)
- ? 1 : o.getCapacity().get();
-
- float thisNodeWeight =
- stat.getScmUsed().get() / (float) thisDenominator;
-
- float oNodeWeight =
- o.getScmUsed().get() / (float) otherDenominator;
-
- if (Math.abs(thisNodeWeight - oNodeWeight) > 0.000001) {
- return thisNodeWeight < oNodeWeight;
- }
-
- // if these nodes are have similar weight then return the node with less
- // free space as the lesser node.
- return stat.getRemaining().isLess(o.getRemaining().get());
- }
-
- /**
- * Returns true if the object has same values. Because of issues with
- * equals, and loss of type information this interface supports isEqual.
- *
- * @param o object to compare.
- * @return True, if the values match.
- * TODO : Consider if it makes sense to add remaining to this equation.
- */
- @Override
- public boolean isEqual(SCMNodeStat o) {
- float thisNodeWeight = stat.getScmUsed().get() / (float)
- stat.getCapacity().get();
- float oNodeWeight = o.getScmUsed().get() / (float) o.getCapacity().get();
- return Math.abs(thisNodeWeight - oNodeWeight) < 0.000001;
- }
-
- /**
- * A resourceCheck, defined by resourceNeeded.
- * For example, S could be bytes required
- * and DatanodeMetric can reply by saying it can be met or not.
- *
- * @param resourceNeeded - ResourceNeeded in its own metric.
- * @return boolean, True if this resource requirement can be met.
- */
- @Override
- public boolean hasResources(Long resourceNeeded) {
- return false;
- }
-
- /**
- * Returns the metric.
- *
- * @return T, the object that represents this metric.
- */
- @Override
- public SCMNodeStat get() {
- return stat;
- }
-
- /**
- * Sets the value of this metric.
- *
- * @param value - value of the metric.
- */
- @Override
- public void set(SCMNodeStat value) {
- stat.set(value.getCapacity().get(), value.getScmUsed().get(),
- value.getRemaining().get());
- }
-
- /**
- * Adds a value of to the base.
- *
- * @param value - value
- */
- @Override
- public void add(SCMNodeStat value) {
- stat.add(value);
- }
-
- /**
- * subtract a value.
- *
- * @param value value
- */
- @Override
- public void subtract(SCMNodeStat value) {
- stat.subtract(value);
- }
-
- /**
- * Compares this object with the specified object for order. Returns a
- * negative integer, zero, or a positive integer as this object is less
- * than, equal to, or greater than the specified object.
- *
- * @param o the object to be compared.
- * @return a negative integer, zero, or a positive integer as this object is
- * less than, equal to, or greater than the specified object.
- * @throws NullPointerException if the specified object is null
- * @throws ClassCastException if the specified object's type prevents it
- * from being compared to this object.
- */
- @Override
- public int compareTo(SCMNodeStat o) {
- if (isEqual(o)) {
- return 0;
- }
- if (isGreater(o)) {
- return 1;
- } else {
- return -1;
- }
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- }
- if (o == null || getClass() != o.getClass()) {
- return false;
- }
-
- SCMNodeMetric that = (SCMNodeMetric) o;
-
- return stat != null ? stat.equals(that.stat) : that.stat == null;
- }
-
- @Override
- public int hashCode() {
- return stat != null ? stat.hashCode() : 0;
- }
-}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/2c392da8/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/placement/metrics/SCMNodeStat.java
----------------------------------------------------------------------
diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/placement/metrics/SCMNodeStat.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/placement/metrics/SCMNodeStat.java
deleted file mode 100644
index 3c871d3..0000000
--- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/placement/metrics/SCMNodeStat.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/**
- * 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
- * <p>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p>
- * 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.hdds.scm.container.placement.metrics;
-
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Preconditions;
-
-/**
- * This class represents the SCM node stat.
- */
-public class SCMNodeStat implements NodeStat {
- private LongMetric capacity;
- private LongMetric scmUsed;
- private LongMetric remaining;
-
- public SCMNodeStat() {
- this(0L, 0L, 0L);
- }
-
- public SCMNodeStat(SCMNodeStat other) {
- this(other.capacity.get(), other.scmUsed.get(), other.remaining.get());
- }
-
- public SCMNodeStat(long capacity, long used, long remaining) {
- Preconditions.checkArgument(capacity >= 0, "Capacity cannot be " +
- "negative.");
- Preconditions.checkArgument(used >= 0, "used space cannot be " +
- "negative.");
- Preconditions.checkArgument(remaining >= 0, "remaining cannot be " +
- "negative");
- this.capacity = new LongMetric(capacity);
- this.scmUsed = new LongMetric(used);
- this.remaining = new LongMetric(remaining);
- }
-
- /**
- * @return the total configured capacity of the node.
- */
- public LongMetric getCapacity() {
- return capacity;
- }
-
- /**
- * @return the total SCM used space on the node.
- */
- public LongMetric getScmUsed() {
- return scmUsed;
- }
-
- /**
- * @return the total remaining space available on the node.
- */
- public LongMetric getRemaining() {
- return remaining;
- }
-
- /**
- * Set the capacity, used and remaining space on a datanode.
- *
- * @param newCapacity in bytes
- * @param newUsed in bytes
- * @param newRemaining in bytes
- */
- @VisibleForTesting
- public void set(long newCapacity, long newUsed, long newRemaining) {
- Preconditions.checkNotNull(newCapacity, "Capacity cannot be null");
- Preconditions.checkNotNull(newUsed, "used cannot be null");
- Preconditions.checkNotNull(newRemaining, "remaining cannot be null");
-
- Preconditions.checkArgument(newCapacity >= 0, "Capacity cannot be " +
- "negative.");
- Preconditions.checkArgument(newUsed >= 0, "used space cannot be " +
- "negative.");
- Preconditions.checkArgument(newRemaining >= 0, "remaining cannot be " +
- "negative");
-
- this.capacity = new LongMetric(newCapacity);
- this.scmUsed = new LongMetric(newUsed);
- this.remaining = new LongMetric(newRemaining);
- }
-
- /**
- * Adds a new nodestat to existing values of the node.
- *
- * @param stat Nodestat.
- * @return SCMNodeStat
- */
- public SCMNodeStat add(NodeStat stat) {
- this.capacity.set(this.getCapacity().get() + stat.getCapacity().get());
- this.scmUsed.set(this.getScmUsed().get() + stat.getScmUsed().get());
- this.remaining.set(this.getRemaining().get() + stat.getRemaining().get());
- return this;
- }
-
- /**
- * Subtracts the stat values from the existing NodeStat.
- *
- * @param stat SCMNodeStat.
- * @return Modified SCMNodeStat
- */
- public SCMNodeStat subtract(NodeStat stat) {
- this.capacity.set(this.getCapacity().get() - stat.getCapacity().get());
- this.scmUsed.set(this.getScmUsed().get() - stat.getScmUsed().get());
- this.remaining.set(this.getRemaining().get() - stat.getRemaining().get());
- return this;
- }
-
- @Override
- public boolean equals(Object to) {
- if (to instanceof SCMNodeStat) {
- SCMNodeStat tempStat = (SCMNodeStat) to;
- return capacity.isEqual(tempStat.getCapacity().get()) &&
- scmUsed.isEqual(tempStat.getScmUsed().get()) &&
- remaining.isEqual(tempStat.getRemaining().get());
- }
- return false;
- }
-
- @Override
- public int hashCode() {
- return Long.hashCode(capacity.get() ^ scmUsed.get() ^ remaining.get());
- }
-}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/2c392da8/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/placement/metrics/package-info.java
----------------------------------------------------------------------
diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/placement/metrics/package-info.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/placement/metrics/package-info.java
deleted file mode 100644
index 4a81d69..0000000
--- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/placement/metrics/package-info.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/**
- * 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
- * <p>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p>
- * 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.hdds.scm.container.placement.metrics;
-
-// Various metrics supported by Datanode and used by SCM in the placement
-// strategy.
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/hadoop/blob/2c392da8/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/placement/package-info.java
----------------------------------------------------------------------
diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/placement/package-info.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/placement/package-info.java
deleted file mode 100644
index dc54d9b..0000000
--- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/placement/package-info.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/**
- * 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
- * <p>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p>
- * 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.hdds.scm.container.placement;
-// Classes related to container placement.
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/hadoop/blob/2c392da8/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/ReplicationActivityStatus.java
----------------------------------------------------------------------
diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/ReplicationActivityStatus.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/ReplicationActivityStatus.java
deleted file mode 100644
index 993a986..0000000
--- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/ReplicationActivityStatus.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/**
- * 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
- * <p>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p>
- * 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.hdds.scm.container.replication;
-
-import javax.management.ObjectName;
-import java.io.Closeable;
-import java.io.IOException;
-import java.util.concurrent.atomic.AtomicBoolean;
-import org.apache.hadoop.hdds.server.events.EventHandler;
-import org.apache.hadoop.hdds.server.events.EventPublisher;
-import org.apache.hadoop.metrics2.util.MBeans;
-
-import com.google.common.annotations.VisibleForTesting;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Event listener to track the current state of replication.
- */
-public class ReplicationActivityStatus implements
- ReplicationActivityStatusMXBean, Closeable {
-
- private static final Logger LOG =
- LoggerFactory.getLogger(ReplicationActivityStatus.class);
-
- private AtomicBoolean replicationEnabled = new AtomicBoolean();
- private AtomicBoolean replicationStatusSetExternally = new AtomicBoolean();
- private ObjectName jmxObjectName;
- private ReplicationStatusListener replicationStatusListener;
- private ChillModeStatusListener chillModeStatusListener;
-
- public ReplicationActivityStatus(){
- replicationStatusListener = new ReplicationStatusListener();
- chillModeStatusListener = new ChillModeStatusListener();
- }
-
- public boolean isReplicationEnabled() {
- return replicationEnabled.get();
- }
-
- @VisibleForTesting
- public void setReplicationEnabled(boolean enabled) {
- replicationEnabled.set(enabled);
- }
-
- @VisibleForTesting
- public void enableReplication() {
- replicationEnabled.set(true);
- }
-
-
- public void start() {
- try {
- this.jmxObjectName =
- MBeans.register(
- "StorageContainerManager", "ReplicationActivityStatus", this);
- } catch (Exception ex) {
- LOG.error("JMX bean for ReplicationActivityStatus can't be registered",
- ex);
- }
- }
-
- @Override
- public void close() throws IOException {
- if (this.jmxObjectName != null) {
- MBeans.unregister(jmxObjectName);
- }
- }
-
- /**
- * Replication status listener.
- */
- class ReplicationStatusListener implements EventHandler<Boolean> {
- @Override
- public void onMessage(Boolean status, EventPublisher publisher) {
- replicationStatusSetExternally.set(true);
- replicationEnabled.set(status);
- }
- }
-
- /**
- * Replication status is influenced by Chill mode status as well.
- */
- class ChillModeStatusListener implements EventHandler<Boolean> {
-
- @Override
- public void onMessage(Boolean inChillMode, EventPublisher publisher) {
- if (!replicationStatusSetExternally.get()) {
- replicationEnabled.set(!inChillMode);
- }
- }
- }
-
- public ReplicationStatusListener getReplicationStatusListener() {
- return replicationStatusListener;
- }
-
- public ChillModeStatusListener getChillModeStatusListener() {
- return chillModeStatusListener;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/2c392da8/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/ReplicationActivityStatusMXBean.java
----------------------------------------------------------------------
diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/ReplicationActivityStatusMXBean.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/ReplicationActivityStatusMXBean.java
deleted file mode 100644
index 164bd24..0000000
--- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/ReplicationActivityStatusMXBean.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * 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
- * <p>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p>
- * 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.hdds.scm.container.replication;
-
-/**
- * JMX interface to monitor replication status.
- */
-public interface ReplicationActivityStatusMXBean {
-
- boolean isReplicationEnabled();
-
- void setReplicationEnabled(boolean enabled);
-}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/2c392da8/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/ReplicationCommandWatcher.java
----------------------------------------------------------------------
diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/ReplicationCommandWatcher.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/ReplicationCommandWatcher.java
deleted file mode 100644
index 03a81a7..0000000
--- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/ReplicationCommandWatcher.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/**
- * 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
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * 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.hdds.scm.container.replication;
-
-import org.apache.hadoop.hdds.scm.container.replication.ReplicationManager
- .ReplicationCompleted;
-import org.apache.hadoop.hdds.scm.container.replication.ReplicationManager
- .ReplicationRequestToRepeat;
-import org.apache.hadoop.hdds.scm.events.SCMEvents;
-import org.apache.hadoop.hdds.server.events.Event;
-import org.apache.hadoop.hdds.server.events.EventPublisher;
-import org.apache.hadoop.hdds.server.events.EventWatcher;
-import org.apache.hadoop.ozone.lease.LeaseManager;
-
-/**
- * Command watcher to track the replication commands.
- */
-public class ReplicationCommandWatcher
- extends
- EventWatcher<ReplicationManager.ReplicationRequestToRepeat,
- ReplicationManager.ReplicationCompleted> {
-
- public ReplicationCommandWatcher(Event<ReplicationRequestToRepeat> startEvent,
- Event<ReplicationCompleted> completionEvent,
- LeaseManager<Long> leaseManager) {
- super(startEvent, completionEvent, leaseManager);
- }
-
- @Override
- protected void onTimeout(EventPublisher publisher,
- ReplicationRequestToRepeat payload) {
- //put back to the original queue
- publisher.fireEvent(SCMEvents.REPLICATE_CONTAINER,
- payload.getRequest());
- }
-
- @Override
- protected void onFinished(EventPublisher publisher,
- ReplicationRequestToRepeat payload) {
-
- }
-}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/2c392da8/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/ReplicationManager.java
----------------------------------------------------------------------
diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/ReplicationManager.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/ReplicationManager.java
deleted file mode 100644
index ddecdbc..0000000
--- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/ReplicationManager.java
+++ /dev/null
@@ -1,250 +0,0 @@
-/**
- * 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
- * <p/>
- * http://www.apache.org/licenses/LICENSE-2.0
- * <p/>
- * 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.hdds.scm.container.replication;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
-import java.util.Set;
-import java.util.concurrent.ThreadFactory;
-
-import org.apache.hadoop.hdds.protocol.DatanodeDetails;
-import org.apache.hadoop.hdds.protocol.proto.HddsProtos.LifeCycleState;
-import org.apache.hadoop.hdds.scm.container.ContainerID;
-import org.apache.hadoop.hdds.scm.container.ContainerStateManager;
-import org.apache.hadoop.hdds.scm.container.common.helpers.ContainerInfo;
-import org.apache.hadoop.hdds.scm.container.placement.algorithms
- .ContainerPlacementPolicy;
-import org.apache.hadoop.hdds.scm.events.SCMEvents;
-import org.apache.hadoop.hdds.server.events.EventPublisher;
-import org.apache.hadoop.hdds.server.events.EventQueue;
-import org.apache.hadoop.hdds.server.events.IdentifiableEventPayload;
-import org.apache.hadoop.ozone.lease.LeaseManager;
-import org.apache.hadoop.ozone.protocol.commands.CommandForDatanode;
-import org.apache.hadoop.ozone.protocol.commands.ReplicateContainerCommand;
-
-import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Preconditions;
-import com.google.common.util.concurrent.ThreadFactoryBuilder;
-import static org.apache.hadoop.hdds.scm.events.SCMEvents
- .TRACK_REPLICATE_COMMAND;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Replication Manager manages the replication of the closed container.
- */
-public class ReplicationManager implements Runnable {
-
- private static final Logger LOG =
- LoggerFactory.getLogger(ReplicationManager.class);
-
- private ReplicationQueue replicationQueue;
-
- private ContainerPlacementPolicy containerPlacement;
-
- private EventPublisher eventPublisher;
-
- private ReplicationCommandWatcher replicationCommandWatcher;
-
- private boolean running = true;
-
- private ContainerStateManager containerStateManager;
-
- public ReplicationManager(ContainerPlacementPolicy containerPlacement,
- ContainerStateManager containerStateManager, EventQueue eventQueue,
- LeaseManager<Long> commandWatcherLeaseManager) {
-
- this.containerPlacement = containerPlacement;
- this.containerStateManager = containerStateManager;
- this.eventPublisher = eventQueue;
-
- this.replicationCommandWatcher =
- new ReplicationCommandWatcher(TRACK_REPLICATE_COMMAND,
- SCMEvents.REPLICATION_COMPLETE, commandWatcherLeaseManager);
-
- this.replicationQueue = new ReplicationQueue();
-
- eventQueue.addHandler(SCMEvents.REPLICATE_CONTAINER,
- (replicationRequest, publisher) -> replicationQueue
- .add(replicationRequest));
-
- this.replicationCommandWatcher.start(eventQueue);
-
- }
-
- public void start() {
-
- ThreadFactory threadFactory = new ThreadFactoryBuilder().setDaemon(true)
- .setNameFormat("Replication Manager").build();
-
- threadFactory.newThread(this).start();
- }
-
- public void run() {
-
- while (running) {
- ReplicationRequest request = null;
- try {
- //TODO: add throttling here
- request = replicationQueue.take();
-
- ContainerID containerID = new ContainerID(request.getContainerId());
- ContainerInfo containerInfo =
- containerStateManager.getContainer(containerID);
-
- Preconditions.checkNotNull(containerInfo,
- "No information about the container " + request.getContainerId());
-
- Preconditions
- .checkState(containerInfo.getState() == LifeCycleState.CLOSED,
- "Container should be in closed state");
-
- //check the current replication
- List<DatanodeDetails> datanodesWithReplicas =
- new ArrayList<>(getCurrentReplicas(request));
-
- if (datanodesWithReplicas.size() == 0) {
- LOG.warn(
- "Container {} should be replicated but can't find any existing "
- + "replicas",
- containerID);
- return;
- }
-
- ReplicationRequest finalRequest = request;
-
- int inFlightReplications = replicationCommandWatcher.getTimeoutEvents(
- e -> e.request.getContainerId() == finalRequest.getContainerId())
- .size();
-
- int deficit =
- request.getExpecReplicationCount() - datanodesWithReplicas.size()
- - inFlightReplications;
-
- if (deficit > 0) {
-
- List<DatanodeDetails> selectedDatanodes = containerPlacement
- .chooseDatanodes(datanodesWithReplicas, deficit,
- containerInfo.getUsedBytes());
-
- //send the command
- for (DatanodeDetails datanode : selectedDatanodes) {
-
- ReplicateContainerCommand replicateCommand =
- new ReplicateContainerCommand(containerID.getId(),
- datanodesWithReplicas);
-
- eventPublisher.fireEvent(SCMEvents.DATANODE_COMMAND,
- new CommandForDatanode<>(
- datanode.getUuid(), replicateCommand));
-
- ReplicationRequestToRepeat timeoutEvent =
- new ReplicationRequestToRepeat(replicateCommand.getId(),
- request);
-
- eventPublisher.fireEvent(TRACK_REPLICATE_COMMAND, timeoutEvent);
-
- }
-
- } else if (deficit < 0) {
- //TODO: too many replicas. Not handled yet.
- }
-
- } catch (Exception e) {
- LOG.error("Can't replicate container {}", request, e);
- }
- }
-
- }
-
- @VisibleForTesting
- protected Set<DatanodeDetails> getCurrentReplicas(ReplicationRequest request)
- throws IOException {
- return containerStateManager
- .getContainerReplicas(new ContainerID(request.getContainerId()));
- }
-
- @VisibleForTesting
- public ReplicationQueue getReplicationQueue() {
- return replicationQueue;
- }
-
- public void stop() {
- running = false;
- }
-
- /**
- * Event for the ReplicationCommandWatcher to repeate the embedded request.
- * in case fof timeout.
- */
- public static class ReplicationRequestToRepeat
- implements IdentifiableEventPayload {
-
- private final long commandId;
-
- private final ReplicationRequest request;
-
- public ReplicationRequestToRepeat(long commandId,
- ReplicationRequest request) {
- this.commandId = commandId;
- this.request = request;
- }
-
- public ReplicationRequest getRequest() {
- return request;
- }
-
- @Override
- public long getId() {
- return commandId;
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- }
- if (o == null || getClass() != o.getClass()) {
- return false;
- }
- ReplicationRequestToRepeat that = (ReplicationRequestToRepeat) o;
- return Objects.equals(request, that.request);
- }
-
- @Override
- public int hashCode() {
-
- return Objects.hash(request);
- }
- }
-
- public static class ReplicationCompleted implements IdentifiableEventPayload {
-
- private final long uuid;
-
- public ReplicationCompleted(long uuid) {
- this.uuid = uuid;
- }
-
- @Override
- public long getId() {
- return uuid;
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/2c392da8/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/ReplicationQueue.java
----------------------------------------------------------------------
diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/ReplicationQueue.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/ReplicationQueue.java
deleted file mode 100644
index 4ca67be..0000000
--- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/ReplicationQueue.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * 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.hdds.scm.container.replication;
-
-import java.util.List;
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.PriorityBlockingQueue;
-
-/**
- * Priority queue to handle under-replicated and over replicated containers
- * in ozone. ReplicationManager will consume these messages and decide
- * accordingly.
- */
-public class ReplicationQueue {
-
- private final BlockingQueue<ReplicationRequest> queue;
-
- public ReplicationQueue() {
- queue = new PriorityBlockingQueue<>();
- }
-
- public boolean add(ReplicationRequest repObj) {
- if (this.queue.contains(repObj)) {
- // Remove the earlier message and insert this one
- this.queue.remove(repObj);
- }
- return this.queue.add(repObj);
- }
-
- public boolean remove(ReplicationRequest repObj) {
- return queue.remove(repObj);
- }
-
- /**
- * Retrieves, but does not remove, the head of this queue,
- * or returns {@code null} if this queue is empty.
- *
- * @return the head of this queue, or {@code null} if this queue is empty
- */
- public ReplicationRequest peek() {
- return queue.peek();
- }
-
- /**
- * Retrieves and removes the head of this queue (blocking queue).
- */
- public ReplicationRequest take() throws InterruptedException {
- return queue.take();
- }
-
- public boolean removeAll(List<ReplicationRequest> repObjs) {
- return queue.removeAll(repObjs);
- }
-
- public int size() {
- return queue.size();
- }
-}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/2c392da8/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/ReplicationRequest.java
----------------------------------------------------------------------
diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/ReplicationRequest.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/ReplicationRequest.java
deleted file mode 100644
index d40cd9c..0000000
--- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/ReplicationRequest.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * 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.hdds.scm.container.replication;
-
-import java.io.Serializable;
-
-import org.apache.commons.lang3.builder.EqualsBuilder;
-import org.apache.commons.lang3.builder.HashCodeBuilder;
-
-/**
- * Wrapper class for hdds replication queue. Implements its natural
- * ordering for priority queue.
- */
-public class ReplicationRequest implements Comparable<ReplicationRequest>,
- Serializable {
- private final long containerId;
- private final int replicationCount;
- private final int expecReplicationCount;
- private final long timestamp;
-
- public ReplicationRequest(long containerId, int replicationCount,
- long timestamp, int expecReplicationCount) {
- this.containerId = containerId;
- this.replicationCount = replicationCount;
- this.timestamp = timestamp;
- this.expecReplicationCount = expecReplicationCount;
- }
-
- public ReplicationRequest(long containerId, int replicationCount,
- int expecReplicationCount) {
- this(containerId, replicationCount, System.currentTimeMillis(),
- expecReplicationCount);
- }
-
- /**
- * Compares this object with the specified object for order. Returns a
- * negative integer, zero, or a positive integer as this object is less
- * than, equal to, or greater than the specified object.
- * @param o the object to be compared.
- * @return a negative integer, zero, or a positive integer as this object
- * is less than, equal to, or greater than the specified object.
- * @throws NullPointerException if the specified object is null
- * @throws ClassCastException if the specified object's type prevents it
- * from being compared to this object.
- */
- @Override
- public int compareTo(ReplicationRequest o) {
- if (o == null) {
- return 1;
- }
- if (this == o) {
- return 0;
- }
- int retVal = Integer
- .compare(getReplicationCount() - getExpecReplicationCount(),
- o.getReplicationCount() - o.getExpecReplicationCount());
- if (retVal != 0) {
- return retVal;
- }
- return Long.compare(getTimestamp(), o.getTimestamp());
- }
-
- @Override
- public int hashCode() {
- return new HashCodeBuilder(91, 1011)
- .append(getContainerId())
- .toHashCode();
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- }
- if (o == null || getClass() != o.getClass()) {
- return false;
- }
- ReplicationRequest that = (ReplicationRequest) o;
- return new EqualsBuilder().append(getContainerId(), that.getContainerId())
- .isEquals();
- }
-
- public long getContainerId() {
- return containerId;
- }
-
- public int getReplicationCount() {
- return replicationCount;
- }
-
- public long getTimestamp() {
- return timestamp;
- }
-
- public int getExpecReplicationCount() {
- return expecReplicationCount;
- }
-
- @Override
- public String toString() {
- return "ReplicationRequest{" +
- "containerId=" + containerId +
- ", replicationCount=" + replicationCount +
- ", expecReplicationCount=" + expecReplicationCount +
- ", timestamp=" + timestamp +
- '}';
- }
-}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/2c392da8/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/package-info.java
----------------------------------------------------------------------
diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/package-info.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/package-info.java
deleted file mode 100644
index 934b01e..0000000
--- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/replication/package-info.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * 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.hdds.scm.container.replication;
-
-/**
- * HDDS (Closed) Container replicaton related classes.
- */
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/hadoop/blob/2c392da8/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/states/ContainerAttribute.java
----------------------------------------------------------------------
diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/states/ContainerAttribute.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/states/ContainerAttribute.java
deleted file mode 100644
index 288fa2d..0000000
--- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/states/ContainerAttribute.java
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * 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.hdds.scm.container.states;
-
-import com.google.common.base.Preconditions;
-import org.apache.hadoop.hdds.scm.container.ContainerID;
-import org.apache.hadoop.hdds.scm.exceptions.SCMException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.NavigableSet;
-import java.util.TreeSet;
-
-import static org.apache.hadoop.hdds.scm.exceptions.SCMException.ResultCodes
- .FAILED_TO_CHANGE_CONTAINER_STATE;
-
-/**
- * Each Attribute that we manage for a container is maintained as a map.
- * <p>
- * Currently we manage the following attributes for a container.
- * <p>
- * 1. StateMap - LifeCycleState -> Set of ContainerIDs
- * 2. TypeMap - ReplicationType -> Set of ContainerIDs
- * 3. OwnerMap - OwnerNames -> Set of ContainerIDs
- * 4. FactorMap - ReplicationFactor -> Set of ContainerIDs
- * <p>
- * This means that for a cluster size of 750 PB -- we will have around 150
- * Million containers, if we assume 5GB average container size.
- * <p>
- * That implies that these maps will take around 2/3 GB of RAM which will be
- * pinned down in the SCM. This is deemed acceptable since we can tune the
- * container size --say we make it 10GB average size, then we can deal with a
- * cluster size of 1.5 exa bytes with the same metadata in SCMs memory.
- * <p>
- * Please note: **This class is not thread safe**. This used to be thread safe,
- * while bench marking we found that ContainerStateMap would be taking 5
- * locks for a single container insert. If we remove locks in this class,
- * then we are able to perform about 540K operations per second, with the
- * locks in this class it goes down to 246K operations per second. Hence we
- * are going to rely on ContainerStateMap locks to maintain consistency of
- * data in these classes too, since ContainerAttribute is only used by
- * ContainerStateMap class.
- */
-public class ContainerAttribute<T> {
- private static final Logger LOG =
- LoggerFactory.getLogger(ContainerAttribute.class);
-
- private final Map<T, NavigableSet<ContainerID>> attributeMap;
- private static final NavigableSet<ContainerID> EMPTY_SET = Collections
- .unmodifiableNavigableSet(new TreeSet<>());
-
- /**
- * Creates a Container Attribute map from an existing Map.
- *
- * @param attributeMap - AttributeMap
- */
- public ContainerAttribute(Map<T, NavigableSet<ContainerID>> attributeMap) {
- this.attributeMap = attributeMap;
- }
-
- /**
- * Create an empty Container Attribute map.
- */
- public ContainerAttribute() {
- this.attributeMap = new HashMap<>();
- }
-
- /**
- * Insert or update the value in the Attribute map.
- *
- * @param key - The key to the set where the ContainerID should exist.
- * @param value - Actual Container ID.
- * @throws SCMException - on Error
- */
- public boolean insert(T key, ContainerID value) throws SCMException {
- Preconditions.checkNotNull(key);
- Preconditions.checkNotNull(value);
-
- if (attributeMap.containsKey(key)) {
- if (attributeMap.get(key).add(value)) {
- return true; //we inserted the value as it doesn’t exist in the set.
- } else { // Failure indicates that this ContainerID exists in the Set
- if (!attributeMap.get(key).remove(value)) {
- LOG.error("Failure to remove the object from the Map.Key:{}, " +
- "ContainerID: {}", key, value);
- throw new SCMException("Failure to remove the object from the Map",
- FAILED_TO_CHANGE_CONTAINER_STATE);
- }
- attributeMap.get(key).add(value);
- return true;
- }
- } else {
- // This key does not exist, we need to allocate this key in the map.
- // TODO: Replace TreeSet with FoldedTreeSet from HDFS Utils.
- // Skipping for now, since FoldedTreeSet does not have implementations
- // for headSet and TailSet. We need those calls.
- this.attributeMap.put(key, new TreeSet<>());
- // This should not fail, we just allocated this object.
- attributeMap.get(key).add(value);
- return true;
- }
- }
-
- /**
- * Returns true if have this bucket in the attribute map.
- *
- * @param key - Key to lookup
- * @return true if we have the key
- */
- public boolean hasKey(T key) {
- Preconditions.checkNotNull(key);
- return this.attributeMap.containsKey(key);
- }
-
- /**
- * Returns true if we have the key and the containerID in the bucket.
- *
- * @param key - Key to the bucket
- * @param id - container ID that we want to lookup
- * @return true or false
- */
- public boolean hasContainerID(T key, ContainerID id) {
- Preconditions.checkNotNull(key);
- Preconditions.checkNotNull(id);
-
- return this.attributeMap.containsKey(key) &&
- this.attributeMap.get(key).contains(id);
- }
-
- /**
- * Returns true if we have the key and the containerID in the bucket.
- *
- * @param key - Key to the bucket
- * @param id - container ID that we want to lookup
- * @return true or false
- */
- public boolean hasContainerID(T key, int id) {
- return hasContainerID(key, ContainerID.valueof(id));
- }
-
- /**
- * Clears all entries for this key type.
- *
- * @param key - Key that identifies the Set.
- */
- public void clearSet(T key) {
- Preconditions.checkNotNull(key);
-
- if (attributeMap.containsKey(key)) {
- attributeMap.get(key).clear();
- } else {
- LOG.debug("key: {} does not exist in the attributeMap", key);
- }
- }
-
- /**
- * Removes a container ID from the set pointed by the key.
- *
- * @param key - key to identify the set.
- * @param value - Container ID
- */
- public boolean remove(T key, ContainerID value) {
- Preconditions.checkNotNull(key);
- Preconditions.checkNotNull(value);
-
- if (attributeMap.containsKey(key)) {
- if (!attributeMap.get(key).remove(value)) {
- LOG.debug("ContainerID: {} does not exist in the set pointed by " +
- "key:{}", value, key);
- return false;
- }
- return true;
- } else {
- LOG.debug("key: {} does not exist in the attributeMap", key);
- return false;
- }
- }
-
- /**
- * Returns the collection that maps to the given key.
- *
- * @param key - Key to the bucket.
- * @return Underlying Set in immutable form.
- */
- public NavigableSet<ContainerID> getCollection(T key) {
- Preconditions.checkNotNull(key);
-
- if (this.attributeMap.containsKey(key)) {
- return Collections.unmodifiableNavigableSet(this.attributeMap.get(key));
- }
- LOG.debug("No such Key. Key {}", key);
- return EMPTY_SET;
- }
-
- /**
- * Moves a ContainerID from one bucket to another.
- *
- * @param currentKey - Current Key
- * @param newKey - newKey
- * @param value - ContainerID
- * @throws SCMException on Error
- */
- public void update(T currentKey, T newKey, ContainerID value)
- throws SCMException {
- Preconditions.checkNotNull(currentKey);
- Preconditions.checkNotNull(newKey);
-
- boolean removed = false;
- try {
- removed = remove(currentKey, value);
- if (!removed) {
- throw new SCMException("Unable to find key in the current key bucket",
- FAILED_TO_CHANGE_CONTAINER_STATE);
- }
- insert(newKey, value);
- } catch (SCMException ex) {
- // if we removed the key, insert it back to original bucket, since the
- // next insert failed.
- LOG.error("error in update.", ex);
- if (removed) {
- insert(currentKey, value);
- LOG.trace("reinserted the removed key. {}", currentKey);
- }
- throw ex;
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/2c392da8/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/states/ContainerQueryKey.java
----------------------------------------------------------------------
diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/states/ContainerQueryKey.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/states/ContainerQueryKey.java
deleted file mode 100644
index cd49115..0000000
--- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/states/ContainerQueryKey.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * 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.hdds.scm.container.states;
-
-import org.apache.commons.lang3.builder.EqualsBuilder;
-import org.apache.commons.lang3.builder.HashCodeBuilder;
-import org.apache.hadoop.hdds.protocol.proto.HddsProtos;
-
-/**
- * Key for the Caching layer for Container Query.
- */
-public class ContainerQueryKey {
- private final HddsProtos.LifeCycleState state;
- private final String owner;
- private final HddsProtos.ReplicationFactor factor;
- private final HddsProtos.ReplicationType type;
-
- @Override
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- }
-
- if (o == null || getClass() != o.getClass()) {
- return false;
- }
-
- ContainerQueryKey that = (ContainerQueryKey) o;
-
- return new EqualsBuilder()
- .append(getState(), that.getState())
- .append(getOwner(), that.getOwner())
- .append(getFactor(), that.getFactor())
- .append(getType(), that.getType())
- .isEquals();
- }
-
- @Override
- public int hashCode() {
- return new HashCodeBuilder(61, 71)
- .append(getState())
- .append(getOwner())
- .append(getFactor())
- .append(getType())
- .toHashCode();
- }
-
- /**
- * Constructor for ContainerQueryKey.
- * @param state LifeCycleState
- * @param owner - Name of the Owner.
- * @param factor Replication Factor.
- * @param type - Replication Type.
- */
- public ContainerQueryKey(HddsProtos.LifeCycleState state, String owner,
- HddsProtos.ReplicationFactor factor, HddsProtos.ReplicationType type) {
- this.state = state;
- this.owner = owner;
- this.factor = factor;
- this.type = type;
- }
-
- /**
- * Returns the state of containers which this key represents.
- * @return LifeCycleState
- */
- public HddsProtos.LifeCycleState getState() {
- return state;
- }
-
- /**
- * Returns the owner of containers which this key represents.
- * @return Owner
- */
- public String getOwner() {
- return owner;
- }
-
- /**
- * Returns the replication factor of containers which this key represents.
- * @return ReplicationFactor
- */
- public HddsProtos.ReplicationFactor getFactor() {
- return factor;
- }
-
- /**
- * Returns the replication type of containers which this key represents.
- * @return ReplicationType
- */
- public HddsProtos.ReplicationType getType() {
- return type;
- }
-}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/2c392da8/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/states/ContainerState.java
----------------------------------------------------------------------
diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/states/ContainerState.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/states/ContainerState.java
deleted file mode 100644
index 1dac36e..0000000
--- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/states/ContainerState.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * 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.hdds.scm.container.states;
-
-import org.apache.commons.lang3.builder.EqualsBuilder;
-import org.apache.commons.lang3.builder.HashCodeBuilder;
-import org.apache.hadoop.hdds.protocol.proto.HddsProtos;
-
-/**
- * Class that acts as the container state.
- */
-public class ContainerState {
- private final HddsProtos.ReplicationType type;
- private final String owner;
- private final HddsProtos.ReplicationFactor replicationFactor;
-
- /**
- * Constructs a Container Key.
- *
- * @param owner - Container Owners
- * @param type - Replication Type.
- * @param factor - Replication Factors
- */
- public ContainerState(String owner, HddsProtos.ReplicationType type,
- HddsProtos.ReplicationFactor factor) {
- this.type = type;
- this.owner = owner;
- this.replicationFactor = factor;
- }
-
-
- public HddsProtos.ReplicationType getType() {
- return type;
- }
-
- public String getOwner() {
- return owner;
- }
-
- public HddsProtos.ReplicationFactor getFactor() {
- return replicationFactor;
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- }
-
- if (o == null || getClass() != o.getClass()) {
- return false;
- }
-
- ContainerState that = (ContainerState) o;
-
- return new EqualsBuilder()
- .append(type, that.type)
- .append(owner, that.owner)
- .append(replicationFactor, that.replicationFactor)
- .isEquals();
- }
-
- @Override
- public int hashCode() {
- return new HashCodeBuilder(137, 757)
- .append(type)
- .append(owner)
- .append(replicationFactor)
- .toHashCode();
- }
-
- @Override
- public String toString() {
- return "ContainerKey{" +
- ", type=" + type +
- ", owner=" + owner +
- ", replicationFactor=" + replicationFactor +
- '}';
- }
-}
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org