Hm... In Log4j, we have a separate Maven module for benchmarks, but we already have a lot of modules in Log4j... I'm sure we do not want another module for [cvs].
We have a source folder for tests already, a third one might require a lot more configuration in the POM, I'm not sure. Isn't there a way to solve this with the current project structure? Gary On Mon, Apr 20, 2015 at 5:27 AM, Benedikt Ritter <brit...@apache.org> wrote: > Hello again, > > I've had some time to look ad the JMH Benchmarks. What I see is, that the > build now issues a warning: > > [WARNING] > [WARNING] Some problems were encountered while building the effective model > for org.apache.commons:commons-csv:jar:1.1.1-SNAPSHOT > [WARNING] 'profiles.profile[benchmark].dependencies.dependency.systemPath' > for org.skife.kasparov:csv:jar should not point at files within the project > directory, ${basedir}/csv-1.0.jar will be unresolvable by dependent > projects @ line 432, column 23 > [WARNING] > [WARNING] It is highly recommended to fix these problems because they > threaten the stability of your build. > [WARNING] > [WARNING] For this reason, future Maven versions might no longer support > building such malformed projects. > [WARNING] > > Furthermore I can no longer run tests from within Intellij, because it can > not construct the class path for the JMH Benchmark class correctly. One > work around for this would be to create an additional source folder > "benchmark" and put the CSVBenchmark there. > > WDYT? > > Benedikt > > 2015-02-16 15:43 GMT+01:00 Ralph Goers <ralph.go...@dslextreme.com>: > > > JMH is a tool used during the build. The source code for the product does > > not depend on it. See > http://www.apache.org/legal/resolved.html#prohibited > > <http://www.apache.org/legal/resolved.html#prohibited>. > > > > Ralph > > > > > > > On Feb 15, 2015, at 2:23 AM, Benedikt Ritter <brit...@apache.org> > wrote: > > > > > > 2015-02-09 2:40 GMT+01:00 sebb <seb...@gmail.com>: > > > > > >> On 8 February 2015 at 23:47, <ebo...@apache.org> wrote: > > >>> Author: ebourg > > >>> Date: Sun Feb 8 23:47:27 2015 > > >>> New Revision: 1658276 > > >>> > > >>> URL: http://svn.apache.org/r1658276 > > >>> Log: > > >>> Added a JMH benchmark to compare the most commons CSV parsers > > >> > > >> -1 > > >> > > >> This has broken the Continuum build. > > >> > > >> Also the JMH website says: > > >> > > >> "The recommended way to run a JMH benchmark is to use Maven to setup a > > >> standalone project that depends on the jar files of your application. > > >> This approach is preferred to ensure that the benchmarks are correctly > > >> initialized and produce reliable results. It is possible to run > > >> benchmarks from within an existing project, and even from within an > > >> IDE, however setup is more complex and the results are less reliable." > > >> > > >> Further, it's not clear to me what the JMH license is. > > >> It rather looks like GPL. > > >> > > > > > > +1 for this change in general. It's far superior to the manual > benchmark > > we > > > had before. > > > > > > Regarding the problems mentioned by sebb: > > > > > > - Is the continuum build fixed already? > > > - if we add further functionality, we will eventually end up with a > multi > > > module build that has modules like: core, beans, annotations, > benchmarks. > > > For now we should follow KISS and simply add it to the project until > > > unresolvable problems show up. > > > - regarding the license issue: since log4j seems to use it, I think we > > are > > > on the save side. Maybe someone from the log4j team can comment (ping > at > > > bodewig, ggregory) > > > > > > > > >> > > >>> Added: > > >>> > > >> > > > commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CSVBenchmark.java > > >> (with props) > > >>> Modified: > > >>> commons/proper/csv/trunk/pom.xml > > >>> > > >>> Modified: commons/proper/csv/trunk/pom.xml > > >>> URL: > > >> > > > http://svn.apache.org/viewvc/commons/proper/csv/trunk/pom.xml?rev=1658276&r1=1658275&r2=1658276&view=diff > > >>> > > >> > > > ============================================================================== > > >>> --- commons/proper/csv/trunk/pom.xml (original) > > >>> +++ commons/proper/csv/trunk/pom.xml Sun Feb 8 23:47:27 2015 > > >>> @@ -73,6 +73,12 @@ CSV files of various types. > > >>> <organization>The Apache Software Foundation</organization> > > >>> </developer> > > >>> <developer> > > >>> + <name>Emmanuel Bourg</name> > > >>> + <id>ebourg</id> > > >>> + <email>ebo...@apache.org</email> > > >>> + <organization>Apache</organization> > > >>> + </developer> > > >>> + <developer> > > >>> <name>Gary Gregory</name> > > >>> <id>ggregory</id> > > >>> <email>ggreg...@apache.org</email> > > >>> @@ -357,6 +363,112 @@ CSV files of various types. > > >>> </configuration> > > >>> </execution> > > >>> </executions> > > >>> + </plugin> > > >>> + </plugins> > > >>> + </build> > > >>> + </profile> > > >>> + > > >>> + > > >>> + <!-- Profile to build and run the benchmarks. Use 'mvn test > > >> -Pbenchmark', and add '-Dbenchmark=foo' to run only the foo benchmark > > --> > > >>> + <profile> > > >>> + <id>benchmark</id> > > >>> + > > >>> + <dependencies> > > >>> + <dependency> > > >>> + <groupId>org.openjdk.jmh</groupId> > > >>> + <artifactId>jmh-core</artifactId> > > >>> + <version>1.5.2</version> > > >>> + <scope>test</scope> > > >>> + </dependency> > > >>> + > > >>> + <dependency> > > >>> + <groupId>org.openjdk.jmh</groupId> > > >>> + <artifactId>jmh-generator-annprocess</artifactId> > > >>> + <version>1.5.2</version> > > >>> + <scope>test</scope> > > >>> + </dependency> > > >>> + > > >>> + <dependency> > > >>> + <groupId>genjava</groupId> > > >>> + <artifactId>gj-csv</artifactId> > > >>> + <version>1.0</version> > > >>> + <scope>test</scope> > > >>> + </dependency> > > >>> + > > >>> + <dependency> > > >>> + <groupId>net.sourceforge.javacsv</groupId> > > >>> + <artifactId>javacsv</artifactId> > > >>> + <version>2.0</version> > > >>> + <scope>test</scope> > > >>> + </dependency> > > >>> + > > >>> + <dependency> > > >>> + <groupId>com.opencsv</groupId> > > >>> + <artifactId>opencsv</artifactId> > > >>> + <version>3.1</version> > > >>> + <scope>test</scope> > > >>> + </dependency> > > >>> + > > >>> + <dependency> > > >>> + <groupId>net.sf.supercsv</groupId> > > >>> + <artifactId>super-csv</artifactId> > > >>> + <version>2.2.1</version> > > >>> + </dependency> > > >>> + > > >>> + <!-- Not in Maven Central, download manually from > > >> http://kasparov.skife.org/csv/csv-1.0.jar and copy in the base > > directory > > >> --> > > >>> + <dependency> > > >>> + <groupId>org.skife.kasparov</groupId> > > >>> + <artifactId>csv</artifactId> > > >>> + <version>1.0</version> > > >>> + <scope>system</scope> > > >>> + <systemPath>${basedir}/csv-1.0.jar</systemPath> > > >>> + </dependency> > > >>> + </dependencies> > > >>> + > > >>> + <properties> > > >>> + <skipTests>true</skipTests> > > >>> + <benchmark>org.apache</benchmark> > > >>> + </properties> > > >>> + > > >>> + <build> > > >>> + <plugins> > > >>> + <!-- Enable the compilation of the benchmarks --> > > >>> + <plugin> > > >>> + <artifactId>maven-compiler-plugin</artifactId> > > >>> + <configuration combine.self="override"> > > >>> + <testIncludes> > > >>> + <testInclude>**/*</testInclude> > > >>> + </testIncludes> > > >>> + </configuration> > > >>> + </plugin> > > >>> + > > >>> + <!-- Hook the benchmarks to the test phase --> > > >>> + <plugin> > > >>> + <groupId>org.codehaus.mojo</groupId> > > >>> + <artifactId>exec-maven-plugin</artifactId> > > >>> + <executions> > > >>> + <execution> > > >>> + <id>benchmark</id> > > >>> + <phase>test</phase> > > >>> + <goals> > > >>> + <goal>exec</goal> > > >>> + </goals> > > >>> + <configuration> > > >>> + <classpathScope>test</classpathScope> > > >>> + <executable>java</executable> > > >>> + <arguments> > > >>> + <argument>-classpath</argument> > > >>> + <classpath/> > > >>> + <argument>org.openjdk.jmh.Main</argument> > > >>> + <argument>-rf</argument> > > >>> + <argument>json</argument> > > >>> + <argument>-rff</argument> > > >>> + <argument>target/jmh-result.json</argument> > > >>> + <argument>${benchmark}</argument> > > >>> + </arguments> > > >>> + </configuration> > > >>> + </execution> > > >>> + </executions> > > >>> </plugin> > > >>> </plugins> > > >>> </build> > > >>> > > >>> Added: > > >> > > > commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CSVBenchmark.java > > >>> URL: > > >> > > > http://svn.apache.org/viewvc/commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CSVBenchmark.java?rev=1658276&view=auto > > >>> > > >> > > > ============================================================================== > > >>> --- > > >> > > > commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CSVBenchmark.java > > >> (added) > > >>> +++ > > >> > > > commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CSVBenchmark.java > > >> Sun Feb 8 23:47:27 2015 > > >>> @@ -0,0 +1,172 @@ > > >>> +/* > > >>> + * Licensed to the Apache Software Foundation (ASF) under one or > more > > >>> + * contributor license agreements. See the NOTICE file distributed > > with > > >>> + * this work for additional information regarding copyright > ownership. > > >>> + * The ASF licenses this file to You under the Apache License, > Version > > >> 2.0 > > >>> + * (the "License"); you may not use this file except in compliance > > with > > >>> + * the License. You may obtain a copy of the License at > > >>> + * > > >>> + * http://www.apache.org/licenses/LICENSE-2.0 > > >>> + * > > >>> + * Unless required by applicable law or agreed to in writing, > software > > >>> + * distributed under the License is distributed on an "AS IS" BASIS, > > >>> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or > > >> implied. > > >>> + * See the License for the specific language governing permissions > and > > >>> + * limitations under the License. > > >>> + */ > > >>> + > > >>> +package org.apache.commons.csv; > > >>> + > > >>> +import java.io.BufferedReader; > > >>> +import java.io.FileReader; > > >>> +import java.io.IOException; > > >>> +import java.util.List; > > >>> +import java.util.concurrent.TimeUnit; > > >>> + > > >>> +import com.generationjava.io.CsvReader; > > >>> +import org.openjdk.jmh.annotations.Benchmark; > > >>> +import org.openjdk.jmh.annotations.BenchmarkMode; > > >>> +import org.openjdk.jmh.annotations.Fork; > > >>> +import org.openjdk.jmh.annotations.Measurement; > > >>> +import org.openjdk.jmh.annotations.Mode; > > >>> +import org.openjdk.jmh.annotations.OutputTimeUnit; > > >>> +import org.openjdk.jmh.annotations.Threads; > > >>> +import org.openjdk.jmh.annotations.Warmup; > > >>> +import org.openjdk.jmh.infra.Blackhole; > > >>> +import org.supercsv.io.CsvListReader; > > >>> +import org.supercsv.prefs.CsvPreference; > > >>> + > > >>> +@BenchmarkMode(Mode.AverageTime) > > >>> +@Fork(value = 1, jvmArgs = "-server") > > >>> +@Threads(1) > > >>> +@Warmup(iterations = 10) > > >>> +@Measurement(iterations = 10) > > >>> +@OutputTimeUnit(TimeUnit.MILLISECONDS) > > >>> +public class CSVBenchmark { > > >>> + > > >>> + private BufferedReader getReader() throws IOException { > > >>> + return new BufferedReader(new > > FileReader("worldcitiespop.txt")); > > >>> + } > > >>> + > > >>> + @Benchmark > > >>> + public int baseline(Blackhole bh) throws Exception { > > >>> + BufferedReader in = getReader(); > > >>> + int count = 0; > > >>> + String line; > > >>> + while ((line = in.readLine()) != null) { > > >>> + count++; > > >>> + } > > >>> + > > >>> + bh.consume(count); > > >>> + in.close(); > > >>> + return count; > > >>> + } > > >>> + > > >>> + @Benchmark > > >>> + public int parseCommonsCSV(Blackhole bh) throws Exception { > > >>> + BufferedReader in = getReader(); > > >>> + > > >>> + CSVFormat format = CSVFormat.DEFAULT.withHeader(); > > >>> + > > >>> + int count = 0; > > >>> + for (CSVRecord record : format.parse(in)) { > > >>> + count++; > > >>> + } > > >>> + > > >>> + bh.consume(count); > > >>> + in.close(); > > >>> + return count; > > >>> + } > > >>> + > > >>> + @Benchmark > > >>> + public int parseGenJavaCSV(Blackhole bh) throws Exception { > > >>> + BufferedReader in = getReader(); > > >>> + > > >>> + CsvReader reader = new CsvReader(in); > > >>> + reader.setFieldDelimiter(','); > > >>> + > > >>> + int count = 0; > > >>> + String[] record = null; > > >>> + while ((record = reader.readLine()) != null) { > > >>> + count++; > > >>> + } > > >>> + > > >>> + bh.consume(count); > > >>> + in.close(); > > >>> + return count; > > >>> + } > > >>> + > > >>> + @Benchmark > > >>> + public int parseJavaCSV(Blackhole bh) throws Exception { > > >>> + BufferedReader in = getReader(); > > >>> + > > >>> + com.csvreader.CsvReader reader = new > > >> com.csvreader.CsvReader(in, ','); > > >>> + reader.setRecordDelimiter('\n'); > > >>> + > > >>> + int count = 0; > > >>> + while (reader.readRecord()) { > > >>> + count++; > > >>> + } > > >>> + > > >>> + bh.consume(count); > > >>> + in.close(); > > >>> + return count; > > >>> + } > > >>> + > > >>> + @Benchmark > > >>> + public int parseOpenCSV(Blackhole bh) throws Exception { > > >>> + BufferedReader in = getReader(); > > >>> + > > >>> + com.opencsv.CSVReader reader = new com.opencsv.CSVReader(in, > > >> ','); > > >>> + > > >>> + int count = 0; > > >>> + while (reader.readNext() != null) { > > >>> + count++; > > >>> + } > > >>> + > > >>> + bh.consume(count); > > >>> + in.close(); > > >>> + return count; > > >>> + } > > >>> + > > >>> + @Benchmark > > >>> + public int parseSkifeCSV(Blackhole bh) throws Exception { > > >>> + BufferedReader in = getReader(); > > >>> + > > >>> + org.skife.csv.CSVReader reader = new > > >> org.skife.csv.SimpleReader(); > > >>> + reader.setSeperator(','); > > >>> + > > >>> + CountingReaderCallback callback = new > > CountingReaderCallback(); > > >>> + reader.parse(in, callback); > > >>> + > > >>> + bh.consume(callback); > > >>> + in.close(); > > >>> + return callback.count; > > >>> + } > > >>> + > > >>> + private static class CountingReaderCallback implements > > >> org.skife.csv.ReaderCallback { > > >>> + public int count = 0; > > >>> + > > >>> + @Override > > >>> + public void onRow(String[] fields) { > > >>> + count++; > > >>> + } > > >>> + } > > >>> + > > >>> + @Benchmark > > >>> + public int parseSuperCSV(Blackhole bh) throws Exception { > > >>> + BufferedReader in = getReader(); > > >>> + > > >>> + CsvListReader reader = new CsvListReader(in, > > >> CsvPreference.STANDARD_PREFERENCE); > > >>> + > > >>> + int count = 0; > > >>> + List<String> record = null; > > >>> + while ((record = reader.read()) != null) { > > >>> + count++; > > >>> + } > > >>> + > > >>> + bh.consume(count); > > >>> + in.close(); > > >>> + return count; > > >>> + } > > >>> +} > > >>> > > >>> Propchange: > > >> > > > commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CSVBenchmark.java > > >>> > > >> > > > ------------------------------------------------------------------------------ > > >>> svn:eol-style = native > > >>> > > >>> Propchange: > > >> > > > commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CSVBenchmark.java > > >>> > > >> > > > ------------------------------------------------------------------------------ > > >>> svn:keywords = Date Author Id Revision HeadURL > > >>> > > >>> > > >> > > >> --------------------------------------------------------------------- > > >> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org > > >> For additional commands, e-mail: dev-h...@commons.apache.org > > >> > > >> > > > > > > > > > -- > > > http://people.apache.org/~britter/ > > > http://www.systemoutprintln.de/ > > > http://twitter.com/BenediktRitter > > > http://github.com/britter > > > > > > > -- > http://people.apache.org/~britter/ > http://www.systemoutprintln.de/ > http://twitter.com/BenediktRitter > http://github.com/britter > -- E-Mail: garydgreg...@gmail.com | ggreg...@apache.org Java Persistence with Hibernate, Second Edition <http://www.manning.com/bauer3/> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/> Spring Batch in Action <http://www.manning.com/templier/> Blog: http://garygregory.wordpress.com Home: http://garygregory.com/ Tweet! http://twitter.com/GaryGregory