Package org.apache.hadoop.hdfs

Source Code of org.apache.hadoop.hdfs.TestAvatarCreateFile$TestHandler

package org.apache.hadoop.hdfs;

import java.io.IOException;
import java.io.EOFException;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.permission.FsPermission;
import org.apache.hadoop.hdfs.protocol.ClientProtocol;
import org.apache.hadoop.hdfs.util.InjectionEvent;
import org.apache.hadoop.util.InjectionEventI;
import org.apache.hadoop.util.InjectionHandler;

import org.junit.After;
import static org.junit.Assert.*;
import org.junit.Test;

public class TestAvatarCreateFile {
  private static MiniAvatarCluster cluster;
  private static Configuration conf;
  private static FileSystem fs;
  private static boolean pass = true;
  private static Log LOG = LogFactory.getLog(TestAvatarCreateFile.class);

  public void setUp(String name) throws Exception {
    LOG.info("------------------- test: " + name + " START ----------------");
    MiniAvatarCluster.createAndStartZooKeeper();
    conf = new Configuration();
    conf.setInt("fs.avatar.failover.checkperiod", 1000);
    conf.setLong("dfs.client.rpc.retry.sleep", 1000);
    conf.setBoolean("fs.ha.retrywrites", true);
    cluster = new MiniAvatarCluster(conf, 3, true, null, null);
    fs = cluster.getFileSystem();
    pass = true;
  }

  @After
  public void tearDown() throws Exception {
    cluster.shutDown();
    MiniAvatarCluster.shutDownZooKeeper();
  }

  private static class FailoverThread extends Thread {
    public void run() {
      try {
        // Wait for a few creates to fail.
        Thread.sleep(20000);
        cluster.failOver(true);
      } catch (Exception e) {
        LOG.error("Exception in failover :", e);
        pass = false;
      }
    }
  }

  private class TestHandler extends InjectionHandler {

    @Override
    protected void _processEventIO(InjectionEventI event, Object... args)
        throws IOException {
      if (event == InjectionEvent.FAILOVERCLIENTPROTOCOL_AFTER_CREATE_FILE) {
        InjectionHandler.clear();
        throw new EOFException("FAIL create connection!");
      }
    }
  }

  @Test
  public void testCreateFile() throws Exception {
    setUp("testCreateFile");
    InjectionHandler.set(new TestHandler());
    cluster.clearZooKeeperNode(0);
    ClientProtocol namenode = ((DistributedAvatarFileSystem) fs).getClient()
        .getNameNodeRPC();
    Thread t = new FailoverThread();
    t.start();
    FsPermission perm = new FsPermission((short) 0264);
    namenode.create("/test", perm, ((DistributedAvatarFileSystem) fs)
        .getClient().getClientName(), true, true, (short) 3, (long) 1024);
    LOG.info("Done with create");
    t.join();
    assertTrue(fs.exists(new Path("/test")));
    assertTrue(pass);
  }

  @Test
  public void testCreateFileWithoutOverwrite() throws Exception {
    setUp("testCreateFileWithoutOverwrite");
    InjectionHandler.set(new TestHandler());
    cluster.clearZooKeeperNode(0);
    ClientProtocol namenode = ((DistributedAvatarFileSystem) fs).getClient()
        .getNameNodeRPC();
    Thread t = new FailoverThread();
    t.start();
    FsPermission perm = new FsPermission((short) 0264);
    namenode.create("/test1", perm, ((DistributedAvatarFileSystem) fs)
        .getClient().getClientName(), false, true, (short) 3, (long) 1024);
    LOG.info("Done with create");
    t.join();
    assertTrue(fs.exists(new Path("/test1")));
    assertTrue(pass);
  }
}
TOP

Related Classes of org.apache.hadoop.hdfs.TestAvatarCreateFile$TestHandler

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.