in hbase-tools/src/main/java/org/apache/hbase/RegionsOnUnknownServersRecoverer.java [62:109]
public int run(String[] args) throws Exception {
String logPath = null;
if(args.length>=1 && args.length<3) {
logPath = args[0];
if(args.length==2) {
dryRun = args[1].equals("dryRun");
}
} else {
LOG.error("Wrong number of arguments. "
+ "Arguments are: <PATH_TO_MASTER_LOGS> [dryRun]");
return 1;
}
BufferedReader reader = null;
try(Connection conn = ConnectionFactory.createConnection(conf)) {
reader = new BufferedReader(new FileReader(new File(logPath)));
String line = null;
while((line = reader.readLine()) != null){
if(line.contains(CATALOG_JANITOR)){
String[] servers = line.split(UNKNOWN_SERVER);
for(int i=1; i<servers.length; i++){
String server = servers[i].split("/")[0];
if(!unknownServers.contains(server)){
LOG.info("Adding server {} to our list of servers that will have SCPs.", server);
unknownServers.add(server);
}
}
}
}
if(dryRun){
StringBuilder builder =
new StringBuilder("This is a dry run, no SCPs will be submitted. Found unknown servers:");
builder.append("\n");
unknownServers.stream().forEach(s -> builder.append(s).append("\n"));
LOG.info(builder.toString());
} else {
HBCK2 hbck2 = new HBCK2(conf);
LOG.info("Submitting SCPs for the found unknown servers with "
+ "HBCK2 scheduleRecoveries option.");
hbck2.scheduleRecoveries(conn.getHbck(), unknownServers.toArray(new String[] {}));
}
} catch(Exception e){
LOG.error("Recovering unknown servers failed:", e);
return 2;
} finally {
reader.close();
}
return 0;
}