diff --git a/dynamometer-blockgen/src/main/java/com/linkedin/dynamometer/blockgenerator/XMLParser.java b/dynamometer-blockgen/src/main/java/com/linkedin/dynamometer/blockgenerator/XMLParser.java index 3b915c23b2..c361deb339 100644 --- a/dynamometer-blockgen/src/main/java/com/linkedin/dynamometer/blockgenerator/XMLParser.java +++ b/dynamometer-blockgen/src/main/java/com/linkedin/dynamometer/blockgenerator/XMLParser.java @@ -7,6 +7,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -52,6 +53,13 @@ class XMLParser { * @return {@code BlockInfo}s for any blocks found. */ List parseLine(String line) throws IOException { + if (currentState == State.DEFAULT) { + if (line.contains("")) { + transitionTo(State.INODE_SECTION); + } else { + return Collections.emptyList(); + } + } if (line.contains("")) { transitionTo(State.INODE); } @@ -78,6 +86,9 @@ List parseLine(String line) throws IOException { blockInfos.add(new BlockInfo(id, gs, size, currentReplication)); } if (line.contains("")) { + transitionTo(State.INODE_SECTION); + } + if (line.contains("")) { transitionTo(State.DEFAULT); } return blockInfos; @@ -113,16 +124,18 @@ private static List valuesFromXMLString(String xml, String field) { private enum State { DEFAULT, + INODE_SECTION, INODE, FILE, FILE_WITH_REPLICATION; private final Set allowedTransitions = new HashSet<>(); static { - DEFAULT.addTransitions(DEFAULT, INODE); - INODE.addTransitions(DEFAULT, FILE); - FILE.addTransitions(DEFAULT, FILE_WITH_REPLICATION); - FILE_WITH_REPLICATION.addTransitions(DEFAULT); + DEFAULT.addTransitions(DEFAULT, INODE_SECTION); + INODE_SECTION.addTransitions(DEFAULT, INODE); + INODE.addTransitions(INODE_SECTION, FILE); + FILE.addTransitions(INODE_SECTION, FILE_WITH_REPLICATION); + FILE_WITH_REPLICATION.addTransitions(INODE_SECTION); } private void addTransitions(State... nextState) { diff --git a/dynamometer-blockgen/src/test/java/com/linkedin/dynamometer/blockgenerator/TestXMLParser.java b/dynamometer-blockgen/src/test/java/com/linkedin/dynamometer/blockgenerator/TestXMLParser.java index 22589599dc..00347637a5 100644 --- a/dynamometer-blockgen/src/test/java/com/linkedin/dynamometer/blockgenerator/TestXMLParser.java +++ b/dynamometer-blockgen/src/test/java/com/linkedin/dynamometer/blockgenerator/TestXMLParser.java @@ -33,7 +33,8 @@ public void testBlocksFromLine() throws Exception { "FILE", "12", "131415", - "" + "", + "" }; Map expectedBlockCount = new HashMap<>(); @@ -53,4 +54,23 @@ public void testBlocksFromLine() throws Exception { assertEquals(expect.getValue(), actualBlockCount.get(expect.getKey())); } } + + @Test + public void testNonInodeSectionIgnored() throws Exception { + String[] lines = { + "", + "", + "", + "1FILEfake-file1", + "211", + "", + "3", + "" + }; + + XMLParser parser = new XMLParser(); + for (String line : lines) { + assertTrue((parser.parseLine(line).isEmpty())); + } + } }