# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You 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.

::
:: Contains benchmarks for SQL queries.
::

:: JVM options.
:: set JVM_OPTS=%JVM_OPTS% -DIGNITE_QUIET=false

:: Uncomment to enable concurrent garbage collection (GC) if you encounter long GC pauses.
set JVM_OPTS=%JVM_OPTS%^
  -XX:+UseParNewGC^
  -XX:+UseConcMarkSweepGC^
  -XX:+UseTLAB^
  -XX:NewSize=128m^
  -XX:MaxNewSize=128m^
  -XX:MaxTenuringThreshold=0^
  -XX:SurvivorRatio=1024^
  -XX:+UseCMSInitiatingOccupancyOnly^
  -XX:CMSInitiatingOccupancyFraction=60

:: List of default probes.
BENCHMARK_DEFAULT_PROBES=ThroughputLatencyProbe,PercentileProbe

:: Packages where the specified benchmark is searched by reflection mechanism.
BENCHMARK_PACKAGES=org.yardstickframework,org.apache.ignite.yardstick

:: Probe point writer class name.
:: BENCHMARK_WRITER=

:: Comma-separated list of the hosts to run BenchmarkServers on. 2 nodes on local host are enabled by default.
set SERVER_HOSTS=localhost,localhost

:: Comma-separated list of the hosts to run BenchmarkDrivers on. 1 node on local host is enabled by default.
set DRIVER_HOSTS=localhost

:: Remote username.
:: set REMOTE_USER=

:: Run configuration which contains all benchmarks.
:: Note that each benchmark is set to run for 300 seconds (5 min) with warm-up set to 60 seconds (1 minute).
set CONFIGS=^
-cfg %SCRIPT_DIR%\..\config\ignite-localhost-config.xml -b 1 -w 60 -d 300 -t 64 -sm PRIMARY_SYNC -dn IgniteSqlQueryBenchmark -sn IgniteNode -ds sql-query-1-backup,^
-cfg %SCRIPT_DIR%\..\config\ignite-localhost-config.xml -b 1 -w 60 -d 300 -t 64 -sm PRIMARY_SYNC -dn IgniteSqlQueryJoinBenchmark -sn IgniteNode -ds sql-query-join-1-backup,^
-cfg %SCRIPT_DIR%\..\config\ignite-localhost-config.xml -b 1 -w 60 -d 300 -t 64 -sm PRIMARY_SYNC -dn IgniteSqlQueryPutBenchmark -sn IgniteNode -ds sql-query-put-1-backup
