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 wh...@apache.org on 2015/11/10 00:27:38 UTC
[2/2] hadoop git commit: HDFS-2261. AOP unit tests are not getting
compiled or run. Contributed by Haohui Mai.
HDFS-2261. AOP unit tests are not getting compiled or run. Contributed by Haohui Mai.
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/c91bd3aa
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/c91bd3aa
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/c91bd3aa
Branch: refs/heads/branch-2
Commit: c91bd3aabb6ade0ca4a49c40505daa1934ae3281
Parents: 6bca317
Author: Haohui Mai <wh...@apache.org>
Authored: Mon Nov 9 15:25:19 2015 -0800
Committer: Haohui Mai <wh...@apache.org>
Committed: Mon Nov 9 15:26:01 2015 -0800
----------------------------------------------------------------------
.../test/aop/org/apache/hadoop/fi/FiConfig.java | 50 --
.../org/apache/hadoop/fi/ProbabilityModel.java | 108 -----
hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt | 2 +
hadoop-hdfs-project/hadoop-hdfs/pom.xml | 1 -
.../apache/hadoop/fi/DataTransferTestUtil.java | 485 -------------------
.../test/aop/org/apache/hadoop/fi/FiConfig.java | 55 ---
.../org/apache/hadoop/fi/FiHFlushTestUtil.java | 66 ---
.../aop/org/apache/hadoop/fi/FiTestUtil.java | 209 --------
.../test/aop/org/apache/hadoop/fi/Pipeline.java | 50 --
.../aop/org/apache/hadoop/fi/PipelineTest.java | 27 --
.../org/apache/hadoop/fi/ProbabilityModel.java | 107 ----
.../org/apache/hadoop/fs/TestFiListPath.java | 105 ----
.../aop/org/apache/hadoop/fs/TestFiRename.java | 272 -----------
.../org/apache/hadoop/hdfs/DFSClientAspects.aj | 103 ----
.../aop/org/apache/hadoop/hdfs/HFlushAspects.aj | 64 ---
.../apache/hadoop/hdfs/PipelinesTestUtil.java | 153 ------
.../org/apache/hadoop/hdfs/TestFiHFlush.java | 180 -------
.../org/apache/hadoop/hdfs/TestFiPipelines.java | 247 ----------
.../hdfs/protocol/ClientProtocolAspects.aj | 38 --
.../server/datanode/BlockReceiverAspects.aj | 232 ---------
.../datanode/DataTransferProtocolAspects.aj | 80 ---
.../hdfs/server/datanode/FSDatasetAspects.aj | 63 ---
.../datanode/TestFiDataTransferProtocol.java | 312 ------------
.../datanode/TestFiDataTransferProtocol2.java | 289 -----------
.../server/datanode/TestFiPipelineClose.java | 250 ----------
.../server/namenode/FileDataServletAspects.aj | 46 --
.../hdfs/server/namenode/ListPathAspects.aj | 48 --
.../hdfs/server/namenode/RenameAspects.aj | 66 ---
28 files changed, 2 insertions(+), 3706 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hadoop/blob/c91bd3aa/hadoop-common-project/hadoop-common/src/test/aop/org/apache/hadoop/fi/FiConfig.java
----------------------------------------------------------------------
diff --git a/hadoop-common-project/hadoop-common/src/test/aop/org/apache/hadoop/fi/FiConfig.java b/hadoop-common-project/hadoop-common/src/test/aop/org/apache/hadoop/fi/FiConfig.java
deleted file mode 100644
index 799ba19..0000000
--- a/hadoop-common-project/hadoop-common/src/test/aop/org/apache/hadoop/fi/FiConfig.java
+++ /dev/null
@@ -1,50 +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.fi;
-
-import org.apache.hadoop.conf.Configuration;
-
-/**
- * This class wraps the logic around fault injection configuration file
- * Default file is expected to be found in src/test/fi-site.xml
- * This default file should be copied by JUnit Ant's tasks to
- * build/test/extraconf folder before tests are ran
- * An alternative location can be set through
- * -Dfi.config=<file_name>
- */
-public class FiConfig {
- private static final String CONFIG_PARAMETER = ProbabilityModel.FPROB_NAME + "config";
- private static final String DEFAULT_CONFIG = "fi-site.xml";
- private static Configuration conf;
- static {
- if (conf == null) {
- conf = new Configuration(false);
- String configName = System.getProperty(CONFIG_PARAMETER, DEFAULT_CONFIG);
- conf.addResource(configName);
- }
- }
-
- /**
- * Method provides access to local Configuration
- *
- * @return Configuration initialized with fault injection's parameters
- */
- public static Configuration getConfig() {
- return conf;
- }
-}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/c91bd3aa/hadoop-common-project/hadoop-common/src/test/aop/org/apache/hadoop/fi/ProbabilityModel.java
----------------------------------------------------------------------
diff --git a/hadoop-common-project/hadoop-common/src/test/aop/org/apache/hadoop/fi/ProbabilityModel.java b/hadoop-common-project/hadoop-common/src/test/aop/org/apache/hadoop/fi/ProbabilityModel.java
deleted file mode 100644
index 2a3db5f..0000000
--- a/hadoop-common-project/hadoop-common/src/test/aop/org/apache/hadoop/fi/ProbabilityModel.java
+++ /dev/null
@@ -1,108 +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.fi;
-
-import java.util.Random;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.hadoop.conf.Configuration;
-
-/**
- * This class is responsible for the decision of when a fault
- * has to be triggered within a class of Hadoop
- *
- * Default probability of injection is set to 0%. To change it
- * one can set the sys. prop. -Dfi.*=<new probability level>
- * Another way to do so is to set this level through FI config file,
- * located under src/test/fi-site.conf
- *
- * To change the level one has to specify the following sys,prop.:
- * -Dfi.<name of fault location>=<probability level> in the runtime
- * Probability level is specified by a float between 0.0 and 1.0
- *
- * <name of fault location> might be represented by a short classname
- * or otherwise. This decision is left up to the discretion of aspects
- * developer, but has to be consistent through the code
- */
-public class ProbabilityModel {
- private static Random generator = new Random();
- private static final Log LOG = LogFactory.getLog(ProbabilityModel.class);
-
- static final String FPROB_NAME = "fi.";
- private static final String ALL_PROBABILITIES = FPROB_NAME + "*";
- private static final float DEFAULT_PROB = 0.00f; //Default probability is 0%
- private static final float MAX_PROB = 1.00f; // Max probability is 100%
-
- private static Configuration conf = FiConfig.getConfig();
-
- static {
- // Set new default probability if specified through a system.property
- // If neither is specified set default probability to DEFAULT_PROB
- conf.set(ALL_PROBABILITIES,
- System.getProperty(ALL_PROBABILITIES,
- conf.get(ALL_PROBABILITIES, Float.toString(DEFAULT_PROB))));
-
- LOG.info(ALL_PROBABILITIES + "=" + conf.get(ALL_PROBABILITIES));
- }
-
- /**
- * Simplistic method to check if we have reached the point of injection
- * @param klassName is the name of the probability level to check.
- * If a configuration has been set for "fi.myClass" then you can check if the
- * inject criteria has been reached by calling this method with "myClass"
- * string as its parameter
- * @return true if the probability threshold has been reached; false otherwise
- */
- public static boolean injectCriteria(String klassName) {
- boolean trigger = false;
- if (generator.nextFloat() < getProbability(klassName)) {
- trigger = true;
- }
- return trigger;
- }
-
- /**
- * This primitive checks for arbitrary set of desired probability. If the
- * level hasn't been set method will return default setting.
- * The probability expected to be set as an float between 0.0 and 1.0
- * @param klass is the name of the resource
- * @return float representation of configured probability level of
- * the requested resource or default value if hasn't been set
- */
- protected static float getProbability(final String klass) {
- String newProbName = FPROB_NAME + klass;
-
- String newValue = System.getProperty(newProbName, conf.get(ALL_PROBABILITIES));
- if (newValue != null && !newValue.equals(conf.get(newProbName)))
- conf.set(newProbName, newValue);
-
- float ret = conf.getFloat(newProbName,
- conf.getFloat(ALL_PROBABILITIES, DEFAULT_PROB));
- if(LOG.isDebugEnabled()) {
- LOG.debug("Request for " + newProbName + " returns=" + ret);
- }
- // Make sure that probability level is valid.
- if (ret < DEFAULT_PROB || ret > MAX_PROB) {
- LOG.info("Probability level is incorrect. Default value is set");
- ret = conf.getFloat(ALL_PROBABILITIES, DEFAULT_PROB);
- }
-
- return ret;
- }
-}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/c91bd3aa/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
index c3ea7a1..e851519 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
+++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
@@ -791,6 +791,8 @@ Release 2.8.0 - UNRELEASED
HDFS-9398. Make ByteArraryManager log message in one-line format.
(Mingliang Liu via szetszwo)
+ HDFS-2261. AOP unit tests are not getting compiled or run. (wheat9)
+
OPTIMIZATIONS
HDFS-8026. Trace FSOutputSummer#writeChecksumChunks rather than
http://git-wip-us.apache.org/repos/asf/hadoop/blob/c91bd3aa/hadoop-hdfs-project/hadoop-hdfs/pom.xml
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/pom.xml b/hadoop-hdfs-project/hadoop-hdfs/pom.xml
index d132da5..0d1856b 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/pom.xml
+++ b/hadoop-hdfs-project/hadoop-hdfs/pom.xml
@@ -375,7 +375,6 @@ http://maven.apache.org/xsd/maven-4.0.0.xsd">
<exclude>src/test/resources/data*</exclude>
<exclude>src/test/resources/editsStored*</exclude>
<exclude>src/test/resources/empty-file</exclude>
- <exclude>src/test/aop/org/apache/hadoop/hdfs/server/datanode/DataXceiverAspects.aj</exclude>
<exclude>src/main/webapps/datanode/robots.txt</exclude>
<exclude>src/main/docs/releasenotes.html</exclude>
<exclude>src/contrib/**</exclude>
http://git-wip-us.apache.org/repos/asf/hadoop/blob/c91bd3aa/hadoop-hdfs-project/hadoop-hdfs/src/test/aop/org/apache/hadoop/fi/DataTransferTestUtil.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/aop/org/apache/hadoop/fi/DataTransferTestUtil.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/aop/org/apache/hadoop/fi/DataTransferTestUtil.java
deleted file mode 100644
index 893e0b7..0000000
--- a/hadoop-hdfs-project/hadoop-hdfs/src/test/aop/org/apache/hadoop/fi/DataTransferTestUtil.java
+++ /dev/null
@@ -1,485 +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.fi;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.hadoop.fi.FiTestUtil.Action;
-import org.apache.hadoop.fi.FiTestUtil.ActionContainer;
-import org.apache.hadoop.fi.FiTestUtil.ConstraintSatisfactionAction;
-import org.apache.hadoop.fi.FiTestUtil.CountdownConstraint;
-import org.apache.hadoop.fi.FiTestUtil.MarkerConstraint;
-import org.apache.hadoop.hdfs.protocol.DatanodeID;
-import org.apache.hadoop.hdfs.protocol.LocatedBlock;
-import org.apache.hadoop.util.DiskChecker.DiskOutOfSpaceException;
-
-/**
- * Utilities for DataTransferProtocol related tests,
- * e.g. TestFiDataTransferProtocol.
- */
-public class DataTransferTestUtil {
- protected static PipelineTest thepipelinetest;
- /** initialize pipeline test */
- public static PipelineTest initTest() {
- return thepipelinetest = new DataTransferTest();
- }
- /** get the pipeline test object */
- public static PipelineTest getPipelineTest() {
- return thepipelinetest;
- }
- /** get the pipeline test object cast to DataTransferTest */
- public static DataTransferTest getDataTransferTest() {
- return (DataTransferTest)getPipelineTest();
- }
-
- /**
- * The DataTransferTest class includes a pipeline
- * and some actions.
- */
- public static class DataTransferTest implements PipelineTest {
- private final List<Pipeline> pipelines = new ArrayList<Pipeline>();
- private volatile boolean isSuccess = false;
-
- /** Simulate action for the receiverOpWriteBlock pointcut */
- public final ActionContainer<DatanodeID, IOException> fiReceiverOpWriteBlock
- = new ActionContainer<DatanodeID, IOException>();
- /** Simulate action for the callReceivePacket pointcut */
- public final ActionContainer<DatanodeID, IOException> fiCallReceivePacket
- = new ActionContainer<DatanodeID, IOException>();
- /** Simulate action for the callWritePacketToDisk pointcut */
- public final ActionContainer<DatanodeID, IOException> fiCallWritePacketToDisk
- = new ActionContainer<DatanodeID, IOException>();
- /** Simulate action for the statusRead pointcut */
- public final ActionContainer<DatanodeID, IOException> fiStatusRead
- = new ActionContainer<DatanodeID, IOException>();
- /** Simulate action for the afterDownstreamStatusRead pointcut */
- public final ActionContainer<DatanodeID, IOException> fiAfterDownstreamStatusRead
- = new ActionContainer<DatanodeID, IOException>();
- /** Simulate action for the pipelineAck pointcut */
- public final ActionContainer<DatanodeID, IOException> fiPipelineAck
- = new ActionContainer<DatanodeID, IOException>();
- /** Simulate action for the pipelineClose pointcut */
- public final ActionContainer<DatanodeID, IOException> fiPipelineClose
- = new ActionContainer<DatanodeID, IOException>();
- /** Simulate action for the blockFileClose pointcut */
- public final ActionContainer<DatanodeID, IOException> fiBlockFileClose
- = new ActionContainer<DatanodeID, IOException>();
-
- /** Verification action for the pipelineInitNonAppend pointcut */
- public final ActionContainer<Integer, RuntimeException> fiPipelineInitErrorNonAppend
- = new ActionContainer<Integer, RuntimeException>();
- /** Verification action for the pipelineErrorAfterInit pointcut */
- public final ActionContainer<Integer, RuntimeException> fiPipelineErrorAfterInit
- = new ActionContainer<Integer, RuntimeException>();
-
- /** Get test status */
- public boolean isSuccess() {
- return this.isSuccess;
- }
-
- /** Set test status */
- public void markSuccess() {
- this.isSuccess = true;
- }
-
- /** Initialize the pipeline. */
- @Override
- public synchronized Pipeline initPipeline(LocatedBlock lb) {
- final Pipeline pl = new Pipeline(lb);
- if (pipelines.contains(pl)) {
- throw new IllegalStateException("thepipeline != null");
- }
- pipelines.add(pl);
- return pl;
- }
-
- /** Return the pipeline for the datanode. */
- @Override
- public synchronized Pipeline getPipelineForDatanode(DatanodeID id) {
- for (Pipeline p : pipelines) {
- if (p.contains(id)){
- return p;
- }
- }
- FiTestUtil.LOG.info("FI: pipeline not found; id=" + id
- + ", pipelines=" + pipelines);
- return null;
- }
-
- /**
- * Is the test not yet success
- * and the last pipeline contains the given datanode?
- */
- private synchronized boolean isNotSuccessAndLastPipelineContains(
- int index, DatanodeID id) {
- if (isSuccess()) {
- return false;
- }
- final int n = pipelines.size();
- return n == 0? false: pipelines.get(n-1).contains(index, id);
- }
- }
-
- /** Action for DataNode */
- public static abstract class DataNodeAction implements
- Action<DatanodeID, IOException> {
- /** The name of the test */
- final String currentTest;
- /** The index of the datanode */
- final int index;
-
- /**
- * @param currentTest The name of the test
- * @param index The index of the datanode
- */
- protected DataNodeAction(String currentTest, int index) {
- this.currentTest = currentTest;
- this.index = index;
- }
-
- /** {@inheritDoc} */
- public String toString() {
- return getClass().getSimpleName() + ":" + currentTest
- + ", index=" + index;
- }
-
- /** return a String with this object and the datanodeID. */
- String toString(DatanodeID datanodeID) {
- return "FI: " + this + ", datanode="
- + datanodeID.getName();
- }
- }
-
- /** An action to set a marker if the DatanodeID is matched. */
- public static class DatanodeMarkingAction extends DataNodeAction {
- private final MarkerConstraint marker;
-
- /** Construct an object. */
- public DatanodeMarkingAction(String currentTest, int index,
- MarkerConstraint marker) {
- super(currentTest, index);
- this.marker = marker;
- }
-
- /** Set the marker if the DatanodeID is matched. */
- @Override
- public void run(DatanodeID datanodeid) throws IOException {
- final DataTransferTest test = getDataTransferTest();
- if (test.isNotSuccessAndLastPipelineContains(index, datanodeid)) {
- marker.mark();
- }
- }
-
- /** {@inheritDoc} */
- public String toString() {
- return super.toString() + ", " + marker;
- }
- }
-
- /** Throws OutOfMemoryError. */
- public static class OomAction extends DataNodeAction {
- /** Create an action for datanode i in the pipeline. */
- public OomAction(String currentTest, int i) {
- super(currentTest, i);
- }
-
- @Override
- public void run(DatanodeID id) {
- final DataTransferTest test = getDataTransferTest();
- if (test.isNotSuccessAndLastPipelineContains(index, id)) {
- final String s = toString(id);
- FiTestUtil.LOG.info(s);
- throw new OutOfMemoryError(s);
- }
- }
- }
-
- /** Throws OutOfMemoryError if the count is zero. */
- public static class CountdownOomAction extends OomAction {
- private final CountdownConstraint countdown;
-
- /** Create an action for datanode i in the pipeline with count down. */
- public CountdownOomAction(String currentTest, int i, int count) {
- super(currentTest, i);
- countdown = new CountdownConstraint(count);
- }
-
- @Override
- public void run(DatanodeID id) {
- final DataTransferTest test = getDataTransferTest();
- if (test.isNotSuccessAndLastPipelineContains(index, id)
- && countdown.isSatisfied()) {
- final String s = toString(id);
- FiTestUtil.LOG.info(s);
- throw new OutOfMemoryError(s);
- }
- }
- }
-
- /** Throws DiskOutOfSpaceException. */
- public static class DoosAction extends DataNodeAction {
- /** Create an action for datanode i in the pipeline. */
- public DoosAction(String currentTest, int i) {
- super(currentTest, i);
- }
-
- @Override
- public void run(DatanodeID id) throws DiskOutOfSpaceException {
- final DataTransferTest test = getDataTransferTest();
- if (test.isNotSuccessAndLastPipelineContains(index, id)) {
- final String s = toString(id);
- FiTestUtil.LOG.info(s);
- throw new DiskOutOfSpaceException(s);
- }
- }
- }
-
- /** Throws an IOException. */
- public static class IoeAction extends DataNodeAction {
- private final String error;
-
- /** Create an action for datanode i in the pipeline. */
- public IoeAction(String currentTest, int i, String error) {
- super(currentTest, i);
- this.error = error;
- }
-
- @Override
- public void run(DatanodeID id) throws IOException {
- final DataTransferTest test = getDataTransferTest();
- if (test.isNotSuccessAndLastPipelineContains(index, id)) {
- final String s = toString(id);
- FiTestUtil.LOG.info(s);
- throw new IOException(s);
- }
- }
-
- @Override
- public String toString() {
- return error + " " + super.toString();
- }
- }
-
- /** Throws DiskOutOfSpaceException if the count is zero. */
- public static class CountdownDoosAction extends DoosAction {
- private final CountdownConstraint countdown;
-
- /** Create an action for datanode i in the pipeline with count down. */
- public CountdownDoosAction(String currentTest, int i, int count) {
- super(currentTest, i);
- countdown = new CountdownConstraint(count);
- }
-
- @Override
- public void run(DatanodeID id) throws DiskOutOfSpaceException {
- final DataTransferTest test = getDataTransferTest();
- if (test.isNotSuccessAndLastPipelineContains(index, id)
- && countdown.isSatisfied()) {
- final String s = toString(id);
- FiTestUtil.LOG.info(s);
- throw new DiskOutOfSpaceException(s);
- }
- }
- }
-
- /**
- * Sleep some period of time so that it slows down the datanode
- * or sleep forever so that datanode becomes not responding.
- */
- public static class SleepAction extends DataNodeAction {
- /** In milliseconds;
- * must have (0 <= minDuration < maxDuration) or (maxDuration <= 0).
- */
- final long minDuration;
- /** In milliseconds; maxDuration <= 0 means sleeping forever.*/
- final long maxDuration;
-
- /**
- * Create an action for datanode i in the pipeline.
- * @param duration In milliseconds, duration <= 0 means sleeping forever.
- */
- public SleepAction(String currentTest, int i, long duration) {
- this(currentTest, i, duration, duration <= 0? duration: duration+1);
- }
-
- /**
- * Create an action for datanode i in the pipeline.
- * @param minDuration minimum sleep time
- * @param maxDuration maximum sleep time
- */
- public SleepAction(String currentTest, int i,
- long minDuration, long maxDuration) {
- super(currentTest, i);
-
- if (maxDuration > 0) {
- if (minDuration < 0) {
- throw new IllegalArgumentException("minDuration = " + minDuration
- + " < 0 but maxDuration = " + maxDuration + " > 0");
- }
- if (minDuration >= maxDuration) {
- throw new IllegalArgumentException(
- minDuration + " = minDuration >= maxDuration = " + maxDuration);
- }
- }
- this.minDuration = minDuration;
- this.maxDuration = maxDuration;
- }
-
- @Override
- public void run(DatanodeID id) {
- final DataTransferTest test = getDataTransferTest();
- if (test.isNotSuccessAndLastPipelineContains(index, id)) {
- FiTestUtil.LOG.info(toString(id));
- if (maxDuration <= 0) {
- for(; FiTestUtil.sleep(1000); ); //sleep forever until interrupt
- } else {
- FiTestUtil.sleep(minDuration, maxDuration);
- }
- }
- }
-
- /** {@inheritDoc} */
- @Override
- public String toString() {
- return super.toString() + ", duration="
- + (maxDuration <= 0? "infinity": "[" + minDuration + ", " + maxDuration + ")");
- }
- }
-
- /**
- * When the count is zero,
- * sleep some period of time so that it slows down the datanode
- * or sleep forever so that datanode becomes not responding.
- */
- public static class CountdownSleepAction extends SleepAction {
- private final CountdownConstraint countdown;
-
- /**
- * Create an action for datanode i in the pipeline.
- * @param duration In milliseconds, duration <= 0 means sleeping forever.
- */
- public CountdownSleepAction(String currentTest, int i,
- long duration, int count) {
- this(currentTest, i, duration, duration+1, count);
- }
-
- /** Create an action for datanode i in the pipeline with count down. */
- public CountdownSleepAction(String currentTest, int i,
- long minDuration, long maxDuration, int count) {
- super(currentTest, i, minDuration, maxDuration);
- countdown = new CountdownConstraint(count);
- }
-
- @Override
- public void run(DatanodeID id) {
- final DataTransferTest test = getDataTransferTest();
- if (test.isNotSuccessAndLastPipelineContains(index, id)
- && countdown.isSatisfied()) {
- final String s = toString(id) + ", duration = ["
- + minDuration + "," + maxDuration + ")";
- FiTestUtil.LOG.info(s);
- if (maxDuration <= 1) {
- for(; FiTestUtil.sleep(1000); ); //sleep forever until interrupt
- } else {
- FiTestUtil.sleep(minDuration, maxDuration);
- }
- }
- }
- }
-
- /** Action for pipeline error verification */
- public static class VerificationAction implements
- Action<Integer, RuntimeException> {
- /** The name of the test */
- final String currentTest;
- /** The error index of the datanode */
- final int errorIndex;
-
- /**
- * Create a verification action for errors at datanode i in the pipeline.
- *
- * @param currentTest The name of the test
- * @param i The error index of the datanode
- */
- public VerificationAction(String currentTest, int i) {
- this.currentTest = currentTest;
- this.errorIndex = i;
- }
-
- /** {@inheritDoc} */
- public String toString() {
- return currentTest + ", errorIndex=" + errorIndex;
- }
-
- @Override
- public void run(Integer i) {
- if (i == errorIndex) {
- FiTestUtil.LOG.info(this + ", successfully verified.");
- getDataTransferTest().markSuccess();
- }
- }
- }
-
- /**
- * Create a OomAction with a CountdownConstraint
- * so that it throws OutOfMemoryError if the count is zero.
- */
- public static ConstraintSatisfactionAction<DatanodeID, IOException>
- createCountdownOomAction(
- String currentTest, int i, int count) {
- return new ConstraintSatisfactionAction<DatanodeID, IOException>(
- new OomAction(currentTest, i), new CountdownConstraint(count));
- }
-
- /**
- * Create a DoosAction with a CountdownConstraint
- * so that it throws DiskOutOfSpaceException if the count is zero.
- */
- public static ConstraintSatisfactionAction<DatanodeID, IOException>
- createCountdownDoosAction(
- String currentTest, int i, int count) {
- return new ConstraintSatisfactionAction<DatanodeID, IOException>(
- new DoosAction(currentTest, i), new CountdownConstraint(count));
- }
-
- /**
- * Create a SleepAction with a CountdownConstraint
- * for datanode i in the pipeline.
- * When the count is zero,
- * sleep some period of time so that it slows down the datanode
- * or sleep forever so the that datanode becomes not responding.
- */
- public static ConstraintSatisfactionAction<DatanodeID, IOException> createCountdownSleepAction(
- String currentTest, int i, long minDuration, long maxDuration, int count) {
- return new ConstraintSatisfactionAction<DatanodeID, IOException>(
- new SleepAction(currentTest, i, minDuration, maxDuration),
- new CountdownConstraint(count));
- }
-
- /**
- * Same as
- * createCountdownSleepAction(currentTest, i, duration, duration+1, count).
- */
- public static ConstraintSatisfactionAction<DatanodeID, IOException> createCountdownSleepAction(
- String currentTest, int i, long duration, int count) {
- return createCountdownSleepAction(currentTest, i, duration, duration+1,
- count);
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/hadoop/blob/c91bd3aa/hadoop-hdfs-project/hadoop-hdfs/src/test/aop/org/apache/hadoop/fi/FiConfig.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/aop/org/apache/hadoop/fi/FiConfig.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/aop/org/apache/hadoop/fi/FiConfig.java
deleted file mode 100644
index b1f5ff9..0000000
--- a/hadoop-hdfs-project/hadoop-hdfs/src/test/aop/org/apache/hadoop/fi/FiConfig.java
+++ /dev/null
@@ -1,55 +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.fi;
-
-import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.hdfs.HdfsConfiguration;
-
-/**
- * This class wraps the logic around fault injection configuration file
- * Default file is expected to be found in src/test/fi-site.xml
- * This default file should be copied by JUnit Ant's tasks to
- * build/test/extraconf folder before tests are ran
- * An alternative location can be set through
- * -Dfi.config=<file_name>
- */
-public class FiConfig {
- private static final String CONFIG_PARAMETER = ProbabilityModel.FPROB_NAME + "config";
- private static final String DEFAULT_CONFIG = "fi-site.xml";
- private static Configuration conf;
- static {
- init();
- }
-
- protected static void init () {
- if (conf == null) {
- conf = new HdfsConfiguration(false);
- String configName = System.getProperty(CONFIG_PARAMETER, DEFAULT_CONFIG);
- conf.addResource(configName);
- }
- }
-
- /**
- * Method provides access to local Configuration
- *
- * @return Configuration initialized with fault injection's parameters
- */
- public static Configuration getConfig() {
- return conf;
- }
-}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/c91bd3aa/hadoop-hdfs-project/hadoop-hdfs/src/test/aop/org/apache/hadoop/fi/FiHFlushTestUtil.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/aop/org/apache/hadoop/fi/FiHFlushTestUtil.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/aop/org/apache/hadoop/fi/FiHFlushTestUtil.java
deleted file mode 100644
index 0df95ab..0000000
--- a/hadoop-hdfs-project/hadoop-hdfs/src/test/aop/org/apache/hadoop/fi/FiHFlushTestUtil.java
+++ /dev/null
@@ -1,66 +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.fi;
-
-import java.io.IOException;
-
-import org.apache.hadoop.fi.FiTestUtil.ActionContainer;
-import org.apache.hadoop.hdfs.protocol.DatanodeID;
-import org.apache.hadoop.util.DiskChecker.DiskErrorException;
-
-/** Helper methods and actions for hflush() fault injection tests */
-public class FiHFlushTestUtil extends DataTransferTestUtil {
-
- /** {@inheritDoc} */
- public static PipelineTest initTest() {
- return thepipelinetest = new HFlushTest();
- }
-
- /** Disk error action for fault injection tests */
- public static class DerrAction extends DataTransferTestUtil.DataNodeAction {
- /**
- * @param currentTest The name of the test
- * @param index The index of the datanode
- */
- public DerrAction(String currentTest, int index) {
- super(currentTest, index);
- }
-
- /** {@inheritDoc} */
- public void run(DatanodeID id) throws IOException {
- final Pipeline p = getPipelineTest().getPipelineForDatanode(id);
- if (p == null) {
- return;
- }
- if (p.contains(index, id)) {
- final String s = super.toString(id);
- FiTestUtil.LOG.info(s);
- throw new DiskErrorException(s);
- }
- }
- }
-
- /** Class adds new type of action */
- public static class HFlushTest extends DataTransferTest {
- public final ActionContainer<DatanodeID, IOException> fiCallHFlush =
- new ActionContainer<DatanodeID, IOException>();
- public final ActionContainer<Integer, RuntimeException> fiErrorOnCallHFlush =
- new ActionContainer<Integer, RuntimeException>();
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/hadoop/blob/c91bd3aa/hadoop-hdfs-project/hadoop-hdfs/src/test/aop/org/apache/hadoop/fi/FiTestUtil.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/aop/org/apache/hadoop/fi/FiTestUtil.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/aop/org/apache/hadoop/fi/FiTestUtil.java
deleted file mode 100644
index 396f5fe..0000000
--- a/hadoop-hdfs-project/hadoop-hdfs/src/test/aop/org/apache/hadoop/fi/FiTestUtil.java
+++ /dev/null
@@ -1,209 +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.fi;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Random;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/** Test Utilities */
-public class FiTestUtil {
- /** Logging */
- public static final Log LOG = LogFactory.getLog(FiTestUtil.class);
-
- /** Random source */
- public static final ThreadLocal<Random> RANDOM = new ThreadLocal<Random>() {
- protected Random initialValue() {
- final Random r = new Random();
- final long seed = r.nextLong();
- LOG.info(Thread.currentThread() + ": seed=" + seed);
- r.setSeed(seed);
- return r;
- }
- };
-
- /**
- * Return a random integer uniformly distributed over the interval [min,max).
- */
- public static int nextRandomInt(final int min, final int max) {
- final int d = max - min;
- if (d <= 0) {
- throw new IllegalArgumentException("d <= 0, min=" + min + ", max=" + max);
- }
- return d == 1? min: min + RANDOM.get().nextInt(d);
- }
-
- /**
- * Return a random integer, with type long,
- * uniformly distributed over the interval [min,max).
- * Assume max - min <= Integer.MAX_VALUE.
- */
- public static long nextRandomLong(final long min, final long max) {
- final long d = max - min;
- if (d <= 0 || d > Integer.MAX_VALUE) {
- throw new IllegalArgumentException(
- "d <= 0 || d > Integer.MAX_VALUE, min=" + min + ", max=" + max);
- }
- return d == 1? min: min + RANDOM.get().nextInt((int)d);
- }
-
- /** Return the method name of the callee. */
- public static String getMethodName() {
- final StackTraceElement[] s = Thread.currentThread().getStackTrace();
- return s[s.length > 2? 2: s.length - 1].getMethodName();
- }
-
- /**
- * Sleep.
- * @return true if sleep exits normally; false if InterruptedException.
- */
- public static boolean sleep(long ms) {
- LOG.info("Sleep " + ms + " ms");
- try {
- Thread.sleep(ms);
- } catch (InterruptedException e) {
- LOG.info("Sleep is interrupted", e);
- return false;
- }
- return true;
- }
-
- /**
- * Sleep a random number of milliseconds over the interval [min, max).
- * If there is an InterruptedException, re-throw it as a RuntimeException.
- */
- public static void sleep(final long min, final long max) {
- final long n = nextRandomLong(min, max);
- LOG.info(Thread.currentThread().getName() + " sleeps for " + n +"ms");
- if (n > 0) {
- sleep(n);
- }
- }
-
- /** Action interface */
- public static interface Action<T, E extends Exception> {
- /** Run the action with the parameter. */
- public void run(T parameter) throws E;
- }
-
- /** An ActionContainer contains at most one action. */
- public static class ActionContainer<T, E extends Exception> {
- private List<Action<T, E>> actionList = new ArrayList<Action<T, E>>();
- /** Create an empty container. */
- public ActionContainer() {}
-
- /** Set action. */
- public void set(Action<T, E> a) {actionList.add(a);}
-
- /** Run the action if it exists. */
- public void run(T obj) throws E {
- for (Action<T, E> action : actionList) {
- action.run(obj);
- }
- }
- }
-
- /** Constraint interface */
- public static interface Constraint {
- /** Is this constraint satisfied? */
- public boolean isSatisfied();
- }
-
- /** Counting down, the constraint is satisfied if the count is one. */
- public static class CountdownConstraint implements Constraint {
- private int count;
-
- /** Initialize the count. */
- public CountdownConstraint(int count) {
- if (count < 1) {
- throw new IllegalArgumentException(count + " = count < 1");
- }
- this.count = count;
- }
-
- /** Counting down, the constraint is satisfied if the count is zero. */
- public boolean isSatisfied() {
- if (count > 1) {
- count--;
- return false;
- }
- return true;
- }
- }
-
- /** An action is fired if all the constraints are satisfied. */
- public static class ConstraintSatisfactionAction<T, E extends Exception>
- implements Action<T, E> {
- private final Action<T, E> action;
- private final Constraint[] constraints;
-
- /** Constructor */
- public ConstraintSatisfactionAction(
- Action<T, E> action, Constraint... constraints) {
- this.action = action;
- this.constraints = constraints;
- }
-
- /**
- * Fire the action if all the constraints are satisfied.
- * Short-circuit-and is used.
- */
- @Override
- public final void run(T parameter) throws E {
- for(Constraint c : constraints) {
- if (!c.isSatisfied()) {
- return;
- }
- }
-
- //all constraints are satisfied, fire the action
- action.run(parameter);
- }
- }
-
- /** A MarkerConstraint is satisfied if it is marked. */
- public static class MarkerConstraint implements Constraint {
- private final String name;
- private boolean marked = false;
-
- /** Construct an object. */
- public MarkerConstraint(String name) {
- this.name = name;
- }
-
- /** Set marker to be marked. */
- public void mark() {
- marked = true;
- LOG.info("Marking this " + this);
- }
-
- /** Is the marker marked? */
- @Override
- public boolean isSatisfied() {
- return marked;
- }
-
- /** {@inheritDoc} */
- public String toString() {
- return getClass().getSimpleName() + "[" + name + ": " + marked + "]";
- }
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/hadoop/blob/c91bd3aa/hadoop-hdfs-project/hadoop-hdfs/src/test/aop/org/apache/hadoop/fi/Pipeline.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/aop/org/apache/hadoop/fi/Pipeline.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/aop/org/apache/hadoop/fi/Pipeline.java
deleted file mode 100644
index 877b100..0000000
--- a/hadoop-hdfs-project/hadoop-hdfs/src/test/aop/org/apache/hadoop/fi/Pipeline.java
+++ /dev/null
@@ -1,50 +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.fi;
-
-import org.apache.hadoop.hdfs.protocol.DatanodeInfo;
-import org.apache.hadoop.hdfs.protocol.LocatedBlock;
-import org.apache.hadoop.hdfs.protocol.DatanodeID;
-
-import java.util.List;
-import java.util.ArrayList;
-
-public class Pipeline {
- private final List<String> datanodes = new ArrayList<String>();
-
- Pipeline(LocatedBlock lb) {
- for(DatanodeInfo d : lb.getLocations()) {
- datanodes.add(d.getName());
- }
- }
-
- /** Does the pipeline contains d? */
- public boolean contains(DatanodeID d) {
- return datanodes.contains(d.getName());
- }
-
- /** Does the pipeline contains d at the n th position? */
- public boolean contains(int n, DatanodeID d) {
- return d.getName().equals(datanodes.get(n));
- }
-
- @Override
- public String toString() {
- return getClass().getSimpleName() + datanodes;
- }
-}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/c91bd3aa/hadoop-hdfs-project/hadoop-hdfs/src/test/aop/org/apache/hadoop/fi/PipelineTest.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/aop/org/apache/hadoop/fi/PipelineTest.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/aop/org/apache/hadoop/fi/PipelineTest.java
deleted file mode 100644
index 838d5b9..0000000
--- a/hadoop-hdfs-project/hadoop-hdfs/src/test/aop/org/apache/hadoop/fi/PipelineTest.java
+++ /dev/null
@@ -1,27 +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.fi;
-
-import org.apache.hadoop.hdfs.protocol.DatanodeID;
-import org.apache.hadoop.hdfs.protocol.LocatedBlock;
-
-/** A pipeline contains a list of datanodes. */
-public interface PipelineTest {
- public Pipeline initPipeline(LocatedBlock lb);
- public Pipeline getPipelineForDatanode(DatanodeID id);
-}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/c91bd3aa/hadoop-hdfs-project/hadoop-hdfs/src/test/aop/org/apache/hadoop/fi/ProbabilityModel.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/aop/org/apache/hadoop/fi/ProbabilityModel.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/aop/org/apache/hadoop/fi/ProbabilityModel.java
deleted file mode 100644
index 78401b3..0000000
--- a/hadoop-hdfs-project/hadoop-hdfs/src/test/aop/org/apache/hadoop/fi/ProbabilityModel.java
+++ /dev/null
@@ -1,107 +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.fi;
-
-import java.util.Random;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.hadoop.conf.Configuration;
-
-/**
- * This class is responsible for the decision of when a fault
- * has to be triggered within a class of Hadoop
- *
- * Default probability of injection is set to 0%. To change it
- * one can set the sys. prop. -Dfi.*=<new probability level>
- * Another way to do so is to set this level through FI config file,
- * located under src/test/fi-site.conf
- *
- * To change the level one has to specify the following sys,prop.:
- * -Dfi.<name of fault location>=<probability level> in the runtime
- * Probability level is specified by a float between 0.0 and 1.0
- *
- * <name of fault location> might be represented by a short classname
- * or otherwise. This decision is left up to the discretion of aspects
- * developer, but has to be consistent through the code
- */
-public class ProbabilityModel {
- private static Random generator = new Random();
- private static final Log LOG = LogFactory.getLog(ProbabilityModel.class);
-
- static final String FPROB_NAME = "fi.";
- private static final String ALL_PROBABILITIES = FPROB_NAME + "*";
- private static final float DEFAULT_PROB = 0.00f; //Default probability is 0%
- private static final float MAX_PROB = 1.00f; // Max probability is 100%
-
- private static Configuration conf = FiConfig.getConfig();
-
- static {
- // Set new default probability if specified through a system.property
- // If neither is specified set default probability to DEFAULT_PROB
- conf.set(ALL_PROBABILITIES,
- System.getProperty(ALL_PROBABILITIES,
- conf.get(ALL_PROBABILITIES, Float.toString(DEFAULT_PROB))));
-
- LOG.info(ALL_PROBABILITIES + "=" + conf.get(ALL_PROBABILITIES));
- }
-
- /**
- * Simplistic method to check if we have reached the point of injection
- * @param klassName is the name of the probability level to check.
- * If a configuration has been set for "fi.myClass" then you can check if the
- * inject criteria has been reached by calling this method with "myClass"
- * string as its parameter
- * @return true if the probability threshold has been reached; false otherwise
- */
- public static boolean injectCriteria(String klassName) {
- boolean trigger = false;
- // TODO fix this: make it more sophisticated!!!
- if (generator.nextFloat() < getProbability(klassName)) {
- trigger = true;
- }
- return trigger;
- }
-
- /**
- * This primitive checks for arbitrary set of desired probability. If the
- * level hasn't been set method will return default setting.
- * The probability expected to be set as an float between 0.0 and 1.0
- * @param klass is the name of the resource
- * @return float representation of configured probability level of
- * the requested resource or default value if hasn't been set
- */
- protected static float getProbability(final String klass) {
- String newProbName = FPROB_NAME + klass;
-
- String newValue = System.getProperty(newProbName, conf.get(ALL_PROBABILITIES));
- if (newValue != null && !newValue.equals(conf.get(newProbName)))
- conf.set(newProbName, newValue);
-
- float ret = conf.getFloat(newProbName,
- conf.getFloat(ALL_PROBABILITIES, DEFAULT_PROB));
- if(LOG.isDebugEnabled()) {
- LOG.debug("Request for " + newProbName + " returns=" + ret);
- }
- // Make sure that probability level is valid.
- if (ret < DEFAULT_PROB || ret > MAX_PROB)
- ret = conf.getFloat(ALL_PROBABILITIES, DEFAULT_PROB);
-
- return ret;
- }
-}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/c91bd3aa/hadoop-hdfs-project/hadoop-hdfs/src/test/aop/org/apache/hadoop/fs/TestFiListPath.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/aop/org/apache/hadoop/fs/TestFiListPath.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/aop/org/apache/hadoop/fs/TestFiListPath.java
deleted file mode 100644
index e20560e..0000000
--- a/hadoop-hdfs-project/hadoop-hdfs/src/test/aop/org/apache/hadoop/fs/TestFiListPath.java
+++ /dev/null
@@ -1,105 +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.fs;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.fail;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.util.Iterator;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.hdfs.DFSConfigKeys;
-import org.apache.hadoop.hdfs.HdfsConfiguration;
-import org.apache.hadoop.hdfs.MiniDFSCluster;
-import org.apache.hadoop.util.StringUtils;
-import org.junit.After;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-
-/**
- * A large directory listing may have to go through multiple RPCs.
- * The directory to be listed may be removed before all contents are listed.
- *
- * This test uses AspectJ to simulate the scenario.
- */
-public class TestFiListPath {
- private static final Log LOG = LogFactory.getLog(TestFiListPath.class);
- private static final int LIST_LIMIT = 1;
-
- private static MiniDFSCluster cluster = null;
- private static FileSystem fs;
- private static Path TEST_PATH = new Path("/tmp");
-
- @BeforeClass
- public static void setup() throws IOException {
- Configuration conf = new HdfsConfiguration();
- conf.setInt(DFSConfigKeys.DFS_LIST_LIMIT, LIST_LIMIT);
- cluster = new MiniDFSCluster.Builder(conf).build();
- cluster.waitClusterUp();
- fs = cluster.getFileSystem();
- }
-
- @AfterClass
- public static void teardown() throws IOException {
- if (cluster != null) {
- cluster.shutdown();
- }
- }
-
- @Before
- public void prepare() throws IOException {
- fs.mkdirs(TEST_PATH);
- for (int i=0; i<LIST_LIMIT+1; i++) {
- fs.mkdirs(new Path(TEST_PATH, "dir"+i));
- }
- }
-
- @After
- public void cleanup() throws IOException {
- fs.delete(TEST_PATH, true);
- }
-
- /** Remove the target directory after the getListing RPC */
- @Test
- public void testTargetDeletionForListStatus() throws Exception {
- LOG.info("Test Target Delete For listStatus");
- try {
- fs.listStatus(TEST_PATH);
- fail("Test should fail with FileNotFoundException");
- } catch (FileNotFoundException e) {
- assertEquals("File " + TEST_PATH + " does not exist.", e.getMessage());
- LOG.info(StringUtils.stringifyException(e));
- }
- }
-
- /** Remove the target directory after the getListing RPC */
- @Test
- public void testTargetDeletionForListLocatedStatus() throws Exception {
- LOG.info("Test Target Delete For listLocatedStatus");
- RemoteIterator<LocatedFileStatus> itor = fs.listLocatedStatus(TEST_PATH);
- itor.next();
- assertFalse (itor.hasNext());
- }
-}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/c91bd3aa/hadoop-hdfs-project/hadoop-hdfs/src/test/aop/org/apache/hadoop/fs/TestFiRename.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/aop/org/apache/hadoop/fs/TestFiRename.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/aop/org/apache/hadoop/fs/TestFiRename.java
deleted file mode 100644
index 5ad3930..0000000
--- a/hadoop-hdfs-project/hadoop-hdfs/src/test/aop/org/apache/hadoop/fs/TestFiRename.java
+++ /dev/null
@@ -1,272 +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.fs;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.EnumSet;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.fs.Options.Rename;
-import org.apache.hadoop.hdfs.DFSConfigKeys;
-import org.apache.hadoop.hdfs.MiniDFSCluster;
-import org.apache.hadoop.hdfs.server.namenode.FSNamesystem;
-import org.apache.hadoop.test.PathUtils;
-import org.junit.After;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.apache.hadoop.fs.FileContextTestHelper.*;
-
-/**
- * Rename names src to dst. Rename is done using following steps:
- * <ul>
- * <li>Checks are made to ensure src exists and appropriate flags are being
- * passed to overwrite existing destination.
- * <li>src is removed.
- * <li>dst if it exists is removed.
- * <li>src is renamed and added to directory tree as dst.
- * </ul>
- *
- * During any of the above steps, the state of src and dst is reverted back to
- * what it was prior to rename. This test ensures that the state is reverted
- * back.
- *
- * This test uses AspectJ to simulate failures.
- */
-public class TestFiRename {
- private static final Log LOG = LogFactory.getLog(TestFiRename.class);
- private static String removeChild = "";
- private static String addChild = "";
- private static byte[] data = { 0 };
-
- private static String TEST_ROOT_DIR = PathUtils.getTestDirName(TestFiRename.class);
-
- private static Configuration CONF = new Configuration();
- static {
- CONF.setInt("io.bytes.per.checksum", 1);
- }
-
- private MiniDFSCluster cluster = null;
- private FileContext fc = null;
-
- @Before
- public void setup() throws IOException {
- restartCluster(true);
- }
-
- @After
- public void teardown() throws IOException {
- if (fc != null) {
- fc.delete(getTestRootPath(), true);
- }
- if (cluster != null) {
- cluster.shutdown();
- }
- }
-
- private void restartCluster(boolean format) throws IOException {
- if (cluster != null) {
- cluster.shutdown();
- cluster = null;
- }
- cluster = new MiniDFSCluster.Builder(CONF).format(format).build();
- cluster.waitClusterUp();
- fc = FileContext.getFileContext(cluster.getURI(0), CONF);
- }
-
- /**
- * Returns true to indicate an exception should be thrown to simulate failure
- * during removal of a node from directory tree.
- */
- public static boolean throwExceptionOnRemove(String child) {
- boolean status = removeChild.endsWith(child);
- if (status) {
- removeChild = "";
- }
- return status;
- }
-
- /**
- * Returns true to indicate an exception should be thrown to simulate failure
- * during addition of a node to directory tree.
- */
- public static boolean throwExceptionOnAdd(String child) {
- boolean status = addChild.endsWith(child);
- if (status) {
- addChild = "";
- }
- return status;
- }
-
- /** Set child name on removal of which failure should be simulated */
- public static void exceptionOnRemove(String child) {
- removeChild = child;
- addChild = "";
- }
-
- /** Set child name on addition of which failure should be simulated */
- public static void exceptionOnAdd(String child) {
- removeChild = "";
- addChild = child;
- }
-
- private Path getTestRootPath() {
- return fc.makeQualified(new Path(TEST_ROOT_DIR));
- }
-
- private Path getTestPath(String pathString) {
- return fc.makeQualified(new Path(TEST_ROOT_DIR, pathString));
- }
-
- private void createFile(Path path) throws IOException {
- FSDataOutputStream out = fc.create(path, EnumSet.of(CreateFlag.CREATE),
- Options.CreateOpts.createParent());
- out.write(data, 0, data.length);
- out.close();
- }
-
- /** Rename test when src exists and dst does not */
- @Test
- public void testFailureNonExistentDst() throws Exception {
- final Path src = getTestPath("testFailureNonExistenSrc/dir/src");
- final Path dst = getTestPath("testFailureNonExistenSrc/newdir/dst");
- createFile(src);
-
- // During rename, while removing src, an exception is thrown
- TestFiRename.exceptionOnRemove(src.toString());
- rename(src, dst, true, true, false, Rename.NONE);
-
- // During rename, while adding dst an exception is thrown
- TestFiRename.exceptionOnAdd(dst.toString());
- rename(src, dst, true, true, false, Rename.NONE);
- }
-
- /** Rename test when src and dst exist */
- @Test
- public void testFailuresExistingDst() throws Exception {
- final Path src = getTestPath("testFailuresExistingDst/dir/src");
- final Path dst = getTestPath("testFailuresExistingDst/newdir/dst");
- createFile(src);
- createFile(dst);
-
- // During rename, while removing src, an exception is thrown
- TestFiRename.exceptionOnRemove(src.toString());
- rename(src, dst, true, true, true, Rename.OVERWRITE);
-
- // During rename, while removing dst, an exception is thrown
- TestFiRename.exceptionOnRemove(dst.toString());
- rename(src, dst, true, true, true, Rename.OVERWRITE);
-
- // During rename, while adding dst an exception is thrown
- TestFiRename.exceptionOnAdd(dst.toString());
- rename(src, dst, true, true, true, Rename.OVERWRITE);
- }
-
- /** Rename test where both src and dst are files */
- @Test
- public void testDeletionOfDstFile() throws Exception {
- Path src = getTestPath("testDeletionOfDstFile/dir/src");
- Path dst = getTestPath("testDeletionOfDstFile/newdir/dst");
- createFile(src);
- createFile(dst);
-
- final FSNamesystem namesystem = cluster.getNamesystem();
- final long blocks = namesystem.getBlocksTotal();
- final long fileCount = namesystem.getFilesTotal();
- rename(src, dst, false, false, true, Rename.OVERWRITE);
-
- // After successful rename the blocks corresponing dst are deleted
- Assert.assertEquals(blocks - 1, namesystem.getBlocksTotal());
-
- // After successful rename dst file is deleted
- Assert.assertEquals(fileCount - 1, namesystem.getFilesTotal());
-
- // Restart the cluster to ensure new rename operation
- // recorded in editlog is processed right
- restartCluster(false);
- int count = 0;
- boolean exception = true;
- src = getTestPath("testDeletionOfDstFile/dir/src");
- dst = getTestPath("testDeletionOfDstFile/newdir/dst");
- while (exception && count < 5) {
- try {
- exists(fc, src);
- exception = false;
- } catch (Exception e) {
- LOG.warn("Exception " + " count " + count + " " + e.getMessage());
- Thread.sleep(1000);
- count++;
- }
- }
- Assert.assertFalse(exists(fc, src));
- Assert.assertTrue(exists(fc, dst));
- }
-
- /** Rename test where both src and dst are directories */
- @Test
- public void testDeletionOfDstDirectory() throws Exception {
- Path src = getTestPath("testDeletionOfDstDirectory/dir/src");
- Path dst = getTestPath("testDeletionOfDstDirectory/newdir/dst");
- fc.mkdir(src, FileContext.DEFAULT_PERM, true);
- fc.mkdir(dst, FileContext.DEFAULT_PERM, true);
-
- FSNamesystem namesystem = cluster.getNamesystem();
- long fileCount = namesystem.getFilesTotal();
- rename(src, dst, false, false, true, Rename.OVERWRITE);
-
- // After successful rename dst directory is deleted
- Assert.assertEquals(fileCount - 1, namesystem.getFilesTotal());
-
- // Restart the cluster to ensure new rename operation
- // recorded in editlog is processed right
- restartCluster(false);
- src = getTestPath("testDeletionOfDstDirectory/dir/src");
- dst = getTestPath("testDeletionOfDstDirectory/newdir/dst");
- int count = 0;
- boolean exception = true;
- while (exception && count < 5) {
- try {
- exists(fc, src);
- exception = false;
- } catch (Exception e) {
- LOG.warn("Exception " + " count " + count + " " + e.getMessage());
- Thread.sleep(1000);
- count++;
- }
- }
- Assert.assertFalse(exists(fc, src));
- Assert.assertTrue(exists(fc, dst));
- }
-
- private void rename(Path src, Path dst, boolean exception, boolean srcExists,
- boolean dstExists, Rename... options) throws IOException {
- try {
- fc.rename(src, dst, options);
- Assert.assertFalse("Expected exception is not thrown", exception);
- } catch (Exception e) {
- LOG.warn("Exception ", e);
- Assert.assertTrue(exception);
- }
- Assert.assertEquals(srcExists, exists(fc, src));
- Assert.assertEquals(dstExists, exists(fc, dst));
- }
-}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/c91bd3aa/hadoop-hdfs-project/hadoop-hdfs/src/test/aop/org/apache/hadoop/hdfs/DFSClientAspects.aj
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/aop/org/apache/hadoop/hdfs/DFSClientAspects.aj b/hadoop-hdfs-project/hadoop-hdfs/src/test/aop/org/apache/hadoop/hdfs/DFSClientAspects.aj
deleted file mode 100644
index 3a7e615..0000000
--- a/hadoop-hdfs-project/hadoop-hdfs/src/test/aop/org/apache/hadoop/hdfs/DFSClientAspects.aj
+++ /dev/null
@@ -1,103 +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.hdfs;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.hadoop.fi.DataTransferTestUtil;
-import org.apache.hadoop.fi.PipelineTest;
-import org.apache.hadoop.fi.DataTransferTestUtil.DataTransferTest;
-import org.apache.hadoop.hdfs.DFSOutputStream;
-import org.apache.hadoop.hdfs.DFSOutputStream.DataStreamer;
-import org.apache.hadoop.hdfs.PipelinesTestUtil.PipelinesTest;
-import org.junit.Assert;
-
-/** Aspects for DFSClient */
-privileged public aspect DFSClientAspects {
- public static final Log LOG = LogFactory.getLog(DFSClientAspects.class);
-
- pointcut callCreateBlockOutputStream(DataStreamer datastreamer):
- call(* createBlockOutputStream(..)) && target(datastreamer);
-
- before(DataStreamer datastreamer) : callCreateBlockOutputStream(datastreamer) {
- Assert.assertFalse(datastreamer.hasError);
- Assert.assertEquals(-1, datastreamer.errorIndex);
- }
-
- pointcut pipelineInitNonAppend(DataStreamer datastreamer):
- callCreateBlockOutputStream(datastreamer)
- && cflow(execution(* nextBlockOutputStream(..)))
- && within(DataStreamer);
-
- after(DataStreamer datastreamer) returning : pipelineInitNonAppend(datastreamer) {
- LOG.info("FI: after pipelineInitNonAppend: hasError="
- + datastreamer.hasError + " errorIndex=" + datastreamer.errorIndex);
- if (datastreamer.hasError) {
- DataTransferTest dtTest = DataTransferTestUtil.getDataTransferTest();
- if (dtTest != null)
- dtTest.fiPipelineInitErrorNonAppend.run(datastreamer.errorIndex);
- }
- }
-
- pointcut pipelineInitAppend(DataStreamer datastreamer):
- callCreateBlockOutputStream(datastreamer)
- && cflow(execution(* initAppend(..)))
- && within(DataStreamer);
-
- after(DataStreamer datastreamer) returning : pipelineInitAppend(datastreamer) {
- LOG.info("FI: after pipelineInitAppend: hasError=" + datastreamer.hasError
- + " errorIndex=" + datastreamer.errorIndex);
- }
-
- pointcut pipelineErrorAfterInit(DataStreamer datastreamer):
- call(* processDatanodeError())
- && within (DFSOutputStream.DataStreamer)
- && target(datastreamer);
-
- before(DataStreamer datastreamer) : pipelineErrorAfterInit(datastreamer) {
- LOG.info("FI: before pipelineErrorAfterInit: errorIndex="
- + datastreamer.errorIndex);
- DataTransferTest dtTest = DataTransferTestUtil.getDataTransferTest();
- if (dtTest != null )
- dtTest.fiPipelineErrorAfterInit.run(datastreamer.errorIndex);
- }
-
- pointcut pipelineClose(DFSOutputStream out):
- call(void flushInternal())
- && withincode (void DFSOutputStream.close())
- && this(out);
-
- before(DFSOutputStream out) : pipelineClose(out) {
- LOG.info("FI: before pipelineClose:");
- }
-
- pointcut checkAckQueue(DFSOutputStream stream):
- call (void DFSOutputStream.waitAndQueueCurrentPacket())
- && withincode (void DFSOutputStream.writeChunk(..))
- && this(stream);
-
- after(DFSOutputStream stream) : checkAckQueue (stream) {
- DFSOutputStream.Packet cp = stream.currentPacket;
- PipelineTest pTest = DataTransferTestUtil.getDataTransferTest();
- if (pTest != null && pTest instanceof PipelinesTest) {
- LOG.debug("FI: Recording packet # " + cp.seqno
- + " where queuing has occurred");
- ((PipelinesTest) pTest).setVerified(cp.seqno);
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/c91bd3aa/hadoop-hdfs-project/hadoop-hdfs/src/test/aop/org/apache/hadoop/hdfs/HFlushAspects.aj
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/aop/org/apache/hadoop/hdfs/HFlushAspects.aj b/hadoop-hdfs-project/hadoop-hdfs/src/test/aop/org/apache/hadoop/hdfs/HFlushAspects.aj
deleted file mode 100644
index ab1785d..0000000
--- a/hadoop-hdfs-project/hadoop-hdfs/src/test/aop/org/apache/hadoop/hdfs/HFlushAspects.aj
+++ /dev/null
@@ -1,64 +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.hdfs;
-
-import java.io.IOException;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.hadoop.fi.DataTransferTestUtil;
-import org.apache.hadoop.fi.PipelineTest;
-import org.apache.hadoop.fi.FiHFlushTestUtil.HFlushTest;
-import org.apache.hadoop.hdfs.DFSOutputStream;
-import org.apache.hadoop.hdfs.protocol.DatanodeInfo;
-
-public aspect HFlushAspects {
- public static final Log LOG = LogFactory.getLog(HFlushAspects.class);
-
- pointcut hflushCall (DFSOutputStream outstream) :
- execution(void DFSOutputStream.hflush(..))
- && target (outstream);
-
- /** This advise is suppose to initiate a call to the action (fiCallHFlush)
- * which will throw DiskErrorException if a pipeline has been created
- * and datanodes used are belong to that very pipeline
- */
- after (DFSOutputStream streamer) throws IOException : hflushCall(streamer) {
- LOG.info("FI: hflush for any datanode");
- LOG.info("FI: hflush " + thisJoinPoint.getThis());
- DatanodeInfo[] nodes = streamer.getPipeline();
- if (nodes == null) {
- LOG.info("No pipeline is built");
- return;
- }
- PipelineTest pt = DataTransferTestUtil.getPipelineTest();
- if (pt == null) {
- LOG.info("No test has been initialized");
- return;
- }
- if (pt instanceof HFlushTest)
- for (int i=0; i<nodes.length; i++) {
- try {
- ((HFlushTest)pt).fiCallHFlush.run(nodes[i]);
- } catch (IOException ioe) {
- ((HFlushTest)pt).fiErrorOnCallHFlush.run(i);
- }
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/c91bd3aa/hadoop-hdfs-project/hadoop-hdfs/src/test/aop/org/apache/hadoop/hdfs/PipelinesTestUtil.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/aop/org/apache/hadoop/hdfs/PipelinesTestUtil.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/aop/org/apache/hadoop/hdfs/PipelinesTestUtil.java
deleted file mode 100644
index 888fadf..0000000
--- a/hadoop-hdfs-project/hadoop-hdfs/src/test/aop/org/apache/hadoop/hdfs/PipelinesTestUtil.java
+++ /dev/null
@@ -1,153 +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.hdfs;
-
-import static org.junit.Assert.assertTrue;
-
-import java.io.IOException;
-import java.util.LinkedList;
-
-import org.apache.hadoop.fi.DataTransferTestUtil;
-import org.apache.hadoop.fi.FiTestUtil;
-import org.apache.hadoop.fi.PipelineTest;
-import org.apache.hadoop.fi.FiTestUtil.ActionContainer;
-import org.apache.hadoop.hdfs.protocol.DatanodeID;
-
-public class PipelinesTestUtil extends DataTransferTestUtil {
- /**
- * {@inheritDoc}
- */
- public static PipelineTest initTest() {
- return thepipelinetest = new PipelinesTest();
- }
-
- /**
- * Storing acknowleged bytes num. action for fault injection tests
- */
- public static class ReceivedCheckAction implements FiTestUtil.Action<NodeBytes, IOException> {
- String name;
- LinkedList<NodeBytes> rcv = ((PipelinesTest) getPipelineTest()).received;
- LinkedList<NodeBytes> ack = ((PipelinesTest) getPipelineTest()).acked;
-
- /**
- * @param name of the test
- */
- public ReceivedCheckAction(String name) {
- this.name = name;
- }
-
- @Override
- public void run(NodeBytes nb) throws IOException {
- synchronized (rcv) {
- rcv.add(nb);
- for (NodeBytes n : rcv) {
- long counterPartsBytes = -1;
- NodeBytes counterPart = null;
- if (ack.size() > rcv.indexOf(n)) {
- counterPart = ack.get(rcv.indexOf(n));
- counterPartsBytes = counterPart.bytes;
- }
- assertTrue("FI: Wrong receiving length",
- counterPartsBytes <= n.bytes);
- if(FiTestUtil.LOG.isDebugEnabled()) {
- FiTestUtil.LOG.debug("FI: before compare of Recv bytes. Expected "
- + n.bytes + ", got " + counterPartsBytes);
- }
- }
- }
- }
- }
-
- /**
- * Storing acknowleged bytes num. action for fault injection tests
- */
- public static class AckedCheckAction implements FiTestUtil.Action<NodeBytes, IOException> {
- String name;
- LinkedList<NodeBytes> rcv = ((PipelinesTest) getPipelineTest()).received;
- LinkedList<NodeBytes> ack = ((PipelinesTest) getPipelineTest()).acked;
-
- /**
- * @param name of the test
- */
- public AckedCheckAction(String name) {
- this.name = name;
- }
-
- /**
- * {@inheritDoc}
- */
- public void run(NodeBytes nb) throws IOException {
- synchronized (ack) {
- ack.add(nb);
- for (NodeBytes n : ack) {
- NodeBytes counterPart = null;
- long counterPartsBytes = -1;
- if (rcv.size() > ack.indexOf(n)) {
- counterPart = rcv.get(ack.indexOf(n));
- counterPartsBytes = counterPart.bytes;
- }
- assertTrue("FI: Wrong acknowledged length",
- counterPartsBytes == n.bytes);
- if(FiTestUtil.LOG.isDebugEnabled()) {
- FiTestUtil.LOG.debug(
- "FI: before compare of Acked bytes. Expected " +
- n.bytes + ", got " + counterPartsBytes);
- }
- }
- }
- }
- }
-
- /**
- * Class adds new types of action
- */
- public static class PipelinesTest extends DataTransferTest {
- LinkedList<NodeBytes> received = new LinkedList<NodeBytes>();
- LinkedList<NodeBytes> acked = new LinkedList<NodeBytes>();
-
- public final ActionContainer<NodeBytes, IOException> fiCallSetNumBytes =
- new ActionContainer<NodeBytes, IOException>();
- public final ActionContainer<NodeBytes, IOException> fiCallSetBytesAcked =
- new ActionContainer<NodeBytes, IOException>();
-
- private static boolean suspend = false;
- private static long lastQueuedPacket = -1;
-
- public void setSuspend(boolean flag) {
- suspend = flag;
- }
- public boolean getSuspend () {
- return suspend;
- }
- public void setVerified(long packetNum) {
- PipelinesTest.lastQueuedPacket = packetNum;
- }
- public long getLastQueued() {
- return lastQueuedPacket;
- }
- }
-
- public static class NodeBytes {
- DatanodeID id;
- long bytes;
- public NodeBytes(DatanodeID id, long bytes) {
- this.id = id;
- this.bytes = bytes;
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/hadoop/blob/c91bd3aa/hadoop-hdfs-project/hadoop-hdfs/src/test/aop/org/apache/hadoop/hdfs/TestFiHFlush.java
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/aop/org/apache/hadoop/hdfs/TestFiHFlush.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/aop/org/apache/hadoop/hdfs/TestFiHFlush.java
deleted file mode 100644
index 03b60e4..0000000
--- a/hadoop-hdfs-project/hadoop-hdfs/src/test/aop/org/apache/hadoop/hdfs/TestFiHFlush.java
+++ /dev/null
@@ -1,180 +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.hdfs;
-
-import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.fi.DataTransferTestUtil;
-import org.apache.hadoop.fi.FiHFlushTestUtil;
-import org.apache.hadoop.fi.FiHFlushTestUtil.DerrAction;
-import org.apache.hadoop.fi.FiHFlushTestUtil.HFlushTest;
-import org.apache.hadoop.fi.FiTestUtil;
-import static org.junit.Assert.assertTrue;
-import org.junit.Test;
-
-import java.io.IOException;
-
-/** Class provides basic fault injection tests according to the test plan
- of HDFS-265
- */
-public class TestFiHFlush {
-
- /** Methods initializes a test and sets required actions to be used later by
- * an injected advice
- * @param conf mini cluster configuration
- * @param methodName String representation of a test method invoking this
- * method
- * @param block_size needed size of file's block
- * @param a is an action to be set for the set
- * @throws IOException in case of any errors
- */
- private static void runDiskErrorTest (final Configuration conf,
- final String methodName, final int block_size, DerrAction a, int index,
- boolean trueVerification)
- throws IOException {
- FiTestUtil.LOG.info("Running " + methodName + " ...");
- final HFlushTest hft = (HFlushTest) FiHFlushTestUtil.initTest();
- hft.fiCallHFlush.set(a);
- hft.fiErrorOnCallHFlush.set(new DataTransferTestUtil.VerificationAction(methodName, index));
- TestHFlush.doTheJob(conf, methodName, block_size, (short)3);
- if (trueVerification)
- assertTrue("Some of expected conditions weren't detected", hft.isSuccess());
- }
-
- /** The tests calls
- * {@link #runDiskErrorTest(Configuration, String, int, DerrAction, int, boolean)}
- * to make a number of writes within a block boundaries.
- * Although hflush() is called the test shouldn't expect an IOException
- * in this case because the invocation is happening after write() call
- * is complete when pipeline doesn't exist anymore.
- * Thus, injected fault won't be triggered for 0th datanode
- */
- @Test
- public void hFlushFi01_a() throws IOException {
- final String methodName = FiTestUtil.getMethodName();
- runDiskErrorTest(new HdfsConfiguration(), methodName,
- AppendTestUtil.BLOCK_SIZE, new DerrAction(methodName, 0), 0, false);
- }
-
- /** The tests calls
- * {@link #runDiskErrorTest(Configuration, String, int, DerrAction, int, boolean)}
- * to make a number of writes across a block boundaries.
- * hflush() is called after each write() during a pipeline life time.
- * Thus, injected fault ought to be triggered for 0th datanode
- */
- @Test
- public void hFlushFi01_b() throws IOException {
- final String methodName = FiTestUtil.getMethodName();
- Configuration conf = new HdfsConfiguration();
- int customPerChecksumSize = 512;
- int customBlockSize = customPerChecksumSize * 3;
- conf.setInt(DFSConfigKeys.DFS_BYTES_PER_CHECKSUM_KEY, customPerChecksumSize);
- conf.setLong(DFSConfigKeys.DFS_BLOCK_SIZE_KEY, customBlockSize);
- runDiskErrorTest(conf, methodName,
- customBlockSize, new DerrAction(methodName, 0), 0, true);
- }
-
- /** Similar to {@link #hFlushFi01_b()} but writing happens
- * across block and checksum's boundaries
- */
- @Test
- public void hFlushFi01_c() throws Exception {
- final String methodName = FiTestUtil.getMethodName();
- Configuration conf = new HdfsConfiguration();
- int customPerChecksumSize = 400;
- int customBlockSize = customPerChecksumSize * 3;
- conf.setInt(DFSConfigKeys.DFS_BYTES_PER_CHECKSUM_KEY, customPerChecksumSize);
- conf.setLong(DFSConfigKeys.DFS_BLOCK_SIZE_KEY, customBlockSize);
- runDiskErrorTest(conf, methodName,
- customBlockSize, new DerrAction(methodName, 0), 0, true);
- }
-
- /** Similar to {@link #hFlushFi01_a()} but for a pipeline's 1st datanode
- */
- @Test
- public void hFlushFi02_a() throws IOException {
- final String methodName = FiTestUtil.getMethodName();
- runDiskErrorTest(new HdfsConfiguration(), methodName,
- AppendTestUtil.BLOCK_SIZE, new DerrAction(methodName, 1), 1, false);
- }
-
- /** Similar to {@link #hFlushFi01_b()} but for a pipeline's 1st datanode
- */
- @Test
- public void hFlushFi02_b() throws IOException {
- final String methodName = FiTestUtil.getMethodName();
- Configuration conf = new HdfsConfiguration();
- int customPerChecksumSize = 512;
- int customBlockSize = customPerChecksumSize * 3;
- conf.setInt(DFSConfigKeys.DFS_BYTES_PER_CHECKSUM_KEY, customPerChecksumSize);
- conf.setLong(DFSConfigKeys.DFS_BLOCK_SIZE_KEY, customBlockSize);
- runDiskErrorTest(conf, methodName,
- customBlockSize, new DerrAction(methodName, 1), 1, true);
- }
-
- /** Similar to {@link #hFlushFi01_c()} but for a pipeline's 1st datanode
- */
- @Test
- public void hFlushFi02_c() throws IOException {
- final String methodName = FiTestUtil.getMethodName();
- Configuration conf = new HdfsConfiguration();
- int customPerChecksumSize = 400;
- int customBlockSize = customPerChecksumSize * 3;
- conf.setInt(DFSConfigKeys.DFS_BYTES_PER_CHECKSUM_KEY, customPerChecksumSize);
- conf.setLong(DFSConfigKeys.DFS_BLOCK_SIZE_KEY, customBlockSize);
- runDiskErrorTest(conf, methodName,
- customBlockSize, new DerrAction(methodName, 1), 1, true);
- }
-
- /** Similar to {@link #hFlushFi01_a()} but for a pipeline's 2nd datanode
- */
- @Test
- public void hFlushFi03_a() throws IOException {
- final String methodName = FiTestUtil.getMethodName();
- runDiskErrorTest(new HdfsConfiguration(), methodName,
- AppendTestUtil.BLOCK_SIZE, new DerrAction(methodName, 2), 2, false);
- }
-
- /** Similar to {@link #hFlushFi01_b()} but for a pipeline's 2nd datanode
- */
- @Test
- public void hFlushFi03_b() throws IOException {
- final String methodName = FiTestUtil.getMethodName();
- Configuration conf = new HdfsConfiguration();
- int customPerChecksumSize = 512;
- int customBlockSize = customPerChecksumSize * 3;
- conf.setInt(DFSConfigKeys.DFS_BYTES_PER_CHECKSUM_KEY, customPerChecksumSize);
- conf.setLong(DFSConfigKeys.DFS_BLOCK_SIZE_KEY, customBlockSize);
- runDiskErrorTest(conf, methodName,
- customBlockSize, new DerrAction(methodName, 2), 2, true);
- }
-
- /** Similar to {@link #hFlushFi01_c()} but for a pipeline's 2nd datanode
- */
- @Test
- public void hFlushFi03_c() throws IOException {
- final String methodName = FiTestUtil.getMethodName();
- Configuration conf = new HdfsConfiguration();
- int customPerChecksumSize = 400;
- int customBlockSize = customPerChecksumSize * 3;
- conf.setInt(DFSConfigKeys.DFS_BYTES_PER_CHECKSUM_KEY, customPerChecksumSize);
- conf.setLong(DFSConfigKeys.DFS_BLOCK_SIZE_KEY, customBlockSize);
- runDiskErrorTest(conf, methodName,
- customBlockSize, new DerrAction(methodName, 2), 2, true);
- }
-}