From 1f2d0da5ed40a31cf0643907ffc3f4251bdaf4e5 Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Wed, 12 Jul 2017 12:00:41 +0200 Subject: [PATCH] DATAMONGO-1720 - Polishing. Enhance benchmark statistics with Git/working tree details. Specify byte encoding for JSON to byte encoder. Add status code check to HttpResultsWriter to verify that the results were accepted. Convert spaces to tabs in pom.xml. Original pull request: #483. --- spring-data-mongodb-benchmarks/pom.xml | 179 ++++++++++-------- .../MappingMongoConverterBenchmark.java | 2 +- .../microbenchmark/HttpResultsWriter.java | 51 +++-- .../microbenchmark/MongoResultsWriter.java | 11 +- .../mongodb/microbenchmark/ResultsWriter.java | 5 +- 5 files changed, 148 insertions(+), 100 deletions(-) diff --git a/spring-data-mongodb-benchmarks/pom.xml b/spring-data-mongodb-benchmarks/pom.xml index 21d537eda..bb4389ae9 100644 --- a/spring-data-mongodb-benchmarks/pom.xml +++ b/spring-data-mongodb-benchmarks/pom.xml @@ -1,91 +1,112 @@ + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> - 4.0.0 + 4.0.0 - - org.springframework.data - spring-data-mongodb-parent - 1.10.5.BUILD-SNAPSHOT - ../pom.xml - + + org.springframework.data + spring-data-mongodb-parent + 1.10.5.BUILD-SNAPSHOT + ../pom.xml + - spring-data-mongodb-benchmarks - jar + spring-data-mongodb-benchmarks + jar - Spring Data MongoDB - Microbenchmarks + Spring Data MongoDB - Microbenchmarks - - true - false - + + + true + false + - - - ${project.groupId} - spring-data-mongodb - ${project.version} - - - junit - junit - ${junit} - compile - - - org.openjdk.jmh - jmh-core - ${jmh.version} - - - org.openjdk.jmh - jmh-generator-annprocess - ${jmh.version} - provided - - + - + + ${project.groupId} + spring-data-mongodb + ${project.version} + - - benchmarks - - false - - - + + junit + junit + ${junit} + compile + - - - - maven-jar-plugin - - - default-jar - never - - - - - maven-surefire-plugin - - ${project.build.sourceDirectory} - ${project.build.outputDirectory} - - **/AbstractMicrobenchmark.java - **/*$*.class - **/generated/*.class - - - **/*Benchmark* - - - ${project.build.directory}/reports/performance - ${project.version} - - - - - + + org.openjdk.jmh + jmh-core + ${jmh.version} + + + + org.openjdk.jmh + jmh-generator-annprocess + ${jmh.version} + provided + + + + + + + + benchmarks + + false + + + + + + + + pl.project13.maven + git-commit-id-plugin + 2.2.2 + + + + revision + + + + + + maven-jar-plugin + + + default-jar + never + + + + + maven-surefire-plugin + + ${project.build.sourceDirectory} + ${project.build.outputDirectory} + + **/AbstractMicrobenchmark.java + **/*$*.class + **/generated/*.class + + + **/*Benchmark* + + + ${project.build.directory}/reports/performance + ${project.version} + ${git.dirty} + ${git.commit.id} + ${git.branch} + + + + + diff --git a/spring-data-mongodb-benchmarks/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverterBenchmark.java b/spring-data-mongodb-benchmarks/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverterBenchmark.java index 64f9e1bd5..54875e677 100644 --- a/spring-data-mongodb-benchmarks/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverterBenchmark.java +++ b/spring-data-mongodb-benchmarks/src/main/java/org/springframework/data/mongodb/core/convert/MappingMongoConverterBenchmark.java @@ -127,7 +127,7 @@ public class MappingMongoConverterBenchmark extends AbstractMicrobenchmark { } @Benchmark // DATAMONGO-1720 - public Customer readObjectWith2tPropertiesAnd1NestedObject() { + public Customer readObjectWith2PropertiesAnd1NestedObject() { return converter.read(Customer.class, documentWith2PropertiesAnd1Nested); } diff --git a/spring-data-mongodb-benchmarks/src/main/java/org/springframework/data/mongodb/microbenchmark/HttpResultsWriter.java b/spring-data-mongodb-benchmarks/src/main/java/org/springframework/data/mongodb/microbenchmark/HttpResultsWriter.java index 9df33ba77..0b892bfce 100644 --- a/spring-data-mongodb-benchmarks/src/main/java/org/springframework/data/mongodb/microbenchmark/HttpResultsWriter.java +++ b/spring-data-mongodb-benchmarks/src/main/java/org/springframework/data/mongodb/microbenchmark/HttpResultsWriter.java @@ -15,13 +15,17 @@ */ package org.springframework.data.mongodb.microbenchmark; +import lombok.SneakyThrows; + import java.io.OutputStream; +import java.net.HttpURLConnection; import java.net.URL; import java.net.URLConnection; import java.nio.charset.Charset; import java.util.Collection; import org.openjdk.jmh.results.RunResult; +import org.springframework.core.env.StandardEnvironment; import org.springframework.util.CollectionUtils; /** @@ -38,30 +42,45 @@ class HttpResultsWriter implements ResultsWriter { } @Override + @SneakyThrows public void write(Collection results) { if (CollectionUtils.isEmpty(results)) { return; } + StandardEnvironment env = new StandardEnvironment(); + + String projectVersion = env.getProperty("project.version", "unknown"); + String gitBranch = env.getProperty("git.branch", "unknown"); + String gitDirty = env.getProperty("git.dirty", "no"); + String gitCommitId = env.getProperty("git.commit.id", "unknown"); + + HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection(); + connection.setConnectTimeout(1000); + connection.setReadTimeout(1000); + connection.setDoOutput(true); + connection.setRequestMethod("POST"); + + connection.setRequestProperty("Content-Type", "application/json"); + connection.addRequestProperty("X-Project-Version", projectVersion); + connection.addRequestProperty("X-Git-Branch", gitBranch); + connection.addRequestProperty("X-Git-Dirty", gitDirty); + connection.addRequestProperty("X-Git-Commit-Id", gitCommitId); + + OutputStream output = null; try { - - URLConnection connection = new URL(url).openConnection(); - connection.setConnectTimeout(1000); - connection.setDoOutput(true); - connection.setRequestProperty("Content-Type", "application/json"); - - OutputStream output = null; - try { - output = connection.getOutputStream(); - output.write(ResultsWriter.Utils.jsonifyResults(results).getBytes(Charset.forName("UTF-8"))); - } finally { - if (output != null) { - output.close(); - } + output = connection.getOutputStream(); + output.write(ResultsWriter.Utils.jsonifyResults(results).getBytes(Charset.forName("UTF-8"))); + } finally { + if (output != null) { + output.close(); } - } catch (Exception e) { - throw new RuntimeException(e); + } + + if (connection.getResponseCode() >= 400) { + throw new IllegalStateException( + String.format("Status %d %s", connection.getResponseCode(), connection.getResponseMessage())); } } } diff --git a/spring-data-mongodb-benchmarks/src/main/java/org/springframework/data/mongodb/microbenchmark/MongoResultsWriter.java b/spring-data-mongodb-benchmarks/src/main/java/org/springframework/data/mongodb/microbenchmark/MongoResultsWriter.java index 3f56c5f19..6f702dcd5 100644 --- a/spring-data-mongodb-benchmarks/src/main/java/org/springframework/data/mongodb/microbenchmark/MongoResultsWriter.java +++ b/spring-data-mongodb-benchmarks/src/main/java/org/springframework/data/mongodb/microbenchmark/MongoResultsWriter.java @@ -52,6 +52,9 @@ class MongoResultsWriter implements ResultsWriter { StandardEnvironment env = new StandardEnvironment(); String projectVersion = env.getProperty("project.version", "unknown"); + String gitBranch = env.getProperty("git.branch", "unknown"); + String gitDirty = env.getProperty("git.dirty", "no"); + String gitCommitId = env.getProperty("git.commit.id", "unknown"); MongoClientURI uri = new MongoClientURI(this.uri); MongoClient client = null; @@ -71,6 +74,9 @@ class MongoResultsWriter implements ResultsWriter { BasicDBObject sink = new BasicDBObject(); sink.append("_version", projectVersion); + sink.append("_branch", gitBranch); + sink.append("_commit", gitCommitId); + sink.append("_dirty", gitDirty); sink.append("_method", extractBenchmarkName(dbo.get("benchmark").toString())); sink.append("_date", now); sink.append("_snapshot", projectVersion.toLowerCase().contains("snapshot")); @@ -81,7 +87,6 @@ class MongoResultsWriter implements ResultsWriter { } client.close(); - } /** @@ -117,13 +122,13 @@ class MongoResultsWriter implements ResultsWriter { return sanitized; } - private String extractClass(String source) { + private static String extractClass(String source) { String tmp = source.substring(0, source.lastIndexOf('.')); return tmp.substring(tmp.lastIndexOf(".") + 1); } - private String extractBenchmarkName(String source) { + private static String extractBenchmarkName(String source) { return source.substring(source.lastIndexOf(".") + 1); } diff --git a/spring-data-mongodb-benchmarks/src/main/java/org/springframework/data/mongodb/microbenchmark/ResultsWriter.java b/spring-data-mongodb-benchmarks/src/main/java/org/springframework/data/mongodb/microbenchmark/ResultsWriter.java index 10c2326a4..53f15fc5a 100644 --- a/spring-data-mongodb-benchmarks/src/main/java/org/springframework/data/mongodb/microbenchmark/ResultsWriter.java +++ b/spring-data-mongodb-benchmarks/src/main/java/org/springframework/data/mongodb/microbenchmark/ResultsWriter.java @@ -15,6 +15,8 @@ */ package org.springframework.data.mongodb.microbenchmark; +import lombok.SneakyThrows; + import java.io.ByteArrayOutputStream; import java.io.PrintStream; import java.nio.charset.Charset; @@ -57,10 +59,11 @@ interface ResultsWriter { * @return json string representation of results. * @see org.openjdk.jmh.results.format.JSONResultFormat */ + @SneakyThrows static String jsonifyResults(Collection results) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); - ResultFormatFactory.getInstance(ResultFormatType.JSON, new PrintStream(baos)).writeOut(results); + ResultFormatFactory.getInstance(ResultFormatType.JSON, new PrintStream(baos, true, "UTF-8")).writeOut(results); return new String(baos.toByteArray(), Charset.forName("UTF-8")); } }