class DataStorage extends Storage {

  synchronized void addStorageLocations(DataNode datanode,
      NamespaceInfo nsInfo, Collection<StorageLocation> dataDirs,
      StartupOption startOpt)
      throws IOException {
    // Similar to recoverTransitionRead, it first ensures the datanode level
    // format is completed.
    List<StorageLocation> tmpDataDirs =
        new ArrayList<StorageLocation>(dataDirs);
    addStorageLocations(datanode, nsInfo, tmpDataDirs, startOpt, false, true);

    Collection<File> bpDataDirs = new ArrayList<File>();
    String bpid = nsInfo.getBlockPoolID();
    for (StorageLocation dir : dataDirs) {
      File dnRoot = dir.getFile();
      File bpRoot = BlockPoolSliceStorage.getBpRoot(bpid, new File(dnRoot,
          STORAGE_DIR_CURRENT));
      bpDataDirs.add(bpRoot);
    }
    // mkdir for the list of BlockPoolStorage
    makeBlockPoolDataDir(bpDataDirs, null);
    BlockPoolSliceStorage bpStorage = this.bpStorageMap.get(bpid);
    if (bpStorage == null) {
      bpStorage = new BlockPoolSliceStorage(
          nsInfo.getNamespaceID(), bpid, nsInfo.getCTime(),
          nsInfo.getClusterID());
    }

    bpStorage.recoverTransitionRead(datanode, nsInfo, bpDataDirs, startOpt);
    addBlockPoolStorage(bpid, bpStorage);
  }

    DataStorage();
  public  DataStorage(StorageInfo storageInfo);

}