/** checks for corrupt blocks and fixes them (if any) */ void checkAndFixBlocks() throws IOException, InterruptedException, ClassNotFoundException { checkJobs(); if (jobIndex.size() >= maxPendingJobs) { LOG.info("Waiting for " + jobIndex.size() + " pending jobs"); return; } Map<String, Integer> corruptFiles = getCorruptFiles(); FileSystem fs = new Path("/").getFileSystem(getConf()); Map<String, Integer> corruptFilePriority = computePriorities(fs, corruptFiles); int totalCorruptFiles = corruptFilePriority.size() + fileIndex.size(); RaidNodeMetrics.getInstance().numFilesToFix.set(totalCorruptFiles); String startTimeStr = dateFormat.format(new Date()); LOG.info("Found " + corruptFilePriority.size() + " corrupt files"); if (corruptFilePriority.size() > 0) { for (int pri = 1; pri >= 0; pri--) { String jobName = "blockfixer." + jobCounter + ".pri" + pri + "." + startTimeStr; jobCounter++; startJob(jobName, corruptFilePriority, pri); } } }