package org.apache.hadoop.hdfs.server.namenode;

import java.util.List;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.net.NetworkTopology;
import org.apache.hadoop.net.Node;

public class BlockPlacementPolicyFakeData extends BlockPlacementPolicyDefault {

  public static BlockPlacementPolicyFakeData lastInstance = null;
  public DatanodeDescriptor overridingDatanode = null;
  
  
  public BlockPlacementPolicyFakeData() {
    super();
    
    FSNamesystem.LOG.info("new BlockPlacementPolicyFakeData: " + this);
    lastInstance = this;
  }
  
  public BlockPlacementPolicyFakeData(Configuration conf,  FSClusterStats stats,
                           NetworkTopology clusterMap) {
    initialize(conf, stats, clusterMap, null, null, null);
    
    FSNamesystem.LOG.info("new BlockPlacementPolicyFakeData: " + this);
    lastInstance = this;
  }
  
  DatanodeDescriptor[] chooseTarget(int numOfReplicas,
                                    DatanodeDescriptor writer,
                                    List<DatanodeDescriptor> chosenNodes,
                                    List<Node> exlcNodes,
                                    long blocksize) {
    
    if (overridingDatanode != null) {
      FSNamesystem.LOG.info("Block Placement: using override target node " + overridingDatanode.getName());
      return new DatanodeDescriptor[] { overridingDatanode };
    }
    
    return super.chooseTarget(numOfReplicas, writer, chosenNodes, exlcNodes, blocksize);
  }
  
  
  public static void setNameNodeReplicator(NameNode namenode, BlockPlacementPolicy policy) {
    namenode.namesystem.replicator = policy;
  }
}