Migrate users of Builders/ImmutableNodes
[mdsal.git] / dom / mdsal-dom-inmemory-datastore-benchmark / src / main / java / org / opendaylight / mdsal / dom / store / inmemory / benchmark / AbstractInMemoryWriteTransactionBenchmark.java
1 /*
2  * Copyright (c) 2014, 2017 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.mdsal.dom.store.inmemory.benchmark;
9
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;
18
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;
23
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);
27
28     private static YangInstanceIdentifier[] initOuterListPaths(final int outerListPathsCount) {
29         final YangInstanceIdentifier[] paths = new YangInstanceIdentifier[outerListPathsCount];
30
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();
34         }
35         return paths;
36     }
37
38     protected static final int WARMUP_ITERATIONS = 6;
39     protected static final int MEASUREMENT_ITERATIONS = 6;
40
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);
44
45     private static SystemMapNode initInnerListItems(final int count) {
46         final var mapBuilder = ImmutableNodes.newSystemMapBuilder()
47             .withNodeIdentifier(new NodeIdentifier(BenchmarkModel.INNER_LIST_QNAME));
48
49         for (int i = 1; i <= count; ++i) {
50             Integer key = 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))
55                 .build());
56         }
57         return mapBuilder.build();
58     }
59
60     protected static final MapEntryNode[] OUTER_LIST_ONE_ITEM_INNER_LIST = initOuterListItems(OUTER_LIST_100K,
61             ONE_ITEM_INNER_LIST);
62     protected static final MapEntryNode[] OUTER_LIST_TWO_ITEM_INNER_LIST = initOuterListItems(OUTER_LIST_50K,
63             TWO_ITEM_INNER_LIST);
64     protected static final MapEntryNode[] OUTER_LIST_TEN_ITEM_INNER_LIST = initOuterListItems(OUTER_LIST_10K,
65             TEN_ITEM_INNER_LIST);
66
67     private static MapEntryNode[] initOuterListItems(final int outerListItemsCount, final SystemMapNode innerList) {
68         final var outerListItems = new MapEntryNode[outerListItemsCount];
69
70         for (int i = 0; i < outerListItemsCount; ++i) {
71             Integer key = i;
72             outerListItems[i] = ImmutableNodes.newMapEntryBuilder()
73                 .withNodeIdentifier(
74                     NodeIdentifierWithPredicates.of(BenchmarkModel.OUTER_LIST_QNAME, BenchmarkModel.ID_QNAME, key))
75                 .withChild(ImmutableNodes.leafNode(BenchmarkModel.ID_QNAME, key))
76                 .withChild(innerList)
77                 .build();
78         }
79         return outerListItems;
80     }
81
82     protected EffectiveModelContext schemaContext;
83
84     public abstract void setUp() throws Exception;
85
86     public abstract void tearDown();
87
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))
93                     .build())
94                 .build();
95     }
96 }