/** * recoverTransitionRead for a specific block pool * * @param datanode DataNode * @param bpID Block pool Id * @param nsInfo Namespace info of namenode corresponding to the block pool * @param dataDirs Storage directories * @param startOpt startup option * @throws IOException on error */ void recoverTransitionRead( DataNode datanode, String bpID, NamespaceInfo nsInfo, Collection<File> dataDirs, StartupOption startOpt) throws IOException { // First ensure datanode level format/snapshot/rollback is completed recoverTransitionRead(datanode, nsInfo, dataDirs, startOpt); // Create list of storage directories for the block pool Collection<File> bpDataDirs = new ArrayList<File>(); for (Iterator<File> it = dataDirs.iterator(); it.hasNext(); ) { File dnRoot = it.next(); 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 = new BlockPoolSliceStorage( nsInfo.getNamespaceID(), bpID, nsInfo.getCTime(), nsInfo.getClusterID()); bpStorage.recoverTransitionRead(datanode, nsInfo, bpDataDirs, startOpt); addBlockPoolStorage(bpID, bpStorage); }