melix / jmh-gradle-plugin

Integrates the JMH benchmarking framework with Gradle
Apache License 2.0
666 stars 88 forks source link

Disagree on innerclass attribute #151

Open MethDamon opened 5 years ago

MethDamon commented 5 years ago

Hi,

I'm trying to use this plugin for benchmarks in the bitcoinJ library in order to benchmark different DB implementations.

I'm trying to use parameterized tests, but I get an error: `* What went wrong: Execution failed for task ':bitcoinj-core:jmhRunBytecodeGenerator'.

A failure occurred while executing me.champeau.gradle.JmhBytecodeGeneratorRunnable Generation of JMH bytecode failed with 1 errors:

  • Annotation generator had thrown the exception. java.lang.IncompatibleClassChangeError: org.bitcoinj.core.LevelDBFullPrunedBlockStoreBenchmark and org.bitcoinj.core.LevelDBFullPrunedBlockStoreBenchmark$BenchmarkParams disagree on InnerClasses attribute at java.base/java.lang.Class.getDeclaringClass0(Native Method) at java.base/java.lang.Class.getEnclosingClass(Class.java:1518) at java.base/java.lang.Class.getCanonicalName0(Class.java:1626) at java.base/java.lang.Class.getCanonicalName(Class.java:1611) at org.openjdk.jmh.generators.reflection.RFClassInfo.getQualifiedName(RFClassInfo.java:67) at org.openjdk.jmh.generators.core.BenchmarkGenerator.buildAnnotatedSet(BenchmarkGenerator.java:206) at org.openjdk.jmh.generators.core.BenchmarkGenerator.generate(BenchmarkGenerator.java:75) at me.champeau.gradle.JmhBytecodeGeneratorRunnable.run(JmhBytecodeGeneratorRunnable.java:126) at org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:39) at org.gradle.workers.internal.WorkerDaemonServer.execute(WorkerDaemonServer.java:46) at org.gradle.workers.internal.WorkerDaemonServer.execute(WorkerDaemonServer.java:30) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at org.gradle.process.internal.worker.request.WorkerAction.run(WorkerAction.java:101) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35) at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:155) at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:137) at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404) at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63) at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55) at java.base/java.lang.Thread.run(Thread.java:834) `

Here's my code:

`package org.bitcoinj.core;

import org.bitcoinj.params.UnitTestParams; import org.bitcoinj.store.BlockStoreException; import org.bitcoinj.store.FullPrunedBlockStore; import org.bitcoinj.store.LevelDBFullPrunedBlockStore; import org.openjdk.jmh.annotations.*;

public class LevelDBFullPrunedBlockStoreBenchmark {

@State(Scope.Benchmark)
public static class BenchmarkParams {

    public static int NUM_BLOCKS = 10;

    @Param({"true", "false"})
    boolean instrument;

    NetworkParameters params = UnitTestParams.get();

    Context context;

    FullPrunedBlockStore store;

    FullPrunedBlockChain fullPrunedBlockChain;

    ECKey ecKey = new ECKey();

    @Setup(Level.Iteration)
    public void setup() throws BlockStoreException {
        context = new Context(params);
        store = new LevelDBFullPrunedBlockStore(
                params, "test-leveldb", 10, 100 * 1024 * 1024l,
                10 * 1024 * 1024, 100000, instrument, Integer.MAX_VALUE);
        fullPrunedBlockChain = new FullPrunedBlockChain(context, store);
    }
}

@org.openjdk.jmh.annotations.Benchmark
@BenchmarkMode(Mode.All)
public void bench(BenchmarkParams benchmarkParams) throws PrunedException, BlockStoreException {
    int height = 1;
    for (int i = 0; i < BenchmarkParams.NUM_BLOCKS; i++) {
        Block block = benchmarkParams.params.getGenesisBlock().createNextBlockWithCoinbase(Block.BLOCK_VERSION_GENESIS, benchmarkParams.ecKey.getPubKey(), height++);
        benchmarkParams.fullPrunedBlockChain.add(block);
    }

    benchmarkParams.store.close();
}

}`

Tolsi commented 4 years ago

+1