Skip to content

Commit 6a349b0

Browse files
committed
refactor DataReaderIBM_J9_R28 to extend AbstractDataReader (#175)
1 parent 6162fa2 commit 6a349b0

File tree

5 files changed

+76
-47
lines changed

5 files changed

+76
-47
lines changed

src/main/java/com/tagtraum/perf/gcviewer/imp/DataReaderFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ else if (s.indexOf("<GC: ") == 0 && s.indexOf('>') != -1 && new StringTokenizer(
192192
}
193193
else if (s.contains("<verbosegc") && (s.contains("version=\"R26_Java6") || s.contains("version=\"R27_Java7") || s.contains("version=\"R28_Java8"))) {
194194
if (getLogger().isLoggable(Level.INFO)) getLogger().info("File format: IBM J9 R26 / R27 / R28");
195-
return new DataReaderIBM_J9_R28(in);
195+
return new DataReaderIBM_J9_R28(gcResource, in);
196196
}
197197
else if (s.indexOf("<verbosegc version=\"") != -1) {
198198
if (getLogger().isLoggable(Level.INFO)) getLogger().info("File format: IBM J9 5.0");

src/main/java/com/tagtraum/perf/gcviewer/imp/DataReaderIBM_J9_R28.java

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,14 @@
22

33
import java.io.IOException;
44
import java.io.InputStream;
5-
import java.io.InputStreamReader;
65
import java.io.LineNumberReader;
6+
import java.io.UnsupportedEncodingException;
77
import java.time.LocalDateTime;
88
import java.time.ZoneId;
99
import java.time.ZonedDateTime;
1010
import java.time.format.DateTimeFormatter;
1111
import java.time.format.DateTimeParseException;
1212
import java.util.logging.Level;
13-
import java.util.logging.Logger;
1413
import javax.xml.namespace.QName;
1514
import javax.xml.stream.XMLEventReader;
1615
import javax.xml.stream.XMLInputFactory;
@@ -23,12 +22,13 @@
2322
import com.tagtraum.perf.gcviewer.model.AbstractGCEvent.Type;
2423
import com.tagtraum.perf.gcviewer.model.GCEvent;
2524
import com.tagtraum.perf.gcviewer.model.GCModel;
25+
import com.tagtraum.perf.gcviewer.model.GCResource;
2626
import com.tagtraum.perf.gcviewer.util.NumberParser;
2727

2828
/**
2929
* Parser for IBM gc logs R26_Java6 + R27_Java7 + R28_Java8
3030
*/
31-
public class DataReaderIBM_J9_R28 implements DataReader {
31+
public class DataReaderIBM_J9_R28 extends AbstractDataReader {
3232
// TODO IBM_J9: support system gcs
3333

3434
private static final String VERBOSEGC = "verbosegc";
@@ -38,13 +38,13 @@ public class DataReaderIBM_J9_R28 implements DataReader {
3838
private static final String GC_END = "gc-end";
3939
private static final String EXCLUSIVE_END = "exclusive-end";
4040

41-
private static Logger LOG = Logger.getLogger(DataReaderIBM_J9_R28.class.getName());
4241
private final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
4342

4443
private LineNumberReader in;
4544

46-
public DataReaderIBM_J9_R28(InputStream in) {
47-
this.in = new LineNumberReader(new InputStreamReader(in));
45+
public DataReaderIBM_J9_R28(GCResource gcResource, InputStream in) throws UnsupportedEncodingException {
46+
super(gcResource, in);
47+
this.in = super.in;
4848
}
4949

5050
@Override
@@ -85,16 +85,16 @@ public GCModel read() throws IOException {
8585
}
8686
}
8787
catch (XMLStreamException e) {
88-
if (LOG.isLoggable(Level.WARNING)) LOG.warning("line " + in.getLineNumber() + ": " + e.toString());
89-
if (LOG.isLoggable(Level.FINE)) LOG.log(Level.FINE, "line " + in.getLineNumber() + ": " + e.getMessage(), e);
88+
if (getLogger().isLoggable(Level.WARNING)) getLogger().warning("line " + in.getLineNumber() + ": " + e.toString());
89+
if (getLogger().isLoggable(Level.FINE)) getLogger().log(Level.FINE, "line " + in.getLineNumber() + ": " + e.getMessage(), e);
9090
}
9191

9292
return model;
9393
}
9494

9595
private void handleVerboseGC(StartElement startElement) {
9696
assert startElement.getName().getLocalPart().equals(VERBOSEGC) : "expected name of startElement: " + VERBOSEGC + ", but got " + startElement.getName();
97-
LOG.info("gc log version = " + getAttributeValue(startElement, "version"));
97+
getLogger().info("gc log version = " + getAttributeValue(startElement, "version"));
9898
}
9999

100100
private void handleInitialized(XMLEventReader eventReader) throws XMLStreamException {
@@ -106,7 +106,7 @@ private void handleInitialized(XMLEventReader eventReader) throws XMLStreamExcep
106106
if (startElement.getName().getLocalPart().equals("attribute")) {
107107
String name = getAttributeValue(startElement, "name");
108108
if (name != null && name.equals("gcPolicy")) {
109-
LOG.info("gcPolicy = " + getAttributeValue(startElement, "value"));
109+
getLogger().info("gcPolicy = " + getAttributeValue(startElement, "value"));
110110
}
111111
}
112112
}
@@ -125,8 +125,8 @@ private GCEvent handleExclusiveStart(StartElement startElement) {
125125
ZoneId.systemDefault()));
126126
}
127127
catch (DateTimeParseException e) {
128-
if (LOG.isLoggable(Level.WARNING)) LOG.warning("line " + in.getLineNumber() + ": " + e.toString());
129-
if (LOG.isLoggable(Level.FINE)) LOG.log(Level.FINE, "line " + in.getLineNumber() + ": " + e.getMessage(), e);
128+
if (getLogger().isLoggable(Level.WARNING)) getLogger().warning("line " + in.getLineNumber() + ": " + e.toString());
129+
if (getLogger().isLoggable(Level.FINE)) getLogger().log(Level.FINE, "line " + in.getLineNumber() + ": " + e.getMessage(), e);
130130
}
131131

132132
return event;
@@ -139,7 +139,7 @@ private void handleExclusiveEnd(StartElement startElement, GCEvent event) {
139139
private void handleGcStart(XMLEventReader eventReader, StartElement startElement, GCEvent event) throws XMLStreamException {
140140
event.setType(Type.lookup(getAttributeValue(startElement, "type")));
141141
if (event.getExtendedType() == null) {
142-
LOG.warning("could not determine type of event " + startElement.toString());
142+
getLogger().warning("could not determine type of event " + startElement.toString());
143143
return;
144144
}
145145

src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderIBM_J9_R26.java

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,31 +5,36 @@
55
import static org.hamcrest.number.IsCloseTo.closeTo;
66
import static org.junit.Assert.assertThat;
77

8+
import java.io.IOException;
89
import java.io.InputStream;
910
import java.util.logging.Level;
10-
import java.util.logging.Logger;
1111

1212
import com.tagtraum.perf.gcviewer.UnittestHelper;
1313
import com.tagtraum.perf.gcviewer.model.GCEvent;
1414
import com.tagtraum.perf.gcviewer.model.GCModel;
15+
import com.tagtraum.perf.gcviewer.model.GCResource;
1516
import org.junit.Test;
1617

1718
/**
1819
* Tests some J9_R26 sample files against the IBM J9 parser.
1920
*/
2021
public class TestDataReaderIBM_J9_R26 {
21-
private static final Logger IMP_LOGGER = Logger.getLogger("com.tagtraum.perf.gcviewer.imp");
22-
private static final Logger DATA_READER_FACTORY_LOGGER = Logger.getLogger("com.tagtraum.perf.gcviewer.DataReaderFactory");
22+
private InputStream getInputStream(String fileName) throws IOException {
23+
return UnittestHelper.getResourceAsStream(UnittestHelper.FOLDER_IBM, fileName);
24+
}
25+
26+
private DataReader getDataReader(GCResource gcResource) throws IOException {
27+
return new DataReaderIBM_J9_R28(gcResource, getInputStream(gcResource.getResourceName()));
28+
}
2329

2430
@Test
2531
public void testFullHeaderWithAfGcs() throws Exception {
2632
TestLogHandler handler = new TestLogHandler();
2733
handler.setLevel(Level.WARNING);
28-
IMP_LOGGER.addHandler(handler);
29-
DATA_READER_FACTORY_LOGGER.addHandler(handler);
34+
GCResource gcResource = new GCResource("SampleIBMJ9_R26_GAFP1_full_header.txt");
35+
gcResource.getLogger().addHandler(handler);
3036

31-
InputStream in = UnittestHelper.getResourceAsStream(UnittestHelper.FOLDER_IBM, "SampleIBMJ9_R26_GAFP1_full_header.txt");
32-
DataReader reader = new DataReaderIBM_J9_R28(in);
37+
DataReader reader = getDataReader(gcResource);
3338
GCModel model = reader.read();
3439

3540
assertThat("model size", model.size(), is(1));
@@ -44,11 +49,10 @@ public void testFullHeaderWithAfGcs() throws Exception {
4449
public void testSystemGc() throws Exception {
4550
TestLogHandler handler = new TestLogHandler();
4651
handler.setLevel(Level.WARNING);
47-
IMP_LOGGER.addHandler(handler);
48-
DATA_READER_FACTORY_LOGGER.addHandler(handler);
52+
GCResource gcResource = new GCResource("SampleIBMJ9_R26_GAFP1_global.txt");
53+
gcResource.getLogger().addHandler(handler);
4954

50-
InputStream in = UnittestHelper.getResourceAsStream(UnittestHelper.FOLDER_IBM, "SampleIBMJ9_R26_GAFP1_global.txt");
51-
DataReader reader = new DataReaderIBM_J9_R28(in);
55+
DataReader reader = getDataReader(gcResource);
5256
GCModel model = reader.read();
5357

5458
assertThat("model size", model.size(), is(1));

src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderIBM_J9_R27.java

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,32 +5,38 @@
55
import static org.hamcrest.number.IsCloseTo.closeTo;
66
import static org.junit.Assert.assertThat;
77

8+
import java.io.IOException;
89
import java.io.InputStream;
910
import java.util.logging.Level;
10-
import java.util.logging.Logger;
1111

1212
import com.tagtraum.perf.gcviewer.UnittestHelper;
1313
import com.tagtraum.perf.gcviewer.model.GCEvent;
1414
import com.tagtraum.perf.gcviewer.model.GCModel;
15+
import com.tagtraum.perf.gcviewer.model.GCResource;
1516
import org.junit.Test;
1617

1718
/**
1819
* @author <a href="[email protected]">Joerg Wuethrich</a>
1920
* <p>created on 08.10.2014</p>
2021
*/
2122
public class TestDataReaderIBM_J9_R27 {
22-
private static final Logger IMP_LOGGER = Logger.getLogger("com.tagtraum.perf.gcviewer.imp");
23-
private static final Logger DATA_READER_FACTORY_LOGGER = Logger.getLogger("com.tagtraum.perf.gcviewer.DataReaderFactory");
23+
24+
private InputStream getInputStream(String fileName) throws IOException {
25+
return UnittestHelper.getResourceAsStream(UnittestHelper.FOLDER_IBM, fileName);
26+
}
27+
28+
private DataReader getDataReader(GCResource gcResource) throws IOException {
29+
return new DataReaderIBM_J9_R28(gcResource, getInputStream(gcResource.getResourceName()));
30+
}
2431

2532
@Test
2633
public void testFullHeaderWithAfGcs() throws Exception {
2734
TestLogHandler handler = new TestLogHandler();
2835
handler.setLevel(Level.WARNING);
29-
IMP_LOGGER.addHandler(handler);
30-
DATA_READER_FACTORY_LOGGER.addHandler(handler);
36+
GCResource gcResource = new GCResource("SampleIBMJ9_R27_SR1_full_header.txt");
37+
gcResource.getLogger().addHandler(handler);
3138

32-
InputStream in = UnittestHelper.getResourceAsStream(UnittestHelper.FOLDER_IBM, "SampleIBMJ9_R27_SR1_full_header.txt");
33-
DataReader reader = new DataReaderIBM_J9_R28(in);
39+
DataReader reader = getDataReader(gcResource);
3440
GCModel model = reader.read();
3541

3642
assertThat("model size", model.size(), is(3));
@@ -61,11 +67,10 @@ public void testFullHeaderWithAfGcs() throws Exception {
6167
public void testSystemGc() throws Exception {
6268
TestLogHandler handler = new TestLogHandler();
6369
handler.setLevel(Level.WARNING);
64-
IMP_LOGGER.addHandler(handler);
65-
DATA_READER_FACTORY_LOGGER.addHandler(handler);
70+
GCResource gcResource = new GCResource("SampleIBMJ9_R27_SR1_global.txt");
71+
gcResource.getLogger().addHandler(handler);
6672

67-
InputStream in = UnittestHelper.getResourceAsStream(UnittestHelper.FOLDER_IBM, "SampleIBMJ9_R27_SR1_global.txt");
68-
DataReader reader = new DataReaderIBM_J9_R28(in);
73+
DataReader reader = getDataReader(gcResource);
6974
GCModel model = reader.read();
7075

7176
assertThat("model size", model.size(), is(1));

src/test/java/com/tagtraum/perf/gcviewer/imp/TestDataReaderIBM_J9_R28.java

Lines changed: 31 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,32 +5,38 @@
55
import static org.hamcrest.number.IsCloseTo.closeTo;
66
import static org.junit.Assert.assertThat;
77

8+
import java.io.IOException;
89
import java.io.InputStream;
910
import java.util.logging.Level;
10-
import java.util.logging.Logger;
1111

1212
import com.tagtraum.perf.gcviewer.UnittestHelper;
1313
import com.tagtraum.perf.gcviewer.model.GCEvent;
1414
import com.tagtraum.perf.gcviewer.model.GCModel;
15+
import com.tagtraum.perf.gcviewer.model.GCResource;
1516
import org.junit.Test;
1617

1718
/**
1819
* @author <a href="[email protected]">Joerg Wuethrich</a>
1920
* <p>created on 08.10.2014</p>
2021
*/
2122
public class TestDataReaderIBM_J9_R28 {
22-
private static final Logger IMP_LOGGER = Logger.getLogger("com.tagtraum.perf.gcviewer.imp");
23-
private static final Logger DATA_READER_FACTORY_LOGGER = Logger.getLogger("com.tagtraum.perf.gcviewer.DataReaderFactory");
23+
24+
private InputStream getInputStream(String fileName) throws IOException {
25+
return UnittestHelper.getResourceAsStream(UnittestHelper.FOLDER_IBM, fileName);
26+
}
27+
28+
private DataReader getDataReader(GCResource gcResource) throws IOException {
29+
return new DataReaderIBM_J9_R28(gcResource, getInputStream(gcResource.getResourceName()));
30+
}
2431

2532
@Test
2633
public void testFullHeaderWithAfGcs() throws Exception {
2734
TestLogHandler handler = new TestLogHandler();
2835
handler.setLevel(Level.WARNING);
29-
IMP_LOGGER.addHandler(handler);
30-
DATA_READER_FACTORY_LOGGER.addHandler(handler);
36+
GCResource gcResource = new GCResource("SampleIBMJ9_R28_full_header.txt");
37+
gcResource.getLogger().addHandler(handler);
3138

32-
InputStream in = UnittestHelper.getResourceAsStream(UnittestHelper.FOLDER_IBM, "SampleIBMJ9_R28_full_header.txt");
33-
DataReader reader = new DataReaderIBM_J9_R28(in);
39+
DataReader reader = getDataReader(gcResource);
3440
GCModel model = reader.read();
3541

3642
assertThat("model size", model.size(), is(2));
@@ -60,11 +66,10 @@ public void testFullHeaderWithAfGcs() throws Exception {
6066
public void testSystemGc() throws Exception {
6167
TestLogHandler handler = new TestLogHandler();
6268
handler.setLevel(Level.WARNING);
63-
IMP_LOGGER.addHandler(handler);
64-
DATA_READER_FACTORY_LOGGER.addHandler(handler);
69+
GCResource gcResource = new GCResource("SampleIBMJ9_R28_global.txt");
70+
gcResource.getLogger().addHandler(handler);
6571

66-
InputStream in = UnittestHelper.getResourceAsStream(UnittestHelper.FOLDER_IBM, "SampleIBMJ9_R28_global.txt");
67-
DataReader reader = new DataReaderIBM_J9_R28(in);
72+
DataReader reader = getDataReader(gcResource);
6873
GCModel model = reader.read();
6974

7075
assertThat("model size", model.size(), is(1));
@@ -75,4 +80,19 @@ public void testSystemGc() throws Exception {
7580
assertThat("number of errors", handler.getCount(), is(0));
7681
}
7782

83+
@Test
84+
public void testConcurrentMinimal() throws Exception {
85+
// there are minimal concurrent blocks, that don't contain any information, that the parser can use (at least, at the moment)
86+
TestLogHandler handler = new TestLogHandler();
87+
handler.setLevel(Level.WARNING);
88+
GCResource gcResource = new GCResource("SampleIBMJ9_R28_concurrentMinimal.txt");
89+
gcResource.getLogger().addHandler(handler);
90+
91+
DataReader reader = getDataReader(gcResource);
92+
GCModel model = reader.read();
93+
94+
assertThat("model size", model.size(), is(0));
95+
assertThat("number of errors", handler.getCount(), is(0));
96+
}
97+
7898
}

0 commit comments

Comments
 (0)