From: Robert Varga Date: Mon, 4 Sep 2017 07:51:29 +0000 (+0200) Subject: Fix benchmark compilation and runtime X-Git-Tag: v2.0.0~263 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=df31bdb212ef15d27aaaa99cfbfbda33dff59339;p=yangtools.git Fix benchmark compilation and runtime Benchmark has been broken for some time, fix it up. Change-Id: If2e1f3292a110947a1428a096de20e90591b0f6d Signed-off-by: Robert Varga --- diff --git a/benchmarks/pom.xml b/benchmarks/pom.xml index 18f27abc6a..e965025e42 100644 --- a/benchmarks/pom.xml +++ b/benchmarks/pom.xml @@ -11,56 +11,42 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - org.opendaylight.yangtools - yangtools-parent - 2.0.0-SNAPSHOT - ../common/parent + org.opendaylight.odlparent + odlparent + 2.0.4 + 4.0.0 + org.opendaylight.yangtools benchmarks - - - 2.0.0-SNAPSHOT - 2.0.0-SNAPSHOT - 1.7 - 1.7 - 0.9.7 - + 2.0.0-SNAPSHOT ${project.groupId} yang-data-impl - ${yangtools.version} + 2.0.0-SNAPSHOT ${project.groupId} yang-parser-impl - ${yangtools.version} + 2.0.0-SNAPSHOT org.openjdk.jmh jmh-core - ${jmh.version} + 1.19 org.openjdk.jmh jmh-generator-annprocess - ${jmh.version} + 1.19 - - org.apache.maven.plugins - maven-compiler-plugin - - ${java.source.version} - ${java.source.version} - - org.codehaus.mojo exec-maven-plugin @@ -87,19 +73,19 @@ - - ${odl.site.url}/${project.groupId}/${stream}/${project.artifactId}/ + The following configuration is necessary for maven-site-plugin to + correctly identify the correct deployment path for OpenDaylight Maven + sites. + --> + ${odl.site.url}/${project.groupId}/${stream}/${project.artifactId}/ - - - opendaylight-site - ${nexus.site.url}/${project.artifactId}/ - - + + + opendaylight-site + ${nexus.site.url}/${project.artifactId}/ + + diff --git a/benchmarks/src/main/java/org/opendaylight/yangtools/yang/data/impl/tree/BenchmarkModel.java b/benchmarks/src/main/java/org/opendaylight/yangtools/yang/data/impl/tree/BenchmarkModel.java index a5a1d935e5..9f6305a546 100644 --- a/benchmarks/src/main/java/org/opendaylight/yangtools/yang/data/impl/tree/BenchmarkModel.java +++ b/benchmarks/src/main/java/org/opendaylight/yangtools/yang/data/impl/tree/BenchmarkModel.java @@ -7,49 +7,43 @@ */ package org.opendaylight.yangtools.yang.data.impl.tree; -import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException; -import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; - -import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor; -import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangInferencePipeline; -import java.io.InputStream; -import java.util.Collections; +import java.io.IOException; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.model.api.SchemaContext; +import org.opendaylight.yangtools.yang.model.parser.api.YangSyntaxErrorException; +import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; +import org.opendaylight.yangtools.yang.parser.rfc6020.repo.YangStatementStreamSource; +import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException; +import org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor; +import org.opendaylight.yangtools.yang.parser.stmt.rfc6020.YangInferencePipeline; /** * @author Lukas Sedlak <lsedlak@cisco.com> */ public class BenchmarkModel { - public static final QName TEST_QNAME = QName.create("urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:store:test", "2014-03-13", - "test"); + public static final QName TEST_QNAME = + QName.create("urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom:store:test", "2014-03-13", "test"); public static final QName OUTER_LIST_QNAME = QName.create(TEST_QNAME, "outer-list"); public static final QName INNER_LIST_QNAME = QName.create(TEST_QNAME, "inner-list"); public static final QName OUTER_CHOICE_QNAME = QName.create(TEST_QNAME, "outer-choice"); public static final QName ID_QNAME = QName.create(TEST_QNAME, "id"); public static final QName NAME_QNAME = QName.create(TEST_QNAME, "name"); public static final QName VALUE_QNAME = QName.create(TEST_QNAME, "value"); - private static final String DATASTORE_TEST_YANG = "/odl-datastore-test.yang"; public static final YangInstanceIdentifier TEST_PATH = YangInstanceIdentifier.of(TEST_QNAME); - public static final YangInstanceIdentifier OUTER_LIST_PATH = YangInstanceIdentifier.builder(TEST_PATH).node(OUTER_LIST_QNAME).build(); + public static final YangInstanceIdentifier OUTER_LIST_PATH = YangInstanceIdentifier.builder(TEST_PATH) + .node(OUTER_LIST_QNAME).build(); - public static final InputStream getDatastoreBenchmarkInputStream() { - return getInputStream(DATASTORE_TEST_YANG); - } - - private static InputStream getInputStream(final String resourceName) { - return BenchmarkModel.class.getResourceAsStream(resourceName); - } - - public static SchemaContext createTestContext() throws SourceException, ReactorException { + public static SchemaContext createTestContext() { CrossSourceStatementReactor.BuildAction reactor = YangInferencePipeline.RFC6020_REACTOR.newBuild(); - SchemaContext schemaContext = reactor.buildEffective(Collections.singletonList( - getDatastoreBenchmarkInputStream())); - - return schemaContext; + try { + reactor.addSource(YangStatementStreamSource.create( + YangTextSchemaSource.forResource("/odl-datastore-test.yang"))); + return reactor.buildEffective(); + } catch (IOException | YangSyntaxErrorException | ReactorException e) { + throw new IllegalStateException(e); + } } - } diff --git a/benchmarks/src/main/java/org/opendaylight/yangtools/yang/data/impl/tree/InMemoryDataTreeBenchmark.java b/benchmarks/src/main/java/org/opendaylight/yangtools/yang/data/impl/tree/InMemoryDataTreeBenchmark.java index a1f8961ec3..d6e7346b93 100644 --- a/benchmarks/src/main/java/org/opendaylight/yangtools/yang/data/impl/tree/InMemoryDataTreeBenchmark.java +++ b/benchmarks/src/main/java/org/opendaylight/yangtools/yang/data/impl/tree/InMemoryDataTreeBenchmark.java @@ -7,9 +7,6 @@ */ package org.opendaylight.yangtools.yang.data.impl.tree; -import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException; -import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; - import java.io.IOException; import java.util.concurrent.TimeUnit; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; @@ -17,13 +14,31 @@ import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.MapNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; -import org.opendaylight.yangtools.yang.data.api.schema.tree.*; +import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTree; +import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidate; +import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeConfiguration; +import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeModification; +import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeSnapshot; +import org.opendaylight.yangtools.yang.data.api.schema.tree.DataValidationFailedException; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.CollectionNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.builder.impl.ImmutableContainerNodeBuilder; import org.opendaylight.yangtools.yang.data.impl.schema.tree.InMemoryDataTreeFactory; import org.opendaylight.yangtools.yang.model.api.SchemaContext; -import org.openjdk.jmh.annotations.*; +import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException; +import org.opendaylight.yangtools.yang.parser.spi.source.SourceException; +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Fork; +import org.openjdk.jmh.annotations.Level; +import org.openjdk.jmh.annotations.Measurement; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.OutputTimeUnit; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.Setup; +import org.openjdk.jmh.annotations.State; +import org.openjdk.jmh.annotations.TearDown; +import org.openjdk.jmh.annotations.Warmup; import org.openjdk.jmh.runner.Runner; import org.openjdk.jmh.runner.RunnerException; import org.openjdk.jmh.runner.options.Options; @@ -86,7 +101,7 @@ public class InMemoryDataTreeBenchmark { private static final NormalizedNode[] OUTER_LIST_TWO_ITEM_INNER_LIST = initOuterListItems(OUTER_LIST_50K, TWO_ITEM_INNER_LIST); private static final NormalizedNode[] OUTER_LIST_TEN_ITEM_INNER_LIST = initOuterListItems(OUTER_LIST_10K, TEN_ITEM_INNER_LIST); - private static NormalizedNode[] initOuterListItems(int outerListItemsCount, MapNode innerList) { + private static NormalizedNode[] initOuterListItems(final int outerListItemsCount, final MapNode innerList) { final NormalizedNode[] outerListItems = new NormalizedNode[outerListItemsCount]; for (int i = 0; i < outerListItemsCount; ++i) { @@ -100,7 +115,7 @@ public class InMemoryDataTreeBenchmark { private SchemaContext schemaContext; private DataTree datastore; - public static void main(String... args) throws IOException, RunnerException { + public static void main(final String... args) throws IOException, RunnerException { Options opt = new OptionsBuilder() .include(".*" + InMemoryDataTreeBenchmark.class.getSimpleName() + ".*") .forks(1) @@ -113,7 +128,7 @@ public class InMemoryDataTreeBenchmark { public void setup() throws DataValidationFailedException, SourceException, ReactorException { schemaContext = BenchmarkModel.createTestContext(); final InMemoryDataTreeFactory factory = InMemoryDataTreeFactory.getInstance(); - datastore = factory.create(); + datastore = factory.create(DataTreeConfiguration.DEFAULT_CONFIGURATION); datastore.setSchemaContext(schemaContext); final DataTreeSnapshot snapshot = datastore.takeSnapshot(); initTestNode(snapshot); @@ -131,12 +146,13 @@ public class InMemoryDataTreeBenchmark { .build(); modification.write(testPath, provideOuterListNode()); + modification.ready(); datastore.validate(modification); final DataTreeCandidate candidate = datastore.prepare(modification); datastore.commit(candidate); } - private DataContainerChild provideOuterListNode() { + private static DataContainerChild provideOuterListNode() { return ImmutableContainerNodeBuilder .create() .withNodeIdentifier(new YangInstanceIdentifier.NodeIdentifier(BenchmarkModel.TEST_QNAME)) @@ -154,6 +170,7 @@ public class InMemoryDataTreeBenchmark { for (int outerListKey = 0; outerListKey < OUTER_LIST_100K; ++outerListKey) { modification.write(OUTER_LIST_100K_PATHS[outerListKey], OUTER_LIST_ONE_ITEM_INNER_LIST[outerListKey]); } + modification.ready(); datastore.validate(modification); final DataTreeCandidate candidate = datastore.prepare(modification); datastore.commit(candidate); @@ -167,6 +184,7 @@ public class InMemoryDataTreeBenchmark { for (int outerListKey = 0; outerListKey < OUTER_LIST_100K; ++outerListKey) { final DataTreeModification modification = snapshot.newModification(); modification.write(OUTER_LIST_100K_PATHS[outerListKey], OUTER_LIST_ONE_ITEM_INNER_LIST[outerListKey]); + modification.ready(); datastore.validate(modification); final DataTreeCandidate candidate = datastore.prepare(modification); datastore.commit(candidate); @@ -183,6 +201,7 @@ public class InMemoryDataTreeBenchmark { modification.write(OUTER_LIST_50K_PATHS[outerListKey], OUTER_LIST_TWO_ITEM_INNER_LIST[outerListKey]); } datastore.validate(modification); + modification.ready(); final DataTreeCandidate candidate = datastore.prepare(modification); datastore.commit(candidate); } @@ -196,6 +215,7 @@ public class InMemoryDataTreeBenchmark { final DataTreeModification modification = snapshot.newModification(); modification.write(OUTER_LIST_50K_PATHS[outerListKey], OUTER_LIST_TWO_ITEM_INNER_LIST[outerListKey]); datastore.validate(modification); + modification.ready(); final DataTreeCandidate candidate = datastore.prepare(modification); datastore.commit(candidate); } @@ -211,6 +231,7 @@ public class InMemoryDataTreeBenchmark { modification.write(OUTER_LIST_10K_PATHS[outerListKey], OUTER_LIST_TEN_ITEM_INNER_LIST[outerListKey]); } datastore.validate(modification); + modification.ready(); final DataTreeCandidate candidate = datastore.prepare(modification); datastore.commit(candidate); } @@ -224,6 +245,7 @@ public class InMemoryDataTreeBenchmark { final DataTreeModification modification = snapshot.newModification(); modification.write(OUTER_LIST_10K_PATHS[outerListKey], OUTER_LIST_TEN_ITEM_INNER_LIST[outerListKey]); datastore.validate(modification); + modification.ready(); final DataTreeCandidate candidate = datastore.prepare(modification); datastore.commit(candidate); }