Leve.Iteration @TearDown method called one too many times
Alex Averbuch
alex.averbuch at neotechnology.com
Mon Jul 25 13:29:30 UTC 2016
FYI, I'm using:
<dependency>
<groupId>org.openjdk.jmh</groupId>
<artifactId>jmh-core</artifactId>
<version>1.1.3</version>
</dependency>
On Mon, Jul 25, 2016 at 3:27 PM, Alex Averbuch <
alex.averbuch at neotechnology.com> wrote:
> Hi,
> I have a benchmark for measuring database index creation.
>
> Summary:
> * It is an expensive operation (5+ seconds per invocation), so
> Mode.SingleShotTime is used
> * The database runs 5 warmup iterations & 5 measurement iterations
> * Each iteration must create an index from scratch, so the index must be
> dropped/deleted between iterations
> * To delete the index after each iteration a Level.Iteration @TearDown
> method is used. Inside this method the index is dropped
>
> Problem:
> * It appears as though the Level.Iteration @TearDown method is being
> called 1 more time than the @Benchmark method
> * This causes the database (and benchmark) to crash, because the
> database tries to delete an index that does not exist
>
> When executing the benchmark code at the bottom of this email, the
> following is written to console:
>
> # Run progress: 0.00% complete, ETA 00:00:00
> # Fork: 1 of 1
> # Warmup Iteration 1:
> CREATE
> DROP
> # Warmup Iteration 2:
> CREATE
> DROP
> # Warmup Iteration 3:
> CREATE
> DROP
> # Warmup Iteration 4:
> CREATE
> DROP
> # Warmup Iteration 5:
> CREATE
> DROP
> Iteration 1:
> CREATE
> DROP
> Iteration 2:
> CREATE
> DROP
> Iteration 3:
> CREATE
> DROP
> Iteration 4:
> CREATE
> DROP
> Iteration 5:
> CREATE
> DROP
> DROP <--------- NOTICE THIS ADDITIONAL
> "DROP"
>
>
>
> Does this (extra DROP) make sense?
> Is there any way to prevent it from happening?
> Thanks in advance!
>
>
> @State( Scope.Benchmark )
> public class CreateIndex
> {
> protected Database db;
>
> @Setup
> public void setUp()
> {
> db = new Database();
> // populate db
> }
>
> @TearDown
> public void tearDown()
> {
> db.shutdown();
> }
>
> @TearDown( Level.Iteration )
> public void dropIndex()
> {
> System.out.println("DROP");
> try ( Transaction tx = db.beginTx() )
> {
> // drop index
> tx.success();
> }
> }
>
> @Benchmark
> @BenchmarkMode( Mode.SingleShotTime )
> public void createIndex()
> {
> System.out.println("CREATE");
> try ( Transaction tx = db.beginTx() )
> {
> // create index
> tx.success();
> }
> }
> }
>
More information about the jmh-dev
mailing list