public void recover(Tablet tablet, List<LogEntry> logEntries, Set<String> tabletFiles, MutationReceiver mutationReceiver) throws IOException {
List<String> recoveryLogs = new ArrayList<String>();
List<LogEntry> sorted = new ArrayList<LogEntry>(logEntries);
Collections.sort(sorted, new Comparator<LogEntry>() {
@Override
public int compare(LogEntry e1, LogEntry e2) {
return (int) (e1.timestamp - e2.timestamp);
}
});
for (LogEntry entry : sorted) {
String recovery = null;
for (String log : entry.logSet) {
String[] parts = log.split("/");
log = ServerConstants.getRecoveryDir() + "/" + parts[1];
Path finished = new Path(log + "/finished");
TabletServer.log.info("Looking for " + finished);
if (fs.exists(finished)) {
recovery = log;
break;
}
}
if (recovery == null)
throw new IOException("Unable to find recovery files for extent " + tablet.getExtent() + " logEntry: " + entry);
recoveryLogs.add(recovery);
}
logger.recover(tablet, recoveryLogs, tabletFiles, mutationReceiver);
}