in src/main/java/com/spotify/sparkey/extra/SparkeyValidator.java [13:99]
public static void main(String[] args) throws IOException {
if (args.length < 1) {
System.err.println("Usage: sparkey-validator <input file>");
System.exit(1);
return;
}
File input = new File(args[0]);
final File logFile = Sparkey.getLogFile(input);
if (!logFile.exists()) {
System.err.println(logFile.getAbsolutePath() + " does not exist");
System.exit(1);
return;
}
if (!logFile.isFile()) {
System.err.println(logFile.getAbsolutePath() + " is not a file");
System.exit(1);
return;
}
final File indexFile = Sparkey.getIndexFile(input);
if (!indexFile.exists()) {
System.err.println(indexFile.getAbsolutePath() + " does not exist");
System.exit(1);
return;
}
if (!indexFile.isFile()) {
System.err.println(indexFile.getAbsolutePath() + " is not a file");
System.exit(1);
return;
}
LogHeader logHeader = Sparkey.getLogHeader(logFile);
final SparkeyReader reader = Sparkey.open(indexFile);
final SparkeyReader reader2 = Sparkey.open(indexFile);
boolean inconsistent = false;
System.out.println("Validating log iterator.");
final SparkeyLogIterator iterator = new SparkeyLogIterator(logFile);
for (SparkeyReader.Entry entry : iterator) {
switch (entry.getType()) {
case PUT:
validateKey(logHeader, entry);
validateValue(logHeader, entry);
// Just make sure this doesn't crash
reader.getAsByteArray(entry.getKey());
break;
case DELETE:
validateKey(logHeader, entry);
checkState(0 == entry.getValueLength());
// Just make sure this doesn't crash
reader.getAsByteArray(entry.getKey());
break;
default:
throw new RuntimeException("Unknown type: " + entry.getType());
}
}
System.out.println("Validating hash iterator and random lookups.");
for (SparkeyReader.Entry entry : reader) {
final byte[] value = entry.getValue();
validateKey(logHeader, entry);
validateValue(logHeader, entry, value);
final byte[] value2 = reader2.getAsByteArray(entry.getKey());
if (!Arrays.equals(value, value2)) {
System.err.println("Inconsistency for key: " + entry.getKeyAsString() + " when iterating and doing a lookup");
inconsistent = true;
}
}
System.out.println("Done!");
if (inconsistent) {
System.exit(1);
}
}