diff options
20 files changed, 1 insertions, 3365 deletions
diff --git a/mdbc-benchmark/pom.xml b/mdbc-benchmark/pom.xml deleted file mode 100644 index a12e4a2..0000000 --- a/mdbc-benchmark/pom.xml +++ /dev/null @@ -1,305 +0,0 @@ -<!-- -Copyright (c) 2014, Oracle America, Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - * Neither the name of Oracle nor the names of its contributors may be used - to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF -THE POSSIBILITY OF SUCH DAMAGE. ---> -<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <parent> - <artifactId>mdbc</artifactId> - <groupId>org.onap.music.mdbc</groupId> - <version>0.0.1-SNAPSHOT</version> - </parent> - <modelVersion>4.0.0</modelVersion> - - <artifactId>mdbc-benchmark</artifactId> - <version>0.0.1-SNAPSHOT</version> - <name>mdbc-benchmark</name> - <description>MDBC Benchmark</description> - <packaging>jar</packaging> - - <dependencies> - <dependency> - <groupId>org.json</groupId> - <artifactId>json</artifactId> - <version>20160810</version> - </dependency> - <dependency> - <groupId>org.openjdk.jmh</groupId> - <artifactId>jmh-core</artifactId> - <version>${jmh.version}</version> - </dependency> - <dependency> - <groupId>org.openjdk.jmh</groupId> - <artifactId>jmh-generator-annprocess</artifactId> - <version>${jmh.version}</version> - <scope>provided</scope> - </dependency> - <dependency> - <groupId>com.att.eelf</groupId> - <artifactId>eelf-core</artifactId> - <version>1.0.0</version> - </dependency> - <dependency> - <groupId>org.apache.calcite.avatica</groupId> - <artifactId>avatica-server</artifactId> - <version>1.12.0</version> - </dependency> - <dependency> - <groupId>com.google.code.gson</groupId> - <artifactId>gson</artifactId> - <version>2.8.5</version> - </dependency> - <dependency> - <groupId>org.mariadb.jdbc</groupId> - <artifactId>mariadb-java-client</artifactId> - <version>1.1.7</version> - </dependency> - <dependency> - <groupId>postgresql</groupId> - <artifactId>postgresql</artifactId> - <version>9.1-901-1.jdbc4</version> - </dependency> - <dependency> - <groupId>com.datastax.cassandra</groupId> - <artifactId>cassandra-driver-core</artifactId> - <version>3.3.0</version> - </dependency> - <dependency> - <groupId>com.google.guava</groupId> - <artifactId>guava</artifactId> - <version>19.0</version> - </dependency> - <dependency> - <!-- The oparent dependency managed version 9.4.12.v20180830 will not work --> - <!-- 9.2.19.v20160908 is needed by avatica-server 1.12.0 --> - <groupId>org.eclipse.jetty</groupId> - <artifactId>jetty-http</artifactId> - <version>9.2.19.v20160908</version> - </dependency> - <dependency> - <!-- The oparent dependency managed version 9.4.12.v20180830 will not work --> - <!-- 9.2.19.v20160908 is needed by avatica-server 1.12.0 --> - <groupId>org.eclipse.jetty</groupId> - <artifactId>jetty-server</artifactId> - <version>9.2.19.v20160908</version> - </dependency> - <dependency> - <!-- 9.2.19.v20160908 is needed by avatica-server 1.12.0 --> - <groupId>org.eclipse.jetty</groupId> - <artifactId>jetty-security</artifactId> - <version>9.2.19.v20160908</version> - </dependency> - <dependency> - <!-- 9.2.19.v20160908 is needed by avatica-server 1.12.0 --> - <groupId>org.eclipse.jetty</groupId> - <artifactId>jetty-util</artifactId> - <version>9.2.19.v20160908</version> - </dependency> - <dependency> - <groupId>org.apache.commons</groupId> - <artifactId>commons-lang3</artifactId> - <version>3.7</version> - </dependency> - <!-- These two dependencies pull in optional libraries for Cassandra --> - <dependency> - <groupId>net.jpountz.lz4</groupId> - <artifactId>lz4</artifactId> - <version>1.3.0</version> - </dependency> - <dependency> - <groupId>org.xerial.snappy</groupId> - <artifactId>snappy-java</artifactId> - <version>1.1.2.6</version> - </dependency> - <dependency> - <groupId>com.github.jsqlparser</groupId> - <artifactId>jsqlparser</artifactId> - <version>1.1</version> - </dependency> - <dependency> - <groupId>ch.qos.logback</groupId> - <artifactId>logback-core</artifactId> - <version>1.2.3</version> - </dependency> - - <!-- https://mvnrepository.com/artifact/javax.servlet/servlet-api --> - <dependency> - <groupId>javax.servlet</groupId> - <artifactId>servlet-api</artifactId> - <version>2.5</version> - <scope>provided</scope> - </dependency> - <!-- https://mvnrepository.com/artifact/org.apache.calcite.avatica/avatica-server --> - <dependency> - <groupId>org.apache.calcite.avatica</groupId> - <artifactId>avatica-server</artifactId> - <version>1.12.0</version> - </dependency> - <!-- https://mvnrepository.com/artifact/org.apache.calcite/calcite-plus --> - <dependency> - <groupId>org.apache.calcite</groupId> - <artifactId>calcite-plus</artifactId> - <version>1.12.0</version> - </dependency> - <dependency> - <groupId>com.beust</groupId> - <artifactId>jcommander</artifactId> - <version>1.72</version> - </dependency> - <dependency> - <groupId>com.google.code.gson</groupId> - <artifactId>gson</artifactId> - <version>2.8.5</version> - </dependency> - <dependency> - <groupId>io.netty</groupId> - <artifactId>netty-handler</artifactId> - <version>4.1.30.Final</version> - </dependency> - <!-- https://mvnrepository.com/artifact/com.google.protobuf/protobuf-java --> - <dependency> - <groupId>com.google.protobuf</groupId> - <artifactId>protobuf-java</artifactId> - <version>3.6.1</version> - </dependency> - </dependencies> - - <properties> - <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> - - <!-- - JMH version to use with this project. - --> - <jmh.version>1.21</jmh.version> - - <!-- - Java source/target to use for compilation. - --> - <javac.target>1.8</javac.target> - - <!-- - Name of the benchmark Uber-JAR to generate. - --> - <!-- - Name of the benchmark Uber-JAR to generate. - --> - <uberjar.name>benchmarks</uberjar.name> - </properties> - - <build> - <plugins> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-compiler-plugin</artifactId> - <version>3.1</version> - <configuration> - <compilerVersion>${javac.target}</compilerVersion> - <source>${javac.target}</source> - <target>${javac.target}</target> - </configuration> - </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-shade-plugin</artifactId> - <version>2.2</version> - <executions> - <execution> - <phase>package</phase> - <goals> - <goal>shade</goal> - </goals> - <configuration> - <finalName>${uberjar.name}</finalName> - <transformers> - <transformer - implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> - <mainClass>org.openjdk.jmh.Main</mainClass> - </transformer> - </transformers> - <filters> - <filter> - <!-- - Shading signed JARs will fail without this. - http://stackoverflow.com/questions/999489/invalid-signature-file-when-attempting-to-run-a-jar - --> - <artifact>*:*</artifact> - <excludes> - <exclude>META-INF/*.SF</exclude> - <exclude>META-INF/*.DSA</exclude> - <exclude>META-INF/*.RSA</exclude> - </excludes> - </filter> - </filters> - </configuration> - </execution> - </executions> - </plugin> - </plugins> - <pluginManagement> - <plugins> - <plugin> - <artifactId>maven-clean-plugin</artifactId> - <version>2.5</version> - </plugin> - <plugin> - <artifactId>maven-deploy-plugin</artifactId> - <version>2.8.1</version> - </plugin> - <plugin> - <artifactId>maven-install-plugin</artifactId> - <version>2.5.1</version> - </plugin> - <plugin> - <artifactId>maven-jar-plugin</artifactId> - <version>2.4</version> - </plugin> - <plugin> - <artifactId>maven-javadoc-plugin</artifactId> - <version>2.9.1</version> - </plugin> - <plugin> - <artifactId>maven-resources-plugin</artifactId> - <version>2.6</version> - </plugin> - <plugin> - <artifactId>maven-site-plugin</artifactId> - <version>3.3</version> - </plugin> - <plugin> - <artifactId>maven-source-plugin</artifactId> - <version>2.2.1</version> - </plugin> - <plugin> - <artifactId>maven-surefire-plugin</artifactId> - <version>2.17</version> - </plugin> - </plugins> - </pluginManagement> -</build> -</project> diff --git a/mdbc-benchmark/src/main/java/org/onap/music/mdbc/BenchmarkUtils.java b/mdbc-benchmark/src/main/java/org/onap/music/mdbc/BenchmarkUtils.java deleted file mode 100644 index 06f2a95..0000000 --- a/mdbc-benchmark/src/main/java/org/onap/music/mdbc/BenchmarkUtils.java +++ /dev/null @@ -1,245 +0,0 @@ -/* - * ============LICENSE_START==================================================== - * org.onap.music.mdbc - * ============================================================================= - * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. - * ============================================================================= - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END====================================================== - */ -package org.onap.music.mdbc; - -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.SQLException; -import java.sql.Statement; -import java.util.Properties; - -public class BenchmarkUtils { - public static final String driver = "org.apache.calcite.avatica.remote.Driver"; - public static final String mariaDriver = "org.mariadb.jdbc.Driver"; - public static final String postgresDriver = "org.postgresql.Driver"; - public static String TABLE; - public static String updateBuilder; - - public enum ExecutionType { - MARIA_DB, COCKROACH_DB, METRIC,POSTGRES - } - - public static void SetupTable(String table){ - TABLE=table; - updateBuilder = new StringBuilder() - .append("UPDATE ") - .append(table) - .append(" SET Counter = Counter + 1,") - .append("City = 'Sandy Springs'") - .append(";").toString(); - } - - public static void setupCreateTables(Connection connection){ - createTable(connection); - try { - connection.close(); - } catch (SQLException e) { - e.printStackTrace(); - System.exit(1); - } - } - - public static void setupCreateRows(Connection testConnection, int rows){ - //Empty database - boolean cleanResult = BenchmarkUtils.cleanTable(testConnection); - //Add new lines - BenchmarkUtils.addRowsToTable(Integer.valueOf(rows),testConnection); - - //Commit - try { - testConnection.commit(); - } catch (SQLException e) { - e.printStackTrace(); - System.exit(1); - } - } - - public static Connection getConnection(String ip, ExecutionType type, String user, String password) { - final String connectionUrl = "jdbc:avatica:remote:url=http://" + ip + ":30000;serialization=protobuf"; - final String mariaConnectionUrl = "jdbc:mariadb://" + ip + ":3306/test"; - final String cockroachUrl = "jdbc:postgresql://" + ip + ":26257/test"; - final String postgresUrl = "jdbc:postgresql://" + ip + ":5432/test"; - - try { - switch (type) { - case MARIA_DB: - Class.forName(mariaDriver); - break; - case METRIC: - Class.forName(driver); - break; - case COCKROACH_DB: - case POSTGRES: - Class.forName(postgresDriver); - break; - } - } catch (ClassNotFoundException e) { - e.printStackTrace(); - System.exit(1); - } - Connection connection = null; - try { - if (type == ExecutionType.METRIC) { - connection = DriverManager.getConnection(connectionUrl); - } else { - Properties connectionProps = new Properties(); - connectionProps.put("user", user); - if (type == ExecutionType.COCKROACH_DB) { - connectionProps.setProperty("sslmode", "disable"); - } else { - connectionProps.put("password", password); - } - final String url = (type == ExecutionType.MARIA_DB) ? mariaConnectionUrl : - (type == ExecutionType.COCKROACH_DB)?cockroachUrl:postgresUrl; - connection = DriverManager.getConnection(url, connectionProps); - } - } catch (SQLException e) { - e.printStackTrace(); - System.exit(1); - } - try { - connection.setAutoCommit(false); - } catch (SQLException e) { - e.printStackTrace(); - System.exit(1); - } - return connection; - } - - public static void createTable(Connection connection) { - final String sql = "CREATE TABLE IF NOT EXISTS "+TABLE+" (\n" + - " PersonID int,\n" + - " Counter int,\n" + - " LastName varchar(255),\n" + - " FirstName varchar(255),\n" + - " Address varchar(255),\n" + - " City varchar(255),\n" + - " PRIMARY KEY(PersonID)"+ - ");"; - - Statement stmt = null; - try { - stmt = connection.createStatement(); - } catch (SQLException e) { - e.printStackTrace(); - System.exit(1); - } - - Boolean execute = null; - try { - execute = stmt.execute(sql); - } catch (SQLException e) { - e.printStackTrace(); - System.exit(1); - } - - try { - connection.commit(); - } catch (SQLException e) { - e.printStackTrace(); - System.exit(1); - } - - try { - stmt.close(); - } catch (SQLException e) { - e.printStackTrace(); - System.exit(1); - } - } - - public static boolean cleanTable(Connection testConnection) { - String cleanCmd = "DELETE FROM "+TABLE+";"; - Statement stmt = null; - try { - stmt = testConnection.createStatement(); - } catch (SQLException e) { - e.printStackTrace(); - System.exit(1); - } - - Boolean execute = null; - try { - execute = stmt.execute(cleanCmd); - } catch (SQLException e) { - e.printStackTrace(); - System.exit(1); - } - try { - testConnection.commit(); - } catch (SQLException e) { - e.printStackTrace(); - System.exit(1); - } - try { - stmt.close(); - } catch (SQLException e) { - e.printStackTrace(); - System.exit(1); - } - return execute; - } - - public static void addRowsToTable(int totalNumberOfRows, Connection testConnection) { - for (int i = 0; i < totalNumberOfRows; i++) { - final StringBuilder insertSQLBuilder = new StringBuilder() - .append("INSERT INTO "+TABLE+" VALUES (") - .append(i) - .append(", ") - .append(0) - .append(", '") - .append("Last-") - .append(i) - .append("', '") - .append("First-") - .append(i) - .append("', 'KACB', 'ATLANTA');"); - Statement stmt = null; - try { - stmt = testConnection.createStatement(); - } catch (SQLException e) { - e.printStackTrace(); - System.exit(1); - } - - Boolean execute = null; - try { - execute = stmt.execute(insertSQLBuilder.toString()); - } catch (SQLException e) { - e.printStackTrace(); - System.exit(1); - } - try { - stmt.close(); - } catch (SQLException e) { - e.printStackTrace(); - System.exit(1); - } - } - try { - testConnection.commit(); - } catch (SQLException e) { - e.printStackTrace(); - System.exit(1); - } - } - - -} diff --git a/mdbc-benchmark/src/main/java/org/onap/music/mdbc/MetricBenchmark.java b/mdbc-benchmark/src/main/java/org/onap/music/mdbc/MetricBenchmark.java deleted file mode 100644 index 19db6f4..0000000 --- a/mdbc-benchmark/src/main/java/org/onap/music/mdbc/MetricBenchmark.java +++ /dev/null @@ -1,141 +0,0 @@ -/* - * ============LICENSE_START==================================================== - * org.onap.music.mdbc - * ============================================================================= - * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. - * ============================================================================= - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END====================================================== - */ -package org.onap.music.mdbc; - -import static org.onap.music.mdbc.BenchmarkUtils.setupCreateRows; -import static org.onap.music.mdbc.BenchmarkUtils.setupCreateTables; - -import org.onap.music.mdbc.BenchmarkUtils.ExecutionType; -import org.openjdk.jmh.annotations.*; -import org.openjdk.jmh.infra.Blackhole; -import org.openjdk.jmh.runner.Runner; -import org.openjdk.jmh.runner.RunnerException; -import org.openjdk.jmh.runner.options.Options; -import org.openjdk.jmh.runner.options.OptionsBuilder; - -import java.sql.Connection; -import java.sql.SQLException; -import java.sql.Statement; -import java.util.concurrent.TimeUnit; - -@BenchmarkMode({Mode.AverageTime, Mode.SampleTime}) -@OutputTimeUnit(TimeUnit.MILLISECONDS) -@State(Scope.Benchmark) -public class MetricBenchmark { - - public static void main(String[] args) throws RunnerException { - Options opt = new OptionsBuilder() - .include(MetricBenchmark.class.getSimpleName()) - .param("type", ExecutionType.METRIC.name()) - .forks(0) - .threads(1) - .build(); - new Runner(opt).run(); - } - - @Benchmark - public boolean testMethod(MyState state, Blackhole blackhole) { - Statement stmt = null; - try { - stmt = state.testConnection.createStatement(); - } catch (SQLException e) { - e.printStackTrace(); - System.exit(1); - } - - Boolean execute = null; - try { - execute = stmt.execute(state.update); - } catch (SQLException e) { - e.printStackTrace(); - System.exit(1); - } - try { - //TODO: check if state need to be consumed by blackhole to guarantee execution - state.testConnection.commit(); - } catch (SQLException e) { - e.printStackTrace(); - System.exit(1); - } - try { - stmt.close(); - } catch (SQLException e) { - e.printStackTrace(); - System.exit(1); - } - blackhole.consume(execute); - return execute; - } - - - @State(Scope.Benchmark) - public static class MyState { - public String update; - public final String driver = "org.apache.calcite.avatica.remote.Driver"; - public final String mariaDriver = "org.mariadb.jdbc.Driver"; - public final String cockroachDriver = "org.postgresql.Driver"; - final String user = "root"; - final String password = "metriccluster"; - @Param({"104.209.240.219"}) - public String ip; - @Param({"PERSONS"}) - public String table; - @Param({"1", "10", "50", "80", "100", "200", "300", "400"}) - public int rows; - @Param({"MARIA_DB", "COCKROACH_DB", "METRIC", "POSTGRES"}) - public ExecutionType type; - - public Connection testConnection; - - - private Connection createConnection() { - return BenchmarkUtils.getConnection(ip,type,user,password); - } - - @Setup(Level.Trial) - public void doTrialSetup(){ - BenchmarkUtils.SetupTable(table); - update = BenchmarkUtils.updateBuilder; - } - - @Setup(Level.Iteration) - public void doSetup() { - Connection connection = createConnection(); - setupCreateTables(connection); - //Setup connection - testConnection = createConnection(); - setupCreateRows(testConnection,rows); - - } - - @TearDown(Level.Iteration) - public void doTearDown() { - System.out.println("Do TearDown"); - try { - testConnection.close(); - } catch (SQLException e) { - e.printStackTrace(); - System.exit(1); - } - } - - - } -} diff --git a/mdbc-benchmark/src/main/java/org/onap/music/mdbc/MetricCommitBenchmark.java b/mdbc-benchmark/src/main/java/org/onap/music/mdbc/MetricCommitBenchmark.java deleted file mode 100644 index 803a162..0000000 --- a/mdbc-benchmark/src/main/java/org/onap/music/mdbc/MetricCommitBenchmark.java +++ /dev/null @@ -1,141 +0,0 @@ -/* - * ============LICENSE_START==================================================== - * org.onap.music.mdbc - * ============================================================================= - * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. - * ============================================================================= - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END====================================================== - */ -package org.onap.music.mdbc; - -import static org.onap.music.mdbc.BenchmarkUtils.setupCreateRows; -import static org.onap.music.mdbc.BenchmarkUtils.setupCreateTables; - -import org.onap.music.mdbc.BenchmarkUtils.ExecutionType; -import org.openjdk.jmh.annotations.*; -import org.openjdk.jmh.infra.Blackhole; -import org.openjdk.jmh.runner.Runner; -import org.openjdk.jmh.runner.RunnerException; -import org.openjdk.jmh.runner.options.Options; -import org.openjdk.jmh.runner.options.OptionsBuilder; - -import java.sql.Connection; -import java.sql.SQLException; -import java.sql.Statement; -import java.util.concurrent.TimeUnit; - -@BenchmarkMode({Mode.AverageTime, Mode.SampleTime}) -@OutputTimeUnit(TimeUnit.MILLISECONDS) -@State(Scope.Benchmark) -public class MetricCommitBenchmark { - - - public static void main(String[] args) throws RunnerException { - Options opt = new OptionsBuilder() - .include(MetricBenchmark.class.getSimpleName()) - .param("type", ExecutionType.METRIC.name()) - .forks(1) - .threads(1) - .build(); - new Runner(opt).run(); - } - - @Benchmark - public void testMethod(MyState state) { - try { - state.testConnection.commit(); - } catch (SQLException e) { - e.printStackTrace(); - System.exit(1); - } - } - - - @State(Scope.Benchmark) - public static class MyState { - - String update; - final String user = "root"; - final String password = "metriccluster"; - @Param({"104.209.240.219"}) - public String ip; - @Param({"1", "10", "50", "80", "100", "200", "300", "400"}) - public int rows; - @Param({"MARIA_DB", "COCKROACH_DB", "METRIC","POSTGRES"}) - public ExecutionType type; - @Param({"PERSONS"}) - public String table; - - public Connection testConnection; - - public Statement stmt; - - private Connection createConnection() { - return BenchmarkUtils.getConnection(ip,type,user,password); - } - - @Setup(Level.Trial) - public void doTrialSetup(){ - BenchmarkUtils.SetupTable(table); - update=BenchmarkUtils.updateBuilder; - } - - @Setup(Level.Invocation) - public void doInvocationSetup(){ - try { - stmt = testConnection.createStatement(); - } catch (SQLException e) { - e.printStackTrace(); - System.exit(1); - } - Boolean execute = null; - try { - execute = stmt.execute(update); - } catch (SQLException e) { - e.printStackTrace(); - System.exit(1); - } - } - - @TearDown(Level.Invocation) - public void doInvocationTearDown(){ - try { - stmt.close(); - } catch (SQLException e) { - e.printStackTrace(); - System.exit(1); - } - } - - @Setup(Level.Iteration) - public void doSetup() { - Connection connection = createConnection(); - setupCreateTables(connection); - //Setup connection - testConnection = createConnection(); - setupCreateRows(testConnection,rows); - } - - @TearDown(Level.Iteration) - public void doTearDown() { - System.out.println("Do TearDown"); - try { - testConnection.close(); - } catch (SQLException e) { - e.printStackTrace(); - System.exit(1); - } - } - } -} diff --git a/mdbc-benchmark/src/main/java/org/onap/music/mdbc/MetricStatementBenchmark.java b/mdbc-benchmark/src/main/java/org/onap/music/mdbc/MetricStatementBenchmark.java deleted file mode 100644 index 7dc950a..0000000 --- a/mdbc-benchmark/src/main/java/org/onap/music/mdbc/MetricStatementBenchmark.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * ============LICENSE_START==================================================== - * org.onap.music.mdbc - * ============================================================================= - * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. - * ============================================================================= - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END====================================================== - */ -package org.onap.music.mdbc; - -import static org.onap.music.mdbc.BenchmarkUtils.setupCreateRows; -import static org.onap.music.mdbc.BenchmarkUtils.setupCreateTables; - -import org.onap.music.mdbc.BenchmarkUtils.ExecutionType; -import org.openjdk.jmh.annotations.*; -import org.openjdk.jmh.infra.Blackhole; -import org.openjdk.jmh.runner.Runner; -import org.openjdk.jmh.runner.RunnerException; -import org.openjdk.jmh.runner.options.Options; -import org.openjdk.jmh.runner.options.OptionsBuilder; - -import java.sql.Connection; -import java.sql.SQLException; -import java.sql.Statement; -import java.util.concurrent.TimeUnit; - -@BenchmarkMode({Mode.AverageTime, Mode.SampleTime}) -@OutputTimeUnit(TimeUnit.MILLISECONDS) -@State(Scope.Benchmark) -public class MetricStatementBenchmark { - - - public static void main(String[] args) throws RunnerException { - Options opt = new OptionsBuilder() - .include(MetricBenchmark.class.getSimpleName()) - .param("type", ExecutionType.METRIC.name()) - .forks(1) - .threads(1) - .build(); - new Runner(opt).run(); - } - - @Benchmark - public boolean testMethod(MyState state, Blackhole blackhole) { - Boolean execute = null; - try { - execute = state.stmt.execute(state.update); - } catch (SQLException e) { - e.printStackTrace(); - System.exit(1); - } - blackhole.consume(execute); - return execute; - } - - - @State(Scope.Benchmark) - public static class MyState { - - public String update; - final String user = "root"; - final String password = "metriccluster"; - @Param({"104.209.240.219"}) - public String ip; - @Param({"1", "10", "50", "80", "100", "200", "300", "400"}) - public int rows; - @Param({"MARIA_DB", "COCKROACH_DB", "METRIC","POSTGRES"}) - public ExecutionType type; - @Param({"PERSONS"}) - public String table; - - public Connection testConnection; - - public Statement stmt; - - private Connection createConnection() { - return BenchmarkUtils.getConnection(ip,type,user,password); - } - - @Setup(Level.Trial) - public void doTrialSetup(){ - BenchmarkUtils.SetupTable(table); - update=BenchmarkUtils.updateBuilder; - } - - @Setup(Level.Invocation) - public void doInvocationSetup(){ - try { - stmt = testConnection.createStatement(); - } catch (SQLException e) { - e.printStackTrace(); - System.exit(1); - } - } - - @TearDown(Level.Invocation) - public void doInvocationTearDown(){ - try { - //TODO: check if state need to be consumed by blackhole to guarantee execution - testConnection.commit(); - } catch (SQLException e) { - e.printStackTrace(); - System.exit(1); - } - try { - stmt.close(); - } catch (SQLException e) { - e.printStackTrace(); - System.exit(1); - } - } - - @Setup(Level.Iteration) - public void doSetup() { - Connection connection = createConnection(); - setupCreateTables(connection); - //Setup connection - testConnection = createConnection(); - setupCreateRows(testConnection,rows); - } - - @TearDown(Level.Iteration) - public void doTearDown() { - System.out.println("Do TearDown"); - try { - testConnection.close(); - } catch (SQLException e) { - e.printStackTrace(); - System.exit(1); - } - } - } -} diff --git a/mdbc-benchmark/src/main/resources/logback.xml b/mdbc-benchmark/src/main/resources/logback.xml deleted file mode 100755 index 4215681..0000000 --- a/mdbc-benchmark/src/main/resources/logback.xml +++ /dev/null @@ -1,369 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - ============LICENSE_START========================================== - mdbc - =================================================================== - Copyright © 2017 AT&T Intellectual Property. All rights reserved. - =================================================================== - - Unless otherwise specified, all software contained herein is licensed - under the Apache License, Version 2.0 (the “License”); - you may not use this software except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - Unless otherwise specified, all documentation contained herein is licensed - under the Creative Commons License, Attribution 4.0 Intl. (the “License”); - you may not use this documentation except in compliance with the License. - You may obtain a copy of the License at - - https://creativecommons.org/licenses/by/4.0/ - - Unless required by applicable law or agreed to in writing, documentation - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - ============LICENSE_END============================================ - - - --> - -<configuration scan="false" scanPeriod="3 seconds" debug="true"> - <!-- - Logback files for the mdbc Driver "mdbc" - are created in directory ${catalina.base}/logs/mdbc; - e.g., apache-tomcat-8.0.35/logs/mdbc/application.log - --> - <!--<jmxConfigurator /> --> - - <!-- specify the component name --> - <property name="catalina.home" value="/var/log/metric/"/> - <property name="componentName" value="mdbc"></property> - - <!-- specify the base path of the log directory --> - <property name="logDirPrefix" value="${catalina.base}/logs"></property> - - <!-- The directories where logs are written --> - <property name="logDirectory" value="${logDirPrefix}/${componentName}"/> - <!-- Can easily relocate debug logs by modifying this path. --> - <property name="debugLogDirectory" value="${logDirPrefix}/${componentName}"/> - - <!-- log file names --> - <property name="generalLogName" value="application"/> - <property name="errorLogName" value="error"/> - <property name="metricsLogName" value="metrics"/> - <property name="auditLogName" value="audit"/> - <property name="debugLogName" value="debug"/> - <!-- - These loggers are not used in code (yet). - <property name="securityLogName" value="security" /> - <property name="policyLogName" value="policy" /> - <property name="performanceLogName" value="performance" /> - <property name="serverLogName" value="server" /> - --> - - <!-- 1610 Logging Fields Format Revisions --> - <property name="auditLoggerPattern" - value="%X{AuditLogBeginTimestamp}|%X{AuditLogEndTimestamp}|%X{RequestId}|%X{ServiceInstanceId}|%thread|%X{VirtualServerName}|%X{ServiceName}|%X{PartnerName}|%X{StatusCode}|%X{ResponseCode}|%X{ResponseDescription}|%X{InstanceUUID}|%.-5level|%X{AlertSeverity}|%X{ServerIPAddress}|%X{Timer}|%X{ServerFQDN}|%X{ClientIPAddress}|%X{ClassName}|%X{Unused}|%X{ProcessKey}|%X{CustomField1}|%X{CustomField2}|%X{CustomField3}|%X{CustomField4}| %msg%n"/> - - <property name="metricsLoggerPattern" - value="%X{MetricsLogBeginTimestamp}|%X{MetricsLogEndTimestamp}|%X{RequestId}|%X{ServiceInstanceId}|%thread|%X{VirtualServerName}|%X{ServiceName}|%X{PartnerName}|%X{TargetEntity}|%X{TargetServiceName}|%X{StatusCode}|%X{ResponseCode}|%X{ResponseDescription}|%X{InstanceUUID}|%.-5level|%X{AlertSeverity}|%X{ServerIPAddress}|%X{Timer}|%X{ServerFQDN}|%X{ClientIPAddress}|%X{ClassName}|%X{Unused}|%X{ProcessKey}|%X{TargetVisualEntity}|%X{CustomField1}|%X{CustomField2}|%X{CustomField3}|%X{CustomField4}| %msg%n"/> - - <property name="errorLoggerPattern" - value="%date{yyyy-MM-dd'T'HH:mm:ss.SSSXXX}|%X{RequestId}|%thread|%X{ServiceName}|%X{PartnerName}|%X{TargetEntity}|%X{TargetServiceName}|%X{ClassName}|%X{AlertSeverity}|%X{ErrorCode}|%X{ErrorDescription}| %msg%n"/> - - <property name="defaultLoggerPattern" - value="%date{yyyy-MM-dd'T'HH:mm:ss.SSSXXX}|%X{RequestId}|%thread|%X{ClassName}| %msg%n"/> - - <!-- use %class so library logging calls yield their class name --> - <property name="applicationLoggerPattern" - value="%date{yyyy-MM-dd'T'HH:mm:ss.SSSXXX}|%X{RequestId}|%thread|%class{36}| %msg%n"/> - - <!-- Example evaluator filter applied against console appender --> - <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> - <encoder> - <pattern>${defaultLoggerPattern}</pattern> - </encoder> - </appender> - - <!-- ============================================================================ --> - <!-- EELF Appenders --> - <!-- ============================================================================ --> - - <!-- The EELFAppender is used to record events to the general application - log --> - - - <appender name="EELF" - class="ch.qos.logback.core.rolling.RollingFileAppender"> - <file>${logDirectory}/${generalLogName}.log</file> - <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> - <!-- daily rollover --> - <fileNamePattern>${logDirectory}/${generalLogName}.%d{yyyy-MM-dd}.log.zip</fileNamePattern> - - <!-- keep 30 days' worth of history capped at 3GB total size --> - <maxHistory>30</maxHistory> - <totalSizeCap>3GB</totalSizeCap> - - </rollingPolicy> - <encoder> - <pattern>${applicationLoggerPattern}</pattern> - </encoder> - </appender> - - <appender name="asyncEELF" class="ch.qos.logback.classic.AsyncAppender"> - <queueSize>256</queueSize> - <!-- Class name is part of caller data --> - <includeCallerData>true</includeCallerData> - <appender-ref ref="EELF"/> - </appender> - - <!-- EELF Security Appender. This appender is used to record security events - to the security log file. Security events are separate from other loggers - in EELF so that security log records can be captured and managed in a secure - way separate from the other logs. This appender is set to never discard any - events. --> - <!-- - <appender name="EELFSecurity" - class="ch.qos.logback.core.rolling.RollingFileAppender"> - <file>${logDirectory}/${securityLogName}.log</file> - <rollingPolicy - class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> - <fileNamePattern>${logDirectory}/${securityLogName}.%i.log.zip - </fileNamePattern> - <minIndex>1</minIndex> - <maxIndex>9</maxIndex> - </rollingPolicy> - <triggeringPolicy - class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> - <maxFileSize>5MB</maxFileSize> - </triggeringPolicy> - <encoder> - <pattern>${defaultPattern}</pattern> - </encoder> - </appender> - - <appender name="asyncEELFSecurity" class="ch.qos.logback.classic.AsyncAppender"> - <queueSize>256</queueSize> - <discardingThreshold>0</discardingThreshold> - <appender-ref ref="EELFSecurity" /> - </appender> - --> - - <!-- EELF Performance Appender. This appender is used to record performance - records. --> - <!-- - <appender name="EELFPerformance" - class="ch.qos.logback.core.rolling.RollingFileAppender"> - <file>${logDirectory}/${performanceLogName}.log</file> - <rollingPolicy - class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> - <fileNamePattern>${logDirectory}/${performanceLogName}.%i.log.zip - </fileNamePattern> - <minIndex>1</minIndex> - <maxIndex>9</maxIndex> - </rollingPolicy> - <triggeringPolicy - class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> - <maxFileSize>5MB</maxFileSize> - </triggeringPolicy> - <encoder> - <outputPatternAsHeader>true</outputPatternAsHeader> - <pattern>${defaultPattern}</pattern> - </encoder> - </appender> - <appender name="asyncEELFPerformance" class="ch.qos.logback.classic.AsyncAppender"> - <queueSize>256</queueSize> - <appender-ref ref="EELFPerformance" /> - </appender> - --> - - <!-- EELF Server Appender. This appender is used to record Server related - logging events. The Server logger and appender are specializations of the - EELF application root logger and appender. This can be used to segregate Server - events from other components, or it can be eliminated to record these events - as part of the application root log. --> - <!-- - <appender name="EELFServer" - class="ch.qos.logback.core.rolling.RollingFileAppender"> - <file>${logDirectory}/${serverLogName}.log</file> - <rollingPolicy - class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> - <fileNamePattern>${logDirectory}/${serverLogName}.%i.log.zip - </fileNamePattern> - <minIndex>1</minIndex> - <maxIndex>9</maxIndex> - </rollingPolicy> - <triggeringPolicy - class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> - <maxFileSize>5MB</maxFileSize> - </triggeringPolicy> - <encoder> - <pattern>${defaultPattern}</pattern> - </encoder> - </appender> - <appender name="asyncEELFServer" class="ch.qos.logback.classic.AsyncAppender"> - <queueSize>256</queueSize> - <appender-ref ref="EELFServer" /> - </appender> - --> - - <!-- EELF Policy Appender. This appender is used to record Policy engine - related logging events. The Policy logger and appender are specializations - of the EELF application root logger and appender. This can be used to segregate - Policy engine events from other components, or it can be eliminated to record - these events as part of the application root log. --> - <!-- - <appender name="EELFPolicy" - class="ch.qos.logback.core.rolling.RollingFileAppender"> - <file>${logDirectory}/${policyLogName}.log</file> - <rollingPolicy - class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> - <fileNamePattern>${logDirectory}/${policyLogName}.%i.log.zip - </fileNamePattern> - <minIndex>1</minIndex> - <maxIndex>9</maxIndex> - </rollingPolicy> - <triggeringPolicy - class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> - <maxFileSize>5MB</maxFileSize> - </triggeringPolicy> - <encoder> - <pattern>${defaultPattern}</pattern> - </encoder> - </appender> - <appender name="asyncEELFPolicy" class="ch.qos.logback.classic.AsyncAppender"> - <queueSize>256</queueSize> - <appender-ref ref="EELFPolicy" /> - </appender> - --> - - <!-- EELF Audit Appender. This appender is used to record audit engine - related logging events. The audit logger and appender are specializations - of the EELF application root logger and appender. This can be used to segregate - Policy engine events from other components, or it can be eliminated to record - these events as part of the application root log. --> - - <appender name="EELFAudit" - class="ch.qos.logback.core.rolling.RollingFileAppender"> - <file>${logDirectory}/${auditLogName}.log</file> - <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> - <!-- daily rollover --> - <fileNamePattern>${logDirectory}/${auditLogName}.%d{yyyy-MM-dd}.log.zip</fileNamePattern> - - <!-- keep 30 days' worth of history capped at 3GB total size --> - <maxHistory>30</maxHistory> - <totalSizeCap>3GB</totalSizeCap> - - </rollingPolicy> - <encoder> - <pattern>${auditLoggerPattern}</pattern> - </encoder> - </appender> - <appender name="asyncEELFAudit" class="ch.qos.logback.classic.AsyncAppender"> - <queueSize>256</queueSize> - <appender-ref ref="EELFAudit"/> - </appender> - - <appender name="EELFMetrics" - class="ch.qos.logback.core.rolling.RollingFileAppender"> - <file>${logDirectory}/${metricsLogName}.log</file> - <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> - <!-- daily rollover --> - <fileNamePattern>${logDirectory}/${metricsLogName}.%d{yyyy-MM-dd}.log.zip</fileNamePattern> - - <!-- keep 30 days' worth of history capped at 3GB total size --> - <maxHistory>30</maxHistory> - <totalSizeCap>3GB</totalSizeCap> - - </rollingPolicy> - <encoder> - <pattern>${metricsLoggerPattern}</pattern> - </encoder> - </appender> - - - <appender name="asyncEELFMetrics" class="ch.qos.logback.classic.AsyncAppender"> - <queueSize>256</queueSize> - <appender-ref ref="EELFMetrics"/> - </appender> - - <appender name="EELFError" - class="ch.qos.logback.core.rolling.RollingFileAppender"> - <file>${logDirectory}/${errorLogName}.log</file> - <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> - <!-- daily rollover --> - <fileNamePattern>${logDirectory}/${errorLogName}.%d{yyyy-MM-dd}.log.zip</fileNamePattern> - - <!-- keep 30 days' worth of history capped at 3GB total size --> - <maxHistory>30</maxHistory> - <totalSizeCap>3GB</totalSizeCap> - - </rollingPolicy> - <encoder> - <pattern>${errorLoggerPattern}</pattern> - </encoder> - </appender> - - <appender name="asyncEELFError" class="ch.qos.logback.classic.AsyncAppender"> - <queueSize>256</queueSize> - <appender-ref ref="EELFError"/> - </appender> - - <appender name="EELFDebug" - class="ch.qos.logback.core.rolling.RollingFileAppender"> - <file>${debugLogDirectory}/${debugLogName}.log</file> - <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> - <!-- daily rollover --> - <fileNamePattern>${logDirectory}/${debugLogName}.%d{yyyy-MM-dd}.log.zip</fileNamePattern> - - <!-- keep 30 days' worth of history capped at 3GB total size --> - <maxHistory>30</maxHistory> - <totalSizeCap>3GB</totalSizeCap> - - </rollingPolicy> - <encoder> - <pattern>${defaultLoggerPattern}</pattern> - </encoder> - </appender> - - <appender name="asyncEELFDebug" class="ch.qos.logback.classic.AsyncAppender"> - <queueSize>256</queueSize> - <appender-ref ref="EELFDebug"/> - </appender> - - - <logger name="com.att.eelf" level="error" additivity="false"> - <appender-ref ref="asyncEELF"/> - </logger> - - <logger name="com.att.eelf" level="error" additivity="false"> - <appender-ref ref="asyncEELFAudit"/> - </logger> - - <logger name="com.att.eelf" level="error" additivity="false"> - <appender-ref ref="asyncEELFDebug"/> - </logger> - - <logger name="com.att.eelf.error" level="error" additivity="false"> - <appender-ref ref="asyncEELFError"/> - </logger> - - <logger name="com.att.eelf.metrics" level="error" additivity="false"> - <appender-ref ref="asyncEELFMetrics"/> - </logger> - - <root level="ERROR"> - <appender-ref ref="asyncEELF"/> - </root> - -</configuration> diff --git a/mdbc-internal-benchmark/pom.xml b/mdbc-internal-benchmark/pom.xml deleted file mode 100644 index b356638..0000000 --- a/mdbc-internal-benchmark/pom.xml +++ /dev/null @@ -1,193 +0,0 @@ -<!-- -Copyright (c) 2014, Oracle America, Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - * Neither the name of Oracle nor the names of its contributors may be used - to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF -THE POSSIBILITY OF SUCH DAMAGE. ---> - -<project xmlns="http://maven.apache.org/POM/4.0.0" 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"> - <parent> - <artifactId>mdbc</artifactId> - <groupId>org.onap.music.mdbc</groupId> - <version>0.0.1-SNAPSHOT</version> - </parent> - <modelVersion>4.0.0</modelVersion> - - <artifactId>mdbc-own-benchmark</artifactId> - <packaging>jar</packaging> - - <name>JMH benchmark sample: Java</name> - - <!-- - This is the demo/sample template build script for building Java benchmarks with JMH. - Edit as needed. - --> - - <prerequisites> - <maven>3.0</maven> - </prerequisites> - - <dependencies> - <dependency> - <groupId>org.openjdk.jmh</groupId> - <artifactId>jmh-core</artifactId> - <version>${jmh.version}</version> - </dependency> - <dependency> - <groupId>org.openjdk.jmh</groupId> - <artifactId>jmh-generator-annprocess</artifactId> - <version>${jmh.version}</version> - <scope>provided</scope> - </dependency> - <dependency> - <groupId>org.mariadb.jdbc</groupId> - <artifactId>mariadb-java-client</artifactId> - <version>1.1.7</version> - </dependency> - <dependency> - <groupId>org.onap.music.mdbc</groupId> - <artifactId>mdbc-server</artifactId> - <version>0.0.1-SNAPSHOT</version> - <scope>compile</scope> - </dependency> - <dependency> - <groupId>org.onap.music</groupId> - <artifactId>dev-MUSIC-cassandra</artifactId> - <version>3.2.1</version> - <exclusions> - <exclusion> - <groupId>io.netty</groupId> - <artifactId>*</artifactId> - </exclusion> - </exclusions> - </dependency> - <dependency> - <groupId>com.datastax.cassandra</groupId> - <artifactId>cassandra-driver-core</artifactId> - <version>3.3.0</version> - </dependency> - </dependencies> - - <properties> - <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> - <jmh.version>1.9.3</jmh.version> - <javac.target>1.6</javac.target> - <uberjar.name>benchmarks</uberjar.name> - </properties> - - <build> - <plugins> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-compiler-plugin</artifactId> - <version>3.1</version> - <configuration> - <compilerVersion>${javac.target}</compilerVersion> - <source>7</source> - <target>7</target> - </configuration> - </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-shade-plugin</artifactId> - <version>2.2</version> - <executions> - <execution> - <phase>package</phase> - <goals> - <goal>shade</goal> - </goals> - <configuration> - <finalName>${uberjar.name}</finalName> - <transformers> - <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> - <mainClass>org.openjdk.jmh.Main</mainClass> - </transformer> - </transformers> - <filters> - <filter> - <!-- - Shading signed JARs will fail without this. - http://stackoverflow.com/questions/999489/invalid-signature-file-when-attempting-to-run-a-jar - --> - <artifact>*:*</artifact> - <excludes> - <exclude>META-INF/*.SF</exclude> - <exclude>META-INF/*.DSA</exclude> - <exclude>META-INF/*.RSA</exclude> - </excludes> - </filter> - </filters> - </configuration> - </execution> - </executions> - </plugin> - </plugins> - <pluginManagement> - <plugins> - <plugin> - <artifactId>maven-clean-plugin</artifactId> - <version>2.5</version> - </plugin> - <plugin> - <artifactId>maven-deploy-plugin</artifactId> - <version>2.8.1</version> - </plugin> - <plugin> - <artifactId>maven-install-plugin</artifactId> - <version>2.5.1</version> - </plugin> - <plugin> - <artifactId>maven-jar-plugin</artifactId> - <version>2.4</version> - </plugin> - <plugin> - <artifactId>maven-javadoc-plugin</artifactId> - <version>2.9.1</version> - </plugin> - <plugin> - <artifactId>maven-resources-plugin</artifactId> - <version>2.6</version> - </plugin> - <plugin> - <artifactId>maven-site-plugin</artifactId> - <version>3.3</version> - </plugin> - <plugin> - <artifactId>maven-source-plugin</artifactId> - <version>2.2.1</version> - </plugin> - <plugin> - <artifactId>maven-surefire-plugin</artifactId> - <version>2.17</version> - </plugin> - </plugins> - </pluginManagement> - </build> - -</project> diff --git a/mdbc-internal-benchmark/src/main/java/org/onap/music/mdbc/MetricAddTxDigestBenchmark.java b/mdbc-internal-benchmark/src/main/java/org/onap/music/mdbc/MetricAddTxDigestBenchmark.java deleted file mode 100644 index d15c3e6..0000000 --- a/mdbc-internal-benchmark/src/main/java/org/onap/music/mdbc/MetricAddTxDigestBenchmark.java +++ /dev/null @@ -1,143 +0,0 @@ -/* - * ============LICENSE_START==================================================== - * org.onap.music.mdbc - * ============================================================================= - * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. - * ============================================================================= - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END====================================================== - */ - -package org.onap.music.mdbc; - -import java.sql.Connection; -import java.sql.SQLException; -import java.sql.Statement; -import java.util.UUID; -import java.util.concurrent.TimeUnit; -import org.onap.music.mdbc.mixins.DBInterface; -import org.onap.music.mdbc.mixins.MusicInterface; -import org.onap.music.mdbc.mixins.MusicMixin; -import org.onap.music.mdbc.tables.MusicTxDigestId; -import org.onap.music.mdbc.tables.StagingTable; -import org.openjdk.jmh.annotations.Benchmark; -import org.openjdk.jmh.annotations.BenchmarkMode; -import org.openjdk.jmh.annotations.Level; -import org.openjdk.jmh.annotations.Mode; -import org.openjdk.jmh.annotations.OutputTimeUnit; -import org.openjdk.jmh.annotations.Param; -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.infra.Blackhole; -import org.openjdk.jmh.runner.Runner; -import org.openjdk.jmh.runner.RunnerException; -import org.openjdk.jmh.runner.options.Options; -import org.openjdk.jmh.runner.options.OptionsBuilder; - -@BenchmarkMode({Mode.AverageTime, Mode.SampleTime}) -@OutputTimeUnit(TimeUnit.MILLISECONDS) -@State(Scope.Benchmark) -public class MetricAddTxDigestBenchmark { - - public static void main(String[] args) throws RunnerException { - Options opt = new OptionsBuilder() - .include(MetricAddTxDigestBenchmark.class.getSimpleName()) - .threads(1) - .forks(1) - .build(); - new Runner(opt).run(); - } - - @Benchmark - public void testMethod(MyState state, Blackhole blackhole) { - OwnUtils.addTransactionDigest(state.copy, state.copyTxDigestId, - (MusicMixin) state.getManager().getMusicInterface()); - } - - @State(Scope.Benchmark) - public static class MyState { - public MusicTxDigestId musicTxDigestId,copyTxDigestId; - public StagingTable copy,current; - final String user = OwnUtils.SQL_USER; - final String password = OwnUtils.SQL_PASSWORD; - public final Range range = new Range(OwnUtils.TABLE); - @Param({"127.0.0.1"}) - public String ip; - @Param({"1", "10", "50", "80", "100", "200", "300", "400"}) - public int rows; - private MusicInterface musicMixin = null; - private MdbcConnection conn; - private DBInterface dbMixin; - private MdbcServerLogic meta; - private String id; - - private void setupServer(){ - meta = OwnUtils.setupServer(user, password); - } - - private StateManager getManager(){ - return meta.getStateManager(); - } - - private void assignManager() { - StateManager manager = getManager(); - musicMixin=manager.getMusicInterface(); - } - - @Setup(Level.Trial) - public void doTrialSetup(){ - OwnUtils.dropAll(ip); - setupServer(); - assignManager(); - OwnUtils.initMri((MusicMixin) musicMixin,range,meta, rows,1,1); - id = UUID.randomUUID().toString(); - conn = (MdbcConnection) getManager().getConnection(id); - try { - Statement stmt = conn.createStatement(); - stmt.execute(OwnUtils.UPDATE); - } catch (SQLException e) { - e.printStackTrace(); - System.exit(1); - } - musicTxDigestId = OwnUtils.setupCommit(conn.getPartition(), conn.getTransactionDigest()); - final DatabasePartition partition = conn.getPartition(); - OwnUtils.appendToRedo((MusicMixin)getManager().getMusicInterface(),partition.getMRIIndex(),partition.getLockId(), - musicTxDigestId); - current=conn.getTransactionDigest(); - } - - @TearDown(Level.Trial) - public void doTrialTearDown(){ - try { - conn.close(); - } catch (SQLException e) { - e.printStackTrace(); - System.exit(1); - } - meta=null; - } - - @Setup(Level.Invocation) - public void doInvocationSetup(){ - try { - copy = new StagingTable(current); - } catch (CloneNotSupportedException e) { - e.printStackTrace(); - System.exit(1); - } - copyTxDigestId = new MusicTxDigestId(MDBCUtils.generateUniqueKey(), -1); - } - } -} diff --git a/mdbc-internal-benchmark/src/main/java/org/onap/music/mdbc/MetricCommitBenchmark.java b/mdbc-internal-benchmark/src/main/java/org/onap/music/mdbc/MetricCommitBenchmark.java deleted file mode 100644 index 7461457..0000000 --- a/mdbc-internal-benchmark/src/main/java/org/onap/music/mdbc/MetricCommitBenchmark.java +++ /dev/null @@ -1,137 +0,0 @@ -/* - * ============LICENSE_START==================================================== - * org.onap.music.mdbc - * ============================================================================= - * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. - * ============================================================================= - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END====================================================== - */ - -package org.onap.music.mdbc; - -import java.sql.SQLException; -import java.sql.Statement; -import java.util.UUID; -import java.util.concurrent.TimeUnit; -import org.onap.music.mdbc.mixins.DBInterface; -import org.onap.music.mdbc.mixins.MusicInterface; -import org.onap.music.mdbc.mixins.MusicMixin; -import org.openjdk.jmh.annotations.Benchmark; -import org.openjdk.jmh.annotations.BenchmarkMode; -import org.openjdk.jmh.annotations.Level; -import org.openjdk.jmh.annotations.Mode; -import org.openjdk.jmh.annotations.OutputTimeUnit; -import org.openjdk.jmh.annotations.Param; -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.infra.Blackhole; -import org.openjdk.jmh.runner.Runner; -import org.openjdk.jmh.runner.RunnerException; -import org.openjdk.jmh.runner.options.Options; -import org.openjdk.jmh.runner.options.OptionsBuilder; - -@BenchmarkMode({Mode.AverageTime, Mode.SampleTime}) -@OutputTimeUnit(TimeUnit.MILLISECONDS) -@State(Scope.Benchmark) -public class MetricCommitBenchmark { - - public static void main(String[] args) throws RunnerException { - Options opt = new OptionsBuilder() - .include(MetricCommitBenchmark.class.getSimpleName()) - .threads(1) - .forks(1) - .build(); - new Runner(opt).run(); - } - - @Benchmark - public void testMethod(MyState state, Blackhole blackhole) { - try { - state.conn.commit(); - } catch (SQLException e) { - e.printStackTrace(); - System.exit(1); - } - } - - @State(Scope.Benchmark) - public static class MyState { - final String user = OwnUtils.SQL_USER; - final String password = OwnUtils.SQL_PASSWORD; - public final Range range = new Range(OwnUtils.TABLE); - @Param({"104.209.240.219"}) - public String ip; - @Param({"1", "10", "50", "80", "100", "200", "300", "400"}) - public int rows; - private MusicInterface musicMixin = null; - private MdbcConnection conn; - private DBInterface dbMixin; - private MdbcServerLogic meta; - private String id; - - private void setupServer(){ - meta = OwnUtils.setupServer(user, password); - } - - private StateManager getManager(){ - return meta.getStateManager(); - } - - private void assignManager() { - StateManager manager = getManager(); - musicMixin=manager.getMusicInterface(); - } - - @Setup(Level.Trial) - public void doTrialSetup(){ - OwnUtils.dropAll(ip); - setupServer(); - assignManager(); - OwnUtils.initMri((MusicMixin) musicMixin,range,meta, rows,1,1); - id = UUID.randomUUID().toString(); - conn = (MdbcConnection) getManager().getConnection(id); - - } - - @TearDown(Level.Trial) - public void doTrialTearDown(){ - try { - conn.close(); - } catch (SQLException e) { - e.printStackTrace(); - System.exit(1); - } - meta=null; - } - - @Setup(Level.Invocation) - public void doInvocationSetup(){ - Statement stmt = null; - try { - stmt = conn.createStatement(); - } catch (SQLException e) { - e.printStackTrace(); - System.exit(1); - } - try { - stmt.execute(OwnUtils.UPDATE); - } catch (SQLException e) { - e.printStackTrace(); - System.exit(1); - } - } - } -} diff --git a/mdbc-internal-benchmark/src/main/java/org/onap/music/mdbc/MetricIsolatedMixinCommBenchmark.java b/mdbc-internal-benchmark/src/main/java/org/onap/music/mdbc/MetricIsolatedMixinCommBenchmark.java deleted file mode 100644 index c789ca7..0000000 --- a/mdbc-internal-benchmark/src/main/java/org/onap/music/mdbc/MetricIsolatedMixinCommBenchmark.java +++ /dev/null @@ -1,151 +0,0 @@ -/* - * ============LICENSE_START==================================================== - * org.onap.music.mdbc - * ============================================================================= - * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. - * ============================================================================= - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END====================================================== - */ - -package org.onap.music.mdbc; - -import java.sql.SQLException; -import java.sql.Statement; -import java.util.UUID; -import java.util.concurrent.TimeUnit; -import org.onap.music.exceptions.MDBCServiceException; -import org.onap.music.mdbc.mixins.DBInterface; -import org.onap.music.mdbc.mixins.MusicInterface; -import org.onap.music.mdbc.mixins.MusicMixin; -import org.onap.music.mdbc.tables.MusicTxDigestId; -import org.onap.music.mdbc.tables.StagingTable; -import org.onap.music.mdbc.tables.TxCommitProgress; -import org.openjdk.jmh.annotations.Benchmark; -import org.openjdk.jmh.annotations.BenchmarkMode; -import org.openjdk.jmh.annotations.Level; -import org.openjdk.jmh.annotations.Mode; -import org.openjdk.jmh.annotations.OutputTimeUnit; -import org.openjdk.jmh.annotations.Param; -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.infra.Blackhole; -import org.openjdk.jmh.runner.Runner; -import org.openjdk.jmh.runner.RunnerException; -import org.openjdk.jmh.runner.options.Options; -import org.openjdk.jmh.runner.options.OptionsBuilder; - -@BenchmarkMode({Mode.AverageTime, Mode.SampleTime}) -@OutputTimeUnit(TimeUnit.MILLISECONDS) -@State(Scope.Benchmark) -public class MetricIsolatedMixinCommBenchmark { - - public static void main(String[] args) throws RunnerException { - Options opt = new OptionsBuilder() - .include(MetricIsolatedMixinCommBenchmark.class.getSimpleName()) - .threads(1) - .forks(1) - .build(); - new Runner(opt).run(); - } - - @Benchmark - public void testMethod(MyState state, Blackhole blackhole) { - try { - state.musicMixin.commitLog(state.conn.getPartition(),null,state.copy, - state.copyTxDigestId.transactionId.toString(),state.progressKeeper); - } catch (MDBCServiceException e) { - e.printStackTrace(); - System.exit(1); - } - } - - @State(Scope.Benchmark) - public static class MyState { - public TxCommitProgress progressKeeper; - public MusicTxDigestId musicTxDigestId,copyTxDigestId; - final String user = OwnUtils.SQL_USER; - final String password = OwnUtils.SQL_PASSWORD; - public final Range range = new Range(OwnUtils.TABLE); - @Param({"104.209.240.219"}) - public String ip; - @Param({"1", "10", "50", "80", "100", "200", "300", "400"}) - public int rows; - private MusicInterface musicMixin = null; - private MdbcConnection conn; - private DBInterface dbMixin; - private MdbcServerLogic meta; - private String id; - public StagingTable copy,current; - - private void setupServer(){ - meta = OwnUtils.setupServer(user, password); - } - - private StateManager getManager(){ - return meta.getStateManager(); - } - - private void assignManager() { - StateManager manager = getManager(); - musicMixin=manager.getMusicInterface(); - } - - @Setup(Level.Trial) - public void doTrialSetup(){ - OwnUtils.dropAll(ip); - setupServer(); - assignManager(); - OwnUtils.initMri((MusicMixin) musicMixin,range,meta, rows,1,1); - id = UUID.randomUUID().toString(); - conn = (MdbcConnection) getManager().getConnection(id); - Statement stmt = null; - try { - stmt = conn.createStatement(); - stmt.execute(OwnUtils.UPDATE); - } catch (SQLException e) { - e.printStackTrace(); - System.exit(1); - } - musicTxDigestId = OwnUtils.setupCommit(conn.getPartition(), conn.getTransactionDigest()); - current=conn.getTransactionDigest(); - progressKeeper = new TxCommitProgress(); - } - - @TearDown(Level.Trial) - public void doTrialTearDown(){ - try { - conn.close(); - } catch (SQLException e) { - e.printStackTrace(); - System.exit(1); - } - meta=null; - } - - @Setup(Level.Invocation) - public void doInvocationSetup(){ - try { - copy = new StagingTable(current); - } catch (CloneNotSupportedException e) { - e.printStackTrace(); - System.exit(1); - } - copyTxDigestId = new MusicTxDigestId(MDBCUtils.generateUniqueKey(), -1); - progressKeeper.createNewTransactionTracker(copyTxDigestId.transactionId.toString(),conn); - } - - } -} diff --git a/mdbc-internal-benchmark/src/main/java/org/onap/music/mdbc/MetricOwnBenchmark.java b/mdbc-internal-benchmark/src/main/java/org/onap/music/mdbc/MetricOwnBenchmark.java deleted file mode 100644 index 42665b1..0000000 --- a/mdbc-internal-benchmark/src/main/java/org/onap/music/mdbc/MetricOwnBenchmark.java +++ /dev/null @@ -1,142 +0,0 @@ -/* - * ============LICENSE_START==================================================== - * org.onap.music.mdbc - * ============================================================================= - * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. - * ============================================================================= - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END====================================================== - */ - -package org.onap.music.mdbc; - -import java.sql.SQLException; -import java.util.UUID; -import java.util.concurrent.TimeUnit; -import org.onap.music.exceptions.MDBCServiceException; -import org.onap.music.mdbc.mixins.DBInterface; -import org.onap.music.mdbc.mixins.MusicInterface; -import org.onap.music.mdbc.mixins.MusicMixin; -import org.openjdk.jmh.annotations.Benchmark; -import org.openjdk.jmh.annotations.BenchmarkMode; -import org.openjdk.jmh.annotations.Level; -import org.openjdk.jmh.annotations.Mode; -import org.openjdk.jmh.annotations.OutputTimeUnit; -import org.openjdk.jmh.annotations.Param; -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.infra.Blackhole; -import org.openjdk.jmh.runner.Runner; -import org.openjdk.jmh.runner.RunnerException; -import org.openjdk.jmh.runner.options.Options; -import org.openjdk.jmh.runner.options.OptionsBuilder; - -@BenchmarkMode({Mode.AverageTime, Mode.SampleTime}) -@OutputTimeUnit(TimeUnit.MILLISECONDS) -@State(Scope.Benchmark) -public class MetricOwnBenchmark{ - - public static void main(String[] args) throws RunnerException { - Options opt = new OptionsBuilder() - .include(MetricOwnBenchmark.class.getSimpleName()) - .threads(1) - .forks(1) - .build(); - new Runner(opt).run(); - } - - @Benchmark - public void testMethod(MyState state, Blackhole blackhole) { - try { - state.conn.preStatementHook(state.update); - } catch (MDBCServiceException e) { - e.printStackTrace(); - System.exit(1); - } - } - - @State(Scope.Benchmark) - public static class MyState { - public String update="SELECT * FROM PERSONS;"; - final String user = OwnUtils.SQL_USER; - final String password = OwnUtils.SQL_PASSWORD; - public final Range range = new Range(OwnUtils.TABLE); - @Param({"104.209.240.219"}) - public String ip; - //Rows per transaction (e.g. size of each tx digest) - @Param({"1", "10", "50", "80", "100", "200", "300", "400"}) - public int rows; - //Transaction before each ownership transition (e.g. size of redo log) - @Param({"1","10","100"}) - public int updates; - //Number of ownership transitions before measurement (e.g. number of mri rows" - @Param({"1","10","100"}) - public int transitions; - private MusicInterface musicMixin = null; - private MdbcConnection conn; - private DBInterface dbMixin; - private MdbcServerLogic meta; - private String id; - - private void setupServer(){ - meta = OwnUtils.setupServer(user, password); - } - - private StateManager getManager(){ - return meta.getStateManager(); - } - - @Setup(Level.Trial) - public void doTrialSetup(){ - OwnUtils.dropAll(ip); - setupServer(); - StateManager manager = getManager(); - musicMixin=manager.getMusicInterface(); - OwnUtils.initMri((MusicMixin) musicMixin,range,meta, rows, updates, transitions); - meta=null; - } - - @TearDown(Level.Trial) - public void doTrialTearDown(){ - meta=null; - } - - @Setup(Level.Invocation) - public void doInvocationSetup(){ - setupServer(); - id = UUID.randomUUID().toString(); - conn = (MdbcConnection) getManager().getConnection(id); - try { - OwnUtils.dropAndCreateTable(conn.getDBInterface()); - } catch (SQLException e) { - e.printStackTrace(); - System.exit(1); - } - } - - @TearDown(Level.Invocation) - public void doInvocationTearDown(){ - OwnUtils.deleteLastMriRow((MusicMixin) musicMixin); - try { - conn.close(); - } catch (SQLException e) { - e.printStackTrace(); - System.exit(1); - } - getManager().closeConnection(id); - } - - } -} diff --git a/mdbc-internal-benchmark/src/main/java/org/onap/music/mdbc/MetricPeekLockBenchmark.java b/mdbc-internal-benchmark/src/main/java/org/onap/music/mdbc/MetricPeekLockBenchmark.java deleted file mode 100644 index 1b56c6b..0000000 --- a/mdbc-internal-benchmark/src/main/java/org/onap/music/mdbc/MetricPeekLockBenchmark.java +++ /dev/null @@ -1,151 +0,0 @@ -/* - * ============LICENSE_START==================================================== - * org.onap.music.mdbc - * ============================================================================= - * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. - * ============================================================================= - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END====================================================== - */ - -package org.onap.music.mdbc; - -import com.datastax.driver.core.ConsistencyLevel; -import com.datastax.driver.core.ExecutionInfo; -import com.datastax.driver.core.QueryTrace; -import com.datastax.driver.core.ResultSet; -import com.datastax.driver.core.SimpleStatement; -import org.onap.music.datastore.MusicDataStore; -import org.onap.music.datastore.MusicDataStoreHandle; -import org.onap.music.datastore.PreparedQueryObject; -import org.onap.music.exceptions.MusicQueryException; -import org.onap.music.exceptions.MusicServiceException; -import org.onap.music.mdbc.mixins.DBInterface; -import org.onap.music.mdbc.mixins.MusicInterface; -import org.onap.music.mdbc.mixins.MusicMixin; -import org.onap.music.mdbc.tables.MusicRangeInformationRow; -import org.openjdk.jmh.annotations.*; -import org.openjdk.jmh.infra.Blackhole; -import org.openjdk.jmh.runner.Runner; -import org.openjdk.jmh.runner.RunnerException; -import org.openjdk.jmh.runner.options.Options; -import org.openjdk.jmh.runner.options.OptionsBuilder; - -import java.sql.SQLException; -import java.sql.Statement; -import java.util.UUID; -import java.util.concurrent.TimeUnit; - -@BenchmarkMode({Mode.AverageTime, Mode.SampleTime}) -@OutputTimeUnit(TimeUnit.MILLISECONDS) -@State(Scope.Benchmark) -public class MetricPeekLockBenchmark { - - public static void main(String[] args) throws RunnerException { - Options opt = new OptionsBuilder() - .include(MetricPeekLockBenchmark.class.getSimpleName()) - .threads(1) - .forks(1) - .build(); - new Runner(opt).run(); - } - - @Benchmark - public void testMethod(MyState state, Blackhole blackhole) { - String table = state.table_prepend_name+OwnUtils.MRI_TABLE_NAME; - String selectQuery = "select * from "+OwnUtils.KEYSPACE+"."+table+" where key='"+state.key+"' LIMIT 1;"; - PreparedQueryObject queryObject = new PreparedQueryObject(); - queryObject.appendQueryString(selectQuery); - ResultSet results=null; - SimpleStatement statement = new SimpleStatement(queryObject.getQuery(), queryObject.getValues().toArray()); - statement.setConsistencyLevel(ConsistencyLevel.ONE); - statement.enableTracing(); - results = state.dsHandle.getSession().execute(statement); - blackhole.consume(results); - } - - public void printInfo(ResultSet results){ - ExecutionInfo executionInfo = results.getExecutionInfo(); - System.out.println(executionInfo.getQueriedHost().getAddress()); - System.out.println(executionInfo.getQueriedHost().getDatacenter()); - System.out.println(executionInfo.getQueriedHost().getRack()); - final QueryTrace trace = executionInfo.getQueryTrace(); - System.out.printf( - "'%s' to %s took %dμs%n", - trace.getRequestType(), trace.getCoordinator(), trace.getDurationMicros()); - for (QueryTrace.Event event : trace.getEvents()) { - System.out.printf( - " %d - %s - %s%n", - event.getSourceElapsedMicros(), event.getSource(), event.getDescription()); - } - } - - @State(Scope.Benchmark) - public static class MyState { - public MusicDataStore dsHandle; - public String key; - private String table_prepend_name = "lockQ_"; - final String user = OwnUtils.SQL_USER; - final String password = OwnUtils.SQL_PASSWORD; - public final Range range = new Range(OwnUtils.TABLE); - @Param({"104.209.240.219"}) - public String ip; - private MusicInterface musicMixin = null; - private MdbcConnection conn; - private DBInterface dbMixin; - private MdbcServerLogic meta; - private String id; - public MusicRangeInformationRow lastRow; - - private void setupServer(){ - meta = OwnUtils.setupServer(user, password); - } - - private StateManager getManager(){ - return meta.getStateManager(); - } - - private void assignManager() { - StateManager manager = getManager(); - musicMixin=manager.getMusicInterface(); - } - - @Setup(Level.Trial) - public void doTrialSetup(){ - OwnUtils.dropAll(ip); - setupServer(); - try { - dsHandle=MusicDataStoreHandle.getDSHandle(); - } catch (MusicServiceException e) { - e.printStackTrace(); - System.exit(1); - } - assignManager(); - OwnUtils.initMri((MusicMixin) musicMixin,range,meta, 1,1,1); - id = UUID.randomUUID().toString(); - conn = (MdbcConnection) getManager().getConnection(id); - lastRow = OwnUtils.getLastRow((MusicMixin) musicMixin); - key = lastRow.getPartitionIndex().toString(); - } - - @TearDown(Level.Trial) - public void doTrialTearDown(){ - try { - conn.close(); - } catch (SQLException e) { - System.exit(1); - } - meta=null; - } - } -} diff --git a/mdbc-internal-benchmark/src/main/java/org/onap/music/mdbc/MetricRedoLogBenchmark.java b/mdbc-internal-benchmark/src/main/java/org/onap/music/mdbc/MetricRedoLogBenchmark.java deleted file mode 100644 index 7e227fd..0000000 --- a/mdbc-internal-benchmark/src/main/java/org/onap/music/mdbc/MetricRedoLogBenchmark.java +++ /dev/null @@ -1,130 +0,0 @@ -/* - * ============LICENSE_START==================================================== - * org.onap.music.mdbc - * ============================================================================= - * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. - * ============================================================================= - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END====================================================== - */ - -package org.onap.music.mdbc; - -import java.sql.Connection; -import java.sql.SQLException; -import java.sql.Statement; -import java.util.UUID; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.TimeUnit; -import org.onap.music.mdbc.mixins.DBInterface; -import org.onap.music.mdbc.mixins.MusicInterface; -import org.onap.music.mdbc.mixins.MusicMixin; -import org.onap.music.mdbc.tables.MusicTxDigestId; -import org.onap.music.mdbc.tables.StagingTable; -import org.openjdk.jmh.annotations.Benchmark; -import org.openjdk.jmh.annotations.BenchmarkMode; -import org.openjdk.jmh.annotations.Level; -import org.openjdk.jmh.annotations.Mode; -import org.openjdk.jmh.annotations.OutputTimeUnit; -import org.openjdk.jmh.annotations.Param; -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.infra.Blackhole; -import org.openjdk.jmh.runner.Runner; -import org.openjdk.jmh.runner.RunnerException; -import org.openjdk.jmh.runner.options.Options; -import org.openjdk.jmh.runner.options.OptionsBuilder; - -@BenchmarkMode({Mode.AverageTime, Mode.SampleTime}) -@OutputTimeUnit(TimeUnit.MILLISECONDS) -@State(Scope.Benchmark) -public class MetricRedoLogBenchmark { - - public static void main(String[] args) throws RunnerException { - Options opt = new OptionsBuilder() - .include(MetricRedoLogBenchmark.class.getSimpleName()) - .threads(1) - .forks(1) - .build(); - new Runner(opt).run(); - } - - @Benchmark - public void testMethod(MyState state, Blackhole blackhole) { - final DatabasePartition partition = state.conn.getPartition(); - OwnUtils.appendToRedo((MusicMixin)state.getManager().getMusicInterface(),partition.getMRIIndex(), - partition.getLockId(),state.musicTxDigestId); - } - - @State(Scope.Benchmark) - public static class MyState { - public MusicTxDigestId musicTxDigestId; - final String user = OwnUtils.SQL_USER; - final String password = OwnUtils.SQL_PASSWORD; - public final Range range = new Range(OwnUtils.TABLE); - @Param({"104.209.240.219"}) - public String ip; - @Param({"1", "10", "50", "80", "100", "200", "300", "400"}) - public int rows; - private MusicInterface musicMixin = null; - private MdbcConnection conn; - private DBInterface dbMixin; - private MdbcServerLogic meta; - private String id; - - private void setupServer(){ - meta = OwnUtils.setupServer(user, password); - } - - private StateManager getManager(){ - return meta.getStateManager(); - } - - private void assignManager() { - StateManager manager = getManager(); - musicMixin=manager.getMusicInterface(); - } - - @Setup(Level.Trial) - public void doTrialSetup(){ - OwnUtils.dropAll(ip); - setupServer(); - assignManager(); - OwnUtils.initMri((MusicMixin) musicMixin,range,meta, rows,1,1); - id = UUID.randomUUID().toString(); - conn = (MdbcConnection) getManager().getConnection(id); - Statement stmt = null; - try { - stmt = conn.createStatement(); - stmt.execute(OwnUtils.UPDATE); - } catch (SQLException e) { - e.printStackTrace(); - System.exit(1); - } - musicTxDigestId = OwnUtils.setupCommit(conn.getPartition(), conn.getTransactionDigest()); - } - - @TearDown(Level.Trial) - public void doTrialTearDown(){ - try { - conn.close(); - } catch (SQLException e) { - e.printStackTrace(); - System.exit(1); - } - meta=null; - } - } -} diff --git a/mdbc-internal-benchmark/src/main/java/org/onap/music/mdbc/MetricThreadJoinBenchmark.java b/mdbc-internal-benchmark/src/main/java/org/onap/music/mdbc/MetricThreadJoinBenchmark.java deleted file mode 100644 index 70ba10a..0000000 --- a/mdbc-internal-benchmark/src/main/java/org/onap/music/mdbc/MetricThreadJoinBenchmark.java +++ /dev/null @@ -1,197 +0,0 @@ -/* - * ============LICENSE_START==================================================== - * org.onap.music.mdbc - * ============================================================================= - * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. - * ============================================================================= - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END====================================================== - */ - -package org.onap.music.mdbc; - -import java.sql.SQLException; -import java.sql.Statement; -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; -import java.util.concurrent.Callable; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.Future; -import java.util.concurrent.TimeUnit; -import org.onap.music.exceptions.MDBCServiceException; -import org.onap.music.exceptions.MusicLockingException; -import org.onap.music.logging.EELFLoggerDelegate; -import org.onap.music.mdbc.mixins.DBInterface; -import org.onap.music.mdbc.mixins.MusicInterface; -import org.onap.music.mdbc.mixins.MusicMixin; -import org.onap.music.mdbc.tables.MusicTxDigestId; -import org.onap.music.mdbc.tables.StagingTable; -import org.openjdk.jmh.annotations.Benchmark; -import org.openjdk.jmh.annotations.BenchmarkMode; -import org.openjdk.jmh.annotations.Level; -import org.openjdk.jmh.annotations.Mode; -import org.openjdk.jmh.annotations.OutputTimeUnit; -import org.openjdk.jmh.annotations.Param; -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.infra.Blackhole; -import org.openjdk.jmh.runner.Runner; -import org.openjdk.jmh.runner.RunnerException; -import org.openjdk.jmh.runner.options.Options; -import org.openjdk.jmh.runner.options.OptionsBuilder; - -@BenchmarkMode({Mode.AverageTime, Mode.SampleTime}) -@OutputTimeUnit(TimeUnit.MILLISECONDS) -@State(Scope.Benchmark) -public class MetricThreadJoinBenchmark { - - public static void main(String[] args) throws RunnerException { - Options opt = new OptionsBuilder() - .include(MetricThreadJoinBenchmark.class.getSimpleName()) - .threads(1) - .forks(1) - .build(); - new Runner(opt).run(); - } - - public void testMethod1(final MyState state) { - final String lockId = state.conn.getPartition().getLockId(); - final UUID MRIIndex = state.conn.getPartition().getMRIIndex(); - Thread t1=null; - Thread t2=null; - if(state.runTxDigest) { - final Runnable insertDigestCallable = new Runnable() { - @Override - public void run() { - OwnUtils.hardcodedAddtransaction(110); - } - }; - t1 = new Thread(insertDigestCallable); - t1.start(); - } - if(state.runRedo) { - final Runnable appendCallable = new Runnable() { - @Override - public void run() { - OwnUtils.hardcodedAppendToRedo(MRIIndex,lockId); - } - }; - t2 = new Thread(appendCallable); - t2.start(); - } - - try { - if(state.runTxDigest) { - t1.join(); - } - if(state.runRedo) { - t2.join(); - } - } catch (InterruptedException e) { - e.printStackTrace(); - System.exit(1); - } - } - - @Benchmark - public void testMethod2(final MyState state) { - final String lockId = state.conn.getPartition().getLockId(); - final UUID MRIIndex = state.conn.getPartition().getMRIIndex(); - OwnUtils.hardcodedAddtransaction(110); - OwnUtils.hardcodedAppendToRedo(MRIIndex,lockId); - } - - @State(Scope.Benchmark) - public static class MyState { - public MusicTxDigestId musicTxDigestId,copyTxDigestId; - public StagingTable copy,current; - final String user = OwnUtils.SQL_USER; - final String password = OwnUtils.SQL_PASSWORD; - public final Range range = new Range(OwnUtils.TABLE); - @Param({"127.0.0.1"}) - public String ip; - @Param({"1", "10", "50", "80", "100", "200", "300", "400"}) - public int rows; - @Param({"true","false"}) - public boolean runRedo; - @Param({"true","false"}) - public boolean runTxDigest; - private MusicInterface musicMixin = null; - private MdbcConnection conn; - private DBInterface dbMixin; - private MdbcServerLogic meta; - private String id; - public ExecutorService commitExecutorThreads; - - private void setupServer(){ - meta = OwnUtils.setupServer(user, password); - } - - private StateManager getManager(){ - return meta.getStateManager(); - } - - private void assignManager() { - StateManager manager = getManager(); - musicMixin=manager.getMusicInterface(); - } - - @Setup(Level.Trial) - public void doTrialSetup(){ - commitExecutorThreads = Executors.newFixedThreadPool(4); - OwnUtils.dropAll(ip); - setupServer(); - assignManager(); - OwnUtils.initMri((MusicMixin) musicMixin,range,meta, rows,0,0); - id = UUID.randomUUID().toString(); - conn = (MdbcConnection) getManager().getConnection(id); - try { - Statement stmt = conn.createStatement(); - stmt.execute(OwnUtils.UPDATE); - } catch (SQLException e) { - e.printStackTrace(); - System.exit(1); - } - musicTxDigestId = OwnUtils.setupCommit(conn.getPartition(), conn.getTransactionDigest()); - current=conn.getTransactionDigest(); - } - - @TearDown(Level.Trial) - public void doTrialTearDown(){ - try { - conn.close(); - } catch (SQLException e) { - e.printStackTrace(); - System.exit(1); - } - meta=null; - commitExecutorThreads.shutdown(); - } - - @Setup(Level.Invocation) - public void doInvocationSetup(){ - try { - copy = new StagingTable(current); - } catch (CloneNotSupportedException e) { - e.printStackTrace(); - System.exit(1); - } - copyTxDigestId = new MusicTxDigestId(MDBCUtils.generateUniqueKey(), -1); - } - } -} diff --git a/mdbc-internal-benchmark/src/main/java/org/onap/music/mdbc/OwnUtils.java b/mdbc-internal-benchmark/src/main/java/org/onap/music/mdbc/OwnUtils.java deleted file mode 100644 index 980408b..0000000 --- a/mdbc-internal-benchmark/src/main/java/org/onap/music/mdbc/OwnUtils.java +++ /dev/null @@ -1,383 +0,0 @@ -/* - * ============LICENSE_START==================================================== - * org.onap.music.mdbc - * ============================================================================= - * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved. - * ============================================================================= - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END====================================================== - */ -package org.onap.music.mdbc; - -import com.datastax.driver.core.Cluster; -import com.datastax.driver.core.Cluster.Builder; -import com.datastax.driver.core.Session; - -import java.nio.ByteBuffer; -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.SQLException; -import java.sql.Statement; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Date; -import java.util.List; -import java.util.Properties; -import java.util.UUID; -import java.util.concurrent.locks.Lock; -import java.util.concurrent.locks.ReentrantLock; - -import com.datastax.driver.core.SocketOptions; -import org.onap.music.datastore.PreparedQueryObject; -import org.onap.music.exceptions.MDBCServiceException; -import org.onap.music.exceptions.MusicLockingException; -import org.onap.music.exceptions.MusicServiceException; -import org.onap.music.lockingservice.cassandra.MusicLockState; -import org.onap.music.main.MusicCore; -import org.onap.music.main.ResultType; -import org.onap.music.main.ReturnType; -import org.onap.music.mdbc.configurations.NodeConfiguration; -import org.onap.music.mdbc.mixins.DBInterface; -import org.onap.music.mdbc.mixins.MusicInterface; -import org.onap.music.mdbc.mixins.MusicMixin; -import org.onap.music.mdbc.tables.MriRowComparator; -import org.onap.music.mdbc.tables.MusicRangeInformationRow; -import org.onap.music.mdbc.tables.MusicTxDigestId; -import org.onap.music.mdbc.tables.StagingTable; - -public class OwnUtils { - - public static final int SQL_PORT= 3306; - - public static final String SQL_USER = "root"; - public static final String SQL_PASSWORD = "metriccluster"; - public static final String CASSANDRA_USER = "metric"; - public static final String CASSANDRA_PASSWORD = "metriccluster"; - public static final String KEYSPACE ="namespace"; - public static final String MRI_TABLE_NAME = "musicrangeinformation"; - public static final String MTD_TABLE_NAME = "musictxdigest"; - public static final String MDBC_SERVER_NAME = "name"; - public static final String DATABASE = "test"; - public static final String TABLE= "PERSONS"; - public static final int REPLICATION_FACTOR = 3; - public static final String SQL_URL="jdbc:mariadb://localhost:"+OwnUtils.SQL_PORT; - final static String CREATE_TABLE = "CREATE TABLE IF NOT EXISTS "+TABLE+" (\n" + - " PersonID int,\n" + - " Counter int,\n" + - " LastName varchar(255),\n" + - " FirstName varchar(255),\n" + - " Address varchar(255),\n" + - " City varchar(255),\n" + - " PRIMARY KEY(PersonID)"+ - ");"; - - public static final String UPDATE = new StringBuilder() - .append("UPDATE PERSONS ") - .append("SET Counter = Counter + 1,") - .append("City = 'Sandy Springs'") - .append(";").toString(); - public static final String PURGE = "PURGE BINARY LOGS BEFORE '"; - public static final String DROP_TABLE = "DROP TABLE IF EXISTS " + TABLE + ";"; - private static Lock sessionLock = new ReentrantLock(); - private static Boolean sessionReady= false; - private static Cluster cluster; - private static Session session; - - private static String getPurgeCommand(){ - String timeStamp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); - return PURGE+timeStamp+"';"; - } - - public static Session getSession(String CASSANDRA_HOST){ - sessionLock.lock(); - try { - if(!sessionReady){ - SocketOptions options = new SocketOptions(); - options.setConnectTimeoutMillis(30000); - options.setReadTimeoutMillis(300000); - options.setTcpNoDelay(true); - final Builder builder = Cluster.builder(); - builder.addContactPoint(CASSANDRA_HOST); - builder.withCredentials(CASSANDRA_USER, CASSANDRA_PASSWORD); - builder.withSocketOptions(options); - cluster = builder.build(); - session=cluster.newSession(); - } - return session; - // access the resource protected by this lock - } finally { - sessionLock.unlock(); - } - } - - public static Connection getConnection() throws ClassNotFoundException, SQLException { - Class.forName("org.mariadb.jdbc.Driver"); - Properties connectionProps = new Properties(); - connectionProps.put("user", SQL_USER); - connectionProps.put("password", SQL_PASSWORD); - Connection connection = DriverManager.getConnection(SQL_URL+"/"+DATABASE, connectionProps); - connection.setAutoCommit(false); - return connection; - } - - public static void purgeBinLogs(Connection conn) throws SQLException{ - final Statement dropStatement = conn.createStatement(); - dropStatement.execute(getPurgeCommand()); - dropStatement.close(); - } - - public static void dropTable(Connection conn) throws SQLException { - final Statement dropStatement = conn.createStatement(); - dropStatement.execute(DROP_TABLE); - dropStatement.close(); - } - - private static void createTable(Connection conn) throws SQLException { - final Statement createStatement = conn.createStatement(); - createStatement.execute(CREATE_TABLE); - createStatement.close(); - } - - public static void dropAndCreateTable(DBInterface dbMixin) throws SQLException { - dbMixin.dropSQLTriggers(TABLE); - dropTable(dbMixin.getSQLConnection()); - createTable(dbMixin.getSQLConnection()); - dbMixin.createSQLTriggers(TABLE); - } - - public static void unlockRow(String keyspace, String mriTableName, DatabasePartition partition) - throws MusicLockingException { - String fullyQualifiedMriKey = keyspace+"."+ mriTableName+"."+partition.getMRIIndex().toString(); - MusicLockState musicLockState = MusicCore.voluntaryReleaseLock(fullyQualifiedMriKey, partition.getLockId()); - } - - public static DatabasePartition createBasicRow(Range range, MusicInterface mixin, String mdbcServerName) - throws MDBCServiceException { - List<Range> ranges = new ArrayList<>(); - ranges.add(range); - final UUID uuid = MDBCUtils.generateTimebasedUniqueKey(); - DatabasePartition dbPartition = new DatabasePartition(ranges,uuid,null); - MusicRangeInformationRow newRow = new MusicRangeInformationRow(uuid,dbPartition, new ArrayList<MusicTxDigestId>(), "", - mdbcServerName, true); - DatabasePartition partition=mixin.createMusicRangeInformation(newRow); - return partition; - } - - public static void initMriTable(MusicMixin musicMixin, Range range) - throws MDBCServiceException, SQLException, MusicLockingException { - final DatabasePartition partition = createBasicRow(range, musicMixin, MDBC_SERVER_NAME); - unlockRow(KEYSPACE,MRI_TABLE_NAME,partition); - } - - public static MusicRangeInformationRow getLastRow(MusicMixin musicMixin){ - List<MusicRangeInformationRow> allMriRows; - try { - allMriRows = musicMixin.getAllMriRows(); - } catch (MDBCServiceException e) { - e.printStackTrace(); - System.exit(1); - allMriRows=null;//Just to avoid IDE annoyance - } - Collections.sort(allMriRows, new MriRowComparator()); - MusicRangeInformationRow musicRangeInformationRow = allMriRows.get(allMriRows.size() - 1); - return musicRangeInformationRow; - } - - public static void deleteLastMriRow(MusicMixin musicMixin){ - MusicRangeInformationRow musicRangeInformationRow = getLastRow(musicMixin); - try { - musicMixin.deleteMriRow(musicRangeInformationRow); - } catch (MDBCServiceException e) { - e.printStackTrace(); - System.exit(1); - } - } - - private static void changeRows(Connection conn) throws SQLException { - Statement stmt = conn.createStatement(); - Boolean execute = stmt.execute(UPDATE); - conn.commit(); - stmt.close(); - } - - private static void addRowsToTable(int totalNumberOfRows, Connection testConnection) throws SQLException { - for (int i = 0; i < totalNumberOfRows; i++) { - final StringBuilder insertSQLBuilder = new StringBuilder() - .append("INSERT INTO PERSONS VALUES (") - .append(i) - .append(", ") - .append(0) - .append(", '") - .append("Last-") - .append(i) - .append("', '") - .append("First-") - .append(i) - .append("', 'KACB', 'ATLANTA');"); - Statement stmt = testConnection.createStatement(); - Boolean execute = stmt.execute(insertSQLBuilder.toString()); - stmt.close(); - } - testConnection.commit(); - } - - public static void createHistory(MdbcServerLogic meta,int rows, int updates,int transitions) - throws SQLException { - final StateManager stateManager = meta.getStateManager(); - String id = UUID.randomUUID().toString(); - Connection connection = stateManager.getConnection(id); - createTable(connection); - addRowsToTable(rows, connection); - connection.close(); - stateManager.closeConnection(id); - for(int mriRow=0;mriRow<transitions;mriRow++) { - final String finalId = UUID.randomUUID().toString(); - connection = stateManager.getConnection(finalId); - for(int depth=0;depth<updates;depth++){ - changeRows(connection); - } - connection.close(); - stateManager.closeConnection(finalId); - } - } - - public static MdbcServerLogic setupServer(String user, String password){ - MdbcServerLogic meta; - NodeConfiguration config = new NodeConfiguration("","",null,OwnUtils.DATABASE, - OwnUtils.MDBC_SERVER_NAME); - //\TODO Add configuration file with Server Info - Properties connectionProps = new Properties(); - connectionProps.setProperty("user", user); - connectionProps.setProperty("password", password); - connectionProps.setProperty(MusicMixin.KEY_MUSIC_RFACTOR,Integer.toString(OwnUtils.REPLICATION_FACTOR)); - connectionProps.setProperty(MusicMixin.KEY_MUSIC_NAMESPACE,OwnUtils.KEYSPACE); - try { - meta = new MdbcServerLogic(OwnUtils.SQL_URL,connectionProps,config); - } catch (SQLException e) { - e.printStackTrace(); - meta=null; - System.exit(1); - } catch (MDBCServiceException e) { - e.printStackTrace(); - meta=null; - System.exit(1); - } - return meta; - } - - public static void dropAll(String ip){ - Session session=OwnUtils.getSession(ip); - session.execute("DROP KEYSPACE IF EXISTS "+OwnUtils.KEYSPACE+";"); - try { - Connection connection = OwnUtils.getConnection(); - OwnUtils.dropTable(connection); - connection.close(); - } catch (SQLException|ClassNotFoundException e) { - e.printStackTrace(); - System.exit(1); - } - } - - public static void initMri(MusicMixin musicMixin,Range range,MdbcServerLogic meta, int rows, int updates, int transitions){ - try { - OwnUtils.initMriTable(musicMixin,range); - } catch (MusicLockingException|SQLException|MDBCServiceException e) { - e.printStackTrace(); - System.exit(1); - } - try { - OwnUtils.createHistory(meta, rows, updates, transitions); - } catch (SQLException e) { - e.printStackTrace(); - System.exit(1); - } - } - - public static void hardcodedAddtransaction(int size){ - final UUID uuid = MDBCUtils.generateTimebasedUniqueKey(); - ByteBuffer serializedTransactionDigest = ByteBuffer.allocate(size); - for(int i=0;i<size;i++){ - serializedTransactionDigest.put((byte)i); - } - PreparedQueryObject query = new PreparedQueryObject(); - String cql = String.format("INSERT INTO %s.%s (txid,transactiondigest,compressed ) VALUES (?,?,?);",KEYSPACE, - MTD_TABLE_NAME); - query.appendQueryString(cql); - query.addValue(uuid); - query.addValue(serializedTransactionDigest); - query.addValue(false); - //\TODO check if I am not shooting on my own foot - try { - MusicCore.nonKeyRelatedPut(query,"critical"); - } catch (MusicServiceException e) { - e.printStackTrace(); - System.exit(1); - } - } - - public static void hardcodedAppendToRedo(UUID mriId, String lockId){ - final UUID uuid = MDBCUtils.generateTimebasedUniqueKey(); - PreparedQueryObject query = new PreparedQueryObject(); - StringBuilder appendBuilder = new StringBuilder(); - appendBuilder.append("UPDATE ") - .append(KEYSPACE) - .append(".") - .append(MRI_TABLE_NAME) - .append(" SET txredolog = txredolog +[('") - .append(MTD_TABLE_NAME) - .append("',") - .append(uuid) - .append(")] WHERE rangeid = ") - .append(mriId) - .append(";"); - query.appendQueryString(appendBuilder.toString()); - ReturnType returnType = MusicCore.criticalPut(KEYSPACE, MRI_TABLE_NAME, mriId.toString(), - query, lockId, null); - //returnType.getExecutionInfo() - if (returnType.getResult().compareTo(ResultType.SUCCESS) != 0) { - System.exit(1); - } - } - - public static void addTransactionDigest(StagingTable transactionDigest, MusicTxDigestId digestId, MusicMixin music){ - try { - music.createAndAddTxDigest(transactionDigest, digestId.transactionId); - } catch (MDBCServiceException e) { - e.printStackTrace(); - System.exit(1); - } - } - - public static void appendToRedo(MusicMixin music, UUID MRIIndex, String lockId, MusicTxDigestId digestId){ - try { - music.appendToRedoLog(KEYSPACE,MRIIndex,digestId.transactionId,lockId,OwnUtils.MTD_TABLE_NAME, - OwnUtils.MRI_TABLE_NAME); - } catch (MDBCServiceException e) { - e.printStackTrace(); - System.exit(1); - } - } - - public static MusicTxDigestId setupCommit(DatabasePartition partition, StagingTable transactionDigest){ - UUID mriIndex = partition.getMRIIndex(); - - if(transactionDigest == null || transactionDigest.isEmpty()) { - System.err.println("Transaction digest is empty"); - System.exit(1); - } - - MusicTxDigestId digestId = new MusicTxDigestId(MDBCUtils.generateUniqueKey(), -1); - return digestId; - } -} diff --git a/mdbc-internal-benchmark/src/main/resources/logback.xml b/mdbc-internal-benchmark/src/main/resources/logback.xml deleted file mode 100755 index 4215681..0000000 --- a/mdbc-internal-benchmark/src/main/resources/logback.xml +++ /dev/null @@ -1,369 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - ============LICENSE_START========================================== - mdbc - =================================================================== - Copyright © 2017 AT&T Intellectual Property. All rights reserved. - =================================================================== - - Unless otherwise specified, all software contained herein is licensed - under the Apache License, Version 2.0 (the “License”); - you may not use this software except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - Unless otherwise specified, all documentation contained herein is licensed - under the Creative Commons License, Attribution 4.0 Intl. (the “License”); - you may not use this documentation except in compliance with the License. - You may obtain a copy of the License at - - https://creativecommons.org/licenses/by/4.0/ - - Unless required by applicable law or agreed to in writing, documentation - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - ============LICENSE_END============================================ - - - --> - -<configuration scan="false" scanPeriod="3 seconds" debug="true"> - <!-- - Logback files for the mdbc Driver "mdbc" - are created in directory ${catalina.base}/logs/mdbc; - e.g., apache-tomcat-8.0.35/logs/mdbc/application.log - --> - <!--<jmxConfigurator /> --> - - <!-- specify the component name --> - <property name="catalina.home" value="/var/log/metric/"/> - <property name="componentName" value="mdbc"></property> - - <!-- specify the base path of the log directory --> - <property name="logDirPrefix" value="${catalina.base}/logs"></property> - - <!-- The directories where logs are written --> - <property name="logDirectory" value="${logDirPrefix}/${componentName}"/> - <!-- Can easily relocate debug logs by modifying this path. --> - <property name="debugLogDirectory" value="${logDirPrefix}/${componentName}"/> - - <!-- log file names --> - <property name="generalLogName" value="application"/> - <property name="errorLogName" value="error"/> - <property name="metricsLogName" value="metrics"/> - <property name="auditLogName" value="audit"/> - <property name="debugLogName" value="debug"/> - <!-- - These loggers are not used in code (yet). - <property name="securityLogName" value="security" /> - <property name="policyLogName" value="policy" /> - <property name="performanceLogName" value="performance" /> - <property name="serverLogName" value="server" /> - --> - - <!-- 1610 Logging Fields Format Revisions --> - <property name="auditLoggerPattern" - value="%X{AuditLogBeginTimestamp}|%X{AuditLogEndTimestamp}|%X{RequestId}|%X{ServiceInstanceId}|%thread|%X{VirtualServerName}|%X{ServiceName}|%X{PartnerName}|%X{StatusCode}|%X{ResponseCode}|%X{ResponseDescription}|%X{InstanceUUID}|%.-5level|%X{AlertSeverity}|%X{ServerIPAddress}|%X{Timer}|%X{ServerFQDN}|%X{ClientIPAddress}|%X{ClassName}|%X{Unused}|%X{ProcessKey}|%X{CustomField1}|%X{CustomField2}|%X{CustomField3}|%X{CustomField4}| %msg%n"/> - - <property name="metricsLoggerPattern" - value="%X{MetricsLogBeginTimestamp}|%X{MetricsLogEndTimestamp}|%X{RequestId}|%X{ServiceInstanceId}|%thread|%X{VirtualServerName}|%X{ServiceName}|%X{PartnerName}|%X{TargetEntity}|%X{TargetServiceName}|%X{StatusCode}|%X{ResponseCode}|%X{ResponseDescription}|%X{InstanceUUID}|%.-5level|%X{AlertSeverity}|%X{ServerIPAddress}|%X{Timer}|%X{ServerFQDN}|%X{ClientIPAddress}|%X{ClassName}|%X{Unused}|%X{ProcessKey}|%X{TargetVisualEntity}|%X{CustomField1}|%X{CustomField2}|%X{CustomField3}|%X{CustomField4}| %msg%n"/> - - <property name="errorLoggerPattern" - value="%date{yyyy-MM-dd'T'HH:mm:ss.SSSXXX}|%X{RequestId}|%thread|%X{ServiceName}|%X{PartnerName}|%X{TargetEntity}|%X{TargetServiceName}|%X{ClassName}|%X{AlertSeverity}|%X{ErrorCode}|%X{ErrorDescription}| %msg%n"/> - - <property name="defaultLoggerPattern" - value="%date{yyyy-MM-dd'T'HH:mm:ss.SSSXXX}|%X{RequestId}|%thread|%X{ClassName}| %msg%n"/> - - <!-- use %class so library logging calls yield their class name --> - <property name="applicationLoggerPattern" - value="%date{yyyy-MM-dd'T'HH:mm:ss.SSSXXX}|%X{RequestId}|%thread|%class{36}| %msg%n"/> - - <!-- Example evaluator filter applied against console appender --> - <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> - <encoder> - <pattern>${defaultLoggerPattern}</pattern> - </encoder> - </appender> - - <!-- ============================================================================ --> - <!-- EELF Appenders --> - <!-- ============================================================================ --> - - <!-- The EELFAppender is used to record events to the general application - log --> - - - <appender name="EELF" - class="ch.qos.logback.core.rolling.RollingFileAppender"> - <file>${logDirectory}/${generalLogName}.log</file> - <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> - <!-- daily rollover --> - <fileNamePattern>${logDirectory}/${generalLogName}.%d{yyyy-MM-dd}.log.zip</fileNamePattern> - - <!-- keep 30 days' worth of history capped at 3GB total size --> - <maxHistory>30</maxHistory> - <totalSizeCap>3GB</totalSizeCap> - - </rollingPolicy> - <encoder> - <pattern>${applicationLoggerPattern}</pattern> - </encoder> - </appender> - - <appender name="asyncEELF" class="ch.qos.logback.classic.AsyncAppender"> - <queueSize>256</queueSize> - <!-- Class name is part of caller data --> - <includeCallerData>true</includeCallerData> - <appender-ref ref="EELF"/> - </appender> - - <!-- EELF Security Appender. This appender is used to record security events - to the security log file. Security events are separate from other loggers - in EELF so that security log records can be captured and managed in a secure - way separate from the other logs. This appender is set to never discard any - events. --> - <!-- - <appender name="EELFSecurity" - class="ch.qos.logback.core.rolling.RollingFileAppender"> - <file>${logDirectory}/${securityLogName}.log</file> - <rollingPolicy - class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> - <fileNamePattern>${logDirectory}/${securityLogName}.%i.log.zip - </fileNamePattern> - <minIndex>1</minIndex> - <maxIndex>9</maxIndex> - </rollingPolicy> - <triggeringPolicy - class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> - <maxFileSize>5MB</maxFileSize> - </triggeringPolicy> - <encoder> - <pattern>${defaultPattern}</pattern> - </encoder> - </appender> - - <appender name="asyncEELFSecurity" class="ch.qos.logback.classic.AsyncAppender"> - <queueSize>256</queueSize> - <discardingThreshold>0</discardingThreshold> - <appender-ref ref="EELFSecurity" /> - </appender> - --> - - <!-- EELF Performance Appender. This appender is used to record performance - records. --> - <!-- - <appender name="EELFPerformance" - class="ch.qos.logback.core.rolling.RollingFileAppender"> - <file>${logDirectory}/${performanceLogName}.log</file> - <rollingPolicy - class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> - <fileNamePattern>${logDirectory}/${performanceLogName}.%i.log.zip - </fileNamePattern> - <minIndex>1</minIndex> - <maxIndex>9</maxIndex> - </rollingPolicy> - <triggeringPolicy - class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> - <maxFileSize>5MB</maxFileSize> - </triggeringPolicy> - <encoder> - <outputPatternAsHeader>true</outputPatternAsHeader> - <pattern>${defaultPattern}</pattern> - </encoder> - </appender> - <appender name="asyncEELFPerformance" class="ch.qos.logback.classic.AsyncAppender"> - <queueSize>256</queueSize> - <appender-ref ref="EELFPerformance" /> - </appender> - --> - - <!-- EELF Server Appender. This appender is used to record Server related - logging events. The Server logger and appender are specializations of the - EELF application root logger and appender. This can be used to segregate Server - events from other components, or it can be eliminated to record these events - as part of the application root log. --> - <!-- - <appender name="EELFServer" - class="ch.qos.logback.core.rolling.RollingFileAppender"> - <file>${logDirectory}/${serverLogName}.log</file> - <rollingPolicy - class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> - <fileNamePattern>${logDirectory}/${serverLogName}.%i.log.zip - </fileNamePattern> - <minIndex>1</minIndex> - <maxIndex>9</maxIndex> - </rollingPolicy> - <triggeringPolicy - class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> - <maxFileSize>5MB</maxFileSize> - </triggeringPolicy> - <encoder> - <pattern>${defaultPattern}</pattern> - </encoder> - </appender> - <appender name="asyncEELFServer" class="ch.qos.logback.classic.AsyncAppender"> - <queueSize>256</queueSize> - <appender-ref ref="EELFServer" /> - </appender> - --> - - <!-- EELF Policy Appender. This appender is used to record Policy engine - related logging events. The Policy logger and appender are specializations - of the EELF application root logger and appender. This can be used to segregate - Policy engine events from other components, or it can be eliminated to record - these events as part of the application root log. --> - <!-- - <appender name="EELFPolicy" - class="ch.qos.logback.core.rolling.RollingFileAppender"> - <file>${logDirectory}/${policyLogName}.log</file> - <rollingPolicy - class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> - <fileNamePattern>${logDirectory}/${policyLogName}.%i.log.zip - </fileNamePattern> - <minIndex>1</minIndex> - <maxIndex>9</maxIndex> - </rollingPolicy> - <triggeringPolicy - class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> - <maxFileSize>5MB</maxFileSize> - </triggeringPolicy> - <encoder> - <pattern>${defaultPattern}</pattern> - </encoder> - </appender> - <appender name="asyncEELFPolicy" class="ch.qos.logback.classic.AsyncAppender"> - <queueSize>256</queueSize> - <appender-ref ref="EELFPolicy" /> - </appender> - --> - - <!-- EELF Audit Appender. This appender is used to record audit engine - related logging events. The audit logger and appender are specializations - of the EELF application root logger and appender. This can be used to segregate - Policy engine events from other components, or it can be eliminated to record - these events as part of the application root log. --> - - <appender name="EELFAudit" - class="ch.qos.logback.core.rolling.RollingFileAppender"> - <file>${logDirectory}/${auditLogName}.log</file> - <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> - <!-- daily rollover --> - <fileNamePattern>${logDirectory}/${auditLogName}.%d{yyyy-MM-dd}.log.zip</fileNamePattern> - - <!-- keep 30 days' worth of history capped at 3GB total size --> - <maxHistory>30</maxHistory> - <totalSizeCap>3GB</totalSizeCap> - - </rollingPolicy> - <encoder> - <pattern>${auditLoggerPattern}</pattern> - </encoder> - </appender> - <appender name="asyncEELFAudit" class="ch.qos.logback.classic.AsyncAppender"> - <queueSize>256</queueSize> - <appender-ref ref="EELFAudit"/> - </appender> - - <appender name="EELFMetrics" - class="ch.qos.logback.core.rolling.RollingFileAppender"> - <file>${logDirectory}/${metricsLogName}.log</file> - <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> - <!-- daily rollover --> - <fileNamePattern>${logDirectory}/${metricsLogName}.%d{yyyy-MM-dd}.log.zip</fileNamePattern> - - <!-- keep 30 days' worth of history capped at 3GB total size --> - <maxHistory>30</maxHistory> - <totalSizeCap>3GB</totalSizeCap> - - </rollingPolicy> - <encoder> - <pattern>${metricsLoggerPattern}</pattern> - </encoder> - </appender> - - - <appender name="asyncEELFMetrics" class="ch.qos.logback.classic.AsyncAppender"> - <queueSize>256</queueSize> - <appender-ref ref="EELFMetrics"/> - </appender> - - <appender name="EELFError" - class="ch.qos.logback.core.rolling.RollingFileAppender"> - <file>${logDirectory}/${errorLogName}.log</file> - <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> - <!-- daily rollover --> - <fileNamePattern>${logDirectory}/${errorLogName}.%d{yyyy-MM-dd}.log.zip</fileNamePattern> - - <!-- keep 30 days' worth of history capped at 3GB total size --> - <maxHistory>30</maxHistory> - <totalSizeCap>3GB</totalSizeCap> - - </rollingPolicy> - <encoder> - <pattern>${errorLoggerPattern}</pattern> - </encoder> - </appender> - - <appender name="asyncEELFError" class="ch.qos.logback.classic.AsyncAppender"> - <queueSize>256</queueSize> - <appender-ref ref="EELFError"/> - </appender> - - <appender name="EELFDebug" - class="ch.qos.logback.core.rolling.RollingFileAppender"> - <file>${debugLogDirectory}/${debugLogName}.log</file> - <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> - <!-- daily rollover --> - <fileNamePattern>${logDirectory}/${debugLogName}.%d{yyyy-MM-dd}.log.zip</fileNamePattern> - - <!-- keep 30 days' worth of history capped at 3GB total size --> - <maxHistory>30</maxHistory> - <totalSizeCap>3GB</totalSizeCap> - - </rollingPolicy> - <encoder> - <pattern>${defaultLoggerPattern}</pattern> - </encoder> - </appender> - - <appender name="asyncEELFDebug" class="ch.qos.logback.classic.AsyncAppender"> - <queueSize>256</queueSize> - <appender-ref ref="EELFDebug"/> - </appender> - - - <logger name="com.att.eelf" level="error" additivity="false"> - <appender-ref ref="asyncEELF"/> - </logger> - - <logger name="com.att.eelf" level="error" additivity="false"> - <appender-ref ref="asyncEELFAudit"/> - </logger> - - <logger name="com.att.eelf" level="error" additivity="false"> - <appender-ref ref="asyncEELFDebug"/> - </logger> - - <logger name="com.att.eelf.error" level="error" additivity="false"> - <appender-ref ref="asyncEELFError"/> - </logger> - - <logger name="com.att.eelf.metrics" level="error" additivity="false"> - <appender-ref ref="asyncEELFMetrics"/> - </logger> - - <root level="ERROR"> - <appender-ref ref="asyncEELF"/> - </root> - -</configuration> diff --git a/mdbc-internal-benchmark/src/main/resources/mdbc.properties b/mdbc-internal-benchmark/src/main/resources/mdbc.properties deleted file mode 100755 index 73e8f77..0000000 --- a/mdbc-internal-benchmark/src/main/resources/mdbc.properties +++ /dev/null @@ -1,13 +0,0 @@ -# -# A list of all Mixins that should be checked by MDBC -# -MIXINS= \ - org.onap.music.mdbc.mixins.MySQLMixin \ - org.onap.music.mdbc.mixins.MusicMixin \ - org.onap.music.mdbc.mixins.Music2Mixin - -DEFAULT_DRIVERS=\ - org.h2.Driver \ - com.mysql.jdbc.Driver - -txdaemonsleeps=15
\ No newline at end of file diff --git a/mdbc-internal-benchmark/src/main/resources/music.properties b/mdbc-internal-benchmark/src/main/resources/music.properties deleted file mode 100755 index ccacd38..0000000 --- a/mdbc-internal-benchmark/src/main/resources/music.properties +++ /dev/null @@ -1,8 +0,0 @@ -cassandra.host =\ - 10.0.0.5 -cassandra.user =\ - metric -cassandra.password =\ - metriccluster -zookeeper.host =\ - localhost diff --git a/mdbc-server/src/main/java/org/onap/music/mdbc/examples/MdbcTestClient.java b/mdbc-server/src/main/java/org/onap/music/mdbc/examples/MdbcTestClient.java index fddd305..1c42865 100644 --- a/mdbc-server/src/main/java/org/onap/music/mdbc/examples/MdbcTestClient.java +++ b/mdbc-server/src/main/java/org/onap/music/mdbc/examples/MdbcTestClient.java @@ -24,6 +24,7 @@ import org.apache.calcite.avatica.remote.Driver; public class MdbcTestClient {
+
public static class Hr {
public final Employee[] emps = {
new Employee(100, "Bill"),
@@ -110,7 +111,6 @@ public class MdbcTestClient { final String insertSQL3 = "UPDATE Persons SET FirstName='JOSH' WHERE LastName='Smith';";
final String insertSQL4 = "UPDATE Persons SET FirstName='JOHN' WHERE LastName='Smith';";
-
Statement insertStmt;
try {
insertStmt = connection.createStatement();
@@ -98,8 +98,6 @@ <modules> <module>mdbc-server</module> <module>mdbc-packages</module> - <module>mdbc-benchmark</module> - <module>mdbc-internal-benchmark</module> </modules> <dependencies> |