2 * Copyright (c) 2014, 2017 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.mdsal.dom.store.inmemory.benchmark;
10 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
11 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier;
12 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates;
13 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode;
14 import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode;
15 import org.opendaylight.yangtools.yang.data.api.schema.SystemMapNode;
16 import org.opendaylight.yangtools.yang.data.spi.node.ImmutableNodes;
17 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
19 public abstract class AbstractInMemoryWriteTransactionBenchmark {
20 protected static final int OUTER_LIST_100K = 100000;
21 protected static final int OUTER_LIST_50K = 50000;
22 protected static final int OUTER_LIST_10K = 10000;
24 protected static final YangInstanceIdentifier[] OUTER_LIST_100K_PATHS = initOuterListPaths(OUTER_LIST_100K);
25 protected static final YangInstanceIdentifier[] OUTER_LIST_50K_PATHS = initOuterListPaths(OUTER_LIST_50K);
26 protected static final YangInstanceIdentifier[] OUTER_LIST_10K_PATHS = initOuterListPaths(OUTER_LIST_10K);
28 private static YangInstanceIdentifier[] initOuterListPaths(final int outerListPathsCount) {
29 final YangInstanceIdentifier[] paths = new YangInstanceIdentifier[outerListPathsCount];
31 for (int outerListKey = 0; outerListKey < outerListPathsCount; ++outerListKey) {
32 paths[outerListKey] = YangInstanceIdentifier.builder(BenchmarkModel.OUTER_LIST_PATH)
33 .nodeWithKey(BenchmarkModel.OUTER_LIST_QNAME, BenchmarkModel.ID_QNAME, outerListKey).build();
38 protected static final int WARMUP_ITERATIONS = 6;
39 protected static final int MEASUREMENT_ITERATIONS = 6;
41 protected static final SystemMapNode ONE_ITEM_INNER_LIST = initInnerListItems(1);
42 protected static final SystemMapNode TWO_ITEM_INNER_LIST = initInnerListItems(2);
43 protected static final SystemMapNode TEN_ITEM_INNER_LIST = initInnerListItems(10);
45 private static SystemMapNode initInnerListItems(final int count) {
46 final var mapBuilder = ImmutableNodes.newSystemMapBuilder()
47 .withNodeIdentifier(new NodeIdentifier(BenchmarkModel.INNER_LIST_QNAME));
49 for (int i = 1; i <= count; ++i) {
51 mapBuilder.withChild(ImmutableNodes.newMapEntryBuilder()
52 .withNodeIdentifier(NodeIdentifierWithPredicates.of(BenchmarkModel.INNER_LIST_QNAME,
53 BenchmarkModel.NAME_QNAME, key))
54 .withChild(ImmutableNodes.leafNode(BenchmarkModel.NAME_QNAME, key))
57 return mapBuilder.build();
60 protected static final MapEntryNode[] OUTER_LIST_ONE_ITEM_INNER_LIST = initOuterListItems(OUTER_LIST_100K,
62 protected static final MapEntryNode[] OUTER_LIST_TWO_ITEM_INNER_LIST = initOuterListItems(OUTER_LIST_50K,
64 protected static final MapEntryNode[] OUTER_LIST_TEN_ITEM_INNER_LIST = initOuterListItems(OUTER_LIST_10K,
67 private static MapEntryNode[] initOuterListItems(final int outerListItemsCount, final SystemMapNode innerList) {
68 final var outerListItems = new MapEntryNode[outerListItemsCount];
70 for (int i = 0; i < outerListItemsCount; ++i) {
72 outerListItems[i] = ImmutableNodes.newMapEntryBuilder()
74 NodeIdentifierWithPredicates.of(BenchmarkModel.OUTER_LIST_QNAME, BenchmarkModel.ID_QNAME, key))
75 .withChild(ImmutableNodes.leafNode(BenchmarkModel.ID_QNAME, key))
79 return outerListItems;
82 protected EffectiveModelContext schemaContext;
84 public abstract void setUp() throws Exception;
86 public abstract void tearDown();
88 protected static ContainerNode provideOuterListNode() {
89 return ImmutableNodes.newContainerBuilder()
90 .withNodeIdentifier(new NodeIdentifier(BenchmarkModel.TEST_QNAME))
91 .withChild(ImmutableNodes.newSystemMapBuilder()
92 .withNodeIdentifier(new NodeIdentifier(BenchmarkModel.OUTER_LIST_QNAME))