HBASE-21185 - WALPrettyPrinter: Additional useful info to be printed by wal printer tool, for debugability purposes

Signed-off-by: Allan Yang <allan163@apache.org>
This commit is contained in:
Wellington Chevreuil 2018-10-02 15:55:52 +01:00 committed by Michael Stack
parent 8a5537b5f5
commit 9e3f3fdc1f
1 changed files with 23 additions and 0 deletions

View File

@ -80,6 +80,8 @@ public class WALPrettyPrinter {
private PrintStream out; private PrintStream out;
// for JSON encoding // for JSON encoding
private static final ObjectMapper MAPPER = new ObjectMapper(); private static final ObjectMapper MAPPER = new ObjectMapper();
//allows for jumping straight to a given portion of the file
private long position;
/** /**
* Basic constructor that simply initializes values to reasonable defaults. * Basic constructor that simply initializes values to reasonable defaults.
@ -197,6 +199,15 @@ public class WALPrettyPrinter {
this.row = row; this.row = row;
} }
/**
* sets the position to start seeking the WAL file
* @param position
* initial position to start seeking the given WAL file
*/
public void setPosition(long position) {
this.position = position;
}
/** /**
* enables output as a single, persistent list. at present, only relevant in * enables output as a single, persistent list. at present, only relevant in
* the case of JSON output. * the case of JSON output.
@ -270,6 +281,10 @@ public class WALPrettyPrinter {
firstTxn = true; firstTxn = true;
} }
if (position > 0) {
log.seek(position);
}
try { try {
WAL.Entry entry; WAL.Entry entry;
while ((entry = log.next()) != null) { while ((entry = log.next()) != null) {
@ -293,6 +308,7 @@ public class WALPrettyPrinter {
if (row == null || ((String) op.get("row")).equals(row)) { if (row == null || ((String) op.get("row")).equals(row)) {
actions.add(op); actions.add(op);
} }
op.put("total_size_sum", PrivateCellUtil.estimatedSizeOfCell(cell));
} }
if (actions.isEmpty()) if (actions.isEmpty())
continue; continue;
@ -317,8 +333,11 @@ public class WALPrettyPrinter {
out.println(" tag: " + op.get("tag")); out.println(" tag: " + op.get("tag"));
} }
if (outputValues) out.println(" value: " + op.get("value")); if (outputValues) out.println(" value: " + op.get("value"));
out.println("cell total size sum: " + op.get("total_size_sum"));
} }
} }
out.println("edit heap size: " + entry.getEdit().heapSize());
out.println("position: " + log.getPosition());
} }
} finally { } finally {
log.close(); log.close();
@ -376,6 +395,7 @@ public class WALPrettyPrinter {
options.addOption("s", "sequence", true, options.addOption("s", "sequence", true,
"Sequence to filter by. Pass sequence number."); "Sequence to filter by. Pass sequence number.");
options.addOption("w", "row", true, "Row to filter by. Pass row name."); options.addOption("w", "row", true, "Row to filter by. Pass row name.");
options.addOption("g", "goto", true, "Position to seek to in the file");
WALPrettyPrinter printer = new WALPrettyPrinter(); WALPrettyPrinter printer = new WALPrettyPrinter();
CommandLineParser parser = new PosixParser(); CommandLineParser parser = new PosixParser();
@ -399,6 +419,9 @@ public class WALPrettyPrinter {
printer.setSequenceFilter(Long.parseLong(cmd.getOptionValue("s"))); printer.setSequenceFilter(Long.parseLong(cmd.getOptionValue("s")));
if (cmd.hasOption("w")) if (cmd.hasOption("w"))
printer.setRowFilter(cmd.getOptionValue("w")); printer.setRowFilter(cmd.getOptionValue("w"));
if (cmd.hasOption("g")) {
printer.setPosition(Long.parseLong(cmd.getOptionValue("g")));
}
} catch (ParseException e) { } catch (ParseException e) {
e.printStackTrace(); e.printStackTrace();
HelpFormatter formatter = new HelpFormatter(); HelpFormatter formatter = new HelpFormatter();